On Wed, 1 Apr 2020 20:00:32 +0100 "Dr. David Alan Gilbert" <dgilb...@redhat.com> wrote:
> * Kirti Wankhede (kwankh...@nvidia.com) wrote: > > Signed-off-by: Kirti Wankhede <kwankh...@nvidia.com> > > --- > > memory.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/memory.c b/memory.c > > index acb7546971c3..285ca2ed6dd9 100644 > > --- a/memory.c > > +++ b/memory.c > > @@ -1788,7 +1788,7 @@ bool memory_region_is_ram_device(MemoryRegion *mr) > > uint8_t memory_region_get_dirty_log_mask(MemoryRegion *mr) > > { > > uint8_t mask = mr->dirty_log_mask; > > - if (global_dirty_log && mr->ram_block) { > > + if (global_dirty_log && (mr->ram_block || memory_region_is_iommu(mr))) > > { > > mask |= (1 << DIRTY_MEMORY_MIGRATION); > > I'm missing why the two go together here. > What does 'is_iommu' really mean? I take that to mean MemoryRegion is translated by an IOMMU, ie. it's an IOVA range of the IOMMU. Therefore we're adding it to dirty log tracking, just as we do for ram blocks. At least that's my interpretation of what it's supposed to do, I'm not an expert here on whether it's the right way to do that. Thanks, Alex