lkml.org 
[lkml]   [2010]   [Jan]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Subject[PATCH] perf: fix the is_software_event() definition
From
Date
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];



\
 
 \ /
  Last update: 2010-01-18 12:57    [W:0.772 / U:1.652 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site