[PATCH 3/8] x86/msr: Consolidate rdmsr_safe() implementations
From: Dave Hansen
Date: Fri Mar 20 2026 - 15:08:12 EST
From: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>
Use the new "raw_" indirection and consolidate the two rdmsr_safe()
implementations down to one.
Signed-off-by: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>
---
b/arch/x86/include/asm/msr.h | 21 +++++++++++----------
b/arch/x86/include/asm/paravirt.h | 10 ----------
2 files changed, 11 insertions(+), 20 deletions(-)
diff -puN arch/x86/include/asm/msr.h~rdmsr-dups-4 arch/x86/include/asm/msr.h
--- a/arch/x86/include/asm/msr.h~rdmsr-dups-4 2026-03-20 11:24:19.323805632 -0700
+++ b/arch/x86/include/asm/msr.h 2026-03-20 11:24:19.330805942 -0700
@@ -173,6 +173,7 @@ static inline u64 native_read_pmc(int co
#include <asm/paravirt.h>
#define raw_read_msr paravirt_read_msr
+#define raw_read_msr_safe paravirt_read_msr_safe
#else
#include <linux/errno.h>
@@ -207,16 +208,6 @@ static inline int wrmsrq_safe(u32 msr, u
return raw_write_msr_safe(msr, val);
}
-/* rdmsr with exception handling */
-#define rdmsr_safe(msr, low, high) \
-({ \
- u64 __val; \
- int __err = raw_read_msr_safe((msr), &__val); \
- (*low) = (u32)__val; \
- (*high) = (u32)(__val >> 32); \
- __err; \
-})
-
static inline int rdmsrq_safe(u32 msr, u64 *p)
{
return raw_read_msr_safe(msr, p);
@@ -239,6 +230,16 @@ do { \
(void)((high) = (u32)(__val >> 32)); \
} while (0)
+/* rdmsr with exception handling */
+#define rdmsr_safe(msr, low, high) \
+({ \
+ u64 __val; \
+ int __err = raw_read_msr_safe((msr), &__val); \
+ (*low) = (u32)__val; \
+ (*high) = (u32)(__val >> 32); \
+ __err; \
+})
+
/* 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-4 arch/x86/include/asm/paravirt.h
--- a/arch/x86/include/asm/paravirt.h~rdmsr-dups-4 2026-03-20 11:24:19.327805809 -0700
+++ b/arch/x86/include/asm/paravirt.h 2026-03-20 11:24:19.330805942 -0700
@@ -181,16 +181,6 @@ static inline int wrmsrq_safe(u32 msr, u
return paravirt_write_msr_safe(msr, val);
}
-/* rdmsr with exception handling */
-#define rdmsr_safe(msr, a, b) \
-({ \
- u64 _l; \
- int _err = paravirt_read_msr_safe((msr), &_l); \
- (*a) = (u32)_l; \
- (*b) = (u32)(_l >> 32); \
- _err; \
-})
-
static __always_inline int rdmsrq_safe(u32 msr, u64 *p)
{
return paravirt_read_msr_safe(msr, p);
_