diff options
| author | Steve French <sfrench@us.ibm.com> | 2010-05-14 11:15:28 -0400 |
|---|---|---|
| committer | Steve French <sfrench@us.ibm.com> | 2010-05-14 11:15:28 -0400 |
| commit | 5f65f150fbc580ccfd57e5528e1fc905aaaef65c (patch) | |
| tree | 257527e3b5f8f04c39451f17481004d9e8d28350 /virt/kvm/ioapic.c | |
| parent | baa456331738b4e76a92318b62b354377a30ad80 (diff) | |
| parent | 6a251b0ab67989f468f4cb65179e0cf40cf8c295 (diff) | |
Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'virt/kvm/ioapic.c')
| -rw-r--r-- | virt/kvm/ioapic.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c index 03a5eb22da2b..7c79c1d76d0c 100644 --- a/virt/kvm/ioapic.c +++ b/virt/kvm/ioapic.c | |||
| @@ -197,7 +197,7 @@ int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int level) | |||
| 197 | union kvm_ioapic_redirect_entry entry; | 197 | union kvm_ioapic_redirect_entry entry; |
| 198 | int ret = 1; | 198 | int ret = 1; |
| 199 | 199 | ||
| 200 | mutex_lock(&ioapic->lock); | 200 | spin_lock(&ioapic->lock); |
| 201 | if (irq >= 0 && irq < IOAPIC_NUM_PINS) { | 201 | if (irq >= 0 && irq < IOAPIC_NUM_PINS) { |
| 202 | entry = ioapic->redirtbl[irq]; | 202 | entry = ioapic->redirtbl[irq]; |
| 203 | level ^= entry.fields.polarity; | 203 | level ^= entry.fields.polarity; |
| @@ -214,7 +214,7 @@ int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int level) | |||
| 214 | } | 214 | } |
| 215 | trace_kvm_ioapic_set_irq(entry.bits, irq, ret == 0); | 215 | trace_kvm_ioapic_set_irq(entry.bits, irq, ret == 0); |
| 216 | } | 216 | } |
| 217 | mutex_unlock(&ioapic->lock); | 217 | spin_unlock(&ioapic->lock); |
| 218 | 218 | ||
| 219 | return ret; | 219 | return ret; |
| 220 | } | 220 | } |
| @@ -238,9 +238,9 @@ static void __kvm_ioapic_update_eoi(struct kvm_ioapic *ioapic, int vector, | |||
| 238 | * is dropped it will be put into irr and will be delivered | 238 | * is dropped it will be put into irr and will be delivered |
| 239 | * after ack notifier returns. | 239 | * after ack notifier returns. |
| 240 | */ | 240 | */ |
| 241 | mutex_unlock(&ioapic->lock); | 241 | spin_unlock(&ioapic->lock); |
| 242 | kvm_notify_acked_irq(ioapic->kvm, KVM_IRQCHIP_IOAPIC, i); | 242 | kvm_notify_acked_irq(ioapic->kvm, KVM_IRQCHIP_IOAPIC, i); |
| 243 | mutex_lock(&ioapic->lock); | 243 | spin_lock(&ioapic->lock); |
| 244 | 244 | ||
| 245 | if (trigger_mode != IOAPIC_LEVEL_TRIG) | 245 | if (trigger_mode != IOAPIC_LEVEL_TRIG) |
| 246 | continue; | 246 | continue; |
| @@ -259,9 +259,9 @@ void kvm_ioapic_update_eoi(struct kvm *kvm, int vector, int trigger_mode) | |||
| 259 | smp_rmb(); | 259 | smp_rmb(); |
| 260 | if (!test_bit(vector, ioapic->handled_vectors)) | 260 | if (!test_bit(vector, ioapic->handled_vectors)) |
| 261 | return; | 261 | return; |
| 262 | mutex_lock(&ioapic->lock); | 262 | spin_lock(&ioapic->lock); |
| 263 | __kvm_ioapic_update_eoi(ioapic, vector, trigger_mode); | 263 | __kvm_ioapic_update_eoi(ioapic, vector, trigger_mode); |
| 264 | mutex_unlock(&ioapic->lock); | 264 | spin_unlock(&ioapic->lock); |
| 265 | } | 265 | } |
| 266 | 266 | ||
| 267 | static inline struct kvm_ioapic *to_ioapic(struct kvm_io_device *dev) | 267 | static inline struct kvm_ioapic *to_ioapic(struct kvm_io_device *dev) |
| @@ -287,7 +287,7 @@ static int ioapic_mmio_read(struct kvm_io_device *this, gpa_t addr, int len, | |||
| 287 | ASSERT(!(addr & 0xf)); /* check alignment */ | 287 | ASSERT(!(addr & 0xf)); /* check alignment */ |
| 288 | 288 | ||
| 289 | addr &= 0xff; | 289 | addr &= 0xff; |
| 290 | mutex_lock(&ioapic->lock); | 290 | spin_lock(&ioapic->lock); |
| 291 | switch (addr) { | 291 | switch (addr) { |
| 292 | case IOAPIC_REG_SELECT: | 292 | case IOAPIC_REG_SELECT: |
| 293 | result = ioapic->ioregsel; | 293 | result = ioapic->ioregsel; |
| @@ -301,7 +301,7 @@ static int ioapic_mmio_read(struct kvm_io_device *this, gpa_t addr, int len, | |||
| 301 | result = 0; | 301 | result = 0; |
| 302 | break; | 302 | break; |
| 303 | } | 303 | } |
| 304 | mutex_unlock(&ioapic->lock); | 304 | spin_unlock(&ioapic->lock); |
| 305 | 305 | ||
| 306 | switch (len) { | 306 | switch (len) { |
| 307 | case 8: | 307 | case 8: |
| @@ -338,7 +338,7 @@ static int ioapic_mmio_write(struct kvm_io_device *this, gpa_t addr, int len, | |||
| 338 | } | 338 | } |
| 339 | 339 | ||
| 340 | addr &= 0xff; | 340 | addr &= 0xff; |
| 341 | mutex_lock(&ioapic->lock); | 341 | spin_lock(&ioapic->lock); |
| 342 | switch (addr) { | 342 | switch (addr) { |
| 343 | case IOAPIC_REG_SELECT: | 343 | case IOAPIC_REG_SELECT: |
| 344 | ioapic->ioregsel = data; | 344 | ioapic->ioregsel = data; |
| @@ -356,7 +356,7 @@ static int ioapic_mmio_write(struct kvm_io_device *this, gpa_t addr, int len, | |||
| 356 | default: | 356 | default: |
| 357 | break; | 357 | break; |
| 358 | } | 358 | } |
| 359 | mutex_unlock(&ioapic->lock); | 359 | spin_unlock(&ioapic->lock); |
| 360 | return 0; | 360 | return 0; |
| 361 | } | 361 | } |
| 362 | 362 | ||
| @@ -386,7 +386,7 @@ int kvm_ioapic_init(struct kvm *kvm) | |||
| 386 | ioapic = kzalloc(sizeof(struct kvm_ioapic), GFP_KERNEL); | 386 | ioapic = kzalloc(sizeof(struct kvm_ioapic), GFP_KERNEL); |
| 387 | if (!ioapic) | 387 | if (!ioapic) |
| 388 | return -ENOMEM; | 388 | return -ENOMEM; |
| 389 | mutex_init(&ioapic->lock); | 389 | spin_lock_init(&ioapic->lock); |
| 390 | kvm->arch.vioapic = ioapic; | 390 | kvm->arch.vioapic = ioapic; |
| 391 | kvm_ioapic_reset(ioapic); | 391 | kvm_ioapic_reset(ioapic); |
| 392 | kvm_iodevice_init(&ioapic->dev, &ioapic_mmio_ops); | 392 | kvm_iodevice_init(&ioapic->dev, &ioapic_mmio_ops); |
| @@ -419,9 +419,9 @@ int kvm_get_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state) | |||
| 419 | if (!ioapic) | 419 | if (!ioapic) |
| 420 | return -EINVAL; | 420 | return -EINVAL; |
| 421 | 421 | ||
| 422 | mutex_lock(&ioapic->lock); | 422 | spin_lock(&ioapic->lock); |
| 423 | memcpy(state, ioapic, sizeof(struct kvm_ioapic_state)); | 423 | memcpy(state, ioapic, sizeof(struct kvm_ioapic_state)); |
| 424 | mutex_unlock(&ioapic->lock); | 424 | spin_unlock(&ioapic->lock); |
| 425 | return 0; | 425 | return 0; |
| 426 | } | 426 | } |
| 427 | 427 | ||
| @@ -431,9 +431,9 @@ int kvm_set_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state) | |||
| 431 | if (!ioapic) | 431 | if (!ioapic) |
| 432 | return -EINVAL; | 432 | return -EINVAL; |
| 433 | 433 | ||
| 434 | mutex_lock(&ioapic->lock); | 434 | spin_lock(&ioapic->lock); |
| 435 | memcpy(ioapic, state, sizeof(struct kvm_ioapic_state)); | 435 | memcpy(ioapic, state, sizeof(struct kvm_ioapic_state)); |
| 436 | update_handled_vectors(ioapic); | 436 | update_handled_vectors(ioapic); |
| 437 | mutex_unlock(&ioapic->lock); | 437 | spin_unlock(&ioapic->lock); |
| 438 | return 0; | 438 | return 0; |
| 439 | } | 439 | } |
