From 6bc1096d7ab3621b3ffcf06616d1f4e0325d903d Mon Sep 17 00:00:00 2001 From: Borislav Petkov Date: Fri, 22 May 2009 12:12:01 +0200 Subject: [PATCH] x86: MSR: add a struct representation of an MSR Add a struct representing a 64bit MSR pair consisting of a low and high register part and convert msr_info to use it. Also, rename msr-on-cpu.c to msr.c. Side note: Put the cpumask.h include in __KERNEL__ space thus fixing an allmodconfig build failure in the headers_check target. CC: H. Peter Anvin Signed-off-by: Borislav Petkov --- arch/x86/include/asm/msr.h | 11 +++++++++++ arch/x86/lib/Makefile | 2 +- arch/x86/lib/{msr-on-cpu.c => msr.c} | 26 +++++++++++++------------- 3 files changed, 25 insertions(+), 14 deletions(-) rename arch/x86/lib/{msr-on-cpu.c => msr.c} (81%) diff --git a/arch/x86/include/asm/msr.h b/arch/x86/include/asm/msr.h index 638bf624180..5e1213216e2 100644 --- a/arch/x86/include/asm/msr.h +++ b/arch/x86/include/asm/msr.h @@ -12,6 +12,17 @@ #include #include +#include + +struct msr { + union { + struct { + u32 l; + u32 h; + }; + u64 q; + }; +}; static inline unsigned long long native_read_tscp(unsigned int *aux) { diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile index 55e11aa6d66..f9d35632666 100644 --- a/arch/x86/lib/Makefile +++ b/arch/x86/lib/Makefile @@ -2,7 +2,7 @@ # Makefile for x86 specific library files. # -obj-$(CONFIG_SMP) := msr-on-cpu.o +obj-$(CONFIG_SMP) := msr.o lib-y := delay.o lib-y += thunk_$(BITS).o diff --git a/arch/x86/lib/msr-on-cpu.c b/arch/x86/lib/msr.c similarity index 81% rename from arch/x86/lib/msr-on-cpu.c rename to arch/x86/lib/msr.c index 321cf720dbb..cade714e57f 100644 --- a/arch/x86/lib/msr-on-cpu.c +++ b/arch/x86/lib/msr.c @@ -5,7 +5,7 @@ struct msr_info { u32 msr_no; - u32 l, h; + struct msr reg; int err; }; @@ -13,14 +13,14 @@ static void __rdmsr_on_cpu(void *info) { struct msr_info *rv = info; - rdmsr(rv->msr_no, rv->l, rv->h); + rdmsr(rv->msr_no, rv->reg.l, rv->reg.h); } static void __wrmsr_on_cpu(void *info) { struct msr_info *rv = info; - wrmsr(rv->msr_no, rv->l, rv->h); + wrmsr(rv->msr_no, rv->reg.l, rv->reg.h); } int rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h) @@ -30,8 +30,8 @@ int rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h) rv.msr_no = msr_no; err = smp_call_function_single(cpu, __rdmsr_on_cpu, &rv, 1); - *l = rv.l; - *h = rv.h; + *l = rv.reg.l; + *h = rv.reg.h; return err; } @@ -42,8 +42,8 @@ int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h) struct msr_info rv; rv.msr_no = msr_no; - rv.l = l; - rv.h = h; + rv.reg.l = l; + rv.reg.h = h; err = smp_call_function_single(cpu, __wrmsr_on_cpu, &rv, 1); return err; @@ -55,14 +55,14 @@ static void __rdmsr_safe_on_cpu(void *info) { struct msr_info *rv = info; - rv->err = rdmsr_safe(rv->msr_no, &rv->l, &rv->h); + rv->err = rdmsr_safe(rv->msr_no, &rv->reg.l, &rv->reg.h); } static void __wrmsr_safe_on_cpu(void *info) { struct msr_info *rv = info; - rv->err = wrmsr_safe(rv->msr_no, rv->l, rv->h); + rv->err = wrmsr_safe(rv->msr_no, rv->reg.l, rv->reg.h); } int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h) @@ -72,8 +72,8 @@ int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h) rv.msr_no = msr_no; err = smp_call_function_single(cpu, __rdmsr_safe_on_cpu, &rv, 1); - *l = rv.l; - *h = rv.h; + *l = rv.reg.l; + *h = rv.reg.h; return err ? err : rv.err; } @@ -84,8 +84,8 @@ int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h) struct msr_info rv; rv.msr_no = msr_no; - rv.l = l; - rv.h = h; + rv.reg.l = l; + rv.reg.h = h; err = smp_call_function_single(cpu, __wrmsr_safe_on_cpu, &rv, 1); return err ? err : rv.err; -- 2.39.5