All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Roger Pau Monné" <roger.pau@citrix.com>
To: Paolo Bonzini <pbonzini@redhat.com>, qemu-devel@nongnu.org
Cc: xen-devel@lists.xenproject.org,
	"Peter Crosthwaite" <peter.crosthwaite@xilinx.com>,
	"Michael Tokarev" <mjt@tls.msk.ru>,
	"Andreas Färber" <afaerber@suse.de>
Subject: Re: [PATCH] serial: poll the serial console with G_IO_HUP
Date: Mon, 28 Apr 2014 11:32:57 +0200	[thread overview]
Message-ID: <535E2049.6070905__7413.62026096812$1398677686$gmane$org@citrix.com> (raw)
In-Reply-To: <535E1D18.80709@redhat.com>

On 28/04/14 11:19, Paolo Bonzini wrote:
> Il 22/04/2014 19:08, Roger Pau Monne ha scritto:
>> On FreeBSD polling a master pty while the other end is not connected
>> with G_IO_OUT only results in an endless wait. This is different from
>> the Linux behaviour, that returns immediately. In order to demonstrate
>> this, I have the following example code:
>>
>> http://xenbits.xen.org/people/royger/test_poll.c
>>
>> When executed on Linux:
>>
>> $ ./test_poll
>> In callback
>>
>> On FreeBSD instead, the callback never gets called:
>>
>> $ ./test_poll
>>
>> So, in order to workaround this, poll the source with G_IO_HUP (which
>> makes the code behave the same way on both Linux and FreeBSD).
>>
>> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
>> Cc: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>> Cc: Michael Tokarev <mjt@tls.msk.ru>
>> Cc: "Andreas Färber" <afaerber@suse.de>
>> Cc: Paolo Bonzini <pbonzini@redhat.com>
>> Cc: xen-devel@lists.xenproject.org
>> ---
>>  hw/char/serial.c |    2 +-
>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/hw/char/serial.c b/hw/char/serial.c
>> index 6025592..ab9c40f 100644
>> --- a/hw/char/serial.c
>> +++ b/hw/char/serial.c
>> @@ -243,7 +243,7 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque)
>>          serial_receive1(s, &s->tsr, 1);
>>      } else if (qemu_chr_fe_write(s->chr, &s->tsr, 1) != 1) {
>>          if (s->tsr_retry >= 0 && s->tsr_retry < MAX_XMIT_RETRY &&
>> -            qemu_chr_fe_add_watch(s->chr, G_IO_OUT, serial_xmit, s) > 0) {
>> +            qemu_chr_fe_add_watch(s->chr, G_IO_OUT|G_IO_HUP, serial_xmit, s) > 0) {
>>              s->tsr_retry++;
>>              return FALSE;
>>          }
>>
> 
> The patch looks good.  However, the same problem is most likely there
> in other places:
> 
> hw/char/cadence_uart.c:        int r = qemu_chr_fe_add_watch(s->chr, G_IO_OUT, cadence_uart_xmit, s);
> hw/char/serial.c:            qemu_chr_fe_add_watch(s->chr, G_IO_OUT, serial_xmit, s) > 0) {

This is the one I've fixed.

> hw/char/virtio-console.c:                vcon->watch = qemu_chr_fe_add_watch(vcon->chr, G_IO_OUT,
> hw/usb/redirect.c:            dev->watch = qemu_chr_fe_add_watch(dev->cs, G_IO_OUT,
> monitor.c:            mon->watch = qemu_chr_fe_add_watch(mon->chr, G_IO_OUT,
> 
> Should we add G_IO_HUP everywhere we have G_IO_OUT?

IMOH it seems better to add G_IO_HUP to those other callers rather than
appending it in qemu_chr_fe_add_watch unconditionally, but I don't have
a strong opinion. If no one else expresses an interest into having it
added to qemu_chr_fe_add_watch I will send a new version that also fixes
the other callers listed above.

Roger.


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

  parent reply	other threads:[~2014-04-28  9:33 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1398186535-66539-1-git-send-email-roger.pau@citrix.com>
2014-04-28  9:19 ` [PATCH] serial: poll the serial console with G_IO_HUP Paolo Bonzini
     [not found] ` <535E1D18.80709@redhat.com>
2014-04-28  9:32   ` Roger Pau Monné [this message]
2014-04-22 17:08 Roger Pau Monne

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='535E2049.6070905__7413.62026096812$1398677686$gmane$org@citrix.com' \
    --to=roger.pau@citrix.com \
    --cc=afaerber@suse.de \
    --cc=mjt@tls.msk.ru \
    --cc=pbonzini@redhat.com \
    --cc=peter.crosthwaite@xilinx.com \
    --cc=qemu-devel@nongnu.org \
    --cc=xen-devel@lists.xenproject.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.