Lines Matching defs:container
35 #include "hw/vfio/vfio-container.h"
46 static int vfio_ram_block_discard_disable(VFIOContainer *container, bool state)
48 switch (container->iommu_type) {
69 static int vfio_dma_unmap_bitmap(const VFIOContainer *container,
73 const VFIOContainerBase *bcontainer = &container->bcontainer;
107 ret = ioctl(container->fd, VFIO_IOMMU_UNMAP_DMA, unmap);
126 const VFIOContainer *container = container_of(bcontainer, VFIOContainer,
141 return vfio_dma_unmap_bitmap(container, iova, size, iotlb);
147 while (ioctl(container->fd, VFIO_IOMMU_UNMAP_DMA, &unmap)) {
161 container->iommu_type == VFIO_TYPE1v2_IOMMU) {
212 const VFIOContainer *container = container_of(bcontainer, VFIOContainer,
231 if (ioctl(container->fd, VFIO_IOMMU_MAP_DMA, &map) == 0 ||
234 ioctl(container->fd, VFIO_IOMMU_MAP_DMA, &map) == 0)) {
245 const VFIOContainer *container = container_of(bcontainer, VFIOContainer,
258 ret = ioctl(container->fd, VFIO_IOMMU_DIRTY_PAGES, &dirty);
271 const VFIOContainer *container = container_of(bcontainer, VFIOContainer,
294 ret = ioctl(container->fd, VFIO_IOMMU_DIRTY_PAGES, dbitmap);
394 error_setg_errno(errp, errno, "Failed to set group container");
403 * way to guess it until an IOMMU group gets added to the container.
409 error_setg_errno(errp, errno, "Failed to set iommu for container");
421 VFIOContainer *container;
434 container = VFIO_IOMMU_LEGACY(object_new(vioc_name));
435 container->fd = fd;
436 container->iommu_type = iommu_type;
437 return container;
440 static int vfio_get_iommu_info(VFIOContainer *container,
450 if (ioctl(container->fd, VFIO_IOMMU_GET_INFO, *info)) {
484 static void vfio_get_iommu_info_migration(VFIOContainer *container,
489 VFIOContainerBase *bcontainer = &container->bcontainer;
512 VFIOContainer *container = container_of(bcontainer, VFIOContainer,
517 ret = vfio_get_iommu_info(container, &info);
535 vfio_get_iommu_info_migration(container, info);
539 static bool vfio_container_attach_discard_disable(VFIOContainer *container,
549 * therefore set discarding broken for each group added to a container,
550 * whether the container is used individually or shared. This provides
562 * container is registered, a replay of mappings within the AddressSpace
575 ret = vfio_ram_block_discard_disable(container, true);
578 if (ioctl(group->fd, VFIO_GROUP_UNSET_CONTAINER, &container->fd)) {
580 " container", group->groupid);
586 static bool vfio_container_group_add(VFIOContainer *container, VFIOGroup *group,
589 if (!vfio_container_attach_discard_disable(container, group, errp)) {
592 group->container = container;
593 QLIST_INSERT_HEAD(&container->group_list, group, container_next);
598 static void vfio_container_group_del(VFIOContainer *container, VFIOGroup *group)
601 group->container = NULL;
603 vfio_ram_block_discard_disable(container, false);
609 VFIOContainer *container;
620 container = container_of(bcontainer, VFIOContainer, bcontainer);
621 if (!ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &container->fd)) {
622 return vfio_container_group_add(container, group, errp);
638 container = vfio_create_container(fd, group, errp);
639 if (!container) {
643 bcontainer = &container->bcontainer;
658 if (!vfio_container_group_add(container, group, errp)) {
675 vfio_container_group_del(container, group);
682 object_unref(container);
694 VFIOContainer *container = group->container;
695 VFIOContainerBase *bcontainer = &container->bcontainer;
699 group->container = NULL;
702 * Explicitly release the listener first before unset container,
703 * since unset may destroy the backend container if it's the last
706 if (QLIST_EMPTY(&container->group_list)) {
713 if (ioctl(group->fd, VFIO_GROUP_UNSET_CONTAINER, &container->fd)) {
714 error_report("vfio: error disconnecting group %d from container",
718 if (QLIST_EMPTY(&container->group_list)) {
721 trace_vfio_container_disconnect(container->fd);
723 close(container->fd);
724 object_unref(container);
740 if (group->container->bcontainer.space->as == as) {
775 error_prepend(errp, "failed to setup container for group %d: ",
800 vfio_ram_block_discard_disable(group->container, false);
850 vfio_ram_block_discard_disable(group->container, false);
854 vfio_device_prepare(vbasedev, &group->container->bcontainer, info);
1189 VFIOContainer *container = VFIO_IOMMU_LEGACY(obj);
1191 QLIST_INIT(&container->group_list);