>-----Original Message----- >From: Steve Sistare <steven.sist...@oracle.com> >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 <steven.sist...@oracle.com> >Reviewed-by: Cédric Le Goater <c...@redhat.com>
Reviewed-by: Zhenzhong Duan <zhenzhong.d...@intel.com> >--- > 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