Commit 49f520b9 authored by David Hildenbrand's avatar David Hildenbrand Committed by Radim Krčmář

KVM: x86: push usage of slots_lock down

Let's just move it to the place where it is actually needed.
Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
Signed-off-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
parent ba7454e1
...@@ -660,9 +660,11 @@ void kvm_pic_destroy(struct kvm *kvm) ...@@ -660,9 +660,11 @@ void kvm_pic_destroy(struct kvm *kvm)
if (!vpic) if (!vpic)
return; return;
mutex_lock(&kvm->slots_lock);
kvm_io_bus_unregister_dev(vpic->kvm, KVM_PIO_BUS, &vpic->dev_master); kvm_io_bus_unregister_dev(vpic->kvm, KVM_PIO_BUS, &vpic->dev_master);
kvm_io_bus_unregister_dev(vpic->kvm, KVM_PIO_BUS, &vpic->dev_slave); kvm_io_bus_unregister_dev(vpic->kvm, KVM_PIO_BUS, &vpic->dev_slave);
kvm_io_bus_unregister_dev(vpic->kvm, KVM_PIO_BUS, &vpic->dev_eclr); kvm_io_bus_unregister_dev(vpic->kvm, KVM_PIO_BUS, &vpic->dev_eclr);
mutex_unlock(&kvm->slots_lock);
kvm->arch.vpic = NULL; kvm->arch.vpic = NULL;
kfree(vpic); kfree(vpic);
......
...@@ -637,7 +637,9 @@ void kvm_ioapic_destroy(struct kvm *kvm) ...@@ -637,7 +637,9 @@ void kvm_ioapic_destroy(struct kvm *kvm)
return; return;
cancel_delayed_work_sync(&ioapic->eoi_inject); cancel_delayed_work_sync(&ioapic->eoi_inject);
mutex_lock(&kvm->slots_lock);
kvm_io_bus_unregister_dev(kvm, KVM_MMIO_BUS, &ioapic->dev); kvm_io_bus_unregister_dev(kvm, KVM_MMIO_BUS, &ioapic->dev);
mutex_unlock(&kvm->slots_lock);
kvm->arch.vioapic = NULL; kvm->arch.vioapic = NULL;
kfree(ioapic); kfree(ioapic);
} }
......
...@@ -4015,9 +4015,7 @@ long kvm_arch_vm_ioctl(struct file *filp, ...@@ -4015,9 +4015,7 @@ long kvm_arch_vm_ioctl(struct file *filp,
r = kvm_ioapic_init(kvm); r = kvm_ioapic_init(kvm);
if (r) { if (r) {
mutex_lock(&kvm->slots_lock);
kvm_pic_destroy(kvm); kvm_pic_destroy(kvm);
mutex_unlock(&kvm->slots_lock);
goto create_irqchip_unlock; goto create_irqchip_unlock;
} }
...@@ -4027,10 +4025,8 @@ long kvm_arch_vm_ioctl(struct file *filp, ...@@ -4027,10 +4025,8 @@ long kvm_arch_vm_ioctl(struct file *filp,
kvm->arch.irqchip_mode = KVM_IRQCHIP_NONE; kvm->arch.irqchip_mode = KVM_IRQCHIP_NONE;
/* Pairs with smp_rmb() when reading irqchip_mode */ /* Pairs with smp_rmb() when reading irqchip_mode */
smp_wmb(); smp_wmb();
mutex_lock(&kvm->slots_lock);
kvm_ioapic_destroy(kvm); kvm_ioapic_destroy(kvm);
kvm_pic_destroy(kvm); kvm_pic_destroy(kvm);
mutex_unlock(&kvm->slots_lock);
goto create_irqchip_unlock; goto create_irqchip_unlock;
} }
/* Write kvm->irq_routing before enabling irqchip_in_kernel. */ /* Write kvm->irq_routing before enabling irqchip_in_kernel. */
......
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