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 -- 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