From f76e724c19d529a0203397d30d276c2d0b2304c1 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Thu, 9 Apr 2009 16:38:14 +0200 Subject: [PATCH] --- yaml --- r: 144007 b: refs/heads/master c: d24d2c1cc4156102f9df9cd0425d58cabf955519 h: refs/heads/master i: 144005: b5ed3df31ae1774e3e0953ab28225907d9fef865 144003: c7eb8ee54834317b88960b8cdbc78b43e4443a66 143999: 0dea0a9daf82894aa524809e37e90e1b7e6b8ff8 v: v3 --- [refs] | 2 +- trunk/arch/ia64/kvm/kvm-ia64.c | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index c211de566fb2..6405b578c636 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 99894a799f09cf9e28296bb16e75bd5830fd2c4e +refs/heads/master: d24d2c1cc4156102f9df9cd0425d58cabf955519 diff --git a/trunk/arch/ia64/kvm/kvm-ia64.c b/trunk/arch/ia64/kvm/kvm-ia64.c index 28af6a731bb8..d20a5db4c4dd 100644 --- a/trunk/arch/ia64/kvm/kvm-ia64.c +++ b/trunk/arch/ia64/kvm/kvm-ia64.c @@ -610,20 +610,22 @@ static int __vcpu_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) int r; again: - preempt_disable(); - local_irq_disable(); - if (signal_pending(current)) { - local_irq_enable(); - preempt_enable(); r = -EINTR; kvm_run->exit_reason = KVM_EXIT_INTR; goto out; } + /* + * down_read() may sleep and return with interrupts enabled + */ + down_read(&vcpu->kvm->slots_lock); + + preempt_disable(); + local_irq_disable(); + vcpu->guest_mode = 1; kvm_guest_enter(); - down_read(&vcpu->kvm->slots_lock); r = vti_vcpu_run(vcpu, kvm_run); if (r < 0) { local_irq_enable();