• Peter Zijlstra's avatar
    perf/core: Collapse more IPI loops · 7b648018
    Peter Zijlstra authored
    This patch collapses the two 'hard' cases, which are
    perf_event_{dis,en}able().
    
    I cannot seem to convince myself the current code is correct.
    
    So starting with perf_event_disable(); we don't strictly need to test
    for event->state == ACTIVE, ctx->is_active is enough. If the event is
    not scheduled while the ctx is, __perf_event_disable() still does the
    right thing.  Its a little less efficient to IPI in that case,
    over-all simpler.
    
    For perf_event_enable(); the same goes, but I think that's actually
    broken in its current form. The current condition is: ctx->is_active
    && event->state == OFF, that means it doesn't do anything when
    !ctx->active && event->state == OFF. This is wrong, it should still
    mark the event INACTIVE in that case, otherwise we'll still not try
    and schedule the event once the context becomes active again.
    
    This patch implements the two function using the new
    event_function_call() and does away with the tricky event->state
    tests.
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: default avatarAlexander Shishkin <alexander.shishkin@intel.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vince Weaver <vincent.weaver@maine.edu>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    7b648018
core.c 219 KB