3.2-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Phileas Fogg <phileas-f...@mail.ru>

commit 8520e443aa56cc157b015205ea53e7b9fc831291 upstream.

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-f...@mail.ru>
Signed-off-by: Benjamin Herrenschmidt <b...@kernel.crashing.org>
Signed-off-by: Ben Hutchings <b...@decadent.org.uk>
---
 arch/powerpc/kernel/machine_kexec_64.c |    5 +++++
 1 file changed, 5 insertions(+)

--- a/arch/powerpc/kernel/machine_kexec_64.c
+++ b/arch/powerpc/kernel/machine_kexec_64.c
@@ -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 */


--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to