migration/colo: Use ram_block_discard_disable()

COLO will copy all memory in a RAM block, disable discarding of RAM.

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Tested-by: Lukas Straub <lukasstraub2@web.de>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Hailiang Zhang <zhang.zhanghailiang@huawei.com>
Cc: Juan Quintela <quintela@redhat.com>
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20200626072248.78761-10-david@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
David Hildenbrand 2020-06-26 09:22:36 +02:00 committed by Michael S. Tsirkin
parent 5f1f1902f8
commit 18b1d3c952
3 changed files with 17 additions and 4 deletions

View File

@ -25,7 +25,7 @@ void migrate_start_colo_process(MigrationState *s);
bool migration_in_colo_state(void); bool migration_in_colo_state(void);
/* loadvm */ /* loadvm */
void migration_incoming_enable_colo(void); int migration_incoming_enable_colo(void);
void migration_incoming_disable_colo(void); void migration_incoming_disable_colo(void);
bool migration_incoming_colo_enabled(void); bool migration_incoming_colo_enabled(void);
void *colo_process_incoming_thread(void *opaque); void *colo_process_incoming_thread(void *opaque);

View File

@ -338,12 +338,18 @@ bool migration_incoming_colo_enabled(void)
void migration_incoming_disable_colo(void) void migration_incoming_disable_colo(void)
{ {
ram_block_discard_disable(false);
migration_colo_enabled = false; migration_colo_enabled = false;
} }
void migration_incoming_enable_colo(void) int migration_incoming_enable_colo(void)
{ {
if (ram_block_discard_disable(true)) {
error_report("COLO: cannot disable RAM discard");
return -EBUSY;
}
migration_colo_enabled = true; migration_colo_enabled = true;
return 0;
} }
void migrate_add_address(SocketAddress *address) void migrate_add_address(SocketAddress *address)

View File

@ -2111,8 +2111,15 @@ static int loadvm_handle_recv_bitmap(MigrationIncomingState *mis,
static int loadvm_process_enable_colo(MigrationIncomingState *mis) static int loadvm_process_enable_colo(MigrationIncomingState *mis)
{ {
migration_incoming_enable_colo(); int ret = migration_incoming_enable_colo();
return colo_init_ram_cache();
if (!ret) {
ret = colo_init_ram_cache();
if (ret) {
migration_incoming_disable_colo();
}
}
return ret;
} }
/* /*