X-Git-Url: http://git.onelab.eu/?p=linux-2.6.git;a=blobdiff_plain;f=arch%2Fpowerpc%2Fplatforms%2Fpseries%2Fxics.c;fp=arch%2Fpowerpc%2Fplatforms%2Fpseries%2Fxics.c;h=9ff7105bc1350858be7730eea16ec9a380ff644b;hp=2d60ea30fed6a00d24efa99085070fbfe2492c16;hb=4e76c8a9fa413ccc09d3f7f664183dcce3555d57;hpb=1db395853d4f30d6120458bd279ede1f882a8525 diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index 2d60ea30f..9ff7105bc 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c @@ -641,23 +641,28 @@ void xics_teardown_cpu(int secondary) ops->cppr_info(cpu, 0x00); 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