Commit 4b064e4f authored by Thomas Gleixner's avatar Thomas Gleixner

x86: kvm: Convert i8254/i8259 locks to atomic_spinlocks

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent a76dd8f3
...@@ -237,11 +237,11 @@ static void kvm_pit_ack_irq(struct kvm_irq_ack_notifier *kian) ...@@ -237,11 +237,11 @@ static void kvm_pit_ack_irq(struct kvm_irq_ack_notifier *kian)
{ {
struct kvm_kpit_state *ps = container_of(kian, struct kvm_kpit_state, struct kvm_kpit_state *ps = container_of(kian, struct kvm_kpit_state,
irq_ack_notifier); irq_ack_notifier);
spin_lock(&ps->inject_lock); atomic_spin_lock(&ps->inject_lock);
if (atomic_dec_return(&ps->pit_timer.pending) < 0) if (atomic_dec_return(&ps->pit_timer.pending) < 0)
atomic_inc(&ps->pit_timer.pending); atomic_inc(&ps->pit_timer.pending);
ps->irq_ack = 1; ps->irq_ack = 1;
spin_unlock(&ps->inject_lock); atomic_spin_unlock(&ps->inject_lock);
} }
void __kvm_migrate_pit_timer(struct kvm_vcpu *vcpu) void __kvm_migrate_pit_timer(struct kvm_vcpu *vcpu)
...@@ -577,7 +577,7 @@ struct kvm_pit *kvm_create_pit(struct kvm *kvm) ...@@ -577,7 +577,7 @@ struct kvm_pit *kvm_create_pit(struct kvm *kvm)
mutex_init(&pit->pit_state.lock); mutex_init(&pit->pit_state.lock);
mutex_lock(&pit->pit_state.lock); mutex_lock(&pit->pit_state.lock);
spin_lock_init(&pit->pit_state.inject_lock); atomic_spin_lock_init(&pit->pit_state.inject_lock);
/* Initialize PIO device */ /* Initialize PIO device */
pit->dev.read = pit_ioport_read; pit->dev.read = pit_ioport_read;
...@@ -669,12 +669,12 @@ void kvm_inject_pit_timer_irqs(struct kvm_vcpu *vcpu) ...@@ -669,12 +669,12 @@ void kvm_inject_pit_timer_irqs(struct kvm_vcpu *vcpu)
/* Try to inject pending interrupts when /* Try to inject pending interrupts when
* last one has been acked. * last one has been acked.
*/ */
spin_lock(&ps->inject_lock); atomic_spin_lock(&ps->inject_lock);
if (atomic_read(&ps->pit_timer.pending) && ps->irq_ack) { if (atomic_read(&ps->pit_timer.pending) && ps->irq_ack) {
ps->irq_ack = 0; ps->irq_ack = 0;
inject = 1; inject = 1;
} }
spin_unlock(&ps->inject_lock); atomic_spin_unlock(&ps->inject_lock);
if (inject) if (inject)
__inject_pit_timer_intr(kvm); __inject_pit_timer_intr(kvm);
} }
......
...@@ -26,7 +26,7 @@ struct kvm_kpit_state { ...@@ -26,7 +26,7 @@ struct kvm_kpit_state {
u32 speaker_data_on; u32 speaker_data_on;
struct mutex lock; struct mutex lock;
struct kvm_pit *pit; struct kvm_pit *pit;
spinlock_t inject_lock; atomic_spinlock_t inject_lock;
unsigned long irq_ack; unsigned long irq_ack;
struct kvm_irq_ack_notifier irq_ack_notifier; struct kvm_irq_ack_notifier irq_ack_notifier;
}; };
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
static void pic_lock(struct kvm_pic *s) static void pic_lock(struct kvm_pic *s)
__acquires(&s->lock) __acquires(&s->lock)
{ {
spin_lock(&s->lock); atomic_spin_lock(&s->lock);
} }
static void pic_unlock(struct kvm_pic *s) static void pic_unlock(struct kvm_pic *s)
...@@ -48,7 +48,7 @@ static void pic_unlock(struct kvm_pic *s) ...@@ -48,7 +48,7 @@ static void pic_unlock(struct kvm_pic *s)
s->pending_acks = 0; s->pending_acks = 0;
s->wakeup_needed = false; s->wakeup_needed = false;
spin_unlock(&s->lock); atomic_spin_unlock(&s->lock);
while (acks) { while (acks) {
kvm_notify_acked_irq(kvm, SELECT_PIC(__ffs(acks)), kvm_notify_acked_irq(kvm, SELECT_PIC(__ffs(acks)),
...@@ -522,7 +522,7 @@ struct kvm_pic *kvm_create_pic(struct kvm *kvm) ...@@ -522,7 +522,7 @@ struct kvm_pic *kvm_create_pic(struct kvm *kvm)
s = kzalloc(sizeof(struct kvm_pic), GFP_KERNEL); s = kzalloc(sizeof(struct kvm_pic), GFP_KERNEL);
if (!s) if (!s)
return NULL; return NULL;
spin_lock_init(&s->lock); atomic_spin_lock_init(&s->lock);
s->kvm = kvm; s->kvm = kvm;
s->pics[0].elcr_mask = 0xf8; s->pics[0].elcr_mask = 0xf8;
s->pics[1].elcr_mask = 0xde; s->pics[1].elcr_mask = 0xde;
......
...@@ -62,7 +62,7 @@ struct kvm_kpic_state { ...@@ -62,7 +62,7 @@ struct kvm_kpic_state {
}; };
struct kvm_pic { struct kvm_pic {
spinlock_t lock; atomic_spinlock_t lock;
bool wakeup_needed; bool wakeup_needed;
unsigned pending_acks; unsigned pending_acks;
struct kvm *kvm; struct kvm *kvm;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment