mirror of
https://github.com/adulau/aha.git
synced 2025-01-03 22:53:18 +00:00
c63b196afc
swsusp_arch_suspend() actually saves all cpu register contents on hibernation. Machine checks must be disabled since swsusp_arch_suspend() stores register contents to their lowcore save areas. That's the same place where register contents on machine checks would be saved. To avoid register corruption disable machine checks. We must also disable machine checks in the new psw mask for program checks, since swsusp_arch_suspend() may generate program checks. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
42 lines
1.4 KiB
C
42 lines
1.4 KiB
C
/*
|
|
* Support for suspend and resume on s390
|
|
*
|
|
* Copyright IBM Corp. 2009
|
|
*
|
|
* Author(s): Hans-Joachim Picht <hans@linux.vnet.ibm.com>
|
|
*
|
|
*/
|
|
|
|
#include <asm/system.h>
|
|
|
|
void save_processor_state(void)
|
|
{
|
|
/* swsusp_arch_suspend() actually saves all cpu register contents.
|
|
* Machine checks must be disabled since swsusp_arch_suspend() stores
|
|
* register contents to their lowcore save areas. That's the same
|
|
* place where register contents on machine checks would be saved.
|
|
* To avoid register corruption disable machine checks.
|
|
* We must also disable machine checks in the new psw mask for
|
|
* program checks, since swsusp_arch_suspend() may generate program
|
|
* checks. Disabling machine checks for all other new psw masks is
|
|
* just paranoia.
|
|
*/
|
|
local_mcck_disable();
|
|
/* Disable lowcore protection */
|
|
__ctl_clear_bit(0,28);
|
|
S390_lowcore.external_new_psw.mask &= ~PSW_MASK_MCHECK;
|
|
S390_lowcore.svc_new_psw.mask &= ~PSW_MASK_MCHECK;
|
|
S390_lowcore.io_new_psw.mask &= ~PSW_MASK_MCHECK;
|
|
S390_lowcore.program_new_psw.mask &= ~PSW_MASK_MCHECK;
|
|
}
|
|
|
|
void restore_processor_state(void)
|
|
{
|
|
S390_lowcore.external_new_psw.mask |= PSW_MASK_MCHECK;
|
|
S390_lowcore.svc_new_psw.mask |= PSW_MASK_MCHECK;
|
|
S390_lowcore.io_new_psw.mask |= PSW_MASK_MCHECK;
|
|
S390_lowcore.program_new_psw.mask |= PSW_MASK_MCHECK;
|
|
/* Enable lowcore protection */
|
|
__ctl_set_bit(0,28);
|
|
local_mcck_enable();
|
|
}
|