Loading arch/x86/kvm/i8259.c +2 −0 Original line number Diff line number Diff line Loading @@ -660,9 +660,11 @@ void kvm_pic_destroy(struct kvm *kvm) if (!vpic) 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_slave); kvm_io_bus_unregister_dev(vpic->kvm, KVM_PIO_BUS, &vpic->dev_eclr); mutex_unlock(&kvm->slots_lock); kvm->arch.vpic = NULL; kfree(vpic); Loading arch/x86/kvm/ioapic.c +2 −0 Original line number Diff line number Diff line Loading @@ -637,7 +637,9 @@ void kvm_ioapic_destroy(struct kvm *kvm) return; cancel_delayed_work_sync(&ioapic->eoi_inject); mutex_lock(&kvm->slots_lock); kvm_io_bus_unregister_dev(kvm, KVM_MMIO_BUS, &ioapic->dev); mutex_unlock(&kvm->slots_lock); kvm->arch.vioapic = NULL; kfree(ioapic); } Loading arch/x86/kvm/x86.c +0 −4 Original line number Diff line number Diff line Loading @@ -4015,9 +4015,7 @@ long kvm_arch_vm_ioctl(struct file *filp, r = kvm_ioapic_init(kvm); if (r) { mutex_lock(&kvm->slots_lock); kvm_pic_destroy(kvm); mutex_unlock(&kvm->slots_lock); goto create_irqchip_unlock; } Loading @@ -4027,10 +4025,8 @@ long kvm_arch_vm_ioctl(struct file *filp, kvm->arch.irqchip_mode = KVM_IRQCHIP_NONE; /* Pairs with smp_rmb() when reading irqchip_mode */ smp_wmb(); mutex_lock(&kvm->slots_lock); kvm_ioapic_destroy(kvm); kvm_pic_destroy(kvm); mutex_unlock(&kvm->slots_lock); goto create_irqchip_unlock; } /* Write kvm->irq_routing before enabling irqchip_in_kernel. */ Loading Loading
arch/x86/kvm/i8259.c +2 −0 Original line number Diff line number Diff line Loading @@ -660,9 +660,11 @@ void kvm_pic_destroy(struct kvm *kvm) if (!vpic) 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_slave); kvm_io_bus_unregister_dev(vpic->kvm, KVM_PIO_BUS, &vpic->dev_eclr); mutex_unlock(&kvm->slots_lock); kvm->arch.vpic = NULL; kfree(vpic); Loading
arch/x86/kvm/ioapic.c +2 −0 Original line number Diff line number Diff line Loading @@ -637,7 +637,9 @@ void kvm_ioapic_destroy(struct kvm *kvm) return; cancel_delayed_work_sync(&ioapic->eoi_inject); mutex_lock(&kvm->slots_lock); kvm_io_bus_unregister_dev(kvm, KVM_MMIO_BUS, &ioapic->dev); mutex_unlock(&kvm->slots_lock); kvm->arch.vioapic = NULL; kfree(ioapic); } Loading
arch/x86/kvm/x86.c +0 −4 Original line number Diff line number Diff line Loading @@ -4015,9 +4015,7 @@ long kvm_arch_vm_ioctl(struct file *filp, r = kvm_ioapic_init(kvm); if (r) { mutex_lock(&kvm->slots_lock); kvm_pic_destroy(kvm); mutex_unlock(&kvm->slots_lock); goto create_irqchip_unlock; } Loading @@ -4027,10 +4025,8 @@ long kvm_arch_vm_ioctl(struct file *filp, kvm->arch.irqchip_mode = KVM_IRQCHIP_NONE; /* Pairs with smp_rmb() when reading irqchip_mode */ smp_wmb(); mutex_lock(&kvm->slots_lock); kvm_ioapic_destroy(kvm); kvm_pic_destroy(kvm); mutex_unlock(&kvm->slots_lock); goto create_irqchip_unlock; } /* Write kvm->irq_routing before enabling irqchip_in_kernel. */ Loading