RE: [PATCH V4 07/43] vfio: vfio_find_ram_discard_listener

2025-06-03 Thread Duan, Zhenzhong


>-Original Message-
>From: Steve Sistare 
>Subject: [PATCH V4 07/43] vfio: vfio_find_ram_discard_listener
>
>Define vfio_find_ram_discard_listener as a subroutine so additional calls to
>it may be added in a subsequent patch.
>
>Signed-off-by: Steve Sistare 
>Reviewed-by: Cédric Le Goater 

Reviewed-by: Zhenzhong Duan 

>---
> include/hw/vfio/vfio-container-base.h |  3 +++
> hw/vfio/listener.c| 35 ++-
> 2 files changed, 25 insertions(+), 13 deletions(-)
>
>diff --git a/include/hw/vfio/vfio-container-base.h b/include/hw/vfio/vfio-
>container-base.h
>index 83ba7a5..01cdcb6 100644
>--- a/include/hw/vfio/vfio-container-base.h
>+++ b/include/hw/vfio/vfio-container-base.h
>@@ -196,4 +196,7 @@ struct VFIOIOMMUClass {
> void (*release)(VFIOContainerBase *bcontainer);
> };
>
>+VFIORamDiscardListener *vfio_find_ram_discard_listener(
>+VFIOContainerBase *bcontainer, MemoryRegionSection *section);
>+
> #endif /* HW_VFIO_VFIO_CONTAINER_BASE_H */
>diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c
>index a1d2d25..fb1fd84 100644
>--- a/hw/vfio/listener.c
>+++ b/hw/vfio/listener.c
>@@ -456,6 +456,26 @@ static void vfio_device_error_append(VFIODevice
>*vbasedev, Error **errp)
> }
> }
>
>+VFIORamDiscardListener *vfio_find_ram_discard_listener(
>+VFIOContainerBase *bcontainer, MemoryRegionSection *section)
>+{
>+VFIORamDiscardListener *vrdl = NULL;
>+
>+QLIST_FOREACH(vrdl, &bcontainer->vrdl_list, next) {
>+if (vrdl->mr == section->mr &&
>+vrdl->offset_within_address_space ==
>+section->offset_within_address_space) {
>+break;
>+}
>+}
>+
>+if (!vrdl) {
>+hw_error("vfio: Trying to sync missing RAM discard listener");
>+/* does not return */
>+}
>+return vrdl;
>+}
>+
> static void vfio_listener_region_add(MemoryListener *listener,
>  MemoryRegionSection *section)
> {
>@@ -1086,19 +1106,8 @@
>vfio_sync_ram_discard_listener_dirty_bitmap(VFIOContainerBase *bcontainer,
> MemoryRegionSection *section)
> {
> RamDiscardManager *rdm =
>memory_region_get_ram_discard_manager(section->mr);
>-VFIORamDiscardListener *vrdl = NULL;
>-
>-QLIST_FOREACH(vrdl, &bcontainer->vrdl_list, next) {
>-if (vrdl->mr == section->mr &&
>-vrdl->offset_within_address_space ==
>-section->offset_within_address_space) {
>-break;
>-}
>-}
>-
>-if (!vrdl) {
>-hw_error("vfio: Trying to sync missing RAM discard listener");
>-}
>+VFIORamDiscardListener *vrdl =
>+vfio_find_ram_discard_listener(bcontainer, section);
>
> /*
>  * We only want/can synchronize the bitmap for actually mapped parts -
>--
>1.8.3.1



[PATCH V4 07/43] vfio: vfio_find_ram_discard_listener

2025-05-29 Thread Steve Sistare
Define vfio_find_ram_discard_listener as a subroutine so additional calls to
it may be added in a subsequent patch.

Signed-off-by: Steve Sistare 
Reviewed-by: Cédric Le Goater 
---
 include/hw/vfio/vfio-container-base.h |  3 +++
 hw/vfio/listener.c| 35 ++-
 2 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/include/hw/vfio/vfio-container-base.h 
b/include/hw/vfio/vfio-container-base.h
index 83ba7a5..01cdcb6 100644
--- a/include/hw/vfio/vfio-container-base.h
+++ b/include/hw/vfio/vfio-container-base.h
@@ -196,4 +196,7 @@ struct VFIOIOMMUClass {
 void (*release)(VFIOContainerBase *bcontainer);
 };
 
+VFIORamDiscardListener *vfio_find_ram_discard_listener(
+VFIOContainerBase *bcontainer, MemoryRegionSection *section);
+
 #endif /* HW_VFIO_VFIO_CONTAINER_BASE_H */
diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c
index a1d2d25..fb1fd84 100644
--- a/hw/vfio/listener.c
+++ b/hw/vfio/listener.c
@@ -456,6 +456,26 @@ static void vfio_device_error_append(VFIODevice *vbasedev, 
Error **errp)
 }
 }
 
+VFIORamDiscardListener *vfio_find_ram_discard_listener(
+VFIOContainerBase *bcontainer, MemoryRegionSection *section)
+{
+VFIORamDiscardListener *vrdl = NULL;
+
+QLIST_FOREACH(vrdl, &bcontainer->vrdl_list, next) {
+if (vrdl->mr == section->mr &&
+vrdl->offset_within_address_space ==
+section->offset_within_address_space) {
+break;
+}
+}
+
+if (!vrdl) {
+hw_error("vfio: Trying to sync missing RAM discard listener");
+/* does not return */
+}
+return vrdl;
+}
+
 static void vfio_listener_region_add(MemoryListener *listener,
  MemoryRegionSection *section)
 {
@@ -1086,19 +1106,8 @@ 
vfio_sync_ram_discard_listener_dirty_bitmap(VFIOContainerBase *bcontainer,
 MemoryRegionSection *section)
 {
 RamDiscardManager *rdm = 
memory_region_get_ram_discard_manager(section->mr);
-VFIORamDiscardListener *vrdl = NULL;
-
-QLIST_FOREACH(vrdl, &bcontainer->vrdl_list, next) {
-if (vrdl->mr == section->mr &&
-vrdl->offset_within_address_space ==
-section->offset_within_address_space) {
-break;
-}
-}
-
-if (!vrdl) {
-hw_error("vfio: Trying to sync missing RAM discard listener");
-}
+VFIORamDiscardListener *vrdl =
+vfio_find_ram_discard_listener(bcontainer, section);
 
 /*
  * We only want/can synchronize the bitmap for actually mapped parts -
-- 
1.8.3.1