• Peter Zijlstra's avatar
    perf: Simplify and fix __perf_install_in_context() · 2c29ef0f
    Peter Zijlstra authored
    Currently __perf_install_in_context() will try and schedule in the
    event irrespective of our event scheduling rules, that is, we try to
    schedule CPU-pinned, TASK-pinned, CPU-flexible, TASK-flexible, but
    when creating a new event we simply try and schedule it on top of
    whatever is already on the PMU, this can lead to errors for pinned
    events.
    
    Therefore, simplify things and simply schedule everything out, add the
    event to the corresponding context and schedule everything back in.
    
    This also nicely handles the case where with
    __ARCH_WANT_INTERRUPTS_ON_CTXSW the IPI can come right in the middle
    of schedule, before we managed to call perf_event_task_sched_in().
    Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/20110409192141.870894224@chello.nlSigned-off-by: default avatarIngo Molnar <mingo@elte.hu>
    2c29ef0f
core.c 169 KB