• Anju T Sudhakar's avatar
    powerpc/perf: Fix for core/nest imc call trace on cpuhotplug · 0d923820
    Anju T Sudhakar authored
    Nest/core pmu units are enabled only when it is used. A reference count is
    maintained for the events which uses the nest/core pmu units. Currently in
    *_imc_counters_release function a WARN() is used for notification of any
    underflow of ref count.
    
    The case where event ref count hit a negative value is, when perf session is
    started, followed by offlining of all cpus in a given core.
    i.e. in cpuhotplug offline path ppc_core_imc_cpu_offline() function set the
    ref->count to zero, if the current cpu which is about to offline is the last
    cpu in a given core and make an OPAL call to disable the engine in that core.
    And on perf session termination, perf->destroy (core_imc_counters_release) will
    first decrement the ref->count for this core and based on the ref->count value
    an opal call is made to disable the core-imc engine.
    Now, since cpuhotplug path already clears the ref->count for core and disabled
    the engine, perf->destroy() decrementing again at event termination make it
    negative which in turn fires the WARN_ON. The same happens for nest units.
    
    Add a check to see if the reference count is alreday zero, before decrementing
    the count, so that the ref count will not hit a negative value.
    Signed-off-by: default avatarAnju T Sudhakar <anju@linux.vnet.ibm.com>
    Reviewed-by: default avatarSantosh Sivaraj <santosh@fossix.org>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    0d923820
imc-pmu.c 32.6 KB