• Mark Rutland's avatar
    arm_pmu: rework ACPI probing · fe40ffdb
    Mark Rutland authored
    The current ACPI PMU probing logic tries to associate PMUs with CPUs
    when the CPU is first brought online, in order to handle late hotplug,
    though PMUs are only registered during early boot, and so for late
    hotplugged CPUs this can only associate the CPU with an existing PMU.
    
    We tried to be clever and the have the arm_pmu_acpi_cpu_starting()
    callback allocate a struct arm_pmu when no matching instance is found,
    in order to avoid duplication of logic. However, as above this doesn't
    do anything useful for late hotplugged CPUs, and this requires us to
    allocate memory in an atomic context, which is especially problematic
    for PREEMPT_RT, as reported by Valentin and Pierre.
    
    This patch reworks the probing to detect PMUs for all online CPUs in the
    arm_pmu_acpi_probe() function, which is more aligned with how DT probing
    works. The arm_pmu_acpi_cpu_starting() callback only tries to associate
    CPUs with an existing arm_pmu instance, avoiding the problem of
    allocating in atomic context.
    
    Note that as we didn't previously register PMUs for late-hotplugged
    CPUs, this change doesn't result in a loss of existing functionality,
    though we will now warn when we cannot associate a CPU with a PMU.
    
    This change allows us to pull the hotplug callback registration into the
    arm_pmu_acpi_probe() function, as we no longer need the callbacks to be
    invoked shortly after probing the boot CPUs, and can register it without
    invoking the calls.
    
    For the moment the arm_pmu_acpi_init() initcall remains to register the
    SPE PMU, though in future this should probably be moved elsewhere (e.g.
    the arm64 ACPI init code), since this doesn't need to be tied to the
    regular CPU PMU code.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Reported-by: default avatarValentin Schneider <valentin.schneider@arm.com>
    Link: https://lore.kernel.org/r/20210810134127.1394269-2-valentin.schneider@arm.com/Reported-by: default avatarPierre Gondois <pierre.gondois@arm.com>
    Link: https://lore.kernel.org/linux-arm-kernel/20220912155105.1443303-1-pierre.gondois@arm.com/
    Cc: Pierre Gondois <pierre.gondois@arm.com>
    Cc: Valentin Schneider <vschneid@redhat.com>
    Cc: Will Deacon <will@kernel.org>
    Reviewed-and-tested-by: default avatarPierre Gondois <pierre.gondois@arm.com>
    Link: https://lore.kernel.org/r/20220930111844.1522365-4-mark.rutland@arm.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
    fe40ffdb
arm_pmu.c 22.8 KB