From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: Changlong Xie <xiecl.fnst@cn.fujitsu.com>,
qemu devel <qemu-devel@nongnu.org>,
Juan Quintela <quintela@redhat.com>,
Amit Shah <amit.shah@redhat.com>, Eric Blake <eblake@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
Wen Congyang <wency@cn.fujitsu.com>,
zhanghailiang <zhang.zhanghailiang@huawei.com>,
Anthony PERARD <anthony.perard@citrix.com>
Subject: Re: [Qemu-devel] [PATCH v6 1/1] Introduce "xen-load-devices-state"
Date: Mon, 13 Jun 2016 11:38:49 +0100 [thread overview]
Message-ID: <20160613103849.GA2281@work-vm> (raw)
In-Reply-To: <alpine.DEB.2.10.1606131107330.2878@sstabellini-ThinkPad-X260>
* Stefano Stabellini (sstabellini@kernel.org) wrote:
> On Fri, 3 Jun 2016, Anthony PERARD wrote:
> > On Fri, Jun 03, 2016 at 05:58:34PM +0800, Changlong Xie wrote:
> > > From: Wen Congyang <wency@cn.fujitsu.com>
> > >
> > > Introduce a "xen-load-devices-state" QAPI command that can be used to
> > > load the state of all devices, but not the RAM or the block devices of
> > > the VM.
> > >
> > > We only have hmp commands savevm/loadvm, and qmp commands
> > > xen-save-devices-state.
> > >
> > > We use this new command for COLO:
> > > 1. suspend both primary vm and secondary vm
> > > 2. sync the state
> > > 3. resume both primary vm and secondary vm
> > >
> > > In such case, we need to update all devices' state in any time.
> > >
> > > Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
> > > Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
> >
> > Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
>
> David,
>
> can we still have your Ack on this patch?
Yes,
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Dave
>
>
> > > ---
> > > migration/savevm.c | 37 +++++++++++++++++++++++++++++++++++++
> > > qapi-schema.json | 14 ++++++++++++++
> > > qmp-commands.hx | 27 +++++++++++++++++++++++++++
> > > 3 files changed, 78 insertions(+)
> > >
> > > diff --git a/migration/savevm.c b/migration/savevm.c
> > > index 6c21231..ae2ef8b 100644
> > > --- a/migration/savevm.c
> > > +++ b/migration/savevm.c
> > > @@ -31,6 +31,7 @@
> > > #include "hw/boards.h"
> > > #include "hw/hw.h"
> > > #include "hw/qdev.h"
> > > +#include "hw/xen/xen.h"
> > > #include "net/net.h"
> > > #include "monitor/monitor.h"
> > > #include "sysemu/sysemu.h"
> > > @@ -1754,6 +1755,12 @@ qemu_loadvm_section_start_full(QEMUFile *f, MigrationIncomingState *mis)
> > > return -EINVAL;
> > > }
> > >
> > > + /* Validate if it is a device's state */
> > > + if (xen_enabled() && se->is_ram) {
> > > + error_report("loadvm: %s RAM loading not allowed on Xen", idstr);
> > > + return -EINVAL;
> > > + }
> > > +
> > > /* Add entry */
> > > le = g_malloc0(sizeof(*le));
> > >
> > > @@ -2064,6 +2071,36 @@ void qmp_xen_save_devices_state(const char *filename, Error **errp)
> > > }
> > > }
> > >
> > > +void qmp_xen_load_devices_state(const char *filename, Error **errp)
> > > +{
> > > + QEMUFile *f;
> > > + QIOChannelFile *ioc;
> > > + int ret;
> > > +
> > > + /* Guest must be paused before loading the device state; the RAM state
> > > + * will already have been loaded by xc
> > > + */
> > > + if (runstate_is_running()) {
> > > + error_setg(errp, "Cannot update device state while vm is running");
> > > + return;
> > > + }
> > > + vm_stop(RUN_STATE_RESTORE_VM);
> > > +
> > > + ioc = qio_channel_file_new_path(filename, O_RDONLY | O_BINARY, 0, errp);
> > > + if (!ioc) {
> > > + return;
> > > + }
> > > + f = qemu_fopen_channel_input(QIO_CHANNEL(ioc));
> > > +
> > > + migration_incoming_state_new(f);
> > > + ret = qemu_loadvm_state(f);
> > > + qemu_fclose(f);
> > > + if (ret < 0) {
> > > + error_setg(errp, QERR_IO_ERROR);
> > > + }
> > > + migration_incoming_state_destroy();
> > > +}
> > > +
> > > int load_vmstate(const char *name)
> > > {
> > > BlockDriverState *bs, *bs_vm_state;
> > > diff --git a/qapi-schema.json b/qapi-schema.json
> > > index 8483bdf..48c3a6f 100644
> > > --- a/qapi-schema.json
> > > +++ b/qapi-schema.json
> > > @@ -4201,6 +4201,20 @@
> > > 'data': [ 'none', 'record', 'play' ] }
> > >
> > > ##
> > > +# @xen-load-devices-state:
> > > +#
> > > +# Load the state of all devices from file. The RAM and the block devices
> > > +# of the VM are not loaded by this command.
> > > +#
> > > +# @filename: the file to load the state of the devices from as binary
> > > +# data. See xen-save-devices-state.txt for a description of the binary
> > > +# format.
> > > +#
> > > +# Since: 2.7
> > > +##
> > > +{ 'command': 'xen-load-devices-state', 'data': {'filename': 'str'} }
> > > +
> > > +##
> > > # @GICCapability:
> > > #
> > > # The struct describes capability for a specific GIC (Generic
> > > diff --git a/qmp-commands.hx b/qmp-commands.hx
> > > index 28801a2..780e7f2 100644
> > > --- a/qmp-commands.hx
> > > +++ b/qmp-commands.hx
> > > @@ -587,6 +587,33 @@ Example:
> > > EQMP
> > >
> > > {
> > > + .name = "xen-load-devices-state",
> > > + .args_type = "filename:F",
> > > + .mhandler.cmd_new = qmp_marshal_xen_load_devices_state,
> > > + },
> > > +
> > > +SQMP
> > > +xen-load-devices-state
> > > +----------------------
> > > +
> > > +Load the state of all devices from file. The RAM and the block devices
> > > +of the VM are not loaded by this command.
> > > +
> > > +Arguments:
> > > +
> > > +- "filename": the file to load the state of the devices from as binary
> > > +data. See xen-save-devices-state.txt for a description of the binary
> > > +format.
> > > +
> > > +Example:
> > > +
> > > +-> { "execute": "xen-load-devices-state",
> > > + "arguments": { "filename": "/tmp/resume" } }
> > > +<- { "return": {} }
> > > +
> > > +EQMP
> > > +
> > > + {
> > > .name = "xen-set-global-dirty-log",
> > > .args_type = "enable:b",
> > > .mhandler.cmd_new = qmp_marshal_xen_set_global_dirty_log,
> > > --
> > > 1.9.3
> > >
> > >
> > >
> >
> > --
> > Anthony PERARD
> >
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2016-06-13 10:39 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-03 9:58 [Qemu-devel] [PATCH v6 0/1] Introduce "xen-load-devices-state" Changlong Xie
2016-06-03 9:58 ` [Qemu-devel] [PATCH v6 1/1] " Changlong Xie
2016-06-03 10:33 ` Anthony PERARD
2016-06-13 10:08 ` Stefano Stabellini
2016-06-13 10:38 ` Dr. David Alan Gilbert [this message]
2016-06-30 7:50 ` [Qemu-devel] [PATCH v6 0/1] " Changlong Xie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160613103849.GA2281@work-vm \
--to=dgilbert@redhat.com \
--cc=amit.shah@redhat.com \
--cc=anthony.perard@citrix.com \
--cc=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=sstabellini@kernel.org \
--cc=wency@cn.fujitsu.com \
--cc=xiecl.fnst@cn.fujitsu.com \
--cc=zhang.zhanghailiang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.