|
@@ -3373,9 +3373,12 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
|
|
if (kvm_run->immediate_exit)
|
|
|
return -EINTR;
|
|
|
|
|
|
+ vcpu_load(vcpu);
|
|
|
+
|
|
|
if (guestdbg_exit_pending(vcpu)) {
|
|
|
kvm_s390_prepare_debug_exit(vcpu);
|
|
|
- return 0;
|
|
|
+ rc = 0;
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
kvm_sigset_activate(vcpu);
|
|
@@ -3385,7 +3388,8 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
|
|
} else if (is_vcpu_stopped(vcpu)) {
|
|
|
pr_err_ratelimited("can't run stopped vcpu %d\n",
|
|
|
vcpu->vcpu_id);
|
|
|
- return -EINVAL;
|
|
|
+ rc = -EINVAL;
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
sync_regs(vcpu, kvm_run);
|
|
@@ -3415,6 +3419,8 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
|
|
kvm_sigset_deactivate(vcpu);
|
|
|
|
|
|
vcpu->stat.exit_userspace++;
|
|
|
+out:
|
|
|
+ vcpu_put(vcpu);
|
|
|
return rc;
|
|
|
}
|
|
|
|