mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-30 09:56:40 +07:00
powerpc: Return the new MSR from msr_check_and_set()
msr_check_and_set() always performs a mfmsr() to determine if it needs to perform an mtmsr(), as mfmsr() can be a costly operation msr_check_and_set() could return the MSR now on the CPU to avoid callers of msr_check_and_set having to make their own mfmsr() call. Signed-off-by: Cyril Bur <cyrilbur@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
b0f16b4698
commit
3cee070a13
@ -1250,7 +1250,7 @@ static inline void mtmsr_isync(unsigned long val)
|
||||
: "memory")
|
||||
#endif
|
||||
|
||||
extern void msr_check_and_set(unsigned long bits);
|
||||
extern unsigned long msr_check_and_set(unsigned long bits);
|
||||
extern bool strict_msr_control;
|
||||
extern void __msr_check_and_clear(unsigned long bits);
|
||||
static inline void msr_check_and_clear(unsigned long bits)
|
||||
|
@ -111,7 +111,7 @@ static int __init enable_strict_msr_control(char *str)
|
||||
}
|
||||
early_param("ppc_strict_facility_enable", enable_strict_msr_control);
|
||||
|
||||
void msr_check_and_set(unsigned long bits)
|
||||
unsigned long msr_check_and_set(unsigned long bits)
|
||||
{
|
||||
unsigned long oldmsr = mfmsr();
|
||||
unsigned long newmsr;
|
||||
@ -125,6 +125,8 @@ void msr_check_and_set(unsigned long bits)
|
||||
|
||||
if (oldmsr != newmsr)
|
||||
mtmsr_isync(newmsr);
|
||||
|
||||
return newmsr;
|
||||
}
|
||||
|
||||
void __msr_check_and_clear(unsigned long bits)
|
||||
|
Loading…
Reference in New Issue
Block a user