aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2010-09-19 01:25:30 -0400
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2011-04-06 08:31:00 -0400
commit61f4237d5b005767a76f4f3694e68e6f78f392d9 (patch)
tree479a885c9c5000a07db28e1b862931edd6fc537e /arch/x86
parentd88885d0923ae27b01dfcec644f94829b1e46bea (diff)
xen: just completely disable XSAVE
Some (old) versions of Xen just kill the domain if it tries to set any unknown bits in CR4, so we can't reliably probe for OSXSAVE in CR4. Since Xen doesn't support XSAVE for guests at the moment, and no such support is being worked on, there's no downside in just unconditionally masking XSAVE support. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/xen/enlighten.c18
1 files changed, 1 insertions, 17 deletions
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 49dbd78ec3cb..66272a237622 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -250,23 +250,7 @@ static __init void xen_init_cpuid_mask(void)
250 ~((1 << X86_FEATURE_APIC) | /* disable local APIC */ 250 ~((1 << X86_FEATURE_APIC) | /* disable local APIC */
251 (1 << X86_FEATURE_ACPI)); /* disable ACPI */ 251 (1 << X86_FEATURE_ACPI)); /* disable ACPI */
252 252
253 ax = 1; 253 cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_XSAVE % 32)); /* disable XSAVE */
254 cx = 0;
255 xen_cpuid(&ax, &bx, &cx, &dx);
256
257 /* cpuid claims we support xsave; try enabling it to see what happens */
258 if (cx & (1 << (X86_FEATURE_XSAVE % 32))) {
259 unsigned long cr4;
260
261 set_in_cr4(X86_CR4_OSXSAVE);
262
263 cr4 = read_cr4();
264
265 if ((cr4 & X86_CR4_OSXSAVE) == 0)
266 cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_XSAVE % 32));
267
268 clear_in_cr4(X86_CR4_OSXSAVE);
269 }
270} 254}
271 255
272static void xen_set_debugreg(int reg, unsigned long val) 256static void xen_set_debugreg(int reg, unsigned long val)