Commit ccb7e1b5 authored by Lidong Chen's avatar Lidong Chen Committed by Juan Quintela
Browse files

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: default avatarLidong Chen <lidongchen@tencent.com>
Reviewed-by: default avatarDr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: default avatarJuan Quintela <quintela@redhat.com>
Signed-off-by: default avatarJuan Quintela <quintela@redhat.com>
parent 4cbc9c7f
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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);
        if (ret != RAM_SAVE_CONTROL_NOT_SUPP) {
            f->bytes_xfer += size;
        if (ret != RAM_SAVE_CONTROL_DELAYED) {
        }

        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) {
+12 −0
Original line number Diff line number Diff line
@@ -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);