From: Paolo Bonzini <pbonzini@redhat.com>
To: "Michael S. Tsirkin" <mst@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: Thu, 13 Dec 2012 08:39:14 +0100 [thread overview]
Message-ID: <50C98622.9050605@redhat.com> (raw)
In-Reply-To: <20121212211926.GA23087@redhat.com>
Il 12/12/2012 22:19, Michael S. Tsirkin ha scritto:
> 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?
Yes, that sucks (also the endianness is totally broken), but the
pointers into QEMU memory are restored afterwards by remapping the
address. Like Anthony, I'm not sure whether reloading the sglist from
guest memory is safe. It would require re-validation of everything.
We _can_ trust remote. Things like races on connecting to the
incoming-migration socket are best handled outside QEMU with a firewall
or a separate network that is not guest-accessible. I'm pretty sure
that virtio-blk is the latest of our worries here.
> 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.
Yes, I agree.
Paolo
next prev parent reply other threads:[~2012-12-13 7:52 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
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 [this message]
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=50C98622.9050605@redhat.com \
--to=pbonzini@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=mst@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 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).