Lines Matching refs:container
78 struct vfio_container *container; member
293 static void vfio_container_get(struct vfio_container *container) in vfio_container_get() argument
295 kref_get(&container->kref); in vfio_container_get()
300 struct vfio_container *container; in vfio_container_release() local
301 container = container_of(kref, struct vfio_container, kref); in vfio_container_release()
303 kfree(container); in vfio_container_release()
306 static void vfio_container_put(struct vfio_container *container) in vfio_container_put() argument
308 kref_put(&container->kref, vfio_container_release); in vfio_container_put()
1009 wait_event(group->container_q, !group->container); in vfio_del_group_dev()
1020 static long vfio_ioctl_check_extension(struct vfio_container *container, in vfio_ioctl_check_extension() argument
1026 down_read(&container->group_lock); in vfio_ioctl_check_extension()
1028 driver = container->iommu_driver; in vfio_ioctl_check_extension()
1045 if (!list_empty(&container->group_list) && in vfio_ioctl_check_extension()
1046 (container->noiommu != in vfio_ioctl_check_extension()
1063 ret = driver->ops->ioctl(container->iommu_data, in vfio_ioctl_check_extension()
1067 up_read(&container->group_lock); in vfio_ioctl_check_extension()
1073 static int __vfio_container_attach_groups(struct vfio_container *container, in __vfio_container_attach_groups() argument
1080 list_for_each_entry(group, &container->group_list, container_next) { in __vfio_container_attach_groups()
1089 list_for_each_entry_continue_reverse(group, &container->group_list, in __vfio_container_attach_groups()
1097 static long vfio_ioctl_set_iommu(struct vfio_container *container, in vfio_ioctl_set_iommu() argument
1103 down_write(&container->group_lock); in vfio_ioctl_set_iommu()
1113 if (list_empty(&container->group_list) || container->iommu_driver) { in vfio_ioctl_set_iommu()
1114 up_write(&container->group_lock); in vfio_ioctl_set_iommu()
1127 if (container->noiommu != (driver->ops == &vfio_noiommu_ops)) in vfio_ioctl_set_iommu()
1153 ret = __vfio_container_attach_groups(container, driver, data); in vfio_ioctl_set_iommu()
1160 container->iommu_driver = driver; in vfio_ioctl_set_iommu()
1161 container->iommu_data = data; in vfio_ioctl_set_iommu()
1166 up_write(&container->group_lock); in vfio_ioctl_set_iommu()
1174 struct vfio_container *container = filep->private_data; in vfio_fops_unl_ioctl() local
1179 if (!container) in vfio_fops_unl_ioctl()
1187 ret = vfio_ioctl_check_extension(container, arg); in vfio_fops_unl_ioctl()
1190 ret = vfio_ioctl_set_iommu(container, arg); in vfio_fops_unl_ioctl()
1193 driver = container->iommu_driver; in vfio_fops_unl_ioctl()
1194 data = container->iommu_data; in vfio_fops_unl_ioctl()
1214 struct vfio_container *container; in vfio_fops_open() local
1216 container = kzalloc(sizeof(*container), GFP_KERNEL); in vfio_fops_open()
1217 if (!container) in vfio_fops_open()
1220 INIT_LIST_HEAD(&container->group_list); in vfio_fops_open()
1221 init_rwsem(&container->group_lock); in vfio_fops_open()
1222 kref_init(&container->kref); in vfio_fops_open()
1224 filep->private_data = container; in vfio_fops_open()
1231 struct vfio_container *container = filep->private_data; in vfio_fops_release() local
1235 vfio_container_put(container); in vfio_fops_release()
1247 struct vfio_container *container = filep->private_data; in vfio_fops_read() local
1251 driver = container->iommu_driver; in vfio_fops_read()
1253 ret = driver->ops->read(container->iommu_data, in vfio_fops_read()
1262 struct vfio_container *container = filep->private_data; in vfio_fops_write() local
1266 driver = container->iommu_driver; in vfio_fops_write()
1268 ret = driver->ops->write(container->iommu_data, in vfio_fops_write()
1276 struct vfio_container *container = filep->private_data; in vfio_fops_mmap() local
1280 driver = container->iommu_driver; in vfio_fops_mmap()
1282 ret = driver->ops->mmap(container->iommu_data, vma); in vfio_fops_mmap()
1305 struct vfio_container *container = group->container; in __vfio_group_unset_container() local
1308 down_write(&container->group_lock); in __vfio_group_unset_container()
1310 driver = container->iommu_driver; in __vfio_group_unset_container()
1312 driver->ops->detach_group(container->iommu_data, in __vfio_group_unset_container()
1315 group->container = NULL; in __vfio_group_unset_container()
1320 if (driver && list_empty(&container->group_list)) { in __vfio_group_unset_container()
1321 driver->ops->release(container->iommu_data); in __vfio_group_unset_container()
1323 container->iommu_driver = NULL; in __vfio_group_unset_container()
1324 container->iommu_data = NULL; in __vfio_group_unset_container()
1327 up_write(&container->group_lock); in __vfio_group_unset_container()
1329 vfio_container_put(container); in __vfio_group_unset_container()
1367 struct vfio_container *container; in vfio_group_set_container() local
1387 container = f.file->private_data; in vfio_group_set_container()
1388 WARN_ON(!container); /* fget ensures we don't race vfio_release */ in vfio_group_set_container()
1390 down_write(&container->group_lock); in vfio_group_set_container()
1393 if (!list_empty(&container->group_list) && in vfio_group_set_container()
1394 container->noiommu != group->noiommu) { in vfio_group_set_container()
1399 driver = container->iommu_driver; in vfio_group_set_container()
1401 ret = driver->ops->attach_group(container->iommu_data, in vfio_group_set_container()
1407 group->container = container; in vfio_group_set_container()
1408 container->noiommu = group->noiommu; in vfio_group_set_container()
1409 list_add(&group->container_next, &container->group_list); in vfio_group_set_container()
1412 vfio_container_get(container); in vfio_group_set_container()
1416 up_write(&container->group_lock); in vfio_group_set_container()
1436 if (!group->container->iommu_driver || !vfio_group_viable(group)) { in vfio_group_add_container_user()
1453 !group->container->iommu_driver || !vfio_group_viable(group)) in vfio_group_get_device_fd()
1533 if (group->container) in vfio_group_fops_unl_ioctl()
1606 if (group->container) { in vfio_group_fops_open()
1796 return vfio_ioctl_check_extension(group->container, arg); in vfio_external_check_extension()
1932 struct vfio_container *container; in vfio_pin_pages() local
1951 container = group->container; in vfio_pin_pages()
1952 driver = container->iommu_driver; in vfio_pin_pages()
1954 ret = driver->ops->pin_pages(container->iommu_data, user_pfn, in vfio_pin_pages()
1978 struct vfio_container *container; in vfio_unpin_pages() local
1997 container = group->container; in vfio_unpin_pages()
1998 driver = container->iommu_driver; in vfio_unpin_pages()
2000 ret = driver->ops->unpin_pages(container->iommu_data, user_pfn, in vfio_unpin_pages()
2017 struct vfio_container *container; in vfio_register_iommu_notifier() local
2025 container = group->container; in vfio_register_iommu_notifier()
2026 driver = container->iommu_driver; in vfio_register_iommu_notifier()
2028 ret = driver->ops->register_notifier(container->iommu_data, in vfio_register_iommu_notifier()
2041 struct vfio_container *container; in vfio_unregister_iommu_notifier() local
2049 container = group->container; in vfio_unregister_iommu_notifier()
2050 driver = container->iommu_driver; in vfio_unregister_iommu_notifier()
2052 ret = driver->ops->unregister_notifier(container->iommu_data, in vfio_unregister_iommu_notifier()