[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <53A1D921.2090305@gmail.com>
Date: Wed, 18 Jun 2014 21:23:29 +0300
From: Nadav Amit <nadav.amit@...il.com>
To: Eric Northup <digitaleric@...gle.com>,
Nadav Amit <namit@...technion.ac.il>
CC: Paolo Bonzini <pbonzini@...hat.com>, gleb@...nel.org,
Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>,
"H. Peter Anvin" <hpa@...or.com>,
the arch/x86 maintainers <x86@...nel.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
KVM <kvm@...r.kernel.org>, joro@...tes.org
Subject: Re: [PATCH 3/3] KVM: x86: correct mwait and monitor emulation
On 6/18/14, 8:59 PM, Eric Northup wrote:
> On Wed, Jun 18, 2014 at 7:19 AM, Nadav Amit <namit@...technion.ac.il> 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@...technion.ac.il>
>> ---
>> 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 linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists