Commit 76f5933a authored by Juan Quintela's avatar Juan Quintela
Browse files

migration: move beginning stage to the migration thread

parent afe41931
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -54,7 +54,6 @@ struct MigrationState
    bool enabled_capabilities[MIGRATION_CAPABILITY_MAX];
    int64_t xbzrle_cache_size;
    bool complete;
    bool first_time;
};

void process_incoming_migration(QEMUFile *f);
+15 −13
Original line number Diff line number Diff line
@@ -674,17 +674,6 @@ static bool migrate_fd_put_ready(MigrationState *s, uint64_t max_size)
        qemu_mutex_unlock_iothread();
        return false;
    }
    if (s->first_time) {
        s->first_time = false;
        DPRINTF("beginning savevm\n");
        ret = qemu_savevm_state_begin(s->file, &s->params);
        if (ret < 0) {
            DPRINTF("failed, %d\n", ret);
            migrate_fd_error(s);
            qemu_mutex_unlock_iothread();
            return false;
        }
    }

    DPRINTF("iterate\n");
    pending_size = qemu_savevm_state_pending(s->file, max_size);
@@ -733,6 +722,17 @@ static void *buffered_file_thread(void *opaque)
    int64_t initial_time = qemu_get_clock_ms(rt_clock);
    int64_t max_size = 0;
    bool last_round = false;
    int ret;

    qemu_mutex_lock_iothread();
    DPRINTF("beginning savevm\n");
    ret = qemu_savevm_state_begin(s->file, &s->params);
    if (ret < 0) {
        DPRINTF("failed, %d\n", ret);
        qemu_mutex_unlock_iothread();
        goto out;
    }
    qemu_mutex_unlock_iothread();

    while (true) {
        int64_t current_time = qemu_get_clock_ms(rt_clock);
@@ -768,6 +768,10 @@ static void *buffered_file_thread(void *opaque)
        }
    }

out:
    if (ret < 0) {
        migrate_fd_error(s);
    }
    g_free(s->buffer);
    return NULL;
}
@@ -789,8 +793,6 @@ void migrate_fd_connect(MigrationState *s)
    s->buffer_size = 0;
    s->buffer_capacity = 0;

    s->first_time = true;

    s->xfer_limit = s->bandwidth_limit / XFER_LIMIT_RATIO;
    s->complete = false;