Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
vfio/common: Introduce vfio_container_init/destroy helper
This adds two helper functions vfio_container_init/destroy which will be
used by both legacy and iommufd containers to do base container specific
initialization and release.

No functional change intended.

Suggested-by: Cédric Le Goater <clg@redhat.com>
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Signed-off-by: Cédric Le Goater <clg@redhat.com>
  • Loading branch information
duanzhenzhong authored and legoater committed Dec 19, 2023
1 parent b08501a commit ed2f7f8
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 1 deletion.
9 changes: 9 additions & 0 deletions hw/vfio/container-base.c
Expand Up @@ -30,3 +30,12 @@ int vfio_container_dma_unmap(VFIOContainerBase *bcontainer,
g_assert(bcontainer->ops->dma_unmap);
return bcontainer->ops->dma_unmap(bcontainer, iova, size, iotlb);
}

void vfio_container_init(VFIOContainerBase *bcontainer, const VFIOIOMMUOps *ops)
{
bcontainer->ops = ops;
}

void vfio_container_destroy(VFIOContainerBase *bcontainer)
{
}
4 changes: 3 additions & 1 deletion hw/vfio/container.c
Expand Up @@ -559,7 +559,7 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as,
QLIST_INIT(&container->giommu_list);
QLIST_INIT(&container->vrdl_list);
bcontainer = &container->bcontainer;
bcontainer->ops = &vfio_legacy_ops;
vfio_container_init(bcontainer, &vfio_legacy_ops);

ret = vfio_init_container(container, group->fd, errp);
if (ret) {
Expand Down Expand Up @@ -661,6 +661,7 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as,
static void vfio_disconnect_container(VFIOGroup *group)
{
VFIOContainer *container = group->container;
VFIOContainerBase *bcontainer = &container->bcontainer;

QLIST_REMOVE(group, container_next);
group->container = NULL;
Expand Down Expand Up @@ -695,6 +696,7 @@ static void vfio_disconnect_container(VFIOGroup *group)
QLIST_REMOVE(giommu, giommu_next);
g_free(giommu);
}
vfio_container_destroy(bcontainer);

trace_vfio_disconnect_container(container->fd);
close(container->fd);
Expand Down
4 changes: 4 additions & 0 deletions include/hw/vfio/vfio-container-base.h
Expand Up @@ -38,6 +38,10 @@ int vfio_container_dma_unmap(VFIOContainerBase *bcontainer,
hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb);

void vfio_container_init(VFIOContainerBase *bcontainer,
const VFIOIOMMUOps *ops);
void vfio_container_destroy(VFIOContainerBase *bcontainer);

struct VFIOIOMMUOps {
/* basic feature */
int (*dma_map)(VFIOContainerBase *bcontainer,
Expand Down

0 comments on commit ed2f7f8

Please sign in to comment.