aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2010-06-11 15:19:49 +0100
committerKeir Fraser <keir.fraser@citrix.com>2010-06-11 15:19:49 +0100
commit7734234e956f0d259f2adb4bd994e0d887fa579c (patch)
tree9dffff4b13ea677f3552d8e9627188729a63ea3f
parent991fca38acc8627b484f2587847f5ff30ac72236 (diff)
downloadxen-7734234e956f0d259f2adb4bd994e0d887fa579c.tar.gz
xen-7734234e956f0d259f2adb4bd994e0d887fa579c.tar.bz2
xen-7734234e956f0d259f2adb4bd994e0d887fa579c.zip
x86: Clean up efer/ler macros after MSR changes.
Move them out of a header file and make the macros proper functions again. Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
-rw-r--r--xen/arch/x86/domain.c1
-rw-r--r--xen/arch/x86/traps.c24
-rw-r--r--xen/include/asm-x86/msr.h17
-rw-r--r--xen/include/xen/cpuidle.h2
4 files changed, 27 insertions, 17 deletions
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index 4dc081fa03..d766ab4890 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -58,7 +58,6 @@
#endif
DEFINE_PER_CPU(struct vcpu *, curr_vcpu);
-DEFINE_PER_CPU(u64, efer);
DEFINE_PER_CPU(unsigned long, cr4);
static void default_idle(void);
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
index bfc4f248ce..e30b1528d7 100644
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -81,6 +81,8 @@ static char __read_mostly opt_nmi[10] = "fatal";
#endif
string_param("nmi", opt_nmi);
+DEFINE_PER_CPU(u64, efer);
+
DEFINE_PER_CPU_READ_MOSTLY(u32, ler_msr);
DEFINE_PER_CPU_READ_MOSTLY(struct desc_struct *, gdt_table);
@@ -3113,6 +3115,28 @@ asmlinkage void do_device_not_available(struct cpu_user_regs *regs)
return;
}
+u64 read_efer(void)
+{
+ return this_cpu(efer);
+}
+
+void write_efer(u64 val)
+{
+ this_cpu(efer) = val;
+ wrmsrl(MSR_EFER, val);
+}
+
+static void ler_enable(void)
+{
+ u64 debugctl;
+
+ if ( !this_cpu(ler_msr) )
+ return;
+
+ rdmsrl(MSR_IA32_DEBUGCTLMSR, debugctl);
+ wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctl | 1);
+}
+
asmlinkage void do_debug(struct cpu_user_regs *regs)
{
struct vcpu *v = current;
diff --git a/xen/include/asm-x86/msr.h b/xen/include/asm-x86/msr.h
index 26fded68c0..820a2528e6 100644
--- a/xen/include/asm-x86/msr.h
+++ b/xen/include/asm-x86/msr.h
@@ -102,24 +102,11 @@ static inline int wrmsr_safe(unsigned int msr, uint64_t val)
DECLARE_PER_CPU(u64, efer);
-
-#define read_efer() this_cpu(efer)
-
-#define write_efer(val) do { \
- this_cpu(efer) = val; \
- wrmsrl(MSR_EFER, val); \
-} while(0)
+u64 read_efer(void);
+void write_efer(u64 val);
DECLARE_PER_CPU(u32, ler_msr);
-#define ler_enable() do { \
- u64 debugctl; \
- if ( !this_cpu(ler_msr) ) \
- return; \
- rdmsrl(MSR_IA32_DEBUGCTLMSR, debugctl); \
- wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctl | 1); \
-} while(0)
-
#endif /* !__ASSEMBLY__ */
#endif /* __ASM_MSR_H */
diff --git a/xen/include/xen/cpuidle.h b/xen/include/xen/cpuidle.h
index 0b3b3fec27..cf73341bf5 100644
--- a/xen/include/xen/cpuidle.h
+++ b/xen/include/xen/cpuidle.h
@@ -27,7 +27,7 @@
#ifndef _XEN_CPUIDLE_H
#define _XEN_CPUIDLE_H
-#include <xen/smp.h>
+#include <xen/cpumask.h>
#define ACPI_PROCESSOR_MAX_POWER 8
#define CPUIDLE_NAME_LEN 16