diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-02-02 16:07:13 +0000 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-02-02 16:07:13 +0000 |
commit | ec48ab815b556a8f0a2ba9c5287b13fd4cf39607 (patch) | |
tree | 1fbcd46c277fc2bb25aca6ff11a8be3105146f44 | |
parent | e03f6e62c8e9c6532bab15219c1da41376c16232 (diff) | |
download | xen-ec48ab815b556a8f0a2ba9c5287b13fd4cf39607.tar.gz xen-ec48ab815b556a8f0a2ba9c5287b13fd4cf39607.tar.bz2 xen-ec48ab815b556a8f0a2ba9c5287b13fd4cf39607.zip |
Hide RDTSCP feature flag from PV guests.
Linux 2.6.19 (x86-64) makes use of this feature if available, but Xen
(validly) fails the attempt to write the respective MSR. Hence the
feature must be hidden from PV guests.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
-rw-r--r-- | xen/arch/x86/traps.c | 5 | ||||
-rw-r--r-- | xen/include/asm-x86/cpufeature.h | 1 |
2 files changed, 6 insertions, 0 deletions
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 16b1e48ca8..dfa22bce04 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -597,6 +597,11 @@ static int emulate_forced_invalid_op(struct cpu_user_regs *regs) if ( !IS_PRIV(current->domain) ) clear_bit(X86_FEATURE_MTRR, &d); } + else if ( regs->eax == 0x80000001 ) + { + /* Modify Feature Information. */ + clear_bit(X86_FEATURE_RDTSCP % 32, &d); + } else { (void)cpuid_hypervisor_leaves(regs->eax, &a, &b, &c, &d); diff --git a/xen/include/asm-x86/cpufeature.h b/xen/include/asm-x86/cpufeature.h index a092a83ad5..a6f2f757bc 100644 --- a/xen/include/asm-x86/cpufeature.h +++ b/xen/include/asm-x86/cpufeature.h @@ -49,6 +49,7 @@ #define X86_FEATURE_MP (1*32+19) /* MP Capable. */ #define X86_FEATURE_NX (1*32+20) /* Execute Disable */ #define X86_FEATURE_MMXEXT (1*32+22) /* AMD MMX extensions */ +#define X86_FEATURE_RDTSCP (1*32+27) /* RDTSCP */ #define X86_FEATURE_LM (1*32+29) /* Long Mode (x86-64) */ #define X86_FEATURE_3DNOWEXT (1*32+30) /* AMD 3DNow! extensions */ #define X86_FEATURE_3DNOW (1*32+31) /* 3DNow! */ |