On 2/19/25 15:48, John Levon wrote:
> From: John Levon <levon@movementarian.org>
>
> The vfio-user container will later need to hook into these callbacks;
> set up vfio to use them, and optionally pass them through to the
> container.
>
> Signed-off-by: John Levon <john.levon@nutanix.com>
Looks ok. The future respin of this series will need to add routines
to register the begin and commit callbacks.
> ---
> hw/vfio/common.c | 28 +++++++++++++++++++++++++++
> include/hw/vfio/vfio-container-base.h | 2 ++
> 2 files changed, 30 insertions(+)
>
> diff --git a/hw/vfio/common.c b/hw/vfio/common.c
> index 8d3d425c63..6f106167fd 100644
> --- a/hw/vfio/common.c
> +++ b/hw/vfio/common.c
> @@ -557,6 +557,32 @@ static bool vfio_get_section_iova_range(VFIOContainerBase *bcontainer,
> return true;
> }
>
> +static void vfio_listener_begin(MemoryListener *listener)
> +{
> + VFIOContainerBase *bcontainer = container_of(listener, VFIOContainerBase,
> + listener);
> + void (*listener_begin)(VFIOContainerBase *bcontainer);
> +
> + listener_begin = VFIO_IOMMU_GET_CLASS(bcontainer)->listener_begin;
> +
> + if (listener_begin) {
> + listener_begin(bcontainer);
> + }
> +}
> +
> +static void vfio_listener_commit(MemoryListener *listener)
> +{
> + VFIOContainerBase *bcontainer = container_of(listener, VFIOContainerBase,
> + listener);
> + void (*listener_commit)(VFIOContainerBase *bcontainer);
> +
> + listener_commit = VFIO_IOMMU_GET_CLASS(bcontainer)->listener_begin;
> +
> + if (listener_commit) {
> + listener_commit(bcontainer);
> + }
> +}
> +
> static void vfio_device_error_append(VFIODevice *vbasedev, Error **errp)
> {
> /*
> @@ -1396,6 +1422,8 @@ static void vfio_listener_log_sync(MemoryListener *listener,
>
> const MemoryListener vfio_memory_listener = {
> .name = "vfio",
> + .begin = vfio_listener_begin,
> + .commit = vfio_listener_commit,
> .region_add = vfio_listener_region_add,
> .region_del = vfio_listener_region_del,
> .log_global_start = vfio_listener_log_global_start,
> diff --git a/include/hw/vfio/vfio-container-base.h b/include/hw/vfio/vfio-container-base.h
> index c9d339383e..0a863df0dc 100644
> --- a/include/hw/vfio/vfio-container-base.h
> +++ b/include/hw/vfio/vfio-container-base.h
> @@ -111,6 +111,8 @@ struct VFIOIOMMUClass {
>
> /* basic feature */
> bool (*setup)(VFIOContainerBase *bcontainer, Error **errp);
> + void (*listener_begin)(VFIOContainerBase *bcontainer);
> + void (*listener_commit)(VFIOContainerBase *bcontainer);
> int (*dma_map)(const VFIOContainerBase *bcontainer,
> hwaddr iova, ram_addr_t size,
> void *vaddr, bool readonly, MemoryRegion *mrp);
VFIOIOMMUClass needs more documentation. Please add some for
these new callbacks. Adding a comment saying that these callbacks
are for vfio-user would be appreciated.
Thanks,
C.