Lines Matching refs:container

77 	struct vfio_container		*container;  member
170 static void vfio_container_get(struct vfio_container *container) in vfio_container_get() argument
172 kref_get(&container->kref); in vfio_container_get()
177 struct vfio_container *container; in vfio_container_release() local
178 container = container_of(kref, struct vfio_container, kref); in vfio_container_release()
180 kfree(container); in vfio_container_release()
183 static void vfio_container_put(struct vfio_container *container) in vfio_container_put() argument
185 kref_put(&container->kref, vfio_container_release); in vfio_container_put()
834 static long vfio_ioctl_check_extension(struct vfio_container *container, in vfio_ioctl_check_extension() argument
840 down_read(&container->group_lock); in vfio_ioctl_check_extension()
842 driver = container->iommu_driver; in vfio_ioctl_check_extension()
869 ret = driver->ops->ioctl(container->iommu_data, in vfio_ioctl_check_extension()
873 up_read(&container->group_lock); in vfio_ioctl_check_extension()
879 static int __vfio_container_attach_groups(struct vfio_container *container, in __vfio_container_attach_groups() argument
886 list_for_each_entry(group, &container->group_list, container_next) { in __vfio_container_attach_groups()
895 list_for_each_entry_continue_reverse(group, &container->group_list, in __vfio_container_attach_groups()
903 static long vfio_ioctl_set_iommu(struct vfio_container *container, in vfio_ioctl_set_iommu() argument
909 down_write(&container->group_lock); in vfio_ioctl_set_iommu()
919 if (list_empty(&container->group_list) || container->iommu_driver) { in vfio_ioctl_set_iommu()
920 up_write(&container->group_lock); in vfio_ioctl_set_iommu()
953 ret = __vfio_container_attach_groups(container, driver, data); in vfio_ioctl_set_iommu()
955 container->iommu_driver = driver; in vfio_ioctl_set_iommu()
956 container->iommu_data = data; in vfio_ioctl_set_iommu()
967 up_write(&container->group_lock); in vfio_ioctl_set_iommu()
975 struct vfio_container *container = filep->private_data; in vfio_fops_unl_ioctl() local
980 if (!container) in vfio_fops_unl_ioctl()
988 ret = vfio_ioctl_check_extension(container, arg); in vfio_fops_unl_ioctl()
991 ret = vfio_ioctl_set_iommu(container, arg); in vfio_fops_unl_ioctl()
994 down_read(&container->group_lock); in vfio_fops_unl_ioctl()
996 driver = container->iommu_driver; in vfio_fops_unl_ioctl()
997 data = container->iommu_data; in vfio_fops_unl_ioctl()
1002 up_read(&container->group_lock); in vfio_fops_unl_ioctl()
1019 struct vfio_container *container; in vfio_fops_open() local
1021 container = kzalloc(sizeof(*container), GFP_KERNEL); in vfio_fops_open()
1022 if (!container) in vfio_fops_open()
1025 INIT_LIST_HEAD(&container->group_list); in vfio_fops_open()
1026 init_rwsem(&container->group_lock); in vfio_fops_open()
1027 kref_init(&container->kref); in vfio_fops_open()
1029 filep->private_data = container; in vfio_fops_open()
1036 struct vfio_container *container = filep->private_data; in vfio_fops_release() local
1040 vfio_container_put(container); in vfio_fops_release()
1052 struct vfio_container *container = filep->private_data; in vfio_fops_read() local
1056 down_read(&container->group_lock); in vfio_fops_read()
1058 driver = container->iommu_driver; in vfio_fops_read()
1060 ret = driver->ops->read(container->iommu_data, in vfio_fops_read()
1063 up_read(&container->group_lock); in vfio_fops_read()
1071 struct vfio_container *container = filep->private_data; in vfio_fops_write() local
1075 down_read(&container->group_lock); in vfio_fops_write()
1077 driver = container->iommu_driver; in vfio_fops_write()
1079 ret = driver->ops->write(container->iommu_data, in vfio_fops_write()
1082 up_read(&container->group_lock); in vfio_fops_write()
1089 struct vfio_container *container = filep->private_data; in vfio_fops_mmap() local
1093 down_read(&container->group_lock); in vfio_fops_mmap()
1095 driver = container->iommu_driver; in vfio_fops_mmap()
1097 ret = driver->ops->mmap(container->iommu_data, vma); in vfio_fops_mmap()
1099 up_read(&container->group_lock); in vfio_fops_mmap()
1122 struct vfio_container *container = group->container; in __vfio_group_unset_container() local
1125 down_write(&container->group_lock); in __vfio_group_unset_container()
1127 driver = container->iommu_driver; in __vfio_group_unset_container()
1129 driver->ops->detach_group(container->iommu_data, in __vfio_group_unset_container()
1132 group->container = NULL; in __vfio_group_unset_container()
1136 if (driver && list_empty(&container->group_list)) { in __vfio_group_unset_container()
1137 driver->ops->release(container->iommu_data); in __vfio_group_unset_container()
1139 container->iommu_driver = NULL; in __vfio_group_unset_container()
1140 container->iommu_data = NULL; in __vfio_group_unset_container()
1143 up_write(&container->group_lock); in __vfio_group_unset_container()
1145 vfio_container_put(container); in __vfio_group_unset_container()
1183 struct vfio_container *container; in vfio_group_set_container() local
1200 container = f.file->private_data; in vfio_group_set_container()
1201 WARN_ON(!container); /* fget ensures we don't race vfio_release */ in vfio_group_set_container()
1203 down_write(&container->group_lock); in vfio_group_set_container()
1205 driver = container->iommu_driver; in vfio_group_set_container()
1207 ret = driver->ops->attach_group(container->iommu_data, in vfio_group_set_container()
1213 group->container = container; in vfio_group_set_container()
1214 list_add(&group->container_next, &container->group_list); in vfio_group_set_container()
1217 vfio_container_get(container); in vfio_group_set_container()
1221 up_write(&container->group_lock); in vfio_group_set_container()
1241 !group->container->iommu_driver || !vfio_group_viable(group)) in vfio_group_get_device_fd()
1314 if (group->container) in vfio_group_fops_unl_ioctl()
1382 if (group->container) { in vfio_group_fops_open()
1536 if (!group->container->iommu_driver || in vfio_group_get_external_user()
1563 return vfio_ioctl_check_extension(group->container, arg); in vfio_external_check_extension()