powerpc: Only save/restore SDR1 if in hypervisor mode
authorDan Streetman <ddstreet@ieee.org>
Wed, 30 Oct 2013 02:25:14 +0000 (22:25 -0400)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 31 Oct 2013 01:37:29 +0000 (12:37 +1100)
Currently, when not in hypervisor mode the kernel
Oopses during suspend or hibernation when accessing
the SDR1 register, because it is only available
in hypervisor mode.  Access to it needs to be
protected in BEGIN/END_FW_FTR_SECTION.

Signed-off-by: Dan Streetman <ddstreet@ieee.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Reported-by: Jimmy Pan <jipan@redhat.com>
Tested-by: Jimmy Pan <jipan@redhat.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/swsusp_asm64.S

index 22045984835f2078ce020e11e85a2e87b2401860..988f38dced0fb02e4d8b95c4d51df7d581e471ce 100644 (file)
@@ -114,7 +114,9 @@ _GLOBAL(swsusp_arch_suspend)
        SAVE_SPECIAL(MSR)
        SAVE_SPECIAL(XER)
 #ifdef CONFIG_PPC_BOOK3S_64
+BEGIN_FW_FTR_SECTION
        SAVE_SPECIAL(SDR1)
+END_FW_FTR_SECTION_IFCLR(FW_FEATURE_LPAR)
 #else
        SAVE_SPR(TCR)
 
@@ -231,7 +233,9 @@ nothing_to_copy:
        /* can't use RESTORE_SPECIAL(MSR) */
        ld      r0, SL_MSR(r11)
        mtmsrd  r0, 0
+BEGIN_FW_FTR_SECTION
        RESTORE_SPECIAL(SDR1)
+END_FW_FTR_SECTION_IFCLR(FW_FEATURE_LPAR)
 #else
        /* Restore SPRG1, be used to save paca */
        ld      r0, SL_SPRG1(r11)