diff options
Diffstat (limited to 'arch/ia64/kvm/kvm-ia64.c')
-rw-r--r-- | arch/ia64/kvm/kvm-ia64.c | 14 |
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 | ||
612 | again: | 612 | again: |
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(); |