|
@@ -673,16 +673,16 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
|
|
|
|
|
vcpu_load(vcpu);
|
|
|
|
|
|
+ if (vcpu->sigset_active)
|
|
|
+ sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
|
|
|
+
|
|
|
if (unlikely(vcpu->arch.mp_state == KVM_MP_STATE_UNINITIALIZED)) {
|
|
|
kvm_vcpu_block(vcpu);
|
|
|
clear_bit(KVM_REQ_UNHALT, &vcpu->requests);
|
|
|
- vcpu_put(vcpu);
|
|
|
- return -EAGAIN;
|
|
|
+ r = -EAGAIN;
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
- if (vcpu->sigset_active)
|
|
|
- sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
|
|
|
-
|
|
|
if (vcpu->mmio_needed) {
|
|
|
memcpy(vcpu->mmio_data, kvm_run->mmio.data, 8);
|
|
|
kvm_set_mmio_data(vcpu);
|
|
@@ -690,7 +690,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
|
|
vcpu->mmio_needed = 0;
|
|
|
}
|
|
|
r = __vcpu_run(vcpu, kvm_run);
|
|
|
-
|
|
|
+out:
|
|
|
if (vcpu->sigset_active)
|
|
|
sigprocmask(SIG_SETMASK, &sigsaved, NULL);
|
|
|
|