diff options
author | Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> | 2010-09-19 01:25:30 -0400 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2011-04-06 08:31:00 -0400 |
commit | 61f4237d5b005767a76f4f3694e68e6f78f392d9 (patch) | |
tree | 479a885c9c5000a07db28e1b862931edd6fc537e /arch/x86 | |
parent | d88885d0923ae27b01dfcec644f94829b1e46bea (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.c | 18 |
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 | ||
272 | static void xen_set_debugreg(int reg, unsigned long val) | 256 | static void xen_set_debugreg(int reg, unsigned long val) |