Lines Matching refs:container

76 	struct vfio_container		*container;  member
169 static void vfio_container_get(struct vfio_container *container) in vfio_container_get() argument
171 kref_get(&container->kref); in vfio_container_get()
176 struct vfio_container *container; in vfio_container_release() local
177 container = container_of(kref, struct vfio_container, kref); in vfio_container_release()
179 kfree(container); in vfio_container_release()
182 static void vfio_container_put(struct vfio_container *container) in vfio_container_put() argument
184 kref_put(&container->kref, vfio_container_release); in vfio_container_put()
786 static long vfio_ioctl_check_extension(struct vfio_container *container, in vfio_ioctl_check_extension() argument
792 down_read(&container->group_lock); in vfio_ioctl_check_extension()
794 driver = container->iommu_driver; in vfio_ioctl_check_extension()
821 ret = driver->ops->ioctl(container->iommu_data, in vfio_ioctl_check_extension()
825 up_read(&container->group_lock); in vfio_ioctl_check_extension()
831 static int __vfio_container_attach_groups(struct vfio_container *container, in __vfio_container_attach_groups() argument
838 list_for_each_entry(group, &container->group_list, container_next) { in __vfio_container_attach_groups()
847 list_for_each_entry_continue_reverse(group, &container->group_list, in __vfio_container_attach_groups()
855 static long vfio_ioctl_set_iommu(struct vfio_container *container, in vfio_ioctl_set_iommu() argument
861 down_write(&container->group_lock); in vfio_ioctl_set_iommu()
871 if (list_empty(&container->group_list) || container->iommu_driver) { in vfio_ioctl_set_iommu()
872 up_write(&container->group_lock); in vfio_ioctl_set_iommu()
905 ret = __vfio_container_attach_groups(container, driver, data); in vfio_ioctl_set_iommu()
907 container->iommu_driver = driver; in vfio_ioctl_set_iommu()
908 container->iommu_data = data; in vfio_ioctl_set_iommu()
919 up_write(&container->group_lock); in vfio_ioctl_set_iommu()
927 struct vfio_container *container = filep->private_data; in vfio_fops_unl_ioctl() local
932 if (!container) in vfio_fops_unl_ioctl()
940 ret = vfio_ioctl_check_extension(container, arg); in vfio_fops_unl_ioctl()
943 ret = vfio_ioctl_set_iommu(container, arg); in vfio_fops_unl_ioctl()
946 down_read(&container->group_lock); in vfio_fops_unl_ioctl()
948 driver = container->iommu_driver; in vfio_fops_unl_ioctl()
949 data = container->iommu_data; in vfio_fops_unl_ioctl()
954 up_read(&container->group_lock); in vfio_fops_unl_ioctl()
971 struct vfio_container *container; in vfio_fops_open() local
973 container = kzalloc(sizeof(*container), GFP_KERNEL); in vfio_fops_open()
974 if (!container) in vfio_fops_open()
977 INIT_LIST_HEAD(&container->group_list); in vfio_fops_open()
978 init_rwsem(&container->group_lock); in vfio_fops_open()
979 kref_init(&container->kref); in vfio_fops_open()
981 filep->private_data = container; in vfio_fops_open()
988 struct vfio_container *container = filep->private_data; in vfio_fops_release() local
992 vfio_container_put(container); in vfio_fops_release()
1004 struct vfio_container *container = filep->private_data; in vfio_fops_read() local
1008 down_read(&container->group_lock); in vfio_fops_read()
1010 driver = container->iommu_driver; in vfio_fops_read()
1012 ret = driver->ops->read(container->iommu_data, in vfio_fops_read()
1015 up_read(&container->group_lock); in vfio_fops_read()
1023 struct vfio_container *container = filep->private_data; in vfio_fops_write() local
1027 down_read(&container->group_lock); in vfio_fops_write()
1029 driver = container->iommu_driver; in vfio_fops_write()
1031 ret = driver->ops->write(container->iommu_data, in vfio_fops_write()
1034 up_read(&container->group_lock); in vfio_fops_write()
1041 struct vfio_container *container = filep->private_data; in vfio_fops_mmap() local
1045 down_read(&container->group_lock); in vfio_fops_mmap()
1047 driver = container->iommu_driver; in vfio_fops_mmap()
1049 ret = driver->ops->mmap(container->iommu_data, vma); in vfio_fops_mmap()
1051 up_read(&container->group_lock); in vfio_fops_mmap()
1074 struct vfio_container *container = group->container; in __vfio_group_unset_container() local
1077 down_write(&container->group_lock); in __vfio_group_unset_container()
1079 driver = container->iommu_driver; in __vfio_group_unset_container()
1081 driver->ops->detach_group(container->iommu_data, in __vfio_group_unset_container()
1084 group->container = NULL; in __vfio_group_unset_container()
1088 if (driver && list_empty(&container->group_list)) { in __vfio_group_unset_container()
1089 driver->ops->release(container->iommu_data); in __vfio_group_unset_container()
1091 container->iommu_driver = NULL; in __vfio_group_unset_container()
1092 container->iommu_data = NULL; in __vfio_group_unset_container()
1095 up_write(&container->group_lock); in __vfio_group_unset_container()
1097 vfio_container_put(container); in __vfio_group_unset_container()
1135 struct vfio_container *container; in vfio_group_set_container() local
1152 container = f.file->private_data; in vfio_group_set_container()
1153 WARN_ON(!container); /* fget ensures we don't race vfio_release */ in vfio_group_set_container()
1155 down_write(&container->group_lock); in vfio_group_set_container()
1157 driver = container->iommu_driver; in vfio_group_set_container()
1159 ret = driver->ops->attach_group(container->iommu_data, in vfio_group_set_container()
1165 group->container = container; in vfio_group_set_container()
1166 list_add(&group->container_next, &container->group_list); in vfio_group_set_container()
1169 vfio_container_get(container); in vfio_group_set_container()
1173 up_write(&container->group_lock); in vfio_group_set_container()
1193 !group->container->iommu_driver || !vfio_group_viable(group)) in vfio_group_get_device_fd()
1266 if (group->container) in vfio_group_fops_unl_ioctl()
1334 if (group->container) { in vfio_group_fops_open()
1488 if (!group->container->iommu_driver || in vfio_group_get_external_user()
1515 return vfio_ioctl_check_extension(group->container, arg); in vfio_external_check_extension()