perf: Make clock software events consistent with general exclusion rules
authorFrederic Weisbecker <fweisbec@gmail.com>
Thu, 8 Apr 2010 22:28:14 +0000 (00:28 +0200)
committerFrederic Weisbecker <fweisbec@gmail.com>
Wed, 14 Apr 2010 16:20:33 +0000 (18:20 +0200)
commitdf8290bf7ea6b3051e2f315579a6e829309ec1ed
treee142ed95335a9e1790deabc11448ee6e215bb855
parent76e1d9047e4edefb8ada20aa90d5762306082bd6
perf: Make clock software events consistent with general exclusion rules

The cpu/task clock events implement their own version of exclusion
on top of exclude_user and exclude_kernel.

The result is that when the event triggered in the kernel but we
have exclude_kernel set, we try to rewind using task_pt_regs.
There are two side effects of this:

- we call task_pt_regs even on kernel threads, which doesn't give
  us the desired result.
- if the event occured in the kernel, we shouldn't rewind to the
  user context. We want to actually ignore the event.

get_irq_regs() will always give us the right interrupted context, so
use its result and submit it to perf_exclude_context() that knows
when an event must be ignored.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Ingo Molnar <mingo@elte.hu>
kernel/perf_event.c