• Mark Rutland's avatar
    drivers/perf: arm_pmu: split irq request from enable · c09adab0
    Mark Rutland authored
    For historical reasons, we lazily request and free interrupts in the
    arm pmu driver. This requires us to refcount use of the pmu (by way of
    counting the active events) in order to request/free interrupts at the
    correct times, which complicates the driver somewhat.
    
    The existing logic is flawed, as it only considers currently online CPUs
    when requesting, freeing, or managing the affinity of interrupts.
    Intervening hotplug events can result in erroneous IRQ affinity, online
    CPUs for which interrupts have not been requested, or offline CPUs whose
    interrupts are still requested.
    
    To fix this, this patch splits the requesting of interrupts from any
    per-cpu management (i.e. per-cpu enable/disable, and configuration of
    cpu affinity). We now request all interrupts up-front at probe time (and
    never free them, since we never unregister PMUs).
    
    The management of affinity, and per-cpu enable/disable now happens in
    our cpu hotplug callback, ensuring it occurs consistently. This means
    that we must now invoke the CPU hotplug callback at boot time in order
    to configure IRQs, and since the callback also resets the PMU hardware,
    we can remove the duplicate reset in the probe path.
    
    This rework renders our event refcounting unnecessary, so this is
    removed.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    [will: make armpmu_get_cpu_irq static]
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    c09adab0
arm_pmu.c 25.4 KB