All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Stefan Hajnoczi <stefanha@gmail.com>,
	Anthony Liguori <aliguori@us.ibm.com>,
	Rusty Russell <rusty@rustcorp.com.au>,
	qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCHv2] virtio: verify that all outstanding buffers are flushed
Date: Wed, 12 Dec 2012 23:19:26 +0200	[thread overview]
Message-ID: <20121212211926.GA23087@redhat.com> (raw)
In-Reply-To: <50C8F075.4000206@redhat.com>

On Wed, Dec 12, 2012 at 10:00:37PM +0100, Paolo Bonzini wrote:
> Il 12/12/2012 20:23, Michael S. Tsirkin ha scritto:
> >>> Saving inuse counter is useless. We need to know which requests
> >>> are outstanding if we want to retry them on remote.
> >>
> >> And that's what virtio-blk and virtio-scsi have been doing for years.
> > 
> > I don't see it - all I see in save is virtio_save.
> 
> static void virtio_blk_save(QEMUFile *f, void *opaque)
> {
>     VirtIOBlock *s = opaque;
>     VirtIOBlockReq *req = s->rq;
> 
>     virtio_save(&s->vdev, f);
>     
>     while (req) {
>         qemu_put_sbyte(f, 1);
>         qemu_put_buffer(f, (unsigned char*)&req->elem, sizeof(req->elem));

Ow. Does it really save VirtQueueElement?

typedef struct VirtQueueElement
{        
    unsigned int index;
    unsigned int out_num;
    unsigned int in_num;
    hwaddr in_addr[VIRTQUEUE_MAX_SIZE];
    hwaddr out_addr[VIRTQUEUE_MAX_SIZE];
    struct iovec in_sg[VIRTQUEUE_MAX_SIZE];
    struct iovec out_sg[VIRTQUEUE_MAX_SIZE];
} VirtQueueElement; 

Complete with pointers into qemu memory and all?
That's got to hurt.

All we really need is the index.

>         req = req->next;
>     }
>     qemu_put_sbyte(f, 0);
> }
> 
> 
> virtio-scsi does it in virtio_scsi_save_request.
> 
> > You need to retry A1 on remote. How do you do that? There's
> > no way to find out it has not been completed
> > from the ring itself.
> 
> virtio_blk_dma_restart_bh and scsi_dma_restart_bh do it.
> 
> Paolo

Okay, so the only bug is inuse getting negative right?
So all we need to do is fix up the inuse value
after restoring the outstanding requests - basically
count the restored buffers and set inuse accordingly.

-- 
MST

  reply	other threads:[~2012-12-12 21:16 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-12 10:51 [Qemu-devel] [PATCHv2] virtio: verify that all outstanding buffers are flushed Michael S. Tsirkin
2012-12-12 13:50 ` Stefan Hajnoczi
2012-12-12 14:01   ` Paolo Bonzini
2012-12-12 14:30     ` Michael S. Tsirkin
2012-12-12 14:36       ` Paolo Bonzini
2012-12-12 14:47         ` Michael S. Tsirkin
2012-12-12 15:01           ` Paolo Bonzini
2012-12-12 15:25             ` Michael S. Tsirkin
2012-12-12 15:52               ` Paolo Bonzini
2012-12-12 16:37                 ` Michael S. Tsirkin
2012-12-12 16:51                   ` Paolo Bonzini
2012-12-12 17:14                     ` Michael S. Tsirkin
2012-12-12 17:39                       ` Paolo Bonzini
2012-12-12 19:23                         ` Michael S. Tsirkin
2012-12-12 21:00                           ` Paolo Bonzini
2012-12-12 21:19                             ` Michael S. Tsirkin [this message]
2012-12-12 21:33                               ` Anthony Liguori
2012-12-12 21:51                                 ` Michael S. Tsirkin
2012-12-14  1:06                                 ` Rusty Russell
2012-12-14  7:51                                   ` Paolo Bonzini
2012-12-16 20:36                                     ` Anthony Liguori
2012-12-13  7:39                               ` Paolo Bonzini
2012-12-13 10:48                   ` Kevin Wolf
2012-12-16 16:14                     ` Michael S. Tsirkin
2012-12-12 14:26   ` Michael S. Tsirkin

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=20121212211926.GA23087@redhat.com \
    --to=mst@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rusty@rustcorp.com.au \
    --cc=stefanha@gmail.com \
    --cc=stefanha@redhat.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.