qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Gal Hammer <ghammer@redhat.com>
To: Amit Shah <amit.shah@redhat.com>
Cc: qemu-devel@nongnu.org, Anthony Liguori <aliguori@amazon.com>,
	Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [Qemu-devel] [PATCH V4] char: restore read callback on a reattached (hotplug) chardev
Date: Tue, 17 Dec 2013 11:12:02 +0200	[thread overview]
Message-ID: <52B01562.60700@redhat.com> (raw)
In-Reply-To: <20131216203245.GD6582@grmbl.mre>

On 16/12/2013 22:32, Amit Shah wrote:
> On (Sun) 15 Dec 2013 [12:26:37], Gal Hammer wrote:
>> Fix a bug that was introduced in commit 386a5a1e. A removal of a device
>> set the chr handlers to NULL. However when the device is plugged back,
>> its read callback is not restored so data can't be transferred from the
>> host to the guest (e.g. via the virtio-serial port).
>>
>> https://bugzilla.redhat.com/show_bug.cgi?id=1027181
>>
>> Signed-off-by: Gal Hammer <ghammer@redhat.com>
>>
>> ---
>>   qemu-char.c | 17 +++++++++++++++--
>>   1 file changed, 15 insertions(+), 2 deletions(-)
>>
>> V4: - Same as V3, but this time done right.
>>
>> V3: - fix a typo in comment.
>>      - move the revision history after the "signed-off-by" tag.
>>
>> V2: - do not call chr_update_read_handler on device removal.
>>      - add asserts to verify chr_update_read_handler is not called
>>        with an assigned fd_in_tag to prevent fd leaks.
>>      - update fd and udp backends' chr_update_read_handler function
>>        so it won't remove fd_in to prevent a double release.
>
> Looks like you missed the pty backend.  Can't blame you -- this
> chardev stuff is really messy.  pty is doing is own handling + polling
> + HUP detection, which really is equally applicable to tcp and udp as
> well.

As far as I could tell the pty backend doesn't suffer from this issue. 
That's why I didn't change anything there.

> More below.
>
>> diff --git a/qemu-char.c b/qemu-char.c
>> index e00f84c..69649f0 100644
>> --- a/qemu-char.c
>> +++ b/qemu-char.c
>> @@ -213,7 +213,7 @@ void qemu_chr_add_handlers(CharDriverState *s,
>>       s->chr_read = fd_read;
>>       s->chr_event = fd_event;
>>       s->handler_opaque = opaque;
>> -    if (s->chr_update_read_handler)
>> +    if (fe_open && s->chr_update_read_handler)
>>           s->chr_update_read_handler(s);
>>
>>       if (!s->explicit_fe_open) {
>> @@ -870,6 +870,7 @@ static void fd_chr_update_read_handler(CharDriverState *chr)
>>   {
>>       FDCharDriver *s = chr->opaque;
>>
>> +    assert(!chr->fd_in_tag);
>>       remove_fd_in_watch(chr);
>>       if (s->fd_in) {
>>           chr->fd_in_tag = io_add_watch_poll(s->fd_in, fd_chr_read_poll,
>> @@ -2228,7 +2229,7 @@ static void udp_chr_update_read_handler(CharDriverState *chr)
>>   {
>>       NetCharDriver *s = chr->opaque;
>>
>> -    remove_fd_in_watch(chr);
>> +    assert(!chr->fd_in_tag);
>
> You're removing remove_fd_in_watch() here but not in
> fd_chr_update_read_handler() above.  Any particular reason?

I missed it while "commit -p" the changes. Fixed.

> Also, this assert would be a risky thing in pty, since it has its own
> HUP detection method.  A common way to deal with all this would be
> nice, but chardevs are hacks upon hacks already, and this fixes a
> regression, so I'm fine with applying the patch in this form now.
>
> Please update for pty.
>
> Gerd, can you please look at this and pick it up?  I'm going to be
> away till Jan.
>
> Thanks,
>
> 		Amit
>

     Gal.

  reply	other threads:[~2013-12-17  9:09 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-15 10:26 [Qemu-devel] [PATCH V4] char: restore read callback on a reattached (hotplug) chardev Gal Hammer
2013-12-16 20:32 ` Amit Shah
2013-12-17  9:12   ` Gal Hammer [this message]
2013-12-18  5:35     ` Amit Shah
2013-12-18 14:14       ` Gal Hammer

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=52B01562.60700@redhat.com \
    --to=ghammer@redhat.com \
    --cc=aliguori@amazon.com \
    --cc=amit.shah@redhat.com \
    --cc=kraxel@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).