All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [RFC untested PATCH] i386/cpu: make -cpu host support monitor/mwait
Date: Tue, 12 Jun 2018 15:57:19 +0300	[thread overview]
Message-ID: <20180612155708-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20180612145605.50f64965@redhat.com>

On Tue, Jun 12, 2018 at 02:56:05PM +0200, Igor Mammedov wrote:
> On Fri, 8 Jun 2018 23:59:19 +0300
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
> 
> > When guest CPU PM is enabled, and with -cpu host, expose the host CPU
> > MWAIT leaf to guest so guest can make good PM decisions.
> > 
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > ---
> > 
> > This builds but is untested. Is this a reasonable way to go about it?
> > 
> >  target/i386/cpu.h |  9 +++++++++
> >  target/i386/cpu.c | 18 +++++++++++++-----
> >  2 files changed, 22 insertions(+), 5 deletions(-)
> > 
> > diff --git a/target/i386/cpu.h b/target/i386/cpu.h
> > index 664504610e..309f804573 100644
> > --- a/target/i386/cpu.h
> > +++ b/target/i386/cpu.h
> > @@ -1378,6 +1378,15 @@ struct X86CPU {
> >      /* if true the CPUID code directly forward host cache leaves to the guest */
> >      bool cache_info_passthrough;
> >  
> > +    /* if true the CPUID code directly forwards
> > +     * host monitor/mwait leaves to the guest */
> > +    struct {
> > +        uint32_t eax;
> > +        uint32_t ebx;
> > +        uint32_t ecx;
> > +        uint32_t edx;
> > +    } mwait;
> > +
> >      /* Features that were filtered out because of missing host capabilities */
> >      uint32_t filtered_features[FEATURE_WORDS];
> >  
> > diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> > index 94260412e2..a49443de56 100644
> > --- a/target/i386/cpu.c
> > +++ b/target/i386/cpu.c
> > @@ -3760,11 +3760,11 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
> >          }
> >          break;
> >      case 5:
> > -        /* mwait info: needed for Core compatibility */
> > -        *eax = 0; /* Smallest monitor-line size in bytes */
> > -        *ebx = 0; /* Largest monitor-line size in bytes */
> > -        *ecx = CPUID_MWAIT_EMX | CPUID_MWAIT_IBE;
> > -        *edx = 0;
> > +        /* MONITOR/MWAIT Leaf */
> > +        *eax = cpu->mwait.eax; /* Smallest monitor-line size in bytes */
> > +        *ebx = cpu->mwait.ebx; /* Largest monitor-line size in bytes */
> > +        *ecx = cpu->mwait.ecx; /* flags */
> > +        *edx = cpu->mwait.edx; /* mwait substates */
> >          break;
> >      case 6:
> >          /* Thermal and Power Leaf */
> > @@ -4595,6 +4595,14 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp)
> >          goto out;
> >      }
> >  
> > +    if (xcc->host_cpuid_required && enable_cpu_pm) {
> > +        host_cpuid(5, 0, &cpu->mwait.eax, &cpu->mwait.ebx,
> > +                   &cpu->mwait.ecx, &cpu->mwait.edx);
> > +    }
> could this state be migrated? or 'host' is still unmigratable?

Host is still unmigratable.

> also max_x86_cpu_initfn() might be better place for filling it up.
> 
> > +    /* We always wake on interrupt even if host does not have the capability */
> > +    /* mwait extended info: needed for Core compatibility */
> > +    cpu->mwait.ecx |= CPUID_MWAIT_EMX | CPUID_MWAIT_IBE;
> > +
> >      if (cpu->apic_id == UNASSIGNED_APIC_ID) {
> >          error_setg(errp, "apic-id property was not initialized properly");
> >          return;

  reply	other threads:[~2018-06-12 12:57 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-08 20:59 [Qemu-devel] [RFC untested PATCH] i386/cpu: make -cpu host support monitor/mwait Michael S. Tsirkin
2018-06-08 21:22 ` no-reply
2018-06-08 23:12 ` no-reply
2018-06-11 21:52 ` Eduardo Habkost
2018-06-12 12:56 ` Igor Mammedov
2018-06-12 12:57   ` Michael S. Tsirkin [this message]
2018-06-12 13:58     ` Igor Mammedov
2018-06-12 14:49       ` Eduardo Habkost
2018-06-13  8:55         ` Igor Mammedov
2018-06-13 18:22           ` Michael S. Tsirkin
2018-06-13 18:32             ` Eduardo Habkost

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180612155708-mutt-send-email-mst@kernel.org \
    --to=mst@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.