Messages in this thread Patch in this message | | | Subject | [PATCH] perf: fix the is_software_event() definition | From | Peter Zijlstra <> | Date | Mon, 18 Jan 2010 12:53:36 +0100 |
| |
On Mon, 2010-01-18 at 12:13 +0100, Peter Zijlstra wrote: > On Sun, 2010-01-17 at 15:12 +0100, Frederic Weisbecker wrote: > > > You need to also call pmu->disable() if it is a software event, > > because a breakpoint needs to be unregistered in hardware level > > too. > > breakpoint isn't a software pmu. But yeah, enable and disable need to > match.
That is, it shouldn't be a software pmu, because we assume software events can always be scheduled, whereas that's definitely not so for the breakpoint one.
Which seems to suggest the following
--- Subject: perf: fix the is_software_event() definition
When adding the breakpoint pmu Frederic forgot to exclude it from being a software event. While we're at it, make it an inclusive expression.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> --- include/linux/perf_event.h | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index c66b34f..835ba26 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -814,9 +814,13 @@ extern int perf_event_overflow(struct perf_event *event, int nmi, */ static inline int is_software_event(struct perf_event *event) { - return (event->attr.type != PERF_TYPE_RAW) && - (event->attr.type != PERF_TYPE_HARDWARE) && - (event->attr.type != PERF_TYPE_HW_CACHE); + switch (event->attr.type) { + case PERF_TYPE_SOFTWARE: + case PERF_TYPE_TRACEPOINT: + case PERF_TYPE_HW_CACHE: + return 1; + } + return 0; } extern atomic_t perf_swevent_enabled[PERF_COUNT_SW_MAX];
| |