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);
 		}