@@ -541,8 +541,6 @@ static void kvm_multiple_exception(struc
if (!vcpu->arch.exception.pending && !vcpu->arch.exception.injected) {
queue:
- if (has_error && !is_protmode(vcpu))
- has_error = false;
if (reinject) {
/*
* On vmentry, vcpu->arch.exception.pending is only
@@ -8265,6 +8263,13 @@ static void update_cr8_intercept(struct
kvm_x86_ops.update_cr8_intercept(vcpu, tpr, max_irr);
}
+static void kvm_inject_exception(struct kvm_vcpu *vcpu)
+{
+ if (vcpu->arch.exception.error_code && !is_protmode(vcpu))
+ vcpu->arch.exception.error_code = false;
+ kvm_x86_ops.queue_exception(vcpu);
+}
+
static void inject_pending_event(struct kvm_vcpu *vcpu, bool *req_immediate_exit)
{
int r;
@@ -8273,7 +8278,7 @@ static void inject_pending_event(struct
/* try to reinject previous events if any */
if (vcpu->arch.exception.injected) {
- kvm_x86_ops.queue_exception(vcpu);
+ kvm_inject_exception(vcpu);
can_inject = false;
}
/*
@@ -8336,7 +8341,7 @@ static void inject_pending_event(struct
}
}
- kvm_x86_ops.queue_exception(vcpu);
+ kvm_inject_exception(vcpu);
can_inject = false;
}