Commit a5f6909a authored by Jim Mattson's avatar Jim Mattson Committed by Paolo Bonzini

KVM: x86: Add a return code to inject_pending_event

No functional change intended. At present, 'r' will always be -EBUSY
on a control transfer to the 'out' label.
Signed-off-by: default avatarJim Mattson <jmattson@google.com>
Message-Id: <20210604172611.281819-5-jmattson@google.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 650293c3
...@@ -8640,7 +8640,7 @@ static void kvm_inject_exception(struct kvm_vcpu *vcpu) ...@@ -8640,7 +8640,7 @@ static void kvm_inject_exception(struct kvm_vcpu *vcpu)
static_call(kvm_x86_queue_exception)(vcpu); static_call(kvm_x86_queue_exception)(vcpu);
} }
static void inject_pending_event(struct kvm_vcpu *vcpu, bool *req_immediate_exit) static int inject_pending_event(struct kvm_vcpu *vcpu, bool *req_immediate_exit)
{ {
int r; int r;
bool can_inject = true; bool can_inject = true;
...@@ -8687,7 +8687,7 @@ static void inject_pending_event(struct kvm_vcpu *vcpu, bool *req_immediate_exit ...@@ -8687,7 +8687,7 @@ static void inject_pending_event(struct kvm_vcpu *vcpu, bool *req_immediate_exit
if (is_guest_mode(vcpu)) { if (is_guest_mode(vcpu)) {
r = kvm_check_nested_events(vcpu); r = kvm_check_nested_events(vcpu);
if (r < 0) if (r < 0)
goto busy; goto out;
} }
/* try to inject new event if pending */ /* try to inject new event if pending */
...@@ -8729,7 +8729,7 @@ static void inject_pending_event(struct kvm_vcpu *vcpu, bool *req_immediate_exit ...@@ -8729,7 +8729,7 @@ static void inject_pending_event(struct kvm_vcpu *vcpu, bool *req_immediate_exit
if (vcpu->arch.smi_pending) { if (vcpu->arch.smi_pending) {
r = can_inject ? static_call(kvm_x86_smi_allowed)(vcpu, true) : -EBUSY; r = can_inject ? static_call(kvm_x86_smi_allowed)(vcpu, true) : -EBUSY;
if (r < 0) if (r < 0)
goto busy; goto out;
if (r) { if (r) {
vcpu->arch.smi_pending = false; vcpu->arch.smi_pending = false;
++vcpu->arch.smi_count; ++vcpu->arch.smi_count;
...@@ -8742,7 +8742,7 @@ static void inject_pending_event(struct kvm_vcpu *vcpu, bool *req_immediate_exit ...@@ -8742,7 +8742,7 @@ static void inject_pending_event(struct kvm_vcpu *vcpu, bool *req_immediate_exit
if (vcpu->arch.nmi_pending) { if (vcpu->arch.nmi_pending) {
r = can_inject ? static_call(kvm_x86_nmi_allowed)(vcpu, true) : -EBUSY; r = can_inject ? static_call(kvm_x86_nmi_allowed)(vcpu, true) : -EBUSY;
if (r < 0) if (r < 0)
goto busy; goto out;
if (r) { if (r) {
--vcpu->arch.nmi_pending; --vcpu->arch.nmi_pending;
vcpu->arch.nmi_injected = true; vcpu->arch.nmi_injected = true;
...@@ -8757,7 +8757,7 @@ static void inject_pending_event(struct kvm_vcpu *vcpu, bool *req_immediate_exit ...@@ -8757,7 +8757,7 @@ static void inject_pending_event(struct kvm_vcpu *vcpu, bool *req_immediate_exit
if (kvm_cpu_has_injectable_intr(vcpu)) { if (kvm_cpu_has_injectable_intr(vcpu)) {
r = can_inject ? static_call(kvm_x86_interrupt_allowed)(vcpu, true) : -EBUSY; r = can_inject ? static_call(kvm_x86_interrupt_allowed)(vcpu, true) : -EBUSY;
if (r < 0) if (r < 0)
goto busy; goto out;
if (r) { if (r) {
kvm_queue_interrupt(vcpu, kvm_cpu_get_interrupt(vcpu), false); kvm_queue_interrupt(vcpu, kvm_cpu_get_interrupt(vcpu), false);
static_call(kvm_x86_set_irq)(vcpu); static_call(kvm_x86_set_irq)(vcpu);
...@@ -8773,11 +8773,14 @@ static void inject_pending_event(struct kvm_vcpu *vcpu, bool *req_immediate_exit ...@@ -8773,11 +8773,14 @@ static void inject_pending_event(struct kvm_vcpu *vcpu, bool *req_immediate_exit
*req_immediate_exit = true; *req_immediate_exit = true;
WARN_ON(vcpu->arch.exception.pending); WARN_ON(vcpu->arch.exception.pending);
return; return 0;
busy: out:
if (r == -EBUSY) {
*req_immediate_exit = true; *req_immediate_exit = true;
return; r = 0;
}
return r;
} }
static void process_nmi(struct kvm_vcpu *vcpu) static void process_nmi(struct kvm_vcpu *vcpu)
...@@ -9338,7 +9341,11 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) ...@@ -9338,7 +9341,11 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
goto out; goto out;
} }
inject_pending_event(vcpu, &req_immediate_exit); r = inject_pending_event(vcpu, &req_immediate_exit);
if (r < 0) {
r = 0;
goto out;
}
if (req_int_win) if (req_int_win)
static_call(kvm_x86_enable_irq_window)(vcpu); static_call(kvm_x86_enable_irq_window)(vcpu);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment