summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan H. Schönherr <jschoenh@amazon.de>2017-09-06 01:27:19 +0300
committerRadim Krčmář <rkrcmar@redhat.com>2017-09-13 17:40:23 +0300
commita05950009f50ca971a1d616655d01628177bd2e3 (patch)
tree011af08d77e91bafc4f933ddc7a56ae730504fe7
parent49a8afca386ee1775519a4aa80f8e121bd227dd4 (diff)
downloadlinux-a05950009f50ca971a1d616655d01628177bd2e3.tar.xz
KVM: x86: Fix handling of pending signal on uninitialized AP
KVM API says that KVM_RUN will return with -EINTR when a signal is pending. However, if a vCPU is in KVM_MP_STATE_UNINITIALIZED, then the return value is unconditionally -EAGAIN. Copy over some code from vcpu_run(), so that the case of a pending signal results in the expected return value. Signed-off-by: Jan H. Schönherr <jschoenh@amazon.de> Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
-rw-r--r--arch/x86/kvm/x86.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 6069af86da3b..b27f7f0020e3 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -7235,6 +7235,11 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
kvm_apic_accept_events(vcpu);
kvm_clear_request(KVM_REQ_UNHALT, vcpu);
r = -EAGAIN;
+ if (signal_pending(current)) {
+ r = -EINTR;
+ vcpu->run->exit_reason = KVM_EXIT_INTR;
+ ++vcpu->stat.signal_exits;
+ }
goto out;
}