From 9379f4a5d5638b9cc9b142c6879725c43873d74e Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Fri, 20 May 2011 13:49:36 +0100 Subject: [PATCH] x86: clear CPUID output of leaf 0xd for Dom0 when xsave is disabled 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 xen-unstable changeset: 23353:a768a10d32b4 xen-unstable date: Fri May 20 08:54:45 2011 +0100 --- xen/arch/x86/traps.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 58fbaba82..e69c43ed3 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -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 */ -- 2.39.5