mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 01:22:07 +00:00
KVM: Call kvm_vcpu_kick() inside pic spinlock
d5ecfdd25 moved it out because back than it was impossible to call it inside spinlock. This restriction no longer exists. Signed-off-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
3a34a8810b
commit
956f97cf66
@ -43,11 +43,9 @@ static void pic_unlock(struct kvm_pic *s)
|
||||
{
|
||||
struct kvm *kvm = s->kvm;
|
||||
unsigned acks = s->pending_acks;
|
||||
bool wakeup = s->wakeup_needed;
|
||||
struct kvm_vcpu *vcpu;
|
||||
|
||||
s->pending_acks = 0;
|
||||
s->wakeup_needed = false;
|
||||
|
||||
spin_unlock(&s->lock);
|
||||
|
||||
@ -56,12 +54,6 @@ static void pic_unlock(struct kvm_pic *s)
|
||||
__ffs(acks));
|
||||
acks &= acks - 1;
|
||||
}
|
||||
|
||||
if (wakeup) {
|
||||
vcpu = s->kvm->bsp_vcpu;
|
||||
if (vcpu)
|
||||
kvm_vcpu_kick(vcpu);
|
||||
}
|
||||
}
|
||||
|
||||
static void pic_clear_isr(struct kvm_kpic_state *s, int irq)
|
||||
@ -527,7 +519,7 @@ static void pic_irq_request(void *opaque, int level)
|
||||
s->output = level;
|
||||
if (vcpu && level && (s->pics[0].isr_ack & (1 << irq))) {
|
||||
s->pics[0].isr_ack &= ~(1 << irq);
|
||||
s->wakeup_needed = true;
|
||||
kvm_vcpu_kick(vcpu);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,6 @@ struct kvm_kpic_state {
|
||||
|
||||
struct kvm_pic {
|
||||
spinlock_t lock;
|
||||
bool wakeup_needed;
|
||||
unsigned pending_acks;
|
||||
struct kvm *kvm;
|
||||
struct kvm_kpic_state pics[2]; /* 0 is master pic, 1 is slave pic */
|
||||
|
Loading…
Reference in New Issue
Block a user