Patchwork Reinstate cpuid vendor override when kvm is enabled

login
register
mail settings
Submitter Avi Kivity
Date Dec. 28, 2009, 8:48 a.m.
Message ID <1261990080-15330-1-git-send-email-avi@redhat.com>
Download mbox | patch
Permalink /patch/41850/
State New
Headers show

Comments

Avi Kivity - Dec. 28, 2009, 8:48 a.m.
Due to upstream qemu changes we no longer expose the host cpu vendor id
to the guest.  This leads to failures when the syscall/sysenter instructions
are used in compatibility mode.

Change the default to override when kvm is enabled.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 target-i386/helper.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Marcelo Tosatti - Dec. 28, 2009, 8:47 p.m.
On Mon, Dec 28, 2009 at 10:48:00AM +0200, Avi Kivity wrote:
> Due to upstream qemu changes we no longer expose the host cpu vendor id
> to the guest.  This leads to failures when the syscall/sysenter instructions
> are used in compatibility mode.
> 
> Change the default to override when kvm is enabled.

Applied and queued for stable-0.12, thanks.
Jamie Lokier - Dec. 29, 2009, 1:28 p.m.
Avi Kivity wrote:
> Due to upstream qemu changes we no longer expose the host cpu vendor id
> to the guest.  This leads to failures when the syscall/sysenter instructions
> are used in compatibility mode.
> 
> Change the default to override when kvm is enabled.

This is a good change, although it always bothers me when there has to
be a difference between kvm-enabled and kvm-disabled, because I run
some guests in both modes at different times.

Out of interest, are the guest-visible differences between kvm-enabled
mode and kvm-disabled mode documented somewhere?

Thanks,
-- Jamie

Patch

diff --git a/target-i386/helper.c b/target-i386/helper.c
index 9a50da6..b58fd82 100644
--- a/target-i386/helper.c
+++ b/target-i386/helper.c
@@ -518,7 +518,7 @@  static int cpu_x86_register (CPUX86State *env, const char *cpu_model)
         env->cpuid_vendor2 = CPUID_VENDOR_INTEL_2;
         env->cpuid_vendor3 = CPUID_VENDOR_INTEL_3;
     }
-    env->cpuid_vendor_override = def->vendor_override;
+    env->cpuid_vendor_override = def->vendor_override || kvm_enabled();
     env->cpuid_level = def->level;
     if (def->family > 0x0f)
         env->cpuid_version = 0xf00 | ((def->family - 0x0f) << 20);