Lines Matching refs:vfio_group
29 struct vfio_group *vfio_group; member
38 static struct vfio_group *kvm_vfio_group_get_external_user(struct file *filep) in kvm_vfio_group_get_external_user()
40 struct vfio_group *vfio_group; in kvm_vfio_group_get_external_user() local
41 struct vfio_group *(*fn)(struct file *); in kvm_vfio_group_get_external_user()
47 vfio_group = fn(filep); in kvm_vfio_group_get_external_user()
51 return vfio_group; in kvm_vfio_group_get_external_user()
54 static bool kvm_vfio_external_group_match_file(struct vfio_group *group, in kvm_vfio_external_group_match_file()
57 bool ret, (*fn)(struct vfio_group *, struct file *); in kvm_vfio_external_group_match_file()
70 static void kvm_vfio_group_put_external_user(struct vfio_group *vfio_group) in kvm_vfio_group_put_external_user() argument
72 void (*fn)(struct vfio_group *); in kvm_vfio_group_put_external_user()
78 fn(vfio_group); in kvm_vfio_group_put_external_user()
83 static void kvm_vfio_group_set_kvm(struct vfio_group *group, struct kvm *kvm) in kvm_vfio_group_set_kvm()
85 void (*fn)(struct vfio_group *, struct kvm *); in kvm_vfio_group_set_kvm()
96 static bool kvm_vfio_group_is_coherent(struct vfio_group *vfio_group) in kvm_vfio_group_is_coherent() argument
98 long (*fn)(struct vfio_group *, unsigned long); in kvm_vfio_group_is_coherent()
105 ret = fn(vfio_group, VFIO_DMA_CC_IOMMU); in kvm_vfio_group_is_coherent()
113 static int kvm_vfio_external_user_iommu_id(struct vfio_group *vfio_group) in kvm_vfio_external_user_iommu_id() argument
115 int (*fn)(struct vfio_group *); in kvm_vfio_external_user_iommu_id()
122 ret = fn(vfio_group); in kvm_vfio_external_user_iommu_id()
130 struct vfio_group *group) in kvm_vfio_group_get_iommu_group()
141 struct vfio_group *vfio_group) in kvm_spapr_tce_release_vfio_group() argument
143 struct iommu_group *grp = kvm_vfio_group_get_iommu_group(vfio_group); in kvm_spapr_tce_release_vfio_group()
169 if (!kvm_vfio_group_is_coherent(kvg->vfio_group)) { in kvm_vfio_update_coherency()
190 struct vfio_group *vfio_group; in kvm_vfio_set_group() local
206 vfio_group = kvm_vfio_group_get_external_user(f.file); in kvm_vfio_set_group()
209 if (IS_ERR(vfio_group)) in kvm_vfio_set_group()
210 return PTR_ERR(vfio_group); in kvm_vfio_set_group()
215 if (kvg->vfio_group == vfio_group) { in kvm_vfio_set_group()
217 kvm_vfio_group_put_external_user(vfio_group); in kvm_vfio_set_group()
225 kvm_vfio_group_put_external_user(vfio_group); in kvm_vfio_set_group()
230 kvg->vfio_group = vfio_group; in kvm_vfio_set_group()
236 kvm_vfio_group_set_kvm(vfio_group, dev->kvm); in kvm_vfio_set_group()
255 if (!kvm_vfio_external_group_match_file(kvg->vfio_group, in kvm_vfio_set_group()
263 kvg->vfio_group); in kvm_vfio_set_group()
265 kvm_vfio_group_set_kvm(kvg->vfio_group, NULL); in kvm_vfio_set_group()
266 kvm_vfio_group_put_external_user(kvg->vfio_group); in kvm_vfio_set_group()
284 struct vfio_group *vfio_group; in kvm_vfio_set_group() local
297 vfio_group = kvm_vfio_group_get_external_user(f.file); in kvm_vfio_set_group()
300 if (IS_ERR(vfio_group)) in kvm_vfio_set_group()
301 return PTR_ERR(vfio_group); in kvm_vfio_set_group()
303 grp = kvm_vfio_group_get_iommu_group(vfio_group); in kvm_vfio_set_group()
305 kvm_vfio_group_put_external_user(vfio_group); in kvm_vfio_set_group()
314 if (kvg->vfio_group != vfio_group) in kvm_vfio_set_group()
325 kvm_vfio_group_put_external_user(vfio_group); in kvm_vfio_set_group()
373 kvm_spapr_tce_release_vfio_group(dev->kvm, kvg->vfio_group); in kvm_vfio_destroy()
375 kvm_vfio_group_set_kvm(kvg->vfio_group, NULL); in kvm_vfio_destroy()
376 kvm_vfio_group_put_external_user(kvg->vfio_group); in kvm_vfio_destroy()