]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/powerpc/sysdev/xics/icp-native.c
powerpc/powernv: Don't call generic code on offline cpus
[karo-tx-linux.git] / arch / powerpc / sysdev / xics / icp-native.c
index de8d9483bbe89136042d0685680c6bddc815849a..2fc4cf1b75575f9916e26fcf330cfce4959f39a5 100644 (file)
@@ -155,6 +155,31 @@ static void icp_native_cause_ipi(int cpu, unsigned long data)
                icp_native_set_qirr(cpu, IPI_PRIORITY);
 }
 
+/*
+ * Called when an interrupt is received on an off-line CPU to
+ * clear the interrupt, so that the CPU can go back to nap mode.
+ */
+void icp_native_flush_interrupt(void)
+{
+       unsigned int xirr = icp_native_get_xirr();
+       unsigned int vec = xirr & 0x00ffffff;
+
+       if (vec == XICS_IRQ_SPURIOUS)
+               return;
+       if (vec == XICS_IPI) {
+               /* Clear pending IPI */
+               int cpu = smp_processor_id();
+               kvmppc_set_host_ipi(cpu, 0);
+               icp_native_set_qirr(cpu, 0xff);
+       } else {
+               pr_err("XICS: hw interrupt 0x%x to offline cpu, disabling\n",
+                      vec);
+               xics_mask_unknown_vec(vec);
+       }
+       /* EOI the interrupt */
+       icp_native_set_xirr(xirr);
+}
+
 void xics_wake_cpu(int cpu)
 {
        icp_native_set_qirr(cpu, IPI_PRIORITY);