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

Commit e323369b authored by Alex Williamson's avatar Alex Williamson
Browse files

kvm-vfio: Decouple only when we match a group



Unset-KVM and decrement-assignment only when we find the group in our
list.  Otherwise we can get out of sync if the user triggers this for
groups that aren't currently on our list.

Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
Reviewed-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: default avatarEric Auger <eric.auger@redhat.com>
Tested-by: default avatarEric Auger <eric.auger@redhat.com>
Acked-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Cc: stable@vger.kernel.org
parent 811642d8
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -246,21 +246,20 @@ static int kvm_vfio_set_group(struct kvm_device *dev, long attr, u64 arg)
				continue;

			list_del(&kvg->node);
			kvm_arch_end_assignment(dev->kvm);
#ifdef CONFIG_SPAPR_TCE_IOMMU
			kvm_spapr_tce_release_vfio_group(dev->kvm,
							 kvg->vfio_group);
#endif
			kvm_vfio_group_set_kvm(kvg->vfio_group, NULL);
			kvm_vfio_group_put_external_user(kvg->vfio_group);
			kfree(kvg);
			ret = 0;
			break;
		}

		kvm_arch_end_assignment(dev->kvm);

		mutex_unlock(&kv->lock);

#ifdef CONFIG_SPAPR_TCE_IOMMU
		kvm_spapr_tce_release_vfio_group(dev->kvm, vfio_group);
#endif
		kvm_vfio_group_set_kvm(vfio_group, NULL);

		kvm_vfio_group_put_external_user(vfio_group);

		kvm_vfio_update_coherency(dev);