[Quantal] Revert/drop EC2 workaround for XSAVe

Stefan Bader stefan.bader at canonical.com
Mon Sep 17 15:37:26 UTC 2012


When submitting this to upstream, the following discussion
turned up that newer kernels would not forcfully set the
bit in CR4 to test for the XSAVE feature but rely on the
cpuid bits passed by the HV. And testing done by Amazon
said they will be fine with that.
(There was a patch mentioned that would mask off the cpuid
bits from guest but I have not linked that to a specific
Xen version. But the hopes is that EC2 does at least use
a version that will do that. And even if they do, they
said they don't need it and we get rid of yet another
deviation).

Probably we want to drop that in Precise, too. It could allow
guest to use xsave if the HV allows. For Lucid we would need
it still or backport the change in Xen code that replaces the
test for xsave capabilities.

-Stefan


>From 289da65880d0001ecb3a771039642872ae146b18 Mon Sep 17 00:00:00 2001
From: Stefan Bader <stefan.bader at canonical.com>
Date: Mon, 17 Sep 2012 17:27:46 +0200
Subject: [PATCH] Revert "UBUNTU: SAUCE: Mask CR4 writes on older Xen
 hypervisors"

This reverts commit d0ffa571dbcf13787baa52a31bc7b7025749d4b4 as
it seems unnecessary.

Signed-off-by: Stefan Bader <stefan.bader at canonical.com>
---
 arch/x86/xen/enlighten.c |   17 +----------------
 1 file changed, 1 insertion(+), 16 deletions(-)

diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 108d943..ff962d4 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -196,18 +196,6 @@ void xen_vcpu_restore(void)
 	}
 }
 
-/*
- * Older (with no clear statement about what old means) Xen hypervisors
- * will crash a PV guest that tries to store OSXSAVE into CR4.
- * To prevent this, we force the feature bits related to this off in the
- * xen cpuid call. This inline function serves as a centralized test
- * on whether the quirk should be done.
- */
-static inline needs_xsave_quirk(unsigned version)
-{
-	return (xen_pv_domain() && ((version >> 16) < 4)) ? 1 : 0;
-}
-
 static void __init xen_banner(void)
 {
 	unsigned version = HYPERVISOR_xen_version(XENVER_version, NULL);
@@ -219,8 +207,6 @@ static void __init xen_banner(void)
 	printk(KERN_INFO "Xen version: %d.%d%s%s\n",
 	       version >> 16, version & 0xffff, extra.extraversion,
 	       xen_feature(XENFEAT_mmu_pt_update_preserve_ad) ? " (preserve-AD)" : "");
-	if (needs_xsave_quirk(version))
-		printk(KERN_INFO "Forcing xsave off due to Xen version.\n");
 }
 
 #define CPUID_THERM_POWER_LEAF 6
@@ -351,7 +337,6 @@ static bool __init xen_check_mwait(void)
 }
 static void __init xen_init_cpuid_mask(void)
 {
-	unsigned version = HYPERVISOR_xen_version(XENVER_version, NULL);
 	unsigned int ax, bx, cx, dx;
 	unsigned int xsave_mask;
 
@@ -374,7 +359,7 @@ static void __init xen_init_cpuid_mask(void)
 		(1 << (X86_FEATURE_OSXSAVE % 32));
 
 	/* Xen will set CR4.OSXSAVE if supported and not disabled by force */
-	if (((cx & xsave_mask) != xsave_mask) || needs_xsave_quirk(version))
+	if ((cx & xsave_mask) != xsave_mask)
 		cpuid_leaf1_ecx_mask &= ~xsave_mask; /* disable XSAVE & OSXSAVE */
 	if (xen_check_mwait())
 		cpuid_leaf1_ecx_set_mask = (1 << (X86_FEATURE_MWAIT % 32));
-- 
1.7.9.5





More information about the kernel-team mailing list