* Peter Xu (pet...@redhat.com) wrote: > Any call to ram_find_and_save_block() needs to take the bitmap mutex. We > used to not take it for most of ram_save_complete() because we thought > we're the only one left using the bitmap, but it's not true after the > preempt full patchset applied, since the return path can be taking it too. > > Signed-off-by: Peter Xu <pet...@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > --- > migration/ram.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/migration/ram.c b/migration/ram.c > index 1338e47665..cfeb571800 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -3406,6 +3406,7 @@ static int ram_save_complete(QEMUFile *f, void *opaque) > /* try transferring iterative blocks of memory */ > > /* flush all remaining blocks regardless of rate limiting */ > + qemu_mutex_lock(&rs->bitmap_mutex); > while (true) { > int pages; > > @@ -3419,6 +3420,7 @@ static int ram_save_complete(QEMUFile *f, void *opaque) > break; > } > } > + qemu_mutex_unlock(&rs->bitmap_mutex); > > flush_compressed_data(rs); > ram_control_after_iterate(f, RAM_CONTROL_FINISH); > -- > 2.37.3 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK