diff --git a/arch/arm64/include/asm/pmu.h b/arch/arm64/include/asm/pmu.h index 497b52e08845e6b374a9a73ccec19745a6d07bcb..53d992a6c6f135f8e56db91c7f84c3b29655709e 100644 --- a/arch/arm64/include/asm/pmu.h +++ b/arch/arm64/include/asm/pmu.h @@ -44,6 +44,7 @@ struct pmu_hw_events { struct arm_pmu { struct pmu pmu; bool percpu_irq_requested; + int percpu_irq; cpumask_t active_irqs; const char *name; irqreturn_t (*handle_irq)(int irq_num, void *dev); diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c index 9a54f6ae3853958eabc2a2398215e46c9e2572ba..a07d1f40eaf48054881e23058d1d0b66015d61f2 100644 --- a/arch/arm64/kernel/perf_event.c +++ b/arch/arm64/kernel/perf_event.c @@ -1045,6 +1045,7 @@ static int armv8pmu_request_irq(struct arm_pmu *cpu_pmu, irq_handler_t handler) on_each_cpu(armpmu_enable_percpu_irq, &irq, 1); cpu_pmu->percpu_irq_requested = true; + cpu_pmu->percpu_irq = irq; } else { for (i = 0; i < irqs; ++i) { err = 0; @@ -1342,7 +1343,7 @@ static int __cpuinit cpu_pmu_notify(struct notifier_block *b, switch (action & ~CPU_TASKS_FROZEN) { case CPU_DOWN_PREPARE: if (pmu->percpu_irq_requested) { - int irq = platform_get_irq(pmu->plat_device, 0); + int irq = pmu->percpu_irq; smp_call_function_single(cpu, armpmu_disable_percpu_irq, &irq, 1); } @@ -1353,7 +1354,7 @@ static int __cpuinit cpu_pmu_notify(struct notifier_block *b, if (pmu->reset) pmu->reset(pmu); if (pmu->percpu_irq_requested) { - int irq = platform_get_irq(pmu->plat_device, 0); + int irq = pmu->percpu_irq; smp_call_function_single(cpu, armpmu_enable_percpu_irq, &irq, 1); }