* Peter Xu (pet...@redhat.com) wrote: > Right now we loop ramblocks for twice, the 1st time chunk the dirty bits with > huge page information; the 2nd time we send the discard ranges. That's not > necessary - we can do them in a single loop. > > Signed-off-by: Peter Xu <pet...@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > --- > migration/ram.c | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/migration/ram.c b/migration/ram.c > index e3876181ab..ecc744d54d 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -2473,6 +2473,8 @@ static int postcopy_send_discard_bm_ram(MigrationState > *ms, RAMBlock *block) > return 0; > } > > +static void postcopy_chunk_hostpages_pass(MigrationState *ms, RAMBlock > *block); > + > /** > * postcopy_each_ram_send_discard: discard all RAMBlocks > * > @@ -2494,6 +2496,14 @@ static int > postcopy_each_ram_send_discard(MigrationState *ms) > RAMBLOCK_FOREACH_NOT_IGNORED(block) { > postcopy_discard_send_init(ms, block->idstr); > > + /* > + * Deal with TPS != HPS and huge pages. It discard any partially > sent > + * host-page size chunks, mark any partially dirty host-page size > + * chunks as all dirty. In this case the host-page is the host-page > + * for the particular RAMBlock, i.e. it might be a huge page. > + */ > + postcopy_chunk_hostpages_pass(ms, block); > + > /* > * Postcopy sends chunks of bitmap over the wire, but it > * just needs indexes at this point, avoids it having > @@ -2594,7 +2604,6 @@ static void > postcopy_chunk_hostpages_pass(MigrationState *ms, RAMBlock *block) > int ram_postcopy_send_discard_bitmap(MigrationState *ms) > { > RAMState *rs = ram_state; > - RAMBlock *block; > > RCU_READ_LOCK_GUARD(); > > @@ -2606,15 +2615,6 @@ int ram_postcopy_send_discard_bitmap(MigrationState > *ms) > rs->last_sent_block = NULL; > rs->last_page = 0; > > - RAMBLOCK_FOREACH_NOT_IGNORED(block) { > - /* > - * Deal with TPS != HPS and huge pages. It discard any partially > sent > - * host-page size chunks, mark any partially dirty host-page size > - * chunks as all dirty. In this case the host-page is the host-page > - * for the particular RAMBlock, i.e. it might be a huge page. > - */ > - postcopy_chunk_hostpages_pass(ms, block); > - } > trace_ram_postcopy_send_discard_bitmap(); > > return postcopy_each_ram_send_discard(ms); > -- > 2.32.0 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK