aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/pseries/xics.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/platforms/pseries/xics.c')
-rw-r--r--arch/powerpc/platforms/pseries/xics.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
index 0bb553331f4f..165234d25991 100644
--- a/arch/powerpc/platforms/pseries/xics.c
+++ b/arch/powerpc/platforms/pseries/xics.c
@@ -757,25 +757,21 @@ void xics_teardown_cpu(void)
757 757
758void xics_kexec_teardown_cpu(int secondary) 758void xics_kexec_teardown_cpu(int secondary)
759{ 759{
760 unsigned int ipi;
761 struct irq_desc *desc;
762
763 xics_teardown_cpu(); 760 xics_teardown_cpu();
764 761
765 /* 762 /*
766 * we need to EOI the IPI 763 * we take the ipi irq but and never return so we
764 * need to EOI the IPI, but want to leave our priority 0
767 * 765 *
768 * probably need to check all the other interrupts too 766 * should we check all the other interrupts too?
769 * should we be flagging idle loop instead? 767 * should we be flagging idle loop instead?
770 * or creating some task to be scheduled? 768 * or creating some task to be scheduled?
771 */ 769 */
772 770
773 ipi = irq_find_mapping(xics_host, XICS_IPI); 771 if (firmware_has_feature(FW_FEATURE_LPAR))
774 if (ipi == XICS_IRQ_SPURIOUS) 772 lpar_xirr_info_set((0x00 << 24) | XICS_IPI);
775 return; 773 else
776 desc = get_irq_desc(ipi); 774 direct_xirr_info_set((0x00 << 24) | XICS_IPI);
777 if (desc->chip && desc->chip->eoi)
778 desc->chip->eoi(ipi);
779 775
780 /* 776 /*
781 * Some machines need to have at least one cpu in the GIQ, 777 * Some machines need to have at least one cpu in the GIQ,