On Mon, Sep 06, 2010 at 05:55:58PM +0200, Joerg Roedel wrote: > KVM currently ignores fetch faults in the instruction > emulator. With nested-npt we could have such faults. This > patch adds the code to handle these. > > Signed-off-by: Joerg Roedel <joerg.roedel@xxxxxxx> > --- > arch/x86/kvm/emulate.c | 3 +++ > arch/x86/kvm/x86.c | 4 ++++ > 2 files changed, 7 insertions(+), 0 deletions(-) > > diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c > index 2b08b78..aead72e 100644 > --- a/arch/x86/kvm/emulate.c > +++ b/arch/x86/kvm/emulate.c > @@ -1198,6 +1198,9 @@ static int emulate_popf(struct x86_emulate_ctxt *ctxt, > *(unsigned long *)dest = > (ctxt->eflags & ~change_mask) | (val & change_mask); > > + if (rc == X86EMUL_PROPAGATE_FAULT) > + emulate_pf(ctxt); > + > return rc; > } > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 65b00f0..ca69dcc 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -4237,6 +4237,9 @@ int emulate_instruction(struct kvm_vcpu *vcpu, > vcpu->arch.emulate_ctxt.perm_ok = false; > > r = x86_decode_insn(&vcpu->arch.emulate_ctxt); > + if (r == X86EMUL_PROPAGATE_FAULT) > + goto done; > + x86_decode_insn returns -1 / 0 ? > trace_kvm_emulate_insn_start(vcpu); > > /* Only allow emulation of specific instructions on #UD > @@ -4295,6 +4298,7 @@ restart: > return handle_emulation_failure(vcpu); > } > > +done: > if (vcpu->arch.emulate_ctxt.exception >= 0) { > inject_emulated_exception(vcpu); > r = EMULATE_DONE; > -- > 1.7.0.4 > > > -- > 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 -- 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