public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* vmx real mode emulated mmio?
@ 2012-12-14 23:42 Alex Williamson
  2012-12-15  8:07 ` Gleb Natapov
  0 siblings, 1 reply; 4+ messages in thread
From: Alex Williamson @ 2012-12-14 23:42 UTC (permalink / raw)
  To: Gleb Natapov, Marcelo Tosatti; +Cc: kvm


I don't really know what I'm doing messing around with realmode
exception handling, but are we missing something like this:

--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -4332,7 +4332,8 @@ static int handle_exception(struct kvm_vcpu *vcpu)
                if (vcpu->arch.halt_request) {
                        vcpu->arch.halt_request = 0;
                        return kvm_emulate_halt(vcpu);
-               }
+               } else if (vcpu->mmio_needed)
+                       return 0;
                return 1;
        }
 

The background is that I was playing around with when the MMIO regions
of PCI assigned devices get direct mapped through KVM and start using
memory slots and I found that the boot ROM on an e1000e card that I
often use for testing causes the VM to hang when not directly mapped
through a memory slot.  This happens with both pci-assign and vfio-pci.
Debugging further, I see the kernel instruction emulator decodes this
and sets all the necessary flags and fragments for userspace to complete
the access, but since it happened in real mode, vcpu_enter_guest always
returns 1 and therefore KVM_RUN never exits to userspace and KVM gets
stuck in an infinite loop re-handling this instruction.

The above is pretty trivial and allows the ROM to work again.  Is it
correct?  What other exceptions are we missing here that should allow an
exit?  This particular access generated a GP_VECTOR exception if we want
to key on that somewhere.  Thanks,

Alex


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-12-15 16:23 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-14 23:42 vmx real mode emulated mmio? Alex Williamson
2012-12-15  8:07 ` Gleb Natapov
2012-12-15 15:54   ` Alex Williamson
2012-12-15 16:23     ` Gleb Natapov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox