Re: [PATCH 3/3] KVM: x86: correct mwait and monitor emulation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 6/18/14, 8:59 PM, Eric Northup wrote:
On Wed, Jun 18, 2014 at 7:19 AM, Nadav Amit <namit@xxxxxxxxxxxxxxxxx> wrote:
mwait and monitor are currently handled as nop. Considering this behavior, they
should still be handled correctly, i.e., check execution conditions and generate
exceptions when required. mwait and monitor may also be executed in real-mode
and are not handled in that case.  This patch performs the emulation of
monitor-mwait according to Intel SDM (other than checking whether interrupt can
be used as a break event).

Signed-off-by: Nadav Amit <namit@xxxxxxxxxxxxxxxxx>
---
  arch/x86/kvm/emulate.c | 41 +++++++++++++++++++++++++++++++++++++++--
  arch/x86/kvm/svm.c     | 22 ++--------------------
  arch/x86/kvm/vmx.c     | 27 +++++++++++----------------
  3 files changed, 52 insertions(+), 38 deletions(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index ef7a5a0..424b58d 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -3344,6 +3344,43 @@ static int em_bswap(struct x86_emulate_ctxt *ctxt)
         return X86EMUL_CONTINUE;
  }

+static int em_monitor(struct x86_emulate_ctxt *ctxt)
+{
+       int rc;
+       struct segmented_address addr;
+       u64 rcx = reg_read(ctxt, VCPU_REGS_RCX);
+       u64 rax = reg_read(ctxt, VCPU_REGS_RAX);
+       u8 byte;

I'd request:

u32 ebx, ecx, edx, eax = 1;
ctxt->opt->get_cpuid(ctxt, &eax, &ebx, &ecx, &edx);
if (!(ecx & FFL(MWAIT)))
         return emulate_ud(ctxt);

and also in em_mwait.


I had similar implementation on previous version, which also checked on mwait whether "interrupt as break event" matches ECX value. However, I was under the impression that it was decided that MWAIT will always be emulated as NOP to avoid misbehaving VMs that ignore CPUID (see the discussion at http://www.spinics.net/lists/kvm/msg102766.html ).

Nadav
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux