From: Amit Shah <amit.shah@redhat.com>
To: Gal Hammer <ghammer@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v2] virtio-serial: Do not notify virtqueue if no element was pushed back.
Date: Fri, 6 Sep 2013 00:35:30 +0530 [thread overview]
Message-ID: <20130905190530.GA23945@grmbl.mre> (raw)
In-Reply-To: <1376227525-28639-1-git-send-email-ghammer@redhat.com>
Hi,
On (Sun) 11 Aug 2013 [16:25:25], Gal Hammer wrote:
> The redundant notification caused the Windows' driver to duplicate the
> pending write request's buffer. The driver was fixed, but I think this
> change is still required.
>
> Signed-off-by: Gal Hammer <ghammer@redhat.com>
> ---
> hw/char/virtio-serial-bus.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
> index da417c7..0d38b4b 100644
> --- a/hw/char/virtio-serial-bus.c
> +++ b/hw/char/virtio-serial-bus.c
> @@ -105,6 +105,7 @@ static void do_flush_queued_data(VirtIOSerialPort *port, VirtQueue *vq,
> VirtIODevice *vdev)
> {
> VirtIOSerialPortClass *vsc;
> + bool elem_pushed = false;
>
> assert(port);
> assert(virtio_queue_ready(vq));
> @@ -145,9 +146,12 @@ static void do_flush_queued_data(VirtIOSerialPort *port, VirtQueue *vq,
> break;
> }
> virtqueue_push(vq, &port->elem, 0);
> + elem_pushed = true;
> port->elem.out_num = 0;
> }
> - virtio_notify(vdev, vq);
> + if (elem_pushed) {
> + virtio_notify(vdev, vq);
> + }
> }
Can you describe when you hit this bug in the commit message?
I can imagine something like this happening when a fast guest is
sending lots of data, while the host is slow to catch up, e.g. the
host chardev is a file on disk, and that takes a while to flush the
data from the guest, filling the chardev buffer, and causing the flow
control to kick in. While in that state, if the guest writes more
data to the virtqueue, a few iterations would occur where the host
will not pop any item from the queue, and the guest is kicked
unnecessarily.
Is that what you're seeing? Your reply to v1 of the patch doesn't
quite say that clearly.
Patch looks good, thanks.
Amit
prev parent reply other threads:[~2013-09-05 19:05 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-11 13:25 [Qemu-devel] [PATCH v2] virtio-serial: Do not notify virtqueue if no element was pushed back Gal Hammer
2013-08-12 13:34 ` Laszlo Ersek
2013-09-05 19:05 ` Amit Shah [this message]
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=20130905190530.GA23945@grmbl.mre \
--to=amit.shah@redhat.com \
--cc=ghammer@redhat.com \
--cc=qemu-devel@nongnu.org \
/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).