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