* David Hildenbrand (david@xxxxxxxxxx) wrote: > COLO will copy all memory in a RAM block, mark discarding of RAM broken. > > Cc: "Michael S. Tsirkin" <mst@xxxxxxxxxx> > Cc: Hailiang Zhang <zhang.zhanghailiang@xxxxxxxxxx> > Cc: Juan Quintela <quintela@xxxxxxxxxx> > Cc: "Dr. David Alan Gilbert" <dgilbert@xxxxxxxxxx> > Signed-off-by: David Hildenbrand <david@xxxxxxxxxx> > --- > include/migration/colo.h | 2 +- > migration/migration.c | 8 +++++++- > migration/savevm.c | 11 +++++++++-- > 3 files changed, 17 insertions(+), 4 deletions(-) > > diff --git a/include/migration/colo.h b/include/migration/colo.h > index 1636e6f907..768e1f04c3 100644 > --- a/include/migration/colo.h > +++ b/include/migration/colo.h > @@ -25,7 +25,7 @@ void migrate_start_colo_process(MigrationState *s); > bool migration_in_colo_state(void); > > /* loadvm */ > -void migration_incoming_enable_colo(void); > +int migration_incoming_enable_colo(void); > void migration_incoming_disable_colo(void); > bool migration_incoming_colo_enabled(void); > void *colo_process_incoming_thread(void *opaque); > diff --git a/migration/migration.c b/migration/migration.c > index 177cce9e95..f6830e4620 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -338,12 +338,18 @@ bool migration_incoming_colo_enabled(void) > > void migration_incoming_disable_colo(void) > { > + ram_block_discard_set_broken(false); > migration_colo_enabled = false; > } > > -void migration_incoming_enable_colo(void) > +int migration_incoming_enable_colo(void) > { > + if (ram_block_discard_set_broken(true)) { > + error_report("COLO: cannot set discarding of RAM broken"); I'd prefer 'COLO: cannot disable RAM discard' 'broken' suggests the user has to go and fix something or report a bug or something. Other than that: Reviewed-by: Dr. David Alan Gilbert <dgilbert@xxxxxxxxxx> Dave > + return -EBUSY; > + } > migration_colo_enabled = true; > + return 0; > } > > void migrate_add_address(SocketAddress *address) > diff --git a/migration/savevm.c b/migration/savevm.c > index c00a6807d9..19b4f9600d 100644 > --- a/migration/savevm.c > +++ b/migration/savevm.c > @@ -2111,8 +2111,15 @@ static int loadvm_handle_recv_bitmap(MigrationIncomingState *mis, > > static int loadvm_process_enable_colo(MigrationIncomingState *mis) > { > - migration_incoming_enable_colo(); > - return colo_init_ram_cache(); > + int ret = migration_incoming_enable_colo(); > + > + if (!ret) { > + ret = colo_init_ram_cache(); > + if (ret) { > + migration_incoming_disable_colo(); > + } > + } > + return ret; > } > > /* > -- > 2.25.3 > -- Dr. David Alan Gilbert / dgilbert@xxxxxxxxxx / Manchester, UK