]> xenbits.xensource.com Git - people/vhanquez/xen.git/commitdiff
x86: clear CPUID output of leaf 0xd for Dom0 when xsave is disabled
authorJan Beulich <jbeulich@novell.com>
Fri, 20 May 2011 12:49:36 +0000 (13:49 +0100)
committerJan Beulich <jbeulich@novell.com>
Fri, 20 May 2011 12:49:36 +0000 (13:49 +0100)
Linux starting with 2.6.36 uses the XSAVEOPT instruction and has
certain code paths that look only at the feature bit reported through
CPUID leaf 0xd sub-leaf 1 (i.e. without qualifying the check with one
evaluating leaf 4 output). Consequently the hypervisor ought to mimic
actual hardware in clearing leaf 0xd output when not supporting xsave.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
xen-unstable changeset:   23353:a768a10d32b4
xen-unstable date:        Fri May 20 08:54:45 2011 +0100

xen/arch/x86/traps.c

index 58fbaba82c8fc49448c4eb7425d487592386138c..e69c43ed353406e0d3cfcd39ff4f95a066ca823e 100644 (file)
@@ -806,6 +806,10 @@ static void pv_cpuid(struct cpu_user_regs *regs)
         __clear_bit(X86_FEATURE_NODEID_MSR % 32, &c);
         __clear_bit(X86_FEATURE_TOPOEXT % 32, &c);
         break;
+    case 0xd: /* XSAVE */
+        if ( xsave_enabled(current) )
+            break;
+        /* fall through */
     case 5: /* MONITOR/MWAIT */
     case 0xa: /* Architectural Performance Monitor Features */
     case 0x8000000a: /* SVM revision and features */