diff options
author | Borislav Petkov <borislav.petkov@amd.com> | 2009-05-22 12:12:01 +0200 |
---|---|---|
committer | Borislav Petkov <borislav.petkov@amd.com> | 2009-06-10 12:18:42 +0200 |
commit | 6bc1096d7ab3621b3ffcf06616d1f4e0325d903d (patch) | |
tree | 286d1e4545fbd69c25fb4a5044d1d51122169a1d | |
parent | 07a2039b8eb0af4ff464efd3dfd95de5c02648c6 (diff) |
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 <hpa@zytor.com>
Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
-rw-r--r-- | arch/x86/include/asm/msr.h | 11 | ||||
-rw-r--r-- | arch/x86/lib/Makefile | 2 | ||||
-rw-r--r-- | arch/x86/lib/msr.c (renamed from arch/x86/lib/msr-on-cpu.c) | 26 |
3 files changed, 25 insertions, 14 deletions
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 <asm/asm.h> #include <asm/errno.h> +#include <asm/cpumask.h> + +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 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; |