From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Sascha Silbe <silbe@linux.vnet.ibm.com>
Cc: amit.shah@redhat.com, Cornelia Huck <cornelia.huck@de.ibm.com>,
quintela@redhat.com, qemu-devel@nongnu.org, mst@redhat.com
Subject: Re: [Qemu-devel] [PATCH 2/2] migration/virtio: Remove simple .get/.put use
Date: Fri, 15 Jan 2016 09:24:20 +0000 [thread overview]
Message-ID: <20160115092419.GA2432@work-vm> (raw)
In-Reply-To: <871t9jhnfs.fsf@oc4731375738.ibm.com>
* Sascha Silbe (silbe@linux.vnet.ibm.com) wrote:
> Dear David,
Hi Sascha,
Thanks for the mail.
> "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com> writes:
>
> > The 'virtqueue_state' and 'ringsize' can be saved using VMSTATE
> > macros rather than hand coded .get/.put
> [...]
> > @@ -1161,44 +1143,20 @@ static const VMStateDescription vmstate_virtio_virtqueues = {
> > .minimum_version_id = 1,
> > .needed = &virtio_virtqueue_needed,
> > .fields = (VMStateField[]) {
> > - {
> > - .name = "virtqueues",
> > - .version_id = 0,
> > - .field_exists = NULL,
> > - .size = 0,
> > - .info = &vmstate_info_virtqueue,
> > - .flags = VMS_SINGLE,
> > - .offset = 0,
> > - },
> > + VMSTATE_STRUCT_VARRAY_KNOWN(vq, struct VirtIODevice, VIRTIO_QUEUE_MAX,
> > + 0, vmstate_virtqueue, VirtQueue),
> > VMSTATE_END_OF_LIST()
> > }
> > };
>
> This completely breaks migration (including virsh save / restore) on
> s390x. It appears to work on x86_64 with a trivial test case, but that's
> probably pure luck and I'd expect a more extensive test case to show
> guest state corruption on migration.
Interesting; I'd given it what I thought was a reasonable test of migrating
a VM using virtio back and forward between the old and new versions on x86_64
a few times.
> After staring at the code for several hours (this whole VMSTATE_* stuff
> is severely underdocumented), I think I've finally understood what's
> going on.
Yes, I agree - 130+ macros with similar names and ~5 cryptic parameters
each and barely a comment.
> Given the VMS_STRUCT|VMS_ARRAY field flags set by
> VMSTATE_STRUCT_VARRAY_KNOWN, vmstate_save_state() expects an array of
> fixed size embedded in the struct. However, VirtIODevice.vq is a pointer
> to an allocated array. Adding the VMS_POINTER flag looks like it could
> do the trick and indeed allows my trivial test case to complete on s390x
> again. (No further testing was done).
Hmm, yes adding VMS_POINTER makes sense to me.
> I won't be sending a fix for this for now as I don't understand what the
> naming conventions for VMSTATE_* are (both VMSTATE_ARRAY* and
> VMSTATE_VARRAY* can use VMS_VARRAY, something with and sometimes without
> VMS_POINTER). Should VMSTATE_STRUCT_VARRAY_KNOWN be fixed to include
> VMS_POINTER or do you need to introduce another macro
> VMSTATE_STRUCT_VARRAY_POINTER_KNOWN?
I think it needs renaming to VMSTATE_STRUCT_VARRAY_POINTER_KNOWN
with the VMS_POINTER.
> PS: Won't your patch break migration between different qemu versions? I
> don't see any compat code and you're changing at least some field names
> (e.g. "virtqueues" vs. "vq").
The field names generally dont hit the wire and so renaming is normally safe;
the exception is subsection names.
Thanks for spotting this, I'll write a patch and try and figure out how
to test it better.
Dave
>
> Sascha
> --
> Softwareentwicklung Sascha Silbe, Niederhofenstraße 5/1, 71229 Leonberg
> https://se-silbe.de/
> USt-IdNr. DE281696641
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2016-01-15 9:24 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-06 12:23 [Qemu-devel] [PATCH 1/2] Add VMSTATE_STRUCT_VARRAY_KNOWN Dr. David Alan Gilbert (git)
2016-01-06 12:23 ` [Qemu-devel] [PATCH 2/2] migration/virtio: Remove simple .get/.put use Dr. David Alan Gilbert (git)
2016-01-07 11:35 ` Michael S. Tsirkin
2016-01-08 12:12 ` Amit Shah
2016-01-14 21:16 ` Sascha Silbe
2016-01-15 9:24 ` Dr. David Alan Gilbert [this message]
2016-01-15 12:01 ` Dr. David Alan Gilbert
2016-01-18 7:52 ` Cornelia Huck
2016-01-18 16:40 ` Sascha Silbe
2016-01-19 12:08 ` Dr. David Alan Gilbert
2016-01-21 20:56 ` Sascha Silbe
2016-01-29 12:53 ` Cornelia Huck
2016-01-29 13:14 ` Dr. David Alan Gilbert
2016-01-18 19:41 ` Sascha Silbe
2016-01-19 10:36 ` Dr. David Alan Gilbert
2016-01-21 20:39 ` [Qemu-devel] [PATCH qemu] migration/vmstate: document VMStateFlags Sascha Silbe
2016-02-03 12:38 ` Amit Shah
2016-02-23 10:39 ` Amit Shah
2016-02-23 12:32 ` Juan Quintela
2016-02-25 5:05 ` Amit Shah
2016-02-25 20:25 ` Sascha Silbe
2016-02-25 20:45 ` Sascha Silbe
2016-02-26 5:27 ` Amit Shah
2016-02-26 8:18 ` [Qemu-devel] [PATCH v2] " Sascha Silbe
2016-02-26 8:19 ` [Qemu-devel] [PATCH qemu] " Sascha Silbe
2016-01-08 12:12 ` [Qemu-devel] [PATCH 1/2] Add VMSTATE_STRUCT_VARRAY_KNOWN Amit Shah
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=20160115092419.GA2432@work-vm \
--to=dgilbert@redhat.com \
--cc=amit.shah@redhat.com \
--cc=cornelia.huck@de.ibm.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=silbe@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).