summaryrefslogtreecommitdiff
path: root/msr.h
diff options
context:
space:
mode:
authormax <max@maxpad.(none)>2011-01-16 14:12:35 +0100
committermax <max@maxpad.(none)>2011-01-16 14:12:35 +0100
commit7e7dec71420d4f5e91ae7afdc729ed4ec6b81cad (patch)
treef7811a49e29afa3af0be9234e9a6dc9def0f92ad /msr.h
parent8885025bcf3db6d3c5a91432097940d584a128f5 (diff)
downloadillumos-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.h86
1 files changed, 84 insertions, 2 deletions
diff --git a/msr.h b/msr.h
index adfa689..65b4b6d 100644
--- a/msr.h
+++ b/msr.h
@@ -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__ */