From: Dave Hansen <[email protected]>
These should be very familiar by now. Use the "raw_" indirection to consolidate the duplicate implementations. Do four at once now because these are quite straightforward. Signed-off-by: Dave Hansen <[email protected]> --- b/arch/x86/include/asm/msr.h | 44 +++++++++++++++++++------------------- b/arch/x86/include/asm/paravirt.h | 20 ----------------- 2 files changed, 23 insertions(+), 41 deletions(-) diff -puN arch/x86/include/asm/msr.h~rdmsr-dups-6 arch/x86/include/asm/msr.h --- a/arch/x86/include/asm/msr.h~rdmsr-dups-6 2026-03-20 11:24:20.448855576 -0700 +++ b/arch/x86/include/asm/msr.h 2026-03-20 11:24:20.455855887 -0700 @@ -174,6 +174,8 @@ static inline u64 native_read_pmc(int co #define raw_read_msr paravirt_read_msr #define raw_read_msr_safe paravirt_read_msr_safe +#define raw_write_msr paravirt_write_msr +#define raw_write_msr_safe paravirt_write_msr_safe #else #include <linux/errno.h> @@ -189,27 +191,6 @@ static inline u64 native_read_pmc(int co * pointer indirection), this allows gcc to optimize better */ -static inline void wrmsr(u32 msr, u32 low, u32 high) -{ - raw_write_msr(msr, (u64)high << 32 | low); -} - -static inline void wrmsrq(u32 msr, u64 val) -{ - raw_write_msr(msr, val); -} - -/* wrmsr with exception handling */ -static inline int wrmsrq_safe(u32 msr, u64 val) -{ - return raw_write_msr_safe(msr, val); -} - -static inline int rdmsrq_safe(u32 msr, u64 *p) -{ - return raw_read_msr_safe(msr, p); -} - static __always_inline u64 rdpmc(int counter) { return native_read_pmc(counter); @@ -240,6 +221,27 @@ do { \ #define rdmsrq(msr, val) \ ((val) = raw_read_msr((msr))) +static inline int rdmsrq_safe(u32 msr, u64 *p) +{ + return raw_read_msr_safe(msr, p); +} + +/* wrmsr with exception handling */ +static inline int wrmsrq_safe(u32 msr, u64 val) +{ + return raw_write_msr_safe(msr, val); +} + +static inline void wrmsr(u32 msr, u32 low, u32 high) +{ + raw_write_msr(msr, (u64)high << 32 | low); +} + +static inline void wrmsrq(u32 msr, u64 val) +{ + raw_write_msr(msr, val); +} + /* Instruction opcode for WRMSRNS supported in binutils >= 2.40 */ #define ASM_WRMSRNS _ASM_BYTES(0x0f,0x01,0xc6) diff -puN arch/x86/include/asm/paravirt.h~rdmsr-dups-6 arch/x86/include/asm/paravirt.h --- a/arch/x86/include/asm/paravirt.h~rdmsr-dups-6 2026-03-20 11:24:20.452855754 -0700 +++ b/arch/x86/include/asm/paravirt.h 2026-03-20 11:24:20.455855887 -0700 @@ -161,26 +161,6 @@ static inline int paravirt_write_msr_saf return PVOP_CALL2(int, pv_ops, cpu.write_msr_safe, msr, val); } -static __always_inline void wrmsr(u32 msr, u32 low, u32 high) -{ - paravirt_write_msr(msr, (u64)high << 32 | low); -} - -static inline void wrmsrq(u32 msr, u64 val) -{ - paravirt_write_msr(msr, val); -} - -static inline int wrmsrq_safe(u32 msr, u64 val) -{ - return paravirt_write_msr_safe(msr, val); -} - -static __always_inline int rdmsrq_safe(u32 msr, u64 *p) -{ - return paravirt_read_msr_safe(msr, p); -} - static __always_inline u64 rdpmc(int counter) { return PVOP_CALL1(u64, pv_ops, cpu.read_pmc, counter); _

