Hi Cédric, On 6/17/24 08:33, Cédric Le Goater wrote: > From: Joao Martins <joao.m.mart...@oracle.com> > > Separate the changes that updates the ranges from the listener, to s/updates/update > make it reusable in preparation to expand its use to vIOMMU support. > > [ clg: - Rebased on upstream > - Introduced vfio_dirty_tracking_update_range() ] > > Signed-off-by: Joao Martins <joao.m.mart...@oracle.com> > Signed-off-by: Cédric Le Goater <c...@redhat.com> > Reviewed-by: Zhenzhong Duan <zhenzhong.d...@intel.com> > --- > hw/vfio/common.c | 38 ++++++++++++++++++++++---------------- > 1 file changed, 22 insertions(+), 16 deletions(-) > > diff --git a/hw/vfio/common.c b/hw/vfio/common.c > index > d48cd9b9361a92d184e423ffc60aabaff40fb487..fe215918bdf66ddbe3c5db803e10ce1aa9756b90 > 100644 > --- a/hw/vfio/common.c > +++ b/hw/vfio/common.c > @@ -839,20 +839,11 @@ static bool > vfio_section_is_vfio_pci(MemoryRegionSection *section, > return false; > } > > -static void vfio_dirty_tracking_update(MemoryListener *listener, > - MemoryRegionSection *section) > +static void vfio_dirty_tracking_update_range(VFIODirtyRanges *range, > + hwaddr iova, hwaddr end, > + bool update_pci) > { > - VFIODirtyRangesListener *dirty = container_of(listener, > - VFIODirtyRangesListener, > - listener); > - VFIODirtyRanges *range = &dirty->ranges; > - hwaddr iova, end, *min, *max; > - > - if (!vfio_listener_valid_section(section, "tracking_update") || > - !vfio_get_section_iova_range(dirty->bcontainer, section, > - &iova, &end, NULL)) { > - return; > - } > + hwaddr *min, *max; > > /* > * The address space passed to the dirty tracker is reduced to three > ranges: > @@ -873,8 +864,7 @@ static void vfio_dirty_tracking_update(MemoryListener > *listener, > * The alternative would be an IOVATree but that has a much bigger > runtime > * overhead and unnecessary complexity. > */ > - if (vfio_section_is_vfio_pci(section, dirty->bcontainer) && > - iova >= UINT32_MAX) { > + if (update_pci && iova >= UINT32_MAX) { > min = &range->minpci64; > max = &range->maxpci64; > } else { > @@ -889,7 +879,23 @@ static void vfio_dirty_tracking_update(MemoryListener > *listener, > } > > trace_vfio_device_dirty_tracking_update(iova, end, *min, *max); don't you want to update the name of the trace point? > - return; > +} > + > +static void vfio_dirty_tracking_update(MemoryListener *listener, > + MemoryRegionSection *section) > +{ > + VFIODirtyRangesListener *dirty = > + container_of(listener, VFIODirtyRangesListener, listener); > + hwaddr iova, end; > + > + if (!vfio_listener_valid_section(section, "tracking_update") || > + !vfio_get_section_iova_range(dirty->bcontainer, section, > + &iova, &end, NULL)) { > + return; > + } > + > + vfio_dirty_tracking_update_range(&dirty->ranges, iova, end, > + vfio_section_is_vfio_pci(section, dirty->bcontainer)); > } > > static const MemoryListener vfio_dirty_tracking_listener = { Besides Reviewed-by: Eric Auger <eric.au...@redhat.com>
Eric