Lines Matching refs:group

335 static void vfio_kvm_device_add_group(VFIOGroup *group)  in vfio_kvm_device_add_group()  argument
339 if (vfio_kvm_device_add_fd(group->fd, &err)) { in vfio_kvm_device_add_group()
340 error_reportf_err(err, "group ID %d: ", group->groupid); in vfio_kvm_device_add_group()
344 static void vfio_kvm_device_del_group(VFIOGroup *group) in vfio_kvm_device_del_group() argument
348 if (vfio_kvm_device_del_fd(group->fd, &err)) { in vfio_kvm_device_del_group()
349 error_reportf_err(err, "group ID %d: ", group->groupid); in vfio_kvm_device_del_group()
417 static VFIOContainer *vfio_create_container(int fd, VFIOGroup *group, in vfio_create_container() argument
429 if (!vfio_set_iommu(fd, group->fd, &iommu_type, errp)) { in vfio_create_container()
540 static bool vfio_connect_container(VFIOGroup *group, AddressSpace *as, in vfio_connect_container() argument
584 if (!ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &container->fd)) { in vfio_connect_container()
589 if (ioctl(group->fd, VFIO_GROUP_UNSET_CONTAINER, in vfio_connect_container()
592 " container", group->groupid); in vfio_connect_container()
596 group->container = container; in vfio_connect_container()
597 QLIST_INSERT_HEAD(&container->group_list, group, container_next); in vfio_connect_container()
598 vfio_kvm_device_add_group(group); in vfio_connect_container()
615 container = vfio_create_container(fd, group, errp); in vfio_connect_container()
638 vfio_kvm_device_add_group(group); in vfio_connect_container()
642 group->container = container; in vfio_connect_container()
643 QLIST_INSERT_HEAD(&container->group_list, group, container_next); in vfio_connect_container()
658 QLIST_REMOVE(group, container_next); in vfio_connect_container()
659 vfio_kvm_device_del_group(group); in vfio_connect_container()
683 static void vfio_disconnect_container(VFIOGroup *group) in vfio_disconnect_container() argument
685 VFIOContainer *container = group->container; in vfio_disconnect_container()
689 QLIST_REMOVE(group, container_next); in vfio_disconnect_container()
690 group->container = NULL; in vfio_disconnect_container()
704 if (ioctl(group->fd, VFIO_GROUP_UNSET_CONTAINER, &container->fd)) { in vfio_disconnect_container()
706 group->groupid); in vfio_disconnect_container()
724 VFIOGroup *group; in vfio_get_group() local
728 QLIST_FOREACH(group, &vfio_group_list, next) { in vfio_get_group()
729 if (group->groupid == groupid) { in vfio_get_group()
731 if (group->container->bcontainer.space->as == as) { in vfio_get_group()
732 return group; in vfio_get_group()
735 group->groupid); in vfio_get_group()
741 group = g_malloc0(sizeof(*group)); in vfio_get_group()
744 group->fd = qemu_open(path, O_RDWR, errp); in vfio_get_group()
745 if (group->fd < 0) { in vfio_get_group()
749 if (ioctl(group->fd, VFIO_GROUP_GET_STATUS, &status)) { in vfio_get_group()
762 group->groupid = groupid; in vfio_get_group()
763 QLIST_INIT(&group->device_list); in vfio_get_group()
765 if (!vfio_connect_container(group, as, errp)) { in vfio_get_group()
771 QLIST_INSERT_HEAD(&vfio_group_list, group, next); in vfio_get_group()
773 return group; in vfio_get_group()
776 close(group->fd); in vfio_get_group()
779 g_free(group); in vfio_get_group()
784 static void vfio_put_group(VFIOGroup *group) in vfio_put_group() argument
786 if (!group || !QLIST_EMPTY(&group->device_list)) { in vfio_put_group()
790 if (!group->ram_block_discard_allowed) { in vfio_put_group()
791 vfio_ram_block_discard_disable(group->container, false); in vfio_put_group()
793 vfio_kvm_device_del_group(group); in vfio_put_group()
794 vfio_disconnect_container(group); in vfio_put_group()
795 QLIST_REMOVE(group, next); in vfio_put_group()
796 trace_vfio_put_group(group->fd); in vfio_put_group()
797 close(group->fd); in vfio_put_group()
798 g_free(group); in vfio_put_group()
801 static bool vfio_get_device(VFIOGroup *group, const char *name, in vfio_get_device() argument
807 fd = ioctl(group->fd, VFIO_GROUP_GET_DEVICE_FD, name); in vfio_get_device()
810 group->groupid); in vfio_get_device()
813 "or pci-stub and not already in use\n", group->groupid); in vfio_get_device()
831 group->ram_block_discard_allowed) { in vfio_get_device()
832 if (!QLIST_EMPTY(&group->device_list)) { in vfio_get_device()
839 if (!group->ram_block_discard_allowed) { in vfio_get_device()
840 group->ram_block_discard_allowed = true; in vfio_get_device()
841 vfio_ram_block_discard_disable(group->container, false); in vfio_get_device()
846 vbasedev->group = group; in vfio_get_device()
847 QLIST_INSERT_HEAD(&group->device_list, vbasedev, next); in vfio_get_device()
862 if (!vbasedev->group) { in vfio_put_base_device()
866 vbasedev->group = NULL; in vfio_put_base_device()
908 VFIOGroup *group; in vfio_legacy_attach_device() local
921 group = vfio_get_group(groupid, as, errp); in vfio_legacy_attach_device()
922 if (!group) { in vfio_legacy_attach_device()
926 QLIST_FOREACH(vbasedev_iter, &group->device_list, next) { in vfio_legacy_attach_device()
929 vfio_put_group(group); in vfio_legacy_attach_device()
933 if (!vfio_get_device(group, name, vbasedev, errp)) { in vfio_legacy_attach_device()
934 vfio_put_group(group); in vfio_legacy_attach_device()
938 bcontainer = &group->container->bcontainer; in vfio_legacy_attach_device()
948 VFIOGroup *group = vbasedev->group; in vfio_legacy_detach_device() local
953 trace_vfio_detach_device(vbasedev->name, group->groupid); in vfio_legacy_detach_device()
955 vfio_put_group(group); in vfio_legacy_detach_device()
961 VFIOGroup *group; in vfio_legacy_pci_hot_reset() local
1003 QLIST_FOREACH(group, &vfio_group_list, next) { in vfio_legacy_pci_hot_reset()
1004 if (group->groupid == devices[i].group_id) { in vfio_legacy_pci_hot_reset()
1009 if (!group) { in vfio_legacy_pci_hot_reset()
1020 QLIST_FOREACH(vbasedev_iter, &group->device_list, next) { in vfio_legacy_pci_hot_reset()
1046 QLIST_FOREACH(group, &vfio_group_list, next) { in vfio_legacy_pci_hot_reset()
1048 if (group->groupid == devices[i].group_id) { in vfio_legacy_pci_hot_reset()
1060 QLIST_FOREACH(group, &vfio_group_list, next) { in vfio_legacy_pci_hot_reset()
1062 if (group->groupid == devices[i].group_id) { in vfio_legacy_pci_hot_reset()
1063 fds[reset->count++] = group->fd; in vfio_legacy_pci_hot_reset()
1095 QLIST_FOREACH(group, &vfio_group_list, next) { in vfio_legacy_pci_hot_reset()
1096 if (group->groupid == devices[i].group_id) { in vfio_legacy_pci_hot_reset()
1101 if (!group) { in vfio_legacy_pci_hot_reset()
1105 QLIST_FOREACH(vbasedev_iter, &group->device_list, next) { in vfio_legacy_pci_hot_reset()