perf: Cure task_oncpu_function_call() races
authorPeter Zijlstra <a.p.zijlstra@chello.nl>
Wed, 2 Feb 2011 12:19:09 +0000 (13:19 +0100)
committerIngo Molnar <mingo@elte.hu>
Thu, 3 Feb 2011 11:14:43 +0000 (12:14 +0100)
commitfe4b04fa31a6dcf4358aa84cf81e5a7fd079469b
tree20a6db874d0db2a2f2e38e3ff77df4bdaa5f1cfe
parentb84defe6036e6dea782d41b80a4590e54f249671
perf: Cure task_oncpu_function_call() races

Oleg reported that on architectures with
__ARCH_WANT_INTERRUPTS_ON_CTXSW the IPI from
task_oncpu_function_call() can land before perf_event_task_sched_in()
and cause interesting situations for eg. perf_install_in_context().

This patch reworks the task_oncpu_function_call() interface to give a
more usable primitive as well as rework all its users to hopefully be
more obvious as well as remove the races.

While looking at the code I also found a number of races against
perf_event_task_sched_out() which can flip contexts between tasks so
plug those too.

Reported-and-reviewed-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
include/linux/sched.h
kernel/perf_event.c
kernel/sched.c