mirror of https://gitee.com/openkylin/qemu.git
Add MigrationParams structure
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
This commit is contained in:
parent
0ff1f9f585
commit
6607ae235b
|
@ -700,13 +700,13 @@ static int block_load(QEMUFile *f, void *opaque, int version_id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void block_set_params(int blk_enable, int shared_base, void *opaque)
|
||||
static void block_set_params(const MigrationParams *params, void *opaque)
|
||||
{
|
||||
block_mig_state.blk_enable = blk_enable;
|
||||
block_mig_state.shared_base = shared_base;
|
||||
block_mig_state.blk_enable = params->blk;
|
||||
block_mig_state.shared_base = params->shared;
|
||||
|
||||
/* shared base means that blk_enable = 1 */
|
||||
block_mig_state.blk_enable |= shared_base;
|
||||
block_mig_state.blk_enable |= params->shared;
|
||||
}
|
||||
|
||||
void blk_mig_init(void)
|
||||
|
|
13
migration.c
13
migration.c
|
@ -352,7 +352,7 @@ void migrate_fd_connect(MigrationState *s)
|
|||
migrate_fd_close);
|
||||
|
||||
DPRINTF("beginning savevm\n");
|
||||
ret = qemu_savevm_state_begin(s->file, s->blk, s->shared);
|
||||
ret = qemu_savevm_state_begin(s->file, &s->params);
|
||||
if (ret < 0) {
|
||||
DPRINTF("failed, %d\n", ret);
|
||||
migrate_fd_error(s);
|
||||
|
@ -361,15 +361,14 @@ void migrate_fd_connect(MigrationState *s)
|
|||
migrate_fd_put_ready(s);
|
||||
}
|
||||
|
||||
static MigrationState *migrate_init(int blk, int inc)
|
||||
static MigrationState *migrate_init(const MigrationParams *params)
|
||||
{
|
||||
MigrationState *s = migrate_get_current();
|
||||
int64_t bandwidth_limit = s->bandwidth_limit;
|
||||
|
||||
memset(s, 0, sizeof(*s));
|
||||
s->bandwidth_limit = bandwidth_limit;
|
||||
s->blk = blk;
|
||||
s->shared = inc;
|
||||
s->params = *params;
|
||||
|
||||
s->bandwidth_limit = bandwidth_limit;
|
||||
s->state = MIG_STATE_SETUP;
|
||||
|
@ -394,9 +393,13 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
|
|||
Error **errp)
|
||||
{
|
||||
MigrationState *s = migrate_get_current();
|
||||
MigrationParams params;
|
||||
const char *p;
|
||||
int ret;
|
||||
|
||||
params.blk = blk;
|
||||
params.shared = inc;
|
||||
|
||||
if (s->state == MIG_STATE_ACTIVE) {
|
||||
error_set(errp, QERR_MIGRATION_ACTIVE);
|
||||
return;
|
||||
|
@ -411,7 +414,7 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
|
|||
return;
|
||||
}
|
||||
|
||||
s = migrate_init(blk, inc);
|
||||
s = migrate_init(¶ms);
|
||||
|
||||
if (strstart(uri, "tcp:", &p)) {
|
||||
ret = tcp_start_outgoing_migration(s, p, errp);
|
||||
|
|
|
@ -19,6 +19,11 @@
|
|||
#include "notify.h"
|
||||
#include "error.h"
|
||||
|
||||
struct MigrationParams {
|
||||
bool blk;
|
||||
bool shared;
|
||||
};
|
||||
|
||||
typedef struct MigrationState MigrationState;
|
||||
|
||||
struct MigrationState
|
||||
|
@ -31,8 +36,7 @@ struct MigrationState
|
|||
int (*close)(MigrationState *s);
|
||||
int (*write)(MigrationState *s, const void *buff, size_t size);
|
||||
void *opaque;
|
||||
int blk;
|
||||
int shared;
|
||||
MigrationParams params;
|
||||
};
|
||||
|
||||
void process_incoming_migration(QEMUFile *f);
|
||||
|
|
|
@ -17,6 +17,7 @@ typedef struct DeviceState DeviceState;
|
|||
|
||||
struct Monitor;
|
||||
typedef struct Monitor Monitor;
|
||||
typedef struct MigrationParams MigrationParams;
|
||||
|
||||
/* we put basic includes here to avoid repeating them in device drivers */
|
||||
#include <stdlib.h>
|
||||
|
|
13
savevm.c
13
savevm.c
|
@ -1561,7 +1561,8 @@ bool qemu_savevm_state_blocked(Error **errp)
|
|||
return false;
|
||||
}
|
||||
|
||||
int qemu_savevm_state_begin(QEMUFile *f, int blk_enable, int shared)
|
||||
int qemu_savevm_state_begin(QEMUFile *f,
|
||||
const MigrationParams *params)
|
||||
{
|
||||
SaveStateEntry *se;
|
||||
int ret;
|
||||
|
@ -1569,8 +1570,8 @@ int qemu_savevm_state_begin(QEMUFile *f, int blk_enable, int shared)
|
|||
QTAILQ_FOREACH(se, &savevm_handlers, entry) {
|
||||
if(se->set_params == NULL) {
|
||||
continue;
|
||||
}
|
||||
se->set_params(blk_enable, shared, se->opaque);
|
||||
}
|
||||
se->set_params(params, se->opaque);
|
||||
}
|
||||
|
||||
qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
|
||||
|
@ -1708,13 +1709,17 @@ void qemu_savevm_state_cancel(QEMUFile *f)
|
|||
static int qemu_savevm_state(QEMUFile *f)
|
||||
{
|
||||
int ret;
|
||||
MigrationParams params = {
|
||||
.blk = 0,
|
||||
.shared = 0
|
||||
};
|
||||
|
||||
if (qemu_savevm_state_blocked(NULL)) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = qemu_savevm_state_begin(f, 0, 0);
|
||||
ret = qemu_savevm_state_begin(f, ¶ms);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
|
|
3
sysemu.h
3
sysemu.h
|
@ -77,7 +77,8 @@ void do_info_snapshots(Monitor *mon);
|
|||
void qemu_announce_self(void);
|
||||
|
||||
bool qemu_savevm_state_blocked(Error **errp);
|
||||
int qemu_savevm_state_begin(QEMUFile *f, int blk_enable, int shared);
|
||||
int qemu_savevm_state_begin(QEMUFile *f,
|
||||
const MigrationParams *params);
|
||||
int qemu_savevm_state_iterate(QEMUFile *f);
|
||||
int qemu_savevm_state_complete(QEMUFile *f);
|
||||
void qemu_savevm_state_cancel(QEMUFile *f);
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#ifndef QEMU_VMSTATE_H
|
||||
#define QEMU_VMSTATE_H 1
|
||||
|
||||
typedef void SaveSetParamsHandler(int blk_enable, int shared, void * opaque);
|
||||
typedef void SaveSetParamsHandler(const MigrationParams *params, void * opaque);
|
||||
typedef void SaveStateHandler(QEMUFile *f, void *opaque);
|
||||
typedef int SaveLiveStateHandler(QEMUFile *f, int stage, void *opaque);
|
||||
typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id);
|
||||
|
|
Loading…
Reference in New Issue