migration: disable RDMA WRITE after postcopy started
RDMA WRITE operations are performed with no notification to the destination qemu, then the destination qemu can not wakeup. This patch disable RDMA WRITE after postcopy started. Signed-off-by: Lidong Chen <lidongchen@tencent.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
4cbc9c7ffd
commit
ccb7e1b5a6
@ -253,8 +253,12 @@ size_t ram_control_save_page(QEMUFile *f, ram_addr_t block_offset,
|
||||
if (f->hooks && f->hooks->save_page) {
|
||||
int ret = f->hooks->save_page(f, f->opaque, block_offset,
|
||||
offset, size, bytes_sent);
|
||||
f->bytes_xfer += size;
|
||||
if (ret != RAM_SAVE_CONTROL_DELAYED) {
|
||||
if (ret != RAM_SAVE_CONTROL_NOT_SUPP) {
|
||||
f->bytes_xfer += size;
|
||||
}
|
||||
|
||||
if (ret != RAM_SAVE_CONTROL_DELAYED &&
|
||||
ret != RAM_SAVE_CONTROL_NOT_SUPP) {
|
||||
if (bytes_sent && *bytes_sent > 0) {
|
||||
qemu_update_position(f, *bytes_sent);
|
||||
} else if (ret < 0) {
|
||||
|
@ -2921,6 +2921,10 @@ static size_t qemu_rdma_save_page(QEMUFile *f, void *opaque,
|
||||
|
||||
CHECK_ERROR_STATE();
|
||||
|
||||
if (migrate_get_current()->state == MIGRATION_STATUS_POSTCOPY_ACTIVE) {
|
||||
return RAM_SAVE_CONTROL_NOT_SUPP;
|
||||
}
|
||||
|
||||
qemu_fflush(f);
|
||||
|
||||
if (size > 0) {
|
||||
@ -3480,6 +3484,10 @@ static int qemu_rdma_registration_start(QEMUFile *f, void *opaque,
|
||||
|
||||
CHECK_ERROR_STATE();
|
||||
|
||||
if (migrate_get_current()->state == MIGRATION_STATUS_POSTCOPY_ACTIVE) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
trace_qemu_rdma_registration_start(flags);
|
||||
qemu_put_be64(f, RAM_SAVE_FLAG_HOOK);
|
||||
qemu_fflush(f);
|
||||
@ -3502,6 +3510,10 @@ static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque,
|
||||
|
||||
CHECK_ERROR_STATE();
|
||||
|
||||
if (migrate_get_current()->state == MIGRATION_STATUS_POSTCOPY_ACTIVE) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
qemu_fflush(f);
|
||||
ret = qemu_rdma_drain_cq(f, rdma);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user