mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-19 02:04:19 +08:00
KVM: nVMX: Check all exceptions for intercept during delivery to L2
All exceptions should be checked for intercept during delivery to L2, but we check only #PF currently. Drop nested_run_pending while we are at it since exception cannot be injected during vmentry anyway. Signed-off-by: Gleb Natapov <gleb@redhat.com> [Renamed the nested_vmx_check_exception function. - Paolo] Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
851eb6677c
commit
e011c663b9
@ -1898,16 +1898,12 @@ static void skip_emulated_instruction(struct kvm_vcpu *vcpu)
|
||||
/*
|
||||
* KVM wants to inject page-faults which it got to the guest. This function
|
||||
* checks whether in a nested guest, we need to inject them to L1 or L2.
|
||||
* This function assumes it is called with the exit reason in vmcs02 being
|
||||
* a #PF exception (this is the only case in which KVM injects a #PF when L2
|
||||
* is running).
|
||||
*/
|
||||
static int nested_pf_handled(struct kvm_vcpu *vcpu)
|
||||
static int nested_vmx_check_exception(struct kvm_vcpu *vcpu, unsigned nr)
|
||||
{
|
||||
struct vmcs12 *vmcs12 = get_vmcs12(vcpu);
|
||||
|
||||
/* TODO: also check PFEC_MATCH/MASK, not just EB.PF. */
|
||||
if (!(vmcs12->exception_bitmap & (1u << PF_VECTOR)))
|
||||
if (!(vmcs12->exception_bitmap & (1u << nr)))
|
||||
return 0;
|
||||
|
||||
nested_vmx_vmexit(vcpu);
|
||||
@ -1921,8 +1917,8 @@ static void vmx_queue_exception(struct kvm_vcpu *vcpu, unsigned nr,
|
||||
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
||||
u32 intr_info = nr | INTR_INFO_VALID_MASK;
|
||||
|
||||
if (!reinject && nr == PF_VECTOR && is_guest_mode(vcpu) &&
|
||||
!vmx->nested.nested_run_pending && nested_pf_handled(vcpu))
|
||||
if (!reinject && is_guest_mode(vcpu) &&
|
||||
nested_vmx_check_exception(vcpu, nr))
|
||||
return;
|
||||
|
||||
if (has_error_code) {
|
||||
|
Loading…
Reference in New Issue
Block a user