mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-26 02:25:00 -05:00
powerpc/kexec: Disable hard IRQ before kexec
Disable hard IRQ before kexec a new kernel image. Not doing it can result in corrupted data in the memory segments reserved for the new kernel. Signed-off-by: Phileas Fogg <phileas-fogg@mail.ru> CC: <stable@vger.kernel.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
dffff02a6b
commit
8520e443aa
1 changed files with 5 additions and 0 deletions
|
@ -162,6 +162,8 @@ static int kexec_all_irq_disabled = 0;
|
|||
static void kexec_smp_down(void *arg)
|
||||
{
|
||||
local_irq_disable();
|
||||
hard_irq_disable();
|
||||
|
||||
mb(); /* make sure our irqs are disabled before we say they are */
|
||||
get_paca()->kexec_state = KEXEC_STATE_IRQS_OFF;
|
||||
while(kexec_all_irq_disabled == 0)
|
||||
|
@ -244,6 +246,8 @@ static void kexec_prepare_cpus(void)
|
|||
wake_offline_cpus();
|
||||
smp_call_function(kexec_smp_down, NULL, /* wait */0);
|
||||
local_irq_disable();
|
||||
hard_irq_disable();
|
||||
|
||||
mb(); /* make sure IRQs are disabled before we say they are */
|
||||
get_paca()->kexec_state = KEXEC_STATE_IRQS_OFF;
|
||||
|
||||
|
@ -281,6 +285,7 @@ static void kexec_prepare_cpus(void)
|
|||
if (ppc_md.kexec_cpu_down)
|
||||
ppc_md.kexec_cpu_down(0, 0);
|
||||
local_irq_disable();
|
||||
hard_irq_disable();
|
||||
}
|
||||
|
||||
#endif /* SMP */
|
||||
|
|
Loading…
Add table
Reference in a new issue