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")
|
: "memory")
|
||||||
#endif
|
#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 bool strict_msr_control;
|
||||||
extern void __msr_check_and_clear(unsigned long bits);
|
extern void __msr_check_and_clear(unsigned long bits);
|
||||||
static inline 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);
|
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 oldmsr = mfmsr();
|
||||||
unsigned long newmsr;
|
unsigned long newmsr;
|
||||||
|
@ -125,6 +125,8 @@ void msr_check_and_set(unsigned long bits)
|
||||||
|
|
||||||
if (oldmsr != newmsr)
|
if (oldmsr != newmsr)
|
||||||
mtmsr_isync(newmsr);
|
mtmsr_isync(newmsr);
|
||||||
|
|
||||||
|
return newmsr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void __msr_check_and_clear(unsigned long bits)
|
void __msr_check_and_clear(unsigned long bits)
|
||||||
|
|
Loading…
Reference in New Issue