Laurent Vivier (Bull) wrote:
> >
> > Not being able to emulate is sometimes legitimate.  In the case of
> > writing to a write-protected guest page table, we simply
> > un-write-protect it and go back to the guest (which should now execute
> > the instruction natively).
> >
> > Perhaps the logic that deals with this (the call to
> > kvm_mmu_unprotect_page_virt() in emulate_instruction()) was broken by
> > your changes.
> >
>
> In fact this case is managed in the error cases of 
> emulate_instruction(). My first patch removes this management for 
> instruction decoding because I supposed it cannot generate such errors.
> So what I proposed in my last email seems to be the good solution :
>
> emulate_instruction()
> ...
>         r = x86_decode_insn(&vcpu->emulate_ctxt, &emulate_ops);
>         if (r == 0)
>                 r = x86_emulate_insn(&vcpu->emulate_ctxt, &emulate_ops);
> ...
>         if (r) {
>                 if (kvm_mmu_unprotect_page_virt(vcpu, cr2))
>                         return EMULATE_DONE;
>                 if (!vcpu->mmio_needed) {
>                         kvm_report_emulation_failure(vcpu, "mmio");
>                         return EMULATE_FAIL;
>                 }
>                 return EMULATE_DO_MMIO;
>         }
> ...
>

Yes.  But pushing the kvm_mmu_unprotect_page() to immediately after the 
decode stage may be better.

-- 
Any sufficiently difficult bug is indistinguishable from a feature.


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to