From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:57087) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TiA1O-0000wN-Po for qemu-devel@nongnu.org; Mon, 10 Dec 2012 15:32:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TiA1C-0006mQ-Nt for qemu-devel@nongnu.org; Mon, 10 Dec 2012 15:32:14 -0500 Received: from mx1.redhat.com ([209.132.183.28]:5591) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TiA1C-0006mJ-Ed for qemu-devel@nongnu.org; Mon, 10 Dec 2012 15:32:02 -0500 Date: Mon, 10 Dec 2012 22:35:12 +0200 From: "Michael S. Tsirkin" Message-ID: <20121210203512.GA1418@redhat.com> References: <87624iikcw.fsf@rustcorp.com.au> <87zk1uca8z.fsf@elfo.mitica> <87r4n5h0fx.fsf@rustcorp.com.au> <20121205110807.GA10045@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20121205110807.GA10045@redhat.com> Subject: Re: [Qemu-devel] [PATCH] virtio: verify that all outstanding buffers are flushed (was Re: vmstate conversion for virtio?) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Rusty Russell Cc: QEMU-devel , quintela@redhat.com On Wed, Dec 05, 2012 at 01:08:07PM +0200, Michael S. Tsirkin wrote: > Add sanity check to address the following concern: > > On Wed, Dec 05, 2012 at 09:47:22AM +1030, Rusty Russell wrote: > > All we need is the index of the request; the rest can be re-read from > > the ring. > > I'd like to point out that this is not generally > true if any available requests are outstanding. > Imagine a ring of size 4. > Below A means available U means used. > > A 1 > A 2 > U 2 > A 2 > U 2 > A 2 > U 2 > A 2 > U 2 > > At this point available ring has wrapped around, the only > way to know head 1 is outstanding is because backend > has stored this info somewhere. > > The reason we manage to migrate without tracking this in migration > state is because we flush outstanding requests before > migration. > This flush is device-specific though, let's add > a safeguard in virtio core to ensure it's done properly. > > Signed-off-by: Michael S. Tsirkin Doh sent a wrong patch sorry. I'll resend the right one shortly. Pls disregard. > --- > > diff --git a/hw/virtio.c b/hw/virtio.c > index f40a8c5..b80a5a9 100644 > --- a/hw/virtio.c > +++ b/hw/virtio.c > @@ -788,6 +788,8 @@ void virtio_save(VirtIODevice *vdev, QEMUFile *f) > if (vdev->vq[i].vring.num == 0) > break; > > + assert(!vq->inuse); > + > qemu_put_be32(f, vdev->vq[i].vring.num); > qemu_put_be64(f, vdev->vq[i].pa); > qemu_put_be16s(f, &vdev->vq[i].last_avail_idx); > > -- > MST