qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 03/20] char: add IOWatchPoll support


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 03/20] char: add IOWatchPoll support
Date: Fri, 29 Mar 2013 09:03:10 -0500
User-agent: Notmuch/0.13.2+93~ged93d79 (http://notmuchmail.org) Emacs/23.3.1 (x86_64-pc-linux-gnu)

Amit Shah <address@hidden> writes:

> On (Fri) 29 Mar 2013 [07:24:07], Anthony Liguori wrote:
>> Amit Shah <address@hidden> writes:
>> 
>> > On (Tue) 05 Mar 2013 [23:21:18], Amit Shah wrote:
>> >> From: Anthony Liguori <address@hidden>
>> >> 
>> >> This is a special GSource that supports CharDriverState style
>> >> poll callbacks.
>> >> 
>> >> For reviewability and bisectability, this code is #if 0'd out in this
>> >> patch to avoid unused warnings since all of the functions are static.
>> >> 
>> >> Signed-off-by: Anthony Liguori <address@hidden>
>> >> Signed-off-by: Amit Shah <address@hidden>
>> >
>> >
>> >> +static int io_channel_send_all(GIOChannel *fd, const void *_buf, int 
>> >> len1)
>> >> +{
>> >> +    GIOStatus status;
>> >> +    gsize bytes_written;
>> >> +    int len;
>> >> +    const uint8_t *buf = _buf;
>> >> +
>> >> +    len = len1;
>> >> +    while (len > 0) {
>> >> +        status = g_io_channel_write_chars(fd, (const gchar *)buf, len,
>> >> +                                          &bytes_written, NULL);
>> >> +        if (status != G_IO_STATUS_NORMAL) {
>> >> +            if (status != G_IO_STATUS_AGAIN) {
>> >> +                return -1;
>> >> +            }
>> >
>> > It's not quite right to return -1 here; previous iterations of the
>> > while loop could have successfully written data, and (len1 - len)
>> > could be +ve.
>> 
>> Once -1 is returned, it's a terminal error.  It doesn't matter that we
>> may have written some data.
>
> Why do you say that?

Because you're quoting the wrong patch :-)  This bit is rewritten by a
later patch which is the source of your problem below.  In the patch you
quote, we busy spin until all data is written.  However, with:

    commit 23673ca740e0eda66901ca801a5a901df378b063
    Author: Anthony Liguori <address@hidden>
    Date:   Tue Mar 5 23:21:23 2013 +0530
    
        qemu-char: add watch support

We started to return EAGAIN even if we have a partially successful
write.  I'm running a patch through testing right now that rewrites this
function to have sane semantics (return bytes written on partial write).

I'll post as soon as testing completes.

Regards,

Anthony Liguori



reply via email to

[Prev in Thread] Current Thread [Next in Thread]