Subject: [PATCH] kdump: clear and EOI IPI for kexec CPU

From: Haren Myneni <[email-masked]>
Date: Wed, 22 Mar 2006 21:18:24 -0800

Paul, Sorry, Please ignore the previous patch since it has one tab/space 
issue. Tested this one and kdump-dma-fault-fix.patch on P5, P4 
(non-lpar), JS21 and JS20.

Thanks
Haren

Some times, the kexec CPU is not reponding to an IPI during kdump boot. 
It is causing the system in xmon. Noticed on power-4 (non-lpar). This 
patch clears and EOI IPI for kexec CPU as well before the kdump boot 
started.

Signed-off-by: Haren Myneni <[email-masked]>

--- 2616-git5-k1/arch/powerpc/platforms/pseries/xics.c.orig	2006-04-04 19:27:24.000000000 -0700
+++ 2616-git5-k1/arch/powerpc/platforms/pseries/xics.c	2006-04-04 20:06:19.000000000 -0700
@@ -641,22 +641,27 @@ void xics_teardown_cpu(int secondary)
 	iosync();
 
 	/*
+	 * Clear IPI
+	 */
+	ops->qirr_info(cpu, 0xff);
+	/*
+	 * we need to EOI the IPI if we got here from kexec down IPI
+	 *
+	 * probably need to check all the other interrupts too
+	 * should we be flagging idle loop instead?
+	 * or creating some task to be scheduled?
+	 */
+	ops->xirr_info_set(cpu, XICS_IPI);
+
+	/*
 	 * Some machines need to have at least one cpu in the GIQ,
 	 * so leave the master cpu in the group.
 	 */
-	if (secondary) {
-		/*
-		 * we need to EOI the IPI if we got here from kexec down IPI
-		 *
-		 * probably need to check all the other interrupts too
-		 * should we be flagging idle loop instead?
-		 * or creating some task to be scheduled?
-		 */
-		ops->xirr_info_set(cpu, XICS_IPI);
+	if (secondary) 
 		rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE,
 			(1UL << interrupt_server_size) - 1 -
 			default_distrib_server, 0);
-	}
+	
 }
 
 #ifdef CONFIG_HOTPLUG_CPU