diff options
author | max <max@maxpad.(none)> | 2011-01-16 14:12:35 +0100 |
---|---|---|
committer | max <max@maxpad.(none)> | 2011-01-16 14:12:35 +0100 |
commit | 7e7dec71420d4f5e91ae7afdc729ed4ec6b81cad (patch) | |
tree | f7811a49e29afa3af0be9234e9a6dc9def0f92ad /msr.h | |
parent | 8885025bcf3db6d3c5a91432097940d584a128f5 (diff) | |
download | illumos-kvm-7e7dec71420d4f5e91ae7afdc729ed4ec6b81cad.tar.gz |
ioctl fixes. this version has correct host state and control state,
but launch dies on incorrect guest state.
Diffstat (limited to 'msr.h')
-rw-r--r-- | msr.h | 86 |
1 files changed, 84 insertions, 2 deletions
@@ -67,7 +67,13 @@ static inline unsigned long long native_read_tscp(unsigned int *aux) #define EAX_EDX_RET(val, low, high) "=A" (val) #endif +#ifdef XXX +/* change to function, i.e., not inline. want to dtrace this */ +/* doing this for most read/write msr inlines */ static inline unsigned long long native_read_msr(unsigned int msr) +#else +static unsigned long long native_read_msr(unsigned int msr) +#endif /*XXX*/ { DECLARE_ARGS(val, low, high); @@ -82,8 +88,13 @@ extern int native_write_msr_safe(unsigned int msr, unsigned low, unsigned high); +#ifdef XXX static inline void native_write_msr(unsigned int msr, unsigned low, unsigned high) +#else +static void native_write_msr(unsigned int msr, + unsigned low, unsigned high) +#endif /*XXX*/ { __asm__ volatile("wrmsr" : : "c" (msr), "a"(low), "d" (high) : "memory"); } @@ -91,8 +102,10 @@ static inline void native_write_msr(unsigned int msr, extern unsigned long long native_read_tsc(void); +#ifdef NOTNOW extern int native_rdmsr_safe_regs(uint32_t regs[8]); extern int native_wrmsr_safe_regs(uint32_t regs[8]); +#endif /*NOTNOW*/ static inline unsigned long long __native_read_tsc(void) { @@ -131,7 +144,11 @@ do { \ (val2) = (uint32_t)(__val >> 32); \ } while (0) +#ifdef XXX static inline void wrmsr(unsigned msr, unsigned low, unsigned high) +#else +static void wrmsr(unsigned msr, unsigned low, unsigned high) +#endif /*XXX*/ { native_write_msr(msr, low, high); } @@ -142,8 +159,13 @@ static inline void wrmsr(unsigned msr, unsigned low, unsigned high) #define wrmsrl(msr, val) \ native_write_msr((msr), (uint32_t)((uint64_t)(val)), (uint32_t)((uint64_t)(val) >> 32)) +#ifdef XXX +/* see comment above for wrmsr() */ /* wrmsr with exception handling */ static inline int wrmsr_safe(unsigned msr, unsigned low, unsigned high) +#else +static int wrmsr_safe(unsigned msr, unsigned low, unsigned high) +#endif /*XXX*/ { return native_write_msr_safe(msr, low, high); } @@ -158,7 +180,11 @@ static inline int wrmsr_safe(unsigned msr, unsigned low, unsigned high) __err; \ }) +#ifdef XXX static inline int rdmsrl_safe(unsigned msr, unsigned long long *p) +#else +static int rdmsrl_safe(unsigned msr, unsigned long long *p) +#endif /*XXX*/ { int err; @@ -166,7 +192,12 @@ static inline int rdmsrl_safe(unsigned msr, unsigned long long *p) return err; } +#ifdef NOTNOW +#ifdef XXX static inline int rdmsrl_amd_safe(unsigned msr, unsigned long long *p) +#else +static int rdmsrl_amd_safe(unsigned msr, unsigned long long *p) +#endif /*XXX*/ { uint32_t gprs[8] = { 0 }; int err; @@ -181,7 +212,11 @@ static inline int rdmsrl_amd_safe(unsigned msr, unsigned long long *p) return err; } +#ifdef XXX static inline int wrmsrl_amd_safe(unsigned msr, unsigned long long val) +#else +static int wrmsrl_amd_safe(unsigned msr, unsigned long long val) +#endif /*XXX*/ { uint32_t gprs[8] = { 0 }; @@ -192,16 +227,28 @@ static inline int wrmsrl_amd_safe(unsigned msr, unsigned long long val) return native_wrmsr_safe_regs(gprs); } +#endif /*NOTNOW*/ +#ifdef NOTNOW +#ifdef XXX +/* wtf are native_rdmsr_safe_regs/native_wrmsr_safe_regs??? */ +/* possibly built from paravirt.c..., but we don't use them */ static inline int rdmsr_safe_regs(uint32_t regs[8]) +#else +static int rdmsr_safe_regs(uint32_t regs[8]) +#endif /*XXX*/ { return native_rdmsr_safe_regs(regs); } - +#ifdef XXX static inline int wrmsr_safe_regs(uint32_t regs[8]) +#else +static int wrmsr_safe_regs(uint32_t regs[8]) +#endif /*XXX*/ { return native_wrmsr_safe_regs(regs); } +#endif /*NOTNOW*/ #define rdtscl(low) \ ((low) = (uint32_t)__native_read_tsc()) @@ -247,15 +294,26 @@ void wrmsr_on_cpus(const struct cpumask *mask, uint32_t msr_no, struct msr *msrs #endif /*XXX*/ int rdmsr_safe_on_cpu(unsigned int cpu, uint32_t msr_no, uint32_t *l, uint32_t *h); int wrmsr_safe_on_cpu(unsigned int cpu, uint32_t msr_no, uint32_t l, uint32_t h); +#ifdef XXX int rdmsr_safe_regs_on_cpu(unsigned int cpu, uint32_t regs[8]); int wrmsr_safe_regs_on_cpu(unsigned int cpu, uint32_t regs[8]); +#endif /*XXX*/ #else /* CONFIG_SMP */ +#ifdef XXX static inline int rdmsr_on_cpu(unsigned int cpu, uint32_t msr_no, uint32_t *l, uint32_t *h) +#else +static int rdmsr_on_cpu(unsigned int cpu, uint32_t msr_no, uint32_t *l, uint32_t *h) +#endif /*XXX*/ { rdmsr(msr_no, *l, *h); return 0; } + +#ifdef XXX static inline int wrmsr_on_cpu(unsigned int cpu, uint32_t msr_no, uint32_t l, uint32_t h) +#else +static int wrmsr_on_cpu(unsigned int cpu, uint32_t msr_no, uint32_t l, uint32_t h) +#endif /*XXX*/ { wrmsr(msr_no, l, h); return 0; @@ -266,29 +324,53 @@ static inline void rdmsr_on_cpus(const struct cpumask *m, uint32_t msr_no, { rdmsr_on_cpu(0, msr_no, &(msrs[0].l), &(msrs[0].h)); } + static inline void wrmsr_on_cpus(const struct cpumask *m, uint32_t msr_no, struct msr *msrs) { wrmsr_on_cpu(0, msr_no, msrs[0].l, msrs[0].h); } -#endif +#endif /*XXX*/ + +#ifdef XXX static inline int rdmsr_safe_on_cpu(unsigned int cpu, uint32_t msr_no, uint32_t *l, uint32_t *h) +#else +static int rdmsr_safe_on_cpu(unsigned int cpu, uint32_t msr_no, + uint32_t *l, uint32_t *h) +#endif /*XXX*/ { return rdmsr_safe(msr_no, l, h); } + +#ifdef XXX static inline int wrmsr_safe_on_cpu(unsigned int cpu, uint32_t msr_no, uint32_t l, uint32_t h) +#else +static int wrmsr_safe_on_cpu(unsigned int cpu, uint32_t msr_no, uint32_t l, uint32_t h) +#endif /*XXX*/ { return wrmsr_safe(msr_no, l, h); } + +#ifdef NOTNOW +#ifdef XXX static inline int rdmsr_safe_regs_on_cpu(unsigned int cpu, uint32_t regs[8]) +#else +static int rdmsr_safe_regs_on_cpu(unsigned int cpu, uint32_t regs[8]) +#endif /*XXX*/ { return rdmsr_safe_regs(regs); } + +#ifdef XXX static inline int wrmsr_safe_regs_on_cpu(unsigned int cpu, uint32_t regs[8]) +#else +static int wrmsr_safe_regs_on_cpu(unsigned int cpu, uint32_t regs[8]) +#endif /*XXX*/ { return wrmsr_safe_regs(regs); } +#endif /*NOTNOW*/ #endif /* CONFIG_SMP */ #endif /* _KERNEL */ #endif /* __ASSEMBLY__ */ |