Skip to content

Commit

Permalink
kvm-vfio: Decouple only when we match a group
Browse files Browse the repository at this point in the history
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: Alex Williamson <alex.williamson@redhat.com>
Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Tested-by: Eric Auger <eric.auger@redhat.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Cc: stable@vger.kernel.org
  • Loading branch information
awilliam committed Jun 28, 2017
1 parent 811642d commit e323369
Showing 1 changed file with 6 additions and 7 deletions.
13 changes: 6 additions & 7 deletions virt/kvm/vfio.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit e323369

Please sign in to comment.