aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Sistare <steven.sistare@oracle.com>2025-05-02 07:22:40 -0700
committerCédric Le Goater <clg@redhat.com>2025-05-09 12:42:27 +0200
commit07f86929e5e1f8506fbdd4c3522c91d74b206ad3 (patch)
tree6d71e29f51c7e83c9f4f1b685240d8f4a406f93b
parenta1f267a7d4d9f60ca013e89ca7562cbb483d7d83 (diff)
downloadqemu-07f86929e5e1f8506fbdd4c3522c91d74b206ad3.zip
qemu-07f86929e5e1f8506fbdd4c3522c91d74b206ad3.tar.gz
qemu-07f86929e5e1f8506fbdd4c3522c91d74b206ad3.tar.bz2
vfio/container: vfio_container_group_add
Add vfio_container_group_add to de-dup some code. No functional change. Signed-off-by: Steve Sistare <steven.sistare@oracle.com> Reviewed-by: Cedric Le Goater <clg@redhat.com> Link: https://lore.kernel.org/qemu-devel/1746195760-101443-4-git-send-email-steven.sistare@oracle.com [ clg: vfio_attach_discard_disable() -> vfio_container_attach_discard_disable() ] Signed-off-by: Cédric Le Goater <clg@redhat.com>
-rw-r--r--hw/vfio/container.c47
1 files changed, 25 insertions, 22 deletions
diff --git a/hw/vfio/container.c b/hw/vfio/container.c
index 4b2864c..a761f09 100644
--- a/hw/vfio/container.c
+++ b/hw/vfio/container.c
@@ -558,6 +558,26 @@ static bool vfio_container_attach_discard_disable(VFIOContainer *container,
return !ret;
}
+static bool vfio_container_group_add(VFIOContainer *container, VFIOGroup *group,
+ Error **errp)
+{
+ if (!vfio_container_attach_discard_disable(container, group, errp)) {
+ return false;
+ }
+ group->container = container;
+ QLIST_INSERT_HEAD(&container->group_list, group, container_next);
+ vfio_group_add_kvm_device(group);
+ return true;
+}
+
+static void vfio_container_group_del(VFIOContainer *container, VFIOGroup *group)
+{
+ QLIST_REMOVE(group, container_next);
+ group->container = NULL;
+ vfio_group_del_kvm_device(group);
+ vfio_ram_block_discard_disable(container, false);
+}
+
static bool vfio_container_connect(VFIOGroup *group, AddressSpace *as,
Error **errp)
{
@@ -568,20 +588,13 @@ static bool vfio_container_connect(VFIOGroup *group, AddressSpace *as,
VFIOIOMMUClass *vioc = NULL;
bool new_container = false;
bool group_was_added = false;
- bool discard_disabled = false;
space = vfio_address_space_get(as);
QLIST_FOREACH(bcontainer, &space->containers, next) {
container = container_of(bcontainer, VFIOContainer, bcontainer);
if (!ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &container->fd)) {
- if (!vfio_container_attach_discard_disable(container, group, errp)) {
- return false;
- }
- group->container = container;
- QLIST_INSERT_HEAD(&container->group_list, group, container_next);
- vfio_group_add_kvm_device(group);
- return true;
+ return vfio_container_group_add(container, group, errp);
}
}
@@ -608,11 +621,6 @@ static bool vfio_container_connect(VFIOGroup *group, AddressSpace *as,
goto fail;
}
- if (!vfio_container_attach_discard_disable(container, group, errp)) {
- goto fail;
- }
- discard_disabled = true;
-
vioc = VFIO_IOMMU_GET_CLASS(bcontainer);
assert(vioc->setup);
@@ -620,12 +628,11 @@ static bool vfio_container_connect(VFIOGroup *group, AddressSpace *as,
goto fail;
}
- vfio_group_add_kvm_device(group);
-
vfio_address_space_insert(space, bcontainer);
- group->container = container;
- QLIST_INSERT_HEAD(&container->group_list, group, container_next);
+ if (!vfio_container_group_add(container, group, errp)) {
+ goto fail;
+ }
group_was_added = true;
if (!vfio_listener_register(bcontainer, errp)) {
@@ -640,15 +647,11 @@ fail:
vfio_listener_unregister(bcontainer);
if (group_was_added) {
- QLIST_REMOVE(group, container_next);
- vfio_group_del_kvm_device(group);
+ vfio_container_group_del(container, group);
}
if (vioc && vioc->release) {
vioc->release(bcontainer);
}
- if (discard_disabled) {
- vfio_ram_block_discard_disable(container, false);
- }
if (new_container) {
vfio_cpr_unregister_container(bcontainer);
object_unref(container);