From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53653) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aK0cS-0005Tp-75 for qemu-devel@nongnu.org; Fri, 15 Jan 2016 04:24:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aK0cM-0004jN-SJ for qemu-devel@nongnu.org; Fri, 15 Jan 2016 04:24:32 -0500 Received: from mx1.redhat.com ([209.132.183.28]:33121) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aK0cM-0004iG-GL for qemu-devel@nongnu.org; Fri, 15 Jan 2016 04:24:26 -0500 Date: Fri, 15 Jan 2016 09:24:20 +0000 From: "Dr. David Alan Gilbert" Message-ID: <20160115092419.GA2432@work-vm> References: <1452083019-15141-1-git-send-email-dgilbert@redhat.com> <1452083019-15141-2-git-send-email-dgilbert@redhat.com> <871t9jhnfs.fsf@oc4731375738.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <871t9jhnfs.fsf@oc4731375738.ibm.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 2/2] migration/virtio: Remove simple .get/.put use List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Sascha Silbe Cc: amit.shah@redhat.com, Cornelia Huck , quintela@redhat.com, qemu-devel@nongnu.org, mst@redhat.com * Sascha Silbe (silbe@linux.vnet.ibm.com) wrote: > Dear David, Hi Sascha, Thanks for the mail. > "Dr. David Alan Gilbert (git)" writes: >=20 > > 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_virti= o_virtqueues =3D { > > .minimum_version_id =3D 1, > > .needed =3D &virtio_virtqueue_needed, > > .fields =3D (VMStateField[]) { > > - { > > - .name =3D "virtqueues", > > - .version_id =3D 0, > > - .field_exists =3D NULL, > > - .size =3D 0, > > - .info =3D &vmstate_info_virtqueue, > > - .flags =3D VMS_SINGLE, > > - .offset =3D 0, > > - }, > > + VMSTATE_STRUCT_VARRAY_KNOWN(vq, struct VirtIODevice, VIRTIO_= QUEUE_MAX, > > + 0, vmstate_virtqueue, VirtQueue), > > VMSTATE_END_OF_LIST() > > } > > }; >=20 > 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 migrati= ng a VM using virtio back and forward between the old and new versions on x8= 6_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 pointe= r > 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 s390= x > 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 th= e > naming conventions for VMSTATE_* are (both VMSTATE_ARRAY* and > VMSTATE_VARRAY* can use VMS_VARRAY, something with and sometimes withou= t > 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 s= afe; 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 >=20 > Sascha > --=20 > Softwareentwicklung Sascha Silbe, Niederhofenstra=DFe 5/1, 71229 Leonbe= rg > https://se-silbe.de/ > USt-IdNr. DE281696641 >=20 -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK