Patchwork qemu: fix cpuid eax for kvm cpu

login
register
mail settings
Submitter Michael S. Tsirkin
Date April 30, 2012, 2:42 p.m.
Message ID <20120430144214.GA10237@redhat.com>
Download mbox | patch
Permalink /patch/155878/
State New
Headers show

Comments

Michael S. Tsirkin - April 30, 2012, 2:42 p.m.
cpuid eax should return the max leaf so that
guests can find out the valid range.
This matches Xen et al.

Tested using -cpu kvm64.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 target-i386/kvm.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Avi Kivity - May 1, 2012, 12:38 p.m.
On 04/30/2012 05:42 PM, Michael S. Tsirkin wrote:
> cpuid eax should return the max leaf so that
> guests can find out the valid range.
> This matches Xen et al.
>
> Tested using -cpu kvm64.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  target-i386/kvm.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/target-i386/kvm.c b/target-i386/kvm.c
> index e74a9e4..c097248 100644
> --- a/target-i386/kvm.c
> +++ b/target-i386/kvm.c
> @@ -379,7 +379,7 @@ int kvm_arch_init_vcpu(CPUX86State *env)
>      c->function = KVM_CPUID_SIGNATURE;
>      if (!hyperv_enabled()) {
>          memcpy(signature, "KVMKVMKVM\0\0\0", 12);
> -        c->eax = 0;
> +        c->eax = KVM_CPUID_FEATURES;
>      } else {
>          memcpy(signature, "Microsoft Hv", 12);
>          c->eax = HYPERV_CPUID_MIN;

Should only change for -M 1.1+?
Michael S. Tsirkin - May 1, 2012, 12:49 p.m.
On Tue, May 01, 2012 at 03:38:43PM +0300, Avi Kivity wrote:
> On 04/30/2012 05:42 PM, Michael S. Tsirkin wrote:
> > cpuid eax should return the max leaf so that
> > guests can find out the valid range.
> > This matches Xen et al.
> >
> > Tested using -cpu kvm64.
> >
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > ---
> >  target-i386/kvm.c |    2 +-
> >  1 files changed, 1 insertions(+), 1 deletions(-)
> >
> > diff --git a/target-i386/kvm.c b/target-i386/kvm.c
> > index e74a9e4..c097248 100644
> > --- a/target-i386/kvm.c
> > +++ b/target-i386/kvm.c
> > @@ -379,7 +379,7 @@ int kvm_arch_init_vcpu(CPUX86State *env)
> >      c->function = KVM_CPUID_SIGNATURE;
> >      if (!hyperv_enabled()) {
> >          memcpy(signature, "KVMKVMKVM\0\0\0", 12);
> > -        c->eax = 0;
> > +        c->eax = KVM_CPUID_FEATURES;
> >      } else {
> >          memcpy(signature, "Microsoft Hv", 12);
> >          c->eax = HYPERV_CPUID_MIN;
> 
> Should only change for -M 1.1+?

I don't think we should: it's a bug fix and we don't try to be bug for
bug compatible unless fixing the bug actually affects guest behaviour.

> -- 
> error compiling committee.c: too many arguments to function
Avi Kivity - May 1, 2012, 1:02 p.m.
On 05/01/2012 03:49 PM, Michael S. Tsirkin wrote:
> On Tue, May 01, 2012 at 03:38:43PM +0300, Avi Kivity wrote:
> > On 04/30/2012 05:42 PM, Michael S. Tsirkin wrote:
> > > cpuid eax should return the max leaf so that
> > > guests can find out the valid range.
> > > This matches Xen et al.
> > >
> > > Tested using -cpu kvm64.
> > >
> > > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > > ---
> > >  target-i386/kvm.c |    2 +-
> > >  1 files changed, 1 insertions(+), 1 deletions(-)
> > >
> > > diff --git a/target-i386/kvm.c b/target-i386/kvm.c
> > > index e74a9e4..c097248 100644
> > > --- a/target-i386/kvm.c
> > > +++ b/target-i386/kvm.c
> > > @@ -379,7 +379,7 @@ int kvm_arch_init_vcpu(CPUX86State *env)
> > >      c->function = KVM_CPUID_SIGNATURE;
> > >      if (!hyperv_enabled()) {
> > >          memcpy(signature, "KVMKVMKVM\0\0\0", 12);
> > > -        c->eax = 0;
> > > +        c->eax = KVM_CPUID_FEATURES;
> > >      } else {
> > >          memcpy(signature, "Microsoft Hv", 12);
> > >          c->eax = HYPERV_CPUID_MIN;
> > 
> > Should only change for -M 1.1+?
>
> I don't think we should: it's a bug fix and we don't try to be bug for
> bug compatible unless fixing the bug actually affects guest behaviour.
>

I agree.

Patch

diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index e74a9e4..c097248 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -379,7 +379,7 @@  int kvm_arch_init_vcpu(CPUX86State *env)
     c->function = KVM_CPUID_SIGNATURE;
     if (!hyperv_enabled()) {
         memcpy(signature, "KVMKVMKVM\0\0\0", 12);
-        c->eax = 0;
+        c->eax = KVM_CPUID_FEATURES;
     } else {
         memcpy(signature, "Microsoft Hv", 12);
         c->eax = HYPERV_CPUID_MIN;