* Peter Xu ([email protected]) wrote: > We used to do off-by-one fixup for pss->page when finished one host huge page > transfer. That seems to be unnecesary at all. Drop it. > > Cc: Keqian Zhu <[email protected]> > Cc: Kunkun Jiang <[email protected]> > Cc: Andrey Gruzdev <[email protected]> > Signed-off-by: Peter Xu <[email protected]>
Yes, I think so - I guess the -1 and +1 cancel so it works, and in practice ram_save_host_page then points to 1 page inside the hugepage which is then always clean (because it just sent it) so probably survives. Reviewed-by: Dr. David Alan Gilbert <[email protected]> > --- > migration/ram.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/migration/ram.c b/migration/ram.c > index 5234d1ece1..381ad56d26 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -1611,7 +1611,7 @@ static int ram_save_release_protection(RAMState *rs, > PageSearchStatus *pss, > /* Check if page is from UFFD-managed region. */ > if (pss->block->flags & RAM_UF_WRITEPROTECT) { > void *page_address = pss->block->host + (start_page << > TARGET_PAGE_BITS); > - uint64_t run_length = (pss->page - start_page + 1) << > TARGET_PAGE_BITS; > + uint64_t run_length = (pss->page - start_page) << TARGET_PAGE_BITS; > > /* Flush async buffers before un-protect. */ > qemu_fflush(rs->f); > @@ -2230,7 +2230,7 @@ static int ram_save_host_page(RAMState *rs, > PageSearchStatus *pss, > offset_in_ramblock(pss->block, > ((ram_addr_t)pss->page) << > TARGET_PAGE_BITS)); > /* The offset we leave with is the min boundary of host page and block */ > - pss->page = MIN(pss->page, hostpage_boundary) - 1; > + pss->page = MIN(pss->page, hostpage_boundary); > > res = ram_save_release_protection(rs, pss, start_page); > return (res < 0 ? res : pages); > -- > 2.32.0 > -- Dr. David Alan Gilbert / [email protected] / Manchester, UK
