Lines Matching refs:container
75 struct vfio_container *container;
279 * it's freed via kref. Must support container/group/device being
282 static void vfio_container_get(struct vfio_container *container)
284 kref_get(&container->kref);
289 struct vfio_container *container;
290 container = container_of(kref, struct vfio_container, kref);
292 kfree(container);
295 static void vfio_container_put(struct vfio_container *container)
297 kref_put(&container->kref, vfio_container_release);
946 * in use. The container persists with this group and those remaining
953 * we need to make sure the group is detached from the container.
958 wait_event(group->container_q, !group->container);
980 static long vfio_ioctl_check_extension(struct vfio_container *container,
986 down_read(&container->group_lock);
988 driver = container->iommu_driver;
1005 if (!list_empty(&container->group_list) &&
1006 (container->noiommu !=
1023 ret = driver->ops->ioctl(container->iommu_data,
1027 up_read(&container->group_lock);
1032 /* hold write lock on container->group_lock */
1033 static int __vfio_container_attach_groups(struct vfio_container *container,
1040 list_for_each_entry(group, &container->group_list, container_next) {
1049 list_for_each_entry_continue_reverse(group, &container->group_list,
1057 static long vfio_ioctl_set_iommu(struct vfio_container *container,
1063 down_write(&container->group_lock);
1066 * The container is designed to be an unprivileged interface while
1068 * adding a group to a container does the user get the privilege of
1070 * is no unset_iommu, but by removing all the groups from a container,
1071 * the container is deprivileged and returns to an unset state.
1073 if (list_empty(&container->group_list) || container->iommu_driver) {
1074 up_write(&container->group_lock);
1087 if (container->noiommu != (driver->ops == &vfio_noiommu_ops))
1113 ret = __vfio_container_attach_groups(container, driver, data);
1120 container->iommu_driver = driver;
1121 container->iommu_data = data;
1126 up_write(&container->group_lock);
1134 struct vfio_container *container = filep->private_data;
1139 if (!container)
1147 ret = vfio_ioctl_check_extension(container, arg);
1150 ret = vfio_ioctl_set_iommu(container, arg);
1153 driver = container->iommu_driver;
1154 data = container->iommu_data;
1165 struct vfio_container *container;
1167 container = kzalloc(sizeof(*container), GFP_KERNEL);
1168 if (!container)
1171 INIT_LIST_HEAD(&container->group_list);
1172 init_rwsem(&container->group_lock);
1173 kref_init(&container->kref);
1175 filep->private_data = container;
1182 struct vfio_container *container = filep->private_data;
1186 vfio_container_put(container);
1198 struct vfio_container *container = filep->private_data;
1202 driver = container->iommu_driver;
1204 ret = driver->ops->read(container->iommu_data,
1213 struct vfio_container *container = filep->private_data;
1217 driver = container->iommu_driver;
1219 ret = driver->ops->write(container->iommu_data,
1227 struct vfio_container *container = filep->private_data;
1231 driver = container->iommu_driver;
1233 ret = driver->ops->mmap(container->iommu_data, vma);
1254 struct vfio_container *container = group->container;
1257 down_write(&container->group_lock);
1259 driver = container->iommu_driver;
1261 driver->ops->detach_group(container->iommu_data,
1264 group->container = NULL;
1268 /* Detaching the last group deprivileges a container, remove iommu */
1269 if (driver && list_empty(&container->group_list)) {
1270 driver->ops->release(container->iommu_data);
1272 container->iommu_driver = NULL;
1273 container->iommu_data = NULL;
1276 up_write(&container->group_lock);
1278 vfio_container_put(container);
1283 * if there was no container to unset. Since the ioctl is called on
1302 * When removing container users, anything that removes the last user
1303 * implicitly removes the group from the container. That is, if the
1316 struct vfio_container *container;
1336 container = f.file->private_data;
1337 WARN_ON(!container); /* fget ensures we don't race vfio_release */
1339 down_write(&container->group_lock);
1342 if (!list_empty(&container->group_list) &&
1343 container->noiommu != group->noiommu) {
1348 driver = container->iommu_driver;
1350 ret = driver->ops->attach_group(container->iommu_data,
1356 group->container = container;
1357 container->noiommu = group->noiommu;
1358 list_add(&group->container_next, &container->group_list);
1360 /* Get a reference on the container and mark a user within the group */
1361 vfio_container_get(container);
1365 up_write(&container->group_lock);
1385 if (!group->container->iommu_driver || !vfio_group_viable(group)) {
1402 !group->container->iommu_driver || !vfio_group_viable(group))
1482 if (group->container)
1546 if (group->container) {
1659 * - opening a new container;
1661 * - setting an IOMMU driver for a container.
1662 * When IOMMU is set for a container, all groups in it are
1671 * increments the container user counter to prevent
1679 * This call decrements the container user counter.
1706 * increments the container user counter to prevent the VFIO group
1712 * decrement the container user counter.
1761 return vfio_ioctl_check_extension(group->container, arg);
1898 struct vfio_container *container;
1922 container = group->container;
1923 driver = container->iommu_driver;
1925 ret = driver->ops->pin_pages(container->iommu_data,
1950 struct vfio_container *container;
1969 container = group->container;
1970 driver = container->iommu_driver;
1972 ret = driver->ops->unpin_pages(container->iommu_data, user_pfn,
2010 struct vfio_container *container;
2023 container = group->container;
2024 driver = container->iommu_driver;
2026 ret = driver->ops->pin_pages(container->iommu_data,
2057 struct vfio_container *container;
2067 container = group->container;
2068 driver = container->iommu_driver;
2070 ret = driver->ops->unpin_pages(container->iommu_data,
2108 struct vfio_container *container;
2115 container = group->container;
2116 driver = container->iommu_driver;
2119 ret = driver->ops->dma_rw(container->iommu_data,
2132 struct vfio_container *container;
2140 container = group->container;
2141 driver = container->iommu_driver;
2143 ret = driver->ops->register_notifier(container->iommu_data,
2156 struct vfio_container *container;
2164 container = group->container;
2165 driver = container->iommu_driver;
2167 ret = driver->ops->unregister_notifier(container->iommu_data,