mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
LoongArch: KVM: Add missing slots_lock for device register/unregister
kvm_io_bus_register_dev() and kvm_io_bus_unregister_dev() should be called under kvm->slots_lock. The unregister calls in ipi.c, eiointc.c and pch_pic.c were also missing this protection. Add it to match the register side. Cc: stable@vger.kernel.org Reviewed-by: Bibo Mao <maobibo@loongson.cn> Signed-off-by: Zeng Chi <zengchi@kylinos.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
This commit is contained in:
parent
3474037904
commit
aeded601d6
|
|
@ -645,10 +645,14 @@ static int kvm_eiointc_create(struct kvm_device *dev, u32 type)
|
|||
|
||||
device = &s->device_vext;
|
||||
kvm_iodevice_init(device, &kvm_eiointc_virt_ops);
|
||||
mutex_lock(&kvm->slots_lock);
|
||||
ret = kvm_io_bus_register_dev(kvm, KVM_IOCSR_BUS,
|
||||
EIOINTC_VIRT_BASE, EIOINTC_VIRT_SIZE, device);
|
||||
mutex_unlock(&kvm->slots_lock);
|
||||
if (ret < 0) {
|
||||
mutex_lock(&kvm->slots_lock);
|
||||
kvm_io_bus_unregister_dev(kvm, KVM_IOCSR_BUS, &s->device);
|
||||
mutex_unlock(&kvm->slots_lock);
|
||||
kfree(s);
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -667,8 +671,10 @@ static void kvm_eiointc_destroy(struct kvm_device *dev)
|
|||
|
||||
kvm = dev->kvm;
|
||||
eiointc = kvm->arch.eiointc;
|
||||
mutex_lock(&kvm->slots_lock);
|
||||
kvm_io_bus_unregister_dev(kvm, KVM_IOCSR_BUS, &eiointc->device);
|
||||
kvm_io_bus_unregister_dev(kvm, KVM_IOCSR_BUS, &eiointc->device_vext);
|
||||
mutex_unlock(&kvm->slots_lock);
|
||||
kfree(eiointc);
|
||||
kfree(dev);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -447,7 +447,9 @@ static void kvm_ipi_destroy(struct kvm_device *dev)
|
|||
|
||||
kvm = dev->kvm;
|
||||
ipi = kvm->arch.ipi;
|
||||
mutex_lock(&kvm->slots_lock);
|
||||
kvm_io_bus_unregister_dev(kvm, KVM_IOCSR_BUS, &ipi->device);
|
||||
mutex_unlock(&kvm->slots_lock);
|
||||
kfree(ipi);
|
||||
kfree(dev);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -481,7 +481,9 @@ static void kvm_pch_pic_destroy(struct kvm_device *dev)
|
|||
kvm = dev->kvm;
|
||||
s = kvm->arch.pch_pic;
|
||||
/* unregister pch pic device and free it's memory */
|
||||
mutex_lock(&kvm->slots_lock);
|
||||
kvm_io_bus_unregister_dev(kvm, KVM_MMIO_BUS, &s->device);
|
||||
mutex_unlock(&kvm->slots_lock);
|
||||
kfree(s);
|
||||
kfree(dev);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user