Loading arch/x86/kvm/x86.c +13 −7 Original line number Diff line number Diff line Loading @@ -181,16 +181,22 @@ void kvm_inject_page_fault(struct kvm_vcpu *vcpu, unsigned long addr, ++vcpu->stat.pf_guest; if (vcpu->arch.exception.pending) { if (vcpu->arch.exception.nr == PF_VECTOR) { printk(KERN_DEBUG "kvm: inject_page_fault:" " double fault 0x%lx\n", addr); vcpu->arch.exception.nr = DF_VECTOR; vcpu->arch.exception.error_code = 0; } else if (vcpu->arch.exception.nr == DF_VECTOR) { switch(vcpu->arch.exception.nr) { case DF_VECTOR: /* triple fault -> shutdown */ set_bit(KVM_REQ_TRIPLE_FAULT, &vcpu->requests); } return; case PF_VECTOR: vcpu->arch.exception.nr = DF_VECTOR; vcpu->arch.exception.error_code = 0; return; default: /* replace previous exception with a new one in a hope that instruction re-execution will regenerate lost exception */ vcpu->arch.exception.pending = false; break; } } vcpu->arch.cr2 = addr; kvm_queue_exception_e(vcpu, PF_VECTOR, error_code); Loading Loading
arch/x86/kvm/x86.c +13 −7 Original line number Diff line number Diff line Loading @@ -181,16 +181,22 @@ void kvm_inject_page_fault(struct kvm_vcpu *vcpu, unsigned long addr, ++vcpu->stat.pf_guest; if (vcpu->arch.exception.pending) { if (vcpu->arch.exception.nr == PF_VECTOR) { printk(KERN_DEBUG "kvm: inject_page_fault:" " double fault 0x%lx\n", addr); vcpu->arch.exception.nr = DF_VECTOR; vcpu->arch.exception.error_code = 0; } else if (vcpu->arch.exception.nr == DF_VECTOR) { switch(vcpu->arch.exception.nr) { case DF_VECTOR: /* triple fault -> shutdown */ set_bit(KVM_REQ_TRIPLE_FAULT, &vcpu->requests); } return; case PF_VECTOR: vcpu->arch.exception.nr = DF_VECTOR; vcpu->arch.exception.error_code = 0; return; default: /* replace previous exception with a new one in a hope that instruction re-execution will regenerate lost exception */ vcpu->arch.exception.pending = false; break; } } vcpu->arch.cr2 = addr; kvm_queue_exception_e(vcpu, PF_VECTOR, error_code); Loading