qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 2/2] WHPX: register for unrecognized MSR exits


From: Justin Terry (VM)
Subject: Re: [Qemu-devel] [PATCH 2/2] WHPX: register for unrecognized MSR exits
Date: Mon, 18 Jun 2018 22:01:10 +0000

Hey Paolo,

Thanks for the reply.

I am certainly open for suggestions if you have any here. This was originally 
reported when running the android kernel which I believe is Linux 4.4. I agree 
that newer kernels do seem to handle #GP more gracefully than others but it 
doesn’t help down level kernels to boot.

The issue is that the Windows Hypervisor Platform will return #GP for any 
rdmsr/wrmsr that is not a virtualized MSR in the hypervisor by default. A virt 
stack (QEMU) can override this default behavior by registering for MSR exits. 
In this configuration the virt stack will receive any non-virtualized MSR exit 
and from the hypervisors perspective this is now effectively handled. I could 
certainly list each MSR individually but it seems overly prone to test-matrix 
errors. For example, each kernel that I try might succeed but a single option 
difference in another kernel might fail (which was the case here because the 
4.4 kernel is different from the 4.14+ it seems). But, I will make any change 
you see fit to handle this in the way QEMU prefers.

As FYI, this is the same logic that Hyper-V uses in its virt stack for any 
hypervisor exits that are not handled in the hypervisor itself.

-Justin

> -----Original Message-----
> From: Paolo Bonzini <address@hidden>
> Sent: Wednesday, June 13, 2018 9:28 AM
> To: Justin Terry (VM) <address@hidden>; address@hidden
> Cc: address@hidden; address@hidden
> Subject: Re: [PATCH 2/2] WHPX: register for unrecognized MSR exits
> 
> On 06/06/2018 00:15, Justin Terry (VM) wrote:
> > Some variations of Linux kernels end up accessing MSR's that the
> > Windows Hypervisor doesn't implement which causes a GP to be returned
> to the guest.
> > This fix registers QEMU for unimplemented MSR access and globally
> > returns 0 on reads and ignores writes. This behavior is allows the
> > Linux kernel to probe the MSR with a write/read/check sequence it does
> often without failing the access.
> >
> > Signed-off-by: Justin Terry (VM) <address@hidden>
> > ---
> >  target/i386/whpx-all.c | 41
> ++++++++++++++++++++++++++++++++++++++---
> >  1 file changed, 38 insertions(+), 3 deletions(-)
> 
> Hmm, KVM tries to list the MSRs that Linux (or Windows :)) use.  It can do the
> full whitelist, but it's opt-in.
> 
> Recent Linux kernels also are generally less picky about #GPs from MSRs, so I
> don't think a generic whitelist is a good idea.  If the "non-hosted" Hyper-V 
> is
> doing the same that would be fine I guess, but then there should probably
> be a comment about it in the code.
> 
> While this is discussed a bit more, I've queued patch 1.
> 
> Thanks,
> 
> Paolo

reply via email to

[Prev in Thread] Current Thread [Next in Thread]