diff options
author | Dan Streetman <ddstreet@ieee.org> | 2013-10-29 22:25:14 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-10-30 21:37:29 -0400 |
commit | 711b5138d54fcfd5e312cea895d6e706a46eff19 (patch) | |
tree | 46d338141eca8c1ae048365ee7e8326132b3db64 | |
parent | de00b30d054857990dc573648e4767ec512009c7 (diff) |
powerpc: Only save/restore SDR1 if in hypervisor mode
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>
-rw-r--r-- | arch/powerpc/kernel/swsusp_asm64.S | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/swsusp_asm64.S b/arch/powerpc/kernel/swsusp_asm64.S index 22045984835f..988f38dced0f 100644 --- a/arch/powerpc/kernel/swsusp_asm64.S +++ b/arch/powerpc/kernel/swsusp_asm64.S | |||
@@ -114,7 +114,9 @@ _GLOBAL(swsusp_arch_suspend) | |||
114 | SAVE_SPECIAL(MSR) | 114 | SAVE_SPECIAL(MSR) |
115 | SAVE_SPECIAL(XER) | 115 | SAVE_SPECIAL(XER) |
116 | #ifdef CONFIG_PPC_BOOK3S_64 | 116 | #ifdef CONFIG_PPC_BOOK3S_64 |
117 | BEGIN_FW_FTR_SECTION | ||
117 | SAVE_SPECIAL(SDR1) | 118 | SAVE_SPECIAL(SDR1) |
119 | END_FW_FTR_SECTION_IFCLR(FW_FEATURE_LPAR) | ||
118 | #else | 120 | #else |
119 | SAVE_SPR(TCR) | 121 | SAVE_SPR(TCR) |
120 | 122 | ||
@@ -231,7 +233,9 @@ nothing_to_copy: | |||
231 | /* can't use RESTORE_SPECIAL(MSR) */ | 233 | /* can't use RESTORE_SPECIAL(MSR) */ |
232 | ld r0, SL_MSR(r11) | 234 | ld r0, SL_MSR(r11) |
233 | mtmsrd r0, 0 | 235 | mtmsrd r0, 0 |
236 | BEGIN_FW_FTR_SECTION | ||
234 | RESTORE_SPECIAL(SDR1) | 237 | RESTORE_SPECIAL(SDR1) |
238 | END_FW_FTR_SECTION_IFCLR(FW_FEATURE_LPAR) | ||
235 | #else | 239 | #else |
236 | /* Restore SPRG1, be used to save paca */ | 240 | /* Restore SPRG1, be used to save paca */ |
237 | ld r0, SL_SPRG1(r11) | 241 | ld r0, SL_SPRG1(r11) |