diff options
author | Jan H. Schönherr <jschoenh@amazon.de> | 2017-09-06 01:27:19 +0300 |
---|---|---|
committer | Radim Krčmář <rkrcmar@redhat.com> | 2017-09-13 17:40:23 +0300 |
commit | a05950009f50ca971a1d616655d01628177bd2e3 (patch) | |
tree | 011af08d77e91bafc4f933ddc7a56ae730504fe7 | |
parent | 49a8afca386ee1775519a4aa80f8e121bd227dd4 (diff) | |
download | linux-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.c | 5 |
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; } |