From: Sean Christopherson <seanjc@google.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: Zhao Liu <zhao1.liu@intel.com>, Zide Chen <zide.chen@intel.com>,
qemu-devel@nongnu.org, pbonzini@redhat.com, mst@redhat.com,
thuth@redhat.com, cfontana@suse.de, xiaoyao.li@intel.com,
qemu-trivial@nongnu.org
Subject: Re: [PATCH V2 0/3] improve -overcommit cpu-pm=on|off
Date: Thu, 30 May 2024 07:53:49 -0700 [thread overview]
Message-ID: <ZliS_RJZfAyQtjUP@google.com> (raw)
In-Reply-To: <20240530163455.0c70edcc@imammedo.users.ipa.redhat.com>
On Thu, May 30, 2024, Igor Mammedov wrote:
> On Thu, 30 May 2024 21:54:47 +0800 Zhao Liu <zhao1.liu@intel.com> wrote:
...
> > > >> following, CPUID_EXT_MONITOR is set after x86_cpu_filter_features(), so
> > > >> that it doesn't have a chance to check MWAIT against host features and
> > > >> will be advertised to the guest regardless of whether it's supported by
> > > >> the host or not.
> > > >>
> > > >> x86_cpu_realizefn()
> > > >> x86_cpu_filter_features()
> > > >> cpu_exec_realizefn()
> > > >> kvm_cpu_realizefn
> > > >> host_cpu_realizefn
> > > >> host_cpu_enable_cpu_pm
> > > >> env->features[FEAT_1_ECX] |= CPUID_EXT_MONITOR;
> > > >>
> > > >>
> > > >> If it's not supported by the host, executing MONITOR or MWAIT
> > > >> instructions from the guest triggers #UD, no matter MWAIT_EXITING
> > > >> control is set or not.
> > > >
> > > > If I recall right, kvm was able to emulate mwait/monitor.
> > > > So question is why it leads to exception instead?
Because KVM doesn't emulated MONITOR/MWAIT on #UD.
> > > KVM can come to play only iff it can trigger MWAIT/MONITOR VM exits. I
> > > didn't find explicit proof from Intel SDM that #UD exceptions take
> > > precedence over MWAIT/MONITOR VM exits, but this is my speculation.
Yeah, typically #UD takes priority over VM-Exit interception checks. AMD's APM
is much more explicit and states that all exceptions are checked on MONITOR/MWAIT
before the interception check.
> > > For example, in ancient machines which don't support MWAIT yet, the only
> > > way it can do is #UD, not MWAIT VM exit?
Not really relevant, because such CPUs wouldn't have MWAIT-exiting.
> > For the Host which doesn't support MWAIT, it shouldn't have the VMX
> > control bit for mwait exit either, right?
> >
> > Could you pls check this on your machine? If VMX doesn't support this
> > exit event, then triggering an exception will make sense.
>
> My assumption (probably wrong) was that KVM would emulate mwait if it's unavailable,
Nope. In order to limit the attack surface of the emulator on modern CPUs, KVM
only emulates select instructions in response to a #UD.
But even if KVM did emulate MONITOR/MWAIT on #UD, this is inarguably a QEMU bug,
e.g. QEMU will effectively coerce the guest into using a idle-polling mechanism.
next prev parent reply other threads:[~2024-05-30 14:54 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-24 20:00 [PATCH V2 0/3] improve -overcommit cpu-pm=on|off Zide Chen
2024-05-24 20:00 ` [PATCH V2 1/3] vl: Allow multiple -overcommit commands Zide Chen
2024-05-27 5:19 ` Thomas Huth
2024-05-30 14:01 ` Zhao Liu
2024-05-31 4:57 ` Thomas Huth
2024-06-03 8:44 ` Markus Armbruster
2024-05-30 13:39 ` Zhao Liu
2024-05-24 20:00 ` [PATCH V2 2/3] target/i386: call cpu_exec_realizefn before x86_cpu_filter_features Zide Chen
2024-05-31 6:30 ` Zhao Liu
2024-05-31 17:13 ` Chen, Zide
2024-06-01 15:26 ` Zhao Liu
2024-06-03 9:30 ` Igor Mammedov
2024-06-03 21:29 ` Chen, Zide
2024-06-05 15:07 ` Igor Mammedov
2024-06-05 17:58 ` Chen, Zide
2024-06-03 21:29 ` Chen, Zide
2024-05-24 20:00 ` [PATCH V2 3/3] target/i386: Move host_cpu_enable_cpu_pm into kvm_cpu_realizefn() Zide Chen
2024-05-31 6:53 ` Zhao Liu
2024-05-31 17:13 ` Chen, Zide
2024-05-28 9:23 ` [PATCH V2 0/3] improve -overcommit cpu-pm=on|off Igor Mammedov
2024-05-28 18:16 ` Chen, Zide
2024-05-29 12:46 ` Igor Mammedov
2024-05-29 17:31 ` Chen, Zide
2024-05-30 13:54 ` Zhao Liu
2024-05-30 14:34 ` Igor Mammedov
2024-05-30 14:53 ` Sean Christopherson [this message]
2024-05-30 14:49 ` Igor Mammedov
2024-06-02 21:54 ` Michael S. Tsirkin
2024-05-30 16:15 ` Chen, Zide
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=ZliS_RJZfAyQtjUP@google.com \
--to=seanjc@google.com \
--cc=cfontana@suse.de \
--cc=imammedo@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-trivial@nongnu.org \
--cc=thuth@redhat.com \
--cc=xiaoyao.li@intel.com \
--cc=zhao1.liu@intel.com \
--cc=zide.chen@intel.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).