summary refs log tree commit diff stats
path: root/hw/vfio/listener.c
diff options
context:
space:
mode:
authorCédric Le Goater <clg@redhat.com>2025-03-26 08:51:19 +0100
committerCédric Le Goater <clg@redhat.com>2025-04-25 09:01:37 +0200
commita9183378f54969c8b11f08fdb3063925de8d77c3 (patch)
tree767d638f2b5ee3ebf1106d57472f5d6078e1e8c5 /hw/vfio/listener.c
parent74d376378e2a41392a36f34cef7d2c89ac2dfb33 (diff)
downloadfocaccia-qemu-a9183378f54969c8b11f08fdb3063925de8d77c3.tar.gz
focaccia-qemu-a9183378f54969c8b11f08fdb3063925de8d77c3.zip
vfio: Introduce vfio_listener_un/register() routines
This hides the MemoryListener implementation and makes the code common
to both IOMMU backends, legacy and IOMMUFD.

Reviewed-by: Joao Martins <joao.m.martins@oracle.com>
Reviewed-by: John Levon <john.levon@nutanix.com>
Link: https://lore.kernel.org/qemu-devel/20250326075122.1299361-35-clg@redhat.com
Signed-off-by: Cédric Le Goater <clg@redhat.com>
Diffstat (limited to 'hw/vfio/listener.c')
-rw-r--r--hw/vfio/listener.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c
index 70bdeb3ce7..d19674503c 100644
--- a/hw/vfio/listener.c
+++ b/hw/vfio/listener.c
@@ -45,6 +45,7 @@
 #include "system/tpm.h"
 #include "vfio-migration-internal.h"
 #include "vfio-helpers.h"
+#include "vfio-listener.h"
 
 /*
  * Device state interfaces
@@ -1162,7 +1163,7 @@ static void vfio_listener_log_sync(MemoryListener *listener,
     }
 }
 
-const MemoryListener vfio_memory_listener = {
+static const MemoryListener vfio_memory_listener = {
     .name = "vfio",
     .region_add = vfio_listener_region_add,
     .region_del = vfio_listener_region_del,
@@ -1170,3 +1171,22 @@ const MemoryListener vfio_memory_listener = {
     .log_global_stop = vfio_listener_log_global_stop,
     .log_sync = vfio_listener_log_sync,
 };
+
+bool vfio_listener_register(VFIOContainerBase *bcontainer, Error **errp)
+{
+    bcontainer->listener = vfio_memory_listener;
+    memory_listener_register(&bcontainer->listener, bcontainer->space->as);
+
+    if (bcontainer->error) {
+        error_propagate_prepend(errp, bcontainer->error,
+                                "memory listener initialization failed: ");
+        return false;
+    }
+
+    return true;
+}
+
+void vfio_listener_unregister(VFIOContainerBase *bcontainer)
+{
+    memory_listener_unregister(&bcontainer->listener);
+}