Joerg Roedel wrote:
> In the current inject_page_fault path KVM only checks if there is another PF
> pending and injects a DF then. But it has to check for a pendig DF too to
> detect a shutdown condition in the VCPU. If this is not detected the VCPU goes
> to a PF -> DF -> PF loop when it should triple fault. This patch detects this
> condition and handles it with an KVM_SHUTDOWN exit to userspace. As a side
> effect it fixes the following warning when trying to reboot a SMP guest on 
> SVM:
> diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
> index 1af0ceb..01708b7 100644
> --- a/arch/x86/kvm/paging_tmpl.h
> +++ b/arch/x86/kvm/paging_tmpl.h
> @@ -366,8 +366,9 @@ static u64 *FNAME(fetch)(struct kvm_vcpu *vcpu, gva_t 
> addr,
>   *   - normal guest page fault due to the guest pte marked not present, not
>   *     writable, or not executable
>   *
> - *  Returns: 1 if we need to emulate the instruction, 0 otherwise, or
> - *           a negative value on error.
> + *  Returns: 2 if the vcpu triple faulted
> + *        1 if we need to emulate the instruction
> + *        0 otherwise, or a negative value on error.
>   */
>   

This is a little icky.  What about setting vcpu->requests bit 
KVM_REQ_TRIPLE_FAULT and checking it on the next entry?

The check is zero cost since we check vcpu->requests anyway.  We can use 
this for other situations as well (like setting cr3 to mmio space, bad 
paravirt mmio operation, etc.)

-- 
error compiling committee.c: too many arguments to function


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

Reply via email to