mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-25 11:32:24 +00:00
s390/nmi: implement and use local_mcck_save() / local_mcck_restore()
Instead of using local_mcck_disable() / local_mcck_enable() implement and use local_mcck_save() / local_mcck_restore() to disable machine checks, and restoring the previous state. The problem with using local_mcck_disable() / local_mcck_enable() is that there is an assumption that machine checks are always enabled. While this is currently the case the code still looks quite odd, readers need to double check if the code is correct. In order to increase readability save and then restore the old machine check mask bit, instead of assuming that it must have been enabled. Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
This commit is contained in:
committed by
Alexander Gordeev
parent
84e599e3ad
commit
1c8b8cf28f
@@ -332,14 +332,36 @@ static inline unsigned long __extract_psw(void)
|
||||
return (((unsigned long) reg1) << 32) | ((unsigned long) reg2);
|
||||
}
|
||||
|
||||
static inline void local_mcck_enable(void)
|
||||
static inline unsigned long __local_mcck_save(void)
|
||||
{
|
||||
__load_psw_mask(__extract_psw() | PSW_MASK_MCHECK);
|
||||
unsigned long mask = __extract_psw();
|
||||
|
||||
__load_psw_mask(mask & ~PSW_MASK_MCHECK);
|
||||
return mask & PSW_MASK_MCHECK;
|
||||
}
|
||||
|
||||
#define local_mcck_save(mflags) \
|
||||
do { \
|
||||
typecheck(unsigned long, mflags); \
|
||||
mflags = __local_mcck_save(); \
|
||||
} while (0)
|
||||
|
||||
static inline void local_mcck_restore(unsigned long mflags)
|
||||
{
|
||||
unsigned long mask = __extract_psw();
|
||||
|
||||
mask &= ~PSW_MASK_MCHECK;
|
||||
__load_psw_mask(mask | mflags);
|
||||
}
|
||||
|
||||
static inline void local_mcck_disable(void)
|
||||
{
|
||||
__load_psw_mask(__extract_psw() & ~PSW_MASK_MCHECK);
|
||||
__local_mcck_save();
|
||||
}
|
||||
|
||||
static inline void local_mcck_enable(void)
|
||||
{
|
||||
__load_psw_mask(__extract_psw() | PSW_MASK_MCHECK);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user