diff options
Diffstat (limited to 'arch/powerpc/platforms/pseries/xics.c')
-rw-r--r-- | arch/powerpc/platforms/pseries/xics.c | 18 |
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 | ||
758 | void xics_kexec_teardown_cpu(int secondary) | 758 | void 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, |