vfio: Remove vfio_external_group_match_file()
vfio_group_fops_open() ensures there is only ever one struct file open for any struct vfio_group at any time: /* Do we need multiple instances of the group open? Seems not. */ opened = atomic_cmpxchg(&group->opened, 0, 1); if (opened) { vfio_group_put(group); return -EBUSY; Therefor the struct file * can be used directly to search the list of VFIO groups that KVM keeps instead of using the vfio_external_group_match_file() callback to try to figure out if the passed in FD matches the list or not. Delete vfio_external_group_match_file(). Reviewed-by: Kevin Tian <kevin.tian@intel.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Yi Liu <yi.l.liu@intel.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Link: https://lore.kernel.org/r/4-v3-f7729924a7ea+25e33-vfio_kvm_no_group_jgg@nvidia.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
Родитель
50d63b5bbf
Коммит
c38ff5b0c3
|
@ -1685,15 +1685,6 @@ void vfio_group_put_external_user(struct vfio_group *group)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(vfio_group_put_external_user);
|
||||
|
||||
bool vfio_external_group_match_file(struct vfio_group *test_group,
|
||||
struct file *filep)
|
||||
{
|
||||
struct vfio_group *group = filep->private_data;
|
||||
|
||||
return (filep->f_op == &vfio_group_fops) && (group == test_group);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vfio_external_group_match_file);
|
||||
|
||||
/**
|
||||
* vfio_file_iommu_group - Return the struct iommu_group for the vfio group file
|
||||
* @file: VFIO group file
|
||||
|
|
|
@ -138,8 +138,6 @@ int vfio_mig_get_next_state(struct vfio_device *device,
|
|||
*/
|
||||
extern struct vfio_group *vfio_group_get_external_user(struct file *filep);
|
||||
extern void vfio_group_put_external_user(struct vfio_group *group);
|
||||
extern bool vfio_external_group_match_file(struct vfio_group *group,
|
||||
struct file *filep);
|
||||
extern struct iommu_group *vfio_file_iommu_group(struct file *file);
|
||||
extern long vfio_external_check_extension(struct vfio_group *group,
|
||||
unsigned long arg);
|
||||
|
|
|
@ -49,22 +49,6 @@ static struct vfio_group *kvm_vfio_group_get_external_user(struct file *filep)
|
|||
return vfio_group;
|
||||
}
|
||||
|
||||
static bool kvm_vfio_external_group_match_file(struct vfio_group *group,
|
||||
struct file *filep)
|
||||
{
|
||||
bool ret, (*fn)(struct vfio_group *, struct file *);
|
||||
|
||||
fn = symbol_get(vfio_external_group_match_file);
|
||||
if (!fn)
|
||||
return false;
|
||||
|
||||
ret = fn(group, filep);
|
||||
|
||||
symbol_put(vfio_external_group_match_file);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void kvm_vfio_group_put_external_user(struct vfio_group *vfio_group)
|
||||
{
|
||||
void (*fn)(struct vfio_group *);
|
||||
|
@ -239,8 +223,7 @@ static int kvm_vfio_group_del(struct kvm_device *dev, unsigned int fd)
|
|||
mutex_lock(&kv->lock);
|
||||
|
||||
list_for_each_entry(kvg, &kv->group_list, node) {
|
||||
if (!kvm_vfio_external_group_match_file(kvg->vfio_group,
|
||||
f.file))
|
||||
if (kvg->file != f.file)
|
||||
continue;
|
||||
|
||||
list_del(&kvg->node);
|
||||
|
|
Загрузка…
Ссылка в новой задаче