Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3eb39205 authored by Peter Xu's avatar Peter Xu Committed by Greg Kroah-Hartman
Browse files

KVM: x86: clear bus pointer when destroyed



commit df630b8c1e851b5e265dc2ca9c87222e342c093b upstream.

When releasing the bus, let's clear the bus pointers to mark it out. If
any further device unregister happens on this bus, we know that we're
done if we found the bus being released already.

Signed-off-by: default avatarPeter Xu <peterx@redhat.com>
Signed-off-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent eac3ab3e
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -654,8 +654,10 @@ static void kvm_destroy_vm(struct kvm *kvm)
	list_del(&kvm->vm_list);
	spin_unlock(&kvm_lock);
	kvm_free_irq_routing(kvm);
	for (i = 0; i < KVM_NR_BUSES; i++)
	for (i = 0; i < KVM_NR_BUSES; i++) {
		kvm_io_bus_destroy(kvm->buses[i]);
		kvm->buses[i] = NULL;
	}
	kvm_coalesced_mmio_free(kvm);
#if defined(CONFIG_MMU_NOTIFIER) && defined(KVM_ARCH_WANT_MMU_NOTIFIER)
	mmu_notifier_unregister(&kvm->mmu_notifier, kvm->mm);
@@ -3376,6 +3378,14 @@ int kvm_io_bus_unregister_dev(struct kvm *kvm, enum kvm_bus bus_idx,
	struct kvm_io_bus *new_bus, *bus;

	bus = kvm->buses[bus_idx];

	/*
	 * It's possible the bus being released before hand. If so,
	 * we're done here.
	 */
	if (!bus)
		return 0;

	r = -ENOENT;
	for (i = 0; i < bus->dev_count; i++)
		if (bus->range[i].dev == dev) {