migration: remove the QEMUFileOps abstraction
Now that all QEMUFile callbacks are removed, the entire concept can be deleted. Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
02bdbe172d
commit
77ef2dc1c8
@ -14,7 +14,7 @@
|
|||||||
#include "channel.h"
|
#include "channel.h"
|
||||||
#include "tls.h"
|
#include "tls.h"
|
||||||
#include "migration.h"
|
#include "migration.h"
|
||||||
#include "qemu-file-channel.h"
|
#include "qemu-file.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "io/channel-tls.h"
|
#include "io/channel-tls.h"
|
||||||
@ -85,7 +85,7 @@ void migration_channel_connect(MigrationState *s,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
QEMUFile *f = qemu_fopen_channel_output(ioc);
|
QEMUFile *f = qemu_file_new_output(ioc);
|
||||||
|
|
||||||
migration_ioc_register_yank(ioc);
|
migration_ioc_register_yank(ioc);
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qapi/qapi-commands-migration.h"
|
#include "qapi/qapi-commands-migration.h"
|
||||||
#include "qemu-file-channel.h"
|
|
||||||
#include "migration.h"
|
#include "migration.h"
|
||||||
#include "qemu-file.h"
|
#include "qemu-file.h"
|
||||||
#include "savevm.h"
|
#include "savevm.h"
|
||||||
@ -559,7 +558,7 @@ static void colo_process_checkpoint(MigrationState *s)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
bioc = qio_channel_buffer_new(COLO_BUFFER_BASE_SIZE);
|
bioc = qio_channel_buffer_new(COLO_BUFFER_BASE_SIZE);
|
||||||
fb = qemu_fopen_channel_output(QIO_CHANNEL(bioc));
|
fb = qemu_file_new_output(QIO_CHANNEL(bioc));
|
||||||
object_unref(OBJECT(bioc));
|
object_unref(OBJECT(bioc));
|
||||||
|
|
||||||
qemu_mutex_lock_iothread();
|
qemu_mutex_lock_iothread();
|
||||||
@ -873,7 +872,7 @@ void *colo_process_incoming_thread(void *opaque)
|
|||||||
colo_incoming_start_dirty_log();
|
colo_incoming_start_dirty_log();
|
||||||
|
|
||||||
bioc = qio_channel_buffer_new(COLO_BUFFER_BASE_SIZE);
|
bioc = qio_channel_buffer_new(COLO_BUFFER_BASE_SIZE);
|
||||||
fb = qemu_fopen_channel_input(QIO_CHANNEL(bioc));
|
fb = qemu_file_new_input(QIO_CHANNEL(bioc));
|
||||||
object_unref(OBJECT(bioc));
|
object_unref(OBJECT(bioc));
|
||||||
|
|
||||||
qemu_mutex_lock_iothread();
|
qemu_mutex_lock_iothread();
|
||||||
|
@ -4,7 +4,6 @@ migration_files = files(
|
|||||||
'xbzrle.c',
|
'xbzrle.c',
|
||||||
'vmstate-types.c',
|
'vmstate-types.c',
|
||||||
'vmstate.c',
|
'vmstate.c',
|
||||||
'qemu-file-channel.c',
|
|
||||||
'qemu-file.c',
|
'qemu-file.c',
|
||||||
'yank_functions.c',
|
'yank_functions.c',
|
||||||
)
|
)
|
||||||
|
@ -30,7 +30,6 @@
|
|||||||
#include "migration/misc.h"
|
#include "migration/misc.h"
|
||||||
#include "migration.h"
|
#include "migration.h"
|
||||||
#include "savevm.h"
|
#include "savevm.h"
|
||||||
#include "qemu-file-channel.h"
|
|
||||||
#include "qemu-file.h"
|
#include "qemu-file.h"
|
||||||
#include "migration/vmstate.h"
|
#include "migration/vmstate.h"
|
||||||
#include "block/block.h"
|
#include "block/block.h"
|
||||||
@ -723,7 +722,7 @@ void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp)
|
|||||||
|
|
||||||
if (!mis->from_src_file) {
|
if (!mis->from_src_file) {
|
||||||
/* The first connection (multifd may have multiple) */
|
/* The first connection (multifd may have multiple) */
|
||||||
QEMUFile *f = qemu_fopen_channel_input(ioc);
|
QEMUFile *f = qemu_file_new_input(ioc);
|
||||||
|
|
||||||
if (!migration_incoming_setup(f, errp)) {
|
if (!migration_incoming_setup(f, errp)) {
|
||||||
return;
|
return;
|
||||||
@ -3076,7 +3075,7 @@ static int postcopy_start(MigrationState *ms)
|
|||||||
*/
|
*/
|
||||||
bioc = qio_channel_buffer_new(4096);
|
bioc = qio_channel_buffer_new(4096);
|
||||||
qio_channel_set_name(QIO_CHANNEL(bioc), "migration-postcopy-buffer");
|
qio_channel_set_name(QIO_CHANNEL(bioc), "migration-postcopy-buffer");
|
||||||
fb = qemu_fopen_channel_output(QIO_CHANNEL(bioc));
|
fb = qemu_file_new_output(QIO_CHANNEL(bioc));
|
||||||
object_unref(OBJECT(bioc));
|
object_unref(OBJECT(bioc));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -3966,7 +3965,7 @@ static void *bg_migration_thread(void *opaque)
|
|||||||
*/
|
*/
|
||||||
s->bioc = qio_channel_buffer_new(512 * 1024);
|
s->bioc = qio_channel_buffer_new(512 * 1024);
|
||||||
qio_channel_set_name(QIO_CHANNEL(s->bioc), "vmstate-buffer");
|
qio_channel_set_name(QIO_CHANNEL(s->bioc), "vmstate-buffer");
|
||||||
fb = qemu_fopen_channel_output(QIO_CHANNEL(s->bioc));
|
fb = qemu_file_new_output(QIO_CHANNEL(s->bioc));
|
||||||
object_unref(OBJECT(s->bioc));
|
object_unref(OBJECT(s->bioc));
|
||||||
|
|
||||||
update_iteration_initial_status(s);
|
update_iteration_initial_status(s);
|
||||||
|
@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
* QEMUFile backend for QIOChannel objects
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015-2016 Red Hat, Inc
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "qemu/osdep.h"
|
|
||||||
#include "qemu-file-channel.h"
|
|
||||||
#include "qemu-file.h"
|
|
||||||
#include "io/channel-socket.h"
|
|
||||||
#include "io/channel-tls.h"
|
|
||||||
#include "qemu/iov.h"
|
|
||||||
#include "qemu/yank.h"
|
|
||||||
#include "yank_functions.h"
|
|
||||||
|
|
||||||
|
|
||||||
static const QEMUFileOps channel_input_ops = {
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static const QEMUFileOps channel_output_ops = {
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
QEMUFile *qemu_fopen_channel_input(QIOChannel *ioc)
|
|
||||||
{
|
|
||||||
object_ref(OBJECT(ioc));
|
|
||||||
return qemu_file_new_input(ioc, &channel_input_ops);
|
|
||||||
}
|
|
||||||
|
|
||||||
QEMUFile *qemu_fopen_channel_output(QIOChannel *ioc)
|
|
||||||
{
|
|
||||||
object_ref(OBJECT(ioc));
|
|
||||||
return qemu_file_new_output(ioc, &channel_output_ops);
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
/*
|
|
||||||
* QEMUFile backend for QIOChannel objects
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015-2016 Red Hat, Inc
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QEMU_FILE_CHANNEL_H
|
|
||||||
#define QEMU_FILE_CHANNEL_H
|
|
||||||
|
|
||||||
#include "io/channel.h"
|
|
||||||
|
|
||||||
QEMUFile *qemu_fopen_channel_input(QIOChannel *ioc);
|
|
||||||
QEMUFile *qemu_fopen_channel_output(QIOChannel *ioc);
|
|
||||||
#endif
|
|
@ -35,7 +35,6 @@
|
|||||||
#define MAX_IOV_SIZE MIN_CONST(IOV_MAX, 64)
|
#define MAX_IOV_SIZE MIN_CONST(IOV_MAX, 64)
|
||||||
|
|
||||||
struct QEMUFile {
|
struct QEMUFile {
|
||||||
const QEMUFileOps *ops;
|
|
||||||
const QEMUFileHooks *hooks;
|
const QEMUFileHooks *hooks;
|
||||||
QIOChannel *ioc;
|
QIOChannel *ioc;
|
||||||
bool is_writable;
|
bool is_writable;
|
||||||
@ -107,16 +106,14 @@ bool qemu_file_mode_is_not_valid(const char *mode)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QEMUFile *qemu_file_new_impl(QIOChannel *ioc,
|
static QEMUFile *qemu_file_new_impl(QIOChannel *ioc, bool is_writable)
|
||||||
const QEMUFileOps *ops,
|
|
||||||
bool is_writable)
|
|
||||||
{
|
{
|
||||||
QEMUFile *f;
|
QEMUFile *f;
|
||||||
|
|
||||||
f = g_new0(QEMUFile, 1);
|
f = g_new0(QEMUFile, 1);
|
||||||
|
|
||||||
|
object_ref(ioc);
|
||||||
f->ioc = ioc;
|
f->ioc = ioc;
|
||||||
f->ops = ops;
|
|
||||||
f->is_writable = is_writable;
|
f->is_writable = is_writable;
|
||||||
|
|
||||||
return f;
|
return f;
|
||||||
@ -128,21 +125,19 @@ static QEMUFile *qemu_file_new_impl(QIOChannel *ioc,
|
|||||||
*/
|
*/
|
||||||
QEMUFile *qemu_file_get_return_path(QEMUFile *f)
|
QEMUFile *qemu_file_get_return_path(QEMUFile *f)
|
||||||
{
|
{
|
||||||
object_ref(f->ioc);
|
return qemu_file_new_impl(f->ioc, !f->is_writable);
|
||||||
return qemu_file_new_impl(f->ioc, f->ops, !f->is_writable);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QEMUFile *qemu_file_new_output(QIOChannel *ioc, const QEMUFileOps *ops)
|
QEMUFile *qemu_file_new_output(QIOChannel *ioc)
|
||||||
{
|
{
|
||||||
return qemu_file_new_impl(ioc, ops, true);
|
return qemu_file_new_impl(ioc, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
QEMUFile *qemu_file_new_input(QIOChannel *ioc, const QEMUFileOps *ops)
|
QEMUFile *qemu_file_new_input(QIOChannel *ioc)
|
||||||
{
|
{
|
||||||
return qemu_file_new_impl(ioc, ops, false);
|
return qemu_file_new_impl(ioc, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks *hooks)
|
void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks *hooks)
|
||||||
{
|
{
|
||||||
f->hooks = hooks;
|
f->hooks = hooks;
|
||||||
@ -238,6 +233,7 @@ static void qemu_iovec_release_ram(QEMUFile *f)
|
|||||||
memset(f->may_free, 0, sizeof(f->may_free));
|
memset(f->may_free, 0, sizeof(f->may_free));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flushes QEMUFile buffer
|
* Flushes QEMUFile buffer
|
||||||
*
|
*
|
||||||
|
@ -55,9 +55,6 @@ typedef size_t (QEMURamSaveFunc)(QEMUFile *f,
|
|||||||
size_t size,
|
size_t size,
|
||||||
uint64_t *bytes_sent);
|
uint64_t *bytes_sent);
|
||||||
|
|
||||||
typedef struct QEMUFileOps {
|
|
||||||
} QEMUFileOps;
|
|
||||||
|
|
||||||
typedef struct QEMUFileHooks {
|
typedef struct QEMUFileHooks {
|
||||||
QEMURamHookFunc *before_ram_iterate;
|
QEMURamHookFunc *before_ram_iterate;
|
||||||
QEMURamHookFunc *after_ram_iterate;
|
QEMURamHookFunc *after_ram_iterate;
|
||||||
@ -65,8 +62,8 @@ typedef struct QEMUFileHooks {
|
|||||||
QEMURamSaveFunc *save_page;
|
QEMURamSaveFunc *save_page;
|
||||||
} QEMUFileHooks;
|
} QEMUFileHooks;
|
||||||
|
|
||||||
QEMUFile *qemu_file_new_input(QIOChannel *ioc, const QEMUFileOps *ops);
|
QEMUFile *qemu_file_new_input(QIOChannel *ioc);
|
||||||
QEMUFile *qemu_file_new_output(QIOChannel *ioc, const QEMUFileOps *ops);
|
QEMUFile *qemu_file_new_output(QIOChannel *ioc);
|
||||||
void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks *hooks);
|
void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks *hooks);
|
||||||
int qemu_fclose(QEMUFile *f);
|
int qemu_fclose(QEMUFile *f);
|
||||||
|
|
||||||
|
@ -38,7 +38,6 @@
|
|||||||
#include "migration.h"
|
#include "migration.h"
|
||||||
#include "migration/register.h"
|
#include "migration/register.h"
|
||||||
#include "migration/misc.h"
|
#include "migration/misc.h"
|
||||||
#include "migration/qemu-file-channel.h"
|
|
||||||
#include "qemu-file.h"
|
#include "qemu-file.h"
|
||||||
#include "postcopy-ram.h"
|
#include "postcopy-ram.h"
|
||||||
#include "page_cache.h"
|
#include "page_cache.h"
|
||||||
@ -569,7 +568,7 @@ static int compress_threads_save_setup(void)
|
|||||||
/* comp_param[i].file is just used as a dummy buffer to save data,
|
/* comp_param[i].file is just used as a dummy buffer to save data,
|
||||||
* set its ops to empty.
|
* set its ops to empty.
|
||||||
*/
|
*/
|
||||||
comp_param[i].file = qemu_fopen_channel_output(
|
comp_param[i].file = qemu_file_new_output(
|
||||||
QIO_CHANNEL(qio_channel_null_new()));
|
QIO_CHANNEL(qio_channel_null_new()));
|
||||||
comp_param[i].done = true;
|
comp_param[i].done = true;
|
||||||
comp_param[i].quit = false;
|
comp_param[i].quit = false;
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
#include "migration.h"
|
#include "migration.h"
|
||||||
#include "qemu-file.h"
|
#include "qemu-file.h"
|
||||||
#include "ram.h"
|
#include "ram.h"
|
||||||
#include "qemu-file-channel.h"
|
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
#include "qemu/main-loop.h"
|
#include "qemu/main-loop.h"
|
||||||
#include "qemu/module.h"
|
#include "qemu/module.h"
|
||||||
@ -4052,12 +4051,12 @@ static QEMUFile *qemu_fopen_rdma(RDMAContext *rdma, const char *mode)
|
|||||||
rioc = QIO_CHANNEL_RDMA(object_new(TYPE_QIO_CHANNEL_RDMA));
|
rioc = QIO_CHANNEL_RDMA(object_new(TYPE_QIO_CHANNEL_RDMA));
|
||||||
|
|
||||||
if (mode[0] == 'w') {
|
if (mode[0] == 'w') {
|
||||||
rioc->file = qemu_fopen_channel_output(QIO_CHANNEL(rioc));
|
rioc->file = qemu_file_new_output(QIO_CHANNEL(rioc));
|
||||||
rioc->rdmaout = rdma;
|
rioc->rdmaout = rdma;
|
||||||
rioc->rdmain = rdma->return_path;
|
rioc->rdmain = rdma->return_path;
|
||||||
qemu_file_set_hooks(rioc->file, &rdma_write_hooks);
|
qemu_file_set_hooks(rioc->file, &rdma_write_hooks);
|
||||||
} else {
|
} else {
|
||||||
rioc->file = qemu_fopen_channel_input(QIO_CHANNEL(rioc));
|
rioc->file = qemu_file_new_input(QIO_CHANNEL(rioc));
|
||||||
rioc->rdmain = rdma;
|
rioc->rdmain = rdma;
|
||||||
rioc->rdmaout = rdma->return_path;
|
rioc->rdmaout = rdma->return_path;
|
||||||
qemu_file_set_hooks(rioc->file, &rdma_read_hooks);
|
qemu_file_set_hooks(rioc->file, &rdma_read_hooks);
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
#include "migration/global_state.h"
|
#include "migration/global_state.h"
|
||||||
#include "migration/channel-block.h"
|
#include "migration/channel-block.h"
|
||||||
#include "ram.h"
|
#include "ram.h"
|
||||||
#include "qemu-file-channel.h"
|
|
||||||
#include "qemu-file.h"
|
#include "qemu-file.h"
|
||||||
#include "savevm.h"
|
#include "savevm.h"
|
||||||
#include "postcopy-ram.h"
|
#include "postcopy-ram.h"
|
||||||
@ -134,11 +133,9 @@ static struct mig_cmd_args {
|
|||||||
static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int is_writable)
|
static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int is_writable)
|
||||||
{
|
{
|
||||||
if (is_writable) {
|
if (is_writable) {
|
||||||
return qemu_fopen_channel_output(
|
return qemu_file_new_output(QIO_CHANNEL(qio_channel_block_new(bs)));
|
||||||
QIO_CHANNEL(qio_channel_block_new(bs)));
|
|
||||||
} else {
|
} else {
|
||||||
return qemu_fopen_channel_input(
|
return qemu_file_new_input(QIO_CHANNEL(qio_channel_block_new(bs)));
|
||||||
QIO_CHANNEL(qio_channel_block_new(bs)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2161,7 +2158,7 @@ static int loadvm_handle_cmd_packaged(MigrationIncomingState *mis)
|
|||||||
bioc->usage += length;
|
bioc->usage += length;
|
||||||
trace_loadvm_handle_cmd_packaged_received(ret);
|
trace_loadvm_handle_cmd_packaged_received(ret);
|
||||||
|
|
||||||
QEMUFile *packf = qemu_fopen_channel_input(QIO_CHANNEL(bioc));
|
QEMUFile *packf = qemu_file_new_input(QIO_CHANNEL(bioc));
|
||||||
|
|
||||||
ret = qemu_loadvm_state_main(packf, mis);
|
ret = qemu_loadvm_state_main(packf, mis);
|
||||||
trace_loadvm_handle_cmd_packaged_main(ret);
|
trace_loadvm_handle_cmd_packaged_main(ret);
|
||||||
@ -2919,7 +2916,7 @@ void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live,
|
|||||||
goto the_end;
|
goto the_end;
|
||||||
}
|
}
|
||||||
qio_channel_set_name(QIO_CHANNEL(ioc), "migration-xen-save-state");
|
qio_channel_set_name(QIO_CHANNEL(ioc), "migration-xen-save-state");
|
||||||
f = qemu_fopen_channel_output(QIO_CHANNEL(ioc));
|
f = qemu_file_new_output(QIO_CHANNEL(ioc));
|
||||||
object_unref(OBJECT(ioc));
|
object_unref(OBJECT(ioc));
|
||||||
ret = qemu_save_device_state(f);
|
ret = qemu_save_device_state(f);
|
||||||
if (ret < 0 || qemu_fclose(f) < 0) {
|
if (ret < 0 || qemu_fclose(f) < 0) {
|
||||||
@ -2966,7 +2963,7 @@ void qmp_xen_load_devices_state(const char *filename, Error **errp)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
qio_channel_set_name(QIO_CHANNEL(ioc), "migration-xen-load-state");
|
qio_channel_set_name(QIO_CHANNEL(ioc), "migration-xen-load-state");
|
||||||
f = qemu_fopen_channel_input(QIO_CHANNEL(ioc));
|
f = qemu_file_new_input(QIO_CHANNEL(ioc));
|
||||||
object_unref(OBJECT(ioc));
|
object_unref(OBJECT(ioc));
|
||||||
|
|
||||||
ret = qemu_loadvm_state(f);
|
ret = qemu_loadvm_state(f);
|
||||||
|
@ -28,7 +28,6 @@
|
|||||||
#include "migration/vmstate.h"
|
#include "migration/vmstate.h"
|
||||||
#include "migration/qemu-file-types.h"
|
#include "migration/qemu-file-types.h"
|
||||||
#include "../migration/qemu-file.h"
|
#include "../migration/qemu-file.h"
|
||||||
#include "../migration/qemu-file-channel.h"
|
|
||||||
#include "../migration/savevm.h"
|
#include "../migration/savevm.h"
|
||||||
#include "qemu/coroutine.h"
|
#include "qemu/coroutine.h"
|
||||||
#include "qemu/module.h"
|
#include "qemu/module.h"
|
||||||
@ -52,9 +51,9 @@ static QEMUFile *open_test_file(bool write)
|
|||||||
}
|
}
|
||||||
ioc = QIO_CHANNEL(qio_channel_file_new_fd(fd));
|
ioc = QIO_CHANNEL(qio_channel_file_new_fd(fd));
|
||||||
if (write) {
|
if (write) {
|
||||||
f = qemu_fopen_channel_output(ioc);
|
f = qemu_file_new_output(ioc);
|
||||||
} else {
|
} else {
|
||||||
f = qemu_fopen_channel_input(ioc);
|
f = qemu_file_new_input(ioc);
|
||||||
}
|
}
|
||||||
object_unref(OBJECT(ioc));
|
object_unref(OBJECT(ioc));
|
||||||
return f;
|
return f;
|
||||||
|
Loading…
Reference in New Issue
Block a user