qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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

  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).