From: Amit Shah <amit.shah@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: Paul Brook <paul@codesourcery.com>,
Juan Quintela <quintela@redhat.com>,
qemu list <qemu-devel@nongnu.org>,
Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] Re: [PATCH v7 4/6] char: Add qemu_chr_write_nb() for nonblocking writes
Date: Wed, 5 May 2010 18:52:50 +0530 [thread overview]
Message-ID: <20100505132250.GA27194@amit-x200.redhat.com> (raw)
In-Reply-To: <4BE16FB5.6040708@codemonkey.ws>
On (Wed) May 05 2010 [08:16:37], Anthony Liguori wrote:
> On 05/04/2010 04:39 PM, Amit Shah wrote:
>> For char devices whose backing files are open in non-blocking mode,
>> non-blocking writes can now be made using qemu_chr_write_nb().
>>
>> For non-blocking chardevs, we can return -EAGAIN to callers of
>> qemu_chr_write_nb(). When the backend is ready to accept more data,
>> we can let the caller know via a callback.
>>
>> -EAGAIN is returned only when the backend's file is non-blocking
>> and a callback is registered by the caller when invoking
>> qemu_chr_add_handlers().
>>
>> In case a backend doesn't support non-blocking writes,
>> qemu_chr_write_nb() invokes qemu_chr_write().
>>
>> Individual callers can update their code to add a callback handler,
>> call qemu_chr_write_nb() instead of qemu_chr_write() if they wish to
>> receive -EAGAIN notifications.
>>
>> No backend currently supports non-blocking writes.
>>
>> Signed-off-by: Amit Shah<amit.shah@redhat.com>
>>
>> +ssize_t qemu_chr_write_nb(CharDriverState *s, const uint8_t *buf, size_t len)
>> +{
>> + if (!s->nonblock) {
>> + /* Fallback to blocking write if no callback registered */
>> + return qemu_chr_write(s, buf, len);
>> + }
>> +
>> + return s->chr_write_nb(s, buf, len);
>> +}
>>
>
> I really dislike the idea of adding another function for this.
This suggestion came from Gerd to separate out a write() that blocks and
a write_nb() that doesn't block on -EAGAIN.
> Can you
> explain why you need this functionality for virtio-console and why this
> functionality isn't needed for everything else?
I don't know about everything else; but for virtio-console, a fast guest
could swamp a host chardev with data and while the host chardev blocks
to flush out all the data, a notification to ask the guest to stop is
needed so that we don't lose any data.
(virtio-console asks virtio-serial to throttle any more data, and
virtio-serial doesn't send any more data to this port till it signals
otherwise. The guest, in the meantime, keeps filling its queue till the
queue is full. Once that happens, writes in guests return with -EAGAIN.)
Amit
next prev parent reply other threads:[~2010-05-05 13:24 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-04 21:39 [Qemu-devel] [PATCH v7 0/6] Amit Shah
2010-05-04 21:39 ` [Qemu-devel] [PATCH v7 1/6] virtio-console: Factor out common init between console and generic ports Amit Shah
2010-05-04 21:39 ` [Qemu-devel] [PATCH v7 2/6] char: Add a QemuChrHandlers struct to initialise chardev handlers Amit Shah
2010-05-04 21:39 ` [Qemu-devel] [PATCH v7 3/6] char: Let writers know how much data was written in case of errors Amit Shah
2010-05-04 21:39 ` [Qemu-devel] [PATCH v7 4/6] char: Add qemu_chr_write_nb() for nonblocking writes Amit Shah
2010-05-04 21:39 ` [Qemu-devel] [PATCH v7 5/6] char: unix/tcp: Add a non-blocking write handler Amit Shah
2010-05-04 21:39 ` [Qemu-devel] [PATCH v7 6/6] virtio-console: Throttle virtio-serial-bus if we can't consume any more guest data Amit Shah
2010-05-05 13:16 ` [Qemu-devel] Re: [PATCH v7 4/6] char: Add qemu_chr_write_nb() for nonblocking writes Anthony Liguori
2010-05-05 13:22 ` Amit Shah [this message]
2010-05-05 13:34 ` Paul Brook
2010-05-05 13:53 ` Anthony Liguori
2010-05-05 14:10 ` Paul Brook
2010-05-05 18:43 ` Gerd Hoffmann
2010-05-05 18:49 ` Anthony Liguori
2010-05-05 19:16 ` Gerd Hoffmann
2010-05-05 19:33 ` Anthony Liguori
2010-05-06 7:11 ` Gerd Hoffmann
2010-05-05 18:40 ` Gerd Hoffmann
2010-05-05 18:48 ` Anthony Liguori
2010-05-05 13:15 ` [Qemu-devel] Re: [PATCH v7 3/6] char: Let writers know how much data was written in case of errors Anthony Liguori
2010-05-05 13:23 ` Amit Shah
2010-05-05 13:54 ` Anthony Liguori
2010-05-05 14:06 ` Amit Shah
2010-05-05 13:13 ` [Qemu-devel] Re: [PATCH v7 2/6] char: Add a QemuChrHandlers struct to initialise chardev handlers Anthony Liguori
2010-05-05 13:25 ` Amit Shah
2010-05-05 13:59 ` Anthony Liguori
2010-05-04 21:41 ` [Qemu-devel] Re: [PATCH v7 0/6] char: non-blocking writes, virtio-console flow control Amit Shah
2010-05-05 11:18 ` [Qemu-devel] Re: [PATCH v7 0/6] Juan Quintela
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=20100505132250.GA27194@amit-x200.redhat.com \
--to=amit.shah@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=kraxel@redhat.com \
--cc=paul@codesourcery.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@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).