diff options
author | Valentine Barshak <vbarshak@ru.mvista.com> | 2008-04-03 15:09:43 -0400 |
---|---|---|
committer | Olof Johansson <olof@lixom.net> | 2008-04-07 10:16:29 -0400 |
commit | 7132799b0e49c48cf119dbe02d20810860d20991 (patch) | |
tree | bc57047cce9764081582aca08ccb393eee27753b /arch/powerpc/sysdev/mpic.c | |
parent | f724bf77813d73318bf97dab9626156a0a87c7fc (diff) |
[POWERPC] kexec: MPIC ack interrupts at mpic_teardown_this_cpu()
We really need to ack interrupts at mpic_teardown, since
not all platforms reset mpic at kernel start-up. For example,
kexec'ed kernel hangs on P.A. Semi if mpic_eoi() isn't called.
Signed-off-by: Valentine Barshak <vbarshak@ru.mvista.com>
Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'arch/powerpc/sysdev/mpic.c')
-rw-r--r-- | arch/powerpc/sysdev/mpic.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 6131fd2b6619..8619f2a3f1f6 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -1410,11 +1410,6 @@ void mpic_cpu_set_priority(int prio) | |||
1410 | mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), prio); | 1410 | mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), prio); |
1411 | } | 1411 | } |
1412 | 1412 | ||
1413 | /* | ||
1414 | * XXX: someone who knows mpic should check this. | ||
1415 | * do we need to eoi the ipi including for kexec cpu here (see xics comments)? | ||
1416 | * or can we reset the mpic in the new kernel? | ||
1417 | */ | ||
1418 | void mpic_teardown_this_cpu(int secondary) | 1413 | void mpic_teardown_this_cpu(int secondary) |
1419 | { | 1414 | { |
1420 | struct mpic *mpic = mpic_primary; | 1415 | struct mpic *mpic = mpic_primary; |
@@ -1434,6 +1429,10 @@ void mpic_teardown_this_cpu(int secondary) | |||
1434 | 1429 | ||
1435 | /* Set current processor priority to max */ | 1430 | /* Set current processor priority to max */ |
1436 | mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), 0xf); | 1431 | mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), 0xf); |
1432 | /* We need to EOI the IPI since not all platforms reset the MPIC | ||
1433 | * on boot and new interrupts wouldn't get delivered otherwise. | ||
1434 | */ | ||
1435 | mpic_eoi(mpic); | ||
1437 | 1436 | ||
1438 | spin_unlock_irqrestore(&mpic_lock, flags); | 1437 | spin_unlock_irqrestore(&mpic_lock, flags); |
1439 | } | 1438 | } |