|
@@ -218,10 +218,14 @@ void msrs_free(struct msr *msrs);
|
|
#ifdef CONFIG_SMP
|
|
#ifdef CONFIG_SMP
|
|
int rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h);
|
|
int rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h);
|
|
int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h);
|
|
int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h);
|
|
|
|
+int rdmsrl_on_cpu(unsigned int cpu, u32 msr_no, u64 *q);
|
|
|
|
+int wrmsrl_on_cpu(unsigned int cpu, u32 msr_no, u64 q);
|
|
void rdmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs);
|
|
void rdmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs);
|
|
void wrmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs);
|
|
void wrmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs);
|
|
int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h);
|
|
int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h);
|
|
int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h);
|
|
int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h);
|
|
|
|
+int rdmsrl_safe_on_cpu(unsigned int cpu, u32 msr_no, u64 *q);
|
|
|
|
+int wrmsrl_safe_on_cpu(unsigned int cpu, u32 msr_no, u64 q);
|
|
int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8]);
|
|
int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8]);
|
|
int wrmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8]);
|
|
int wrmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8]);
|
|
#else /* CONFIG_SMP */
|
|
#else /* CONFIG_SMP */
|
|
@@ -235,6 +239,16 @@ static inline int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h)
|
|
wrmsr(msr_no, l, h);
|
|
wrmsr(msr_no, l, h);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
+static inline int rdmsrl_on_cpu(unsigned int cpu, u32 msr_no, u64 *q)
|
|
|
|
+{
|
|
|
|
+ rdmsrl(msr_no, *q);
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+static inline int wrmsrl_on_cpu(unsigned int cpu, u32 msr_no, u64 q)
|
|
|
|
+{
|
|
|
|
+ wrmsrl(msr_no, q);
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
static inline void rdmsr_on_cpus(const struct cpumask *m, u32 msr_no,
|
|
static inline void rdmsr_on_cpus(const struct cpumask *m, u32 msr_no,
|
|
struct msr *msrs)
|
|
struct msr *msrs)
|
|
{
|
|
{
|
|
@@ -254,6 +268,14 @@ static inline int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h)
|
|
{
|
|
{
|
|
return wrmsr_safe(msr_no, l, h);
|
|
return wrmsr_safe(msr_no, l, h);
|
|
}
|
|
}
|
|
|
|
+static inline int rdmsrl_safe_on_cpu(unsigned int cpu, u32 msr_no, u64 *q)
|
|
|
|
+{
|
|
|
|
+ return rdmsrl_safe(msr_no, q);
|
|
|
|
+}
|
|
|
|
+static inline int wrmsrl_safe_on_cpu(unsigned int cpu, u32 msr_no, u64 q)
|
|
|
|
+{
|
|
|
|
+ return wrmsrl_safe(msr_no, q);
|
|
|
|
+}
|
|
static inline int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8])
|
|
static inline int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8])
|
|
{
|
|
{
|
|
return rdmsr_safe_regs(regs);
|
|
return rdmsr_safe_regs(regs);
|