mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
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>
This commit is contained in:
parent
a1f267a7d4
commit
07f86929e5
1 changed files with 25 additions and 22 deletions
|
@ -558,6 +558,26 @@ static bool vfio_container_attach_discard_disable(VFIOContainer *container,
|
||||||
return !ret;
|
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,
|
static bool vfio_container_connect(VFIOGroup *group, AddressSpace *as,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
|
@ -568,20 +588,13 @@ static bool vfio_container_connect(VFIOGroup *group, AddressSpace *as,
|
||||||
VFIOIOMMUClass *vioc = NULL;
|
VFIOIOMMUClass *vioc = NULL;
|
||||||
bool new_container = false;
|
bool new_container = false;
|
||||||
bool group_was_added = false;
|
bool group_was_added = false;
|
||||||
bool discard_disabled = false;
|
|
||||||
|
|
||||||
space = vfio_address_space_get(as);
|
space = vfio_address_space_get(as);
|
||||||
|
|
||||||
QLIST_FOREACH(bcontainer, &space->containers, next) {
|
QLIST_FOREACH(bcontainer, &space->containers, next) {
|
||||||
container = container_of(bcontainer, VFIOContainer, bcontainer);
|
container = container_of(bcontainer, VFIOContainer, bcontainer);
|
||||||
if (!ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &container->fd)) {
|
if (!ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &container->fd)) {
|
||||||
if (!vfio_container_attach_discard_disable(container, group, errp)) {
|
return vfio_container_group_add(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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -608,11 +621,6 @@ static bool vfio_container_connect(VFIOGroup *group, AddressSpace *as,
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!vfio_container_attach_discard_disable(container, group, errp)) {
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
discard_disabled = true;
|
|
||||||
|
|
||||||
vioc = VFIO_IOMMU_GET_CLASS(bcontainer);
|
vioc = VFIO_IOMMU_GET_CLASS(bcontainer);
|
||||||
assert(vioc->setup);
|
assert(vioc->setup);
|
||||||
|
|
||||||
|
@ -620,12 +628,11 @@ static bool vfio_container_connect(VFIOGroup *group, AddressSpace *as,
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
vfio_group_add_kvm_device(group);
|
|
||||||
|
|
||||||
vfio_address_space_insert(space, bcontainer);
|
vfio_address_space_insert(space, bcontainer);
|
||||||
|
|
||||||
group->container = container;
|
if (!vfio_container_group_add(container, group, errp)) {
|
||||||
QLIST_INSERT_HEAD(&container->group_list, group, container_next);
|
goto fail;
|
||||||
|
}
|
||||||
group_was_added = true;
|
group_was_added = true;
|
||||||
|
|
||||||
if (!vfio_listener_register(bcontainer, errp)) {
|
if (!vfio_listener_register(bcontainer, errp)) {
|
||||||
|
@ -640,15 +647,11 @@ fail:
|
||||||
vfio_listener_unregister(bcontainer);
|
vfio_listener_unregister(bcontainer);
|
||||||
|
|
||||||
if (group_was_added) {
|
if (group_was_added) {
|
||||||
QLIST_REMOVE(group, container_next);
|
vfio_container_group_del(container, group);
|
||||||
vfio_group_del_kvm_device(group);
|
|
||||||
}
|
}
|
||||||
if (vioc && vioc->release) {
|
if (vioc && vioc->release) {
|
||||||
vioc->release(bcontainer);
|
vioc->release(bcontainer);
|
||||||
}
|
}
|
||||||
if (discard_disabled) {
|
|
||||||
vfio_ram_block_discard_disable(container, false);
|
|
||||||
}
|
|
||||||
if (new_container) {
|
if (new_container) {
|
||||||
vfio_cpr_unregister_container(bcontainer);
|
vfio_cpr_unregister_container(bcontainer);
|
||||||
object_unref(container);
|
object_unref(container);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue