aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/kvm/kvm-ia64.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64/kvm/kvm-ia64.c')
-rw-r--r--arch/ia64/kvm/kvm-ia64.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c
index 28af6a731bb8..d20a5db4c4dd 100644
--- a/arch/ia64/kvm/kvm-ia64.c
+++ b/arch/ia64/kvm/kvm-ia64.c
@@ -610,20 +610,22 @@ static int __vcpu_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
610 int r; 610 int r;
611 611
612again: 612again:
613 preempt_disable();
614 local_irq_disable();
615
616 if (signal_pending(current)) { 613 if (signal_pending(current)) {
617 local_irq_enable();
618 preempt_enable();
619 r = -EINTR; 614 r = -EINTR;
620 kvm_run->exit_reason = KVM_EXIT_INTR; 615 kvm_run->exit_reason = KVM_EXIT_INTR;
621 goto out; 616 goto out;
622 } 617 }
623 618
619 /*
620 * down_read() may sleep and return with interrupts enabled
621 */
622 down_read(&vcpu->kvm->slots_lock);
623
624 preempt_disable();
625 local_irq_disable();
626
624 vcpu->guest_mode = 1; 627 vcpu->guest_mode = 1;
625 kvm_guest_enter(); 628 kvm_guest_enter();
626 down_read(&vcpu->kvm->slots_lock);
627 r = vti_vcpu_run(vcpu, kvm_run); 629 r = vti_vcpu_run(vcpu, kvm_run);
628 if (r < 0) { 630 if (r < 0) {
629 local_irq_enable(); 631 local_irq_enable();