From: Anthony Liguori <aliguori@us.ibm.com>
To: Laurent Desnogues <laurent.desnogues@gmail.com>,
Amit Shah <amit.shah@redhat.com>
Cc: qemu list <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH 11/20] qemu-char: use a glib timeout instead of qemu-timer
Date: Fri, 15 Mar 2013 10:44:12 -0500 [thread overview]
Message-ID: <87ppz0oegj.fsf@codemonkey.ws> (raw)
In-Reply-To: <CABoDooM6tTGuPfHvfequgHzwJzZjRffWguA+xvXh8Je5Vyu5vg@mail.gmail.com>
Laurent Desnogues <laurent.desnogues@gmail.com> writes:
> Hello,
>
> On Tue, Mar 5, 2013 at 6:51 PM, Amit Shah <amit.shah@redhat.com> wrote:
>> From: Anthony Liguori <aliguori@us.ibm.com>
>>
>> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
>> Signed-off-by: Amit Shah <amit.shah@redhat.com>
>> ---
>> qemu-char.c | 68 ++++++++++++++++++++++++++++++++++++++++---------------------
>> 1 file changed, 45 insertions(+), 23 deletions(-)
>>
>> diff --git a/qemu-char.c b/qemu-char.c
>> index eb0ac81..6dba943 100644
>> --- a/qemu-char.c
>> +++ b/qemu-char.c
>> @@ -990,12 +990,50 @@ typedef struct {
>> int connected;
>> int polling;
>> int read_bytes;
>> - QEMUTimer *timer;
>> + guint timer_tag;
>> } PtyCharDriver;
>>
>> static void pty_chr_update_read_handler(CharDriverState *chr);
>> static void pty_chr_state(CharDriverState *chr, int connected);
>>
>> +static gboolean pty_chr_timer(gpointer opaque)
>> +{
>> + struct CharDriverState *chr = opaque;
>> + PtyCharDriver *s = chr->opaque;
>> +
>> + if (s->connected) {
>> + goto out;
>> + }
>> + if (s->polling) {
>> + /* If we arrive here without polling being cleared due
>> + * read returning -EIO, then we are (re-)connected */
>> + pty_chr_state(chr, 1);
>> + goto out;
>> + }
>> +
>> + /* Next poll ... */
>> + pty_chr_update_read_handler(chr);
>> +
>> +out:
>> + return FALSE;
>> +}
>> +
>> +static void pty_chr_rearm_timer(CharDriverState *chr, int ms)
>> +{
>> + PtyCharDriver *s = chr->opaque;
>> +
>> + if (s->timer_tag) {
>> + g_source_remove(s->timer_tag);
>> + s->timer_tag = 0;
>> + }
>> +
>> + if (ms == 1000) {
>> + s->timer_tag = g_timeout_add_seconds(1, pty_chr_timer, chr);
>
> It looks like g_timeout_add_seconds isn't available for
> poor people using some old distros (glib 2.12.3 here).
Can you test adding:
#if !GLIB_CHECK_VERSION(2, 14, 0)
static guint g_timeout_add_seconds(guint interval, GSourceFunc function,
gpointer data)
{
return g_timeout_add(interval * 1000, function, data);
}
#endif
We probably should introduce a glib-compat to centralize work arounds
for older versions of glib...
Regards,
Anthony Liguori
>
> Thanks,
>
> Laurent
>
>> + } else {
>> + s->timer_tag = g_timeout_add(ms, pty_chr_timer, chr);
>> + }
>> +}
>> +
>> static int pty_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
>> {
>> PtyCharDriver *s = chr->opaque;
>> @@ -1065,7 +1103,7 @@ static void pty_chr_update_read_handler(CharDriverState *chr)
>> * timeout to the normal (much longer) poll interval before the
>> * timer triggers.
>> */
>> - qemu_mod_timer(s->timer, qemu_get_clock_ms(rt_clock) + 10);
>> + pty_chr_rearm_timer(chr, 10);
>> }
>>
>> static void pty_chr_state(CharDriverState *chr, int connected)
>> @@ -1080,7 +1118,7 @@ static void pty_chr_state(CharDriverState *chr, int connected)
>> /* (re-)connect poll interval for idle guests: once per second.
>> * We check more frequently in case the guests sends data to
>> * the virtual device linked to our pty. */
>> - qemu_mod_timer(s->timer, qemu_get_clock_ms(rt_clock) + 1000);
>> + pty_chr_rearm_timer(chr, 1000);
>> } else {
>> if (!s->connected)
>> qemu_chr_generic_open(chr);
>> @@ -1088,23 +1126,6 @@ static void pty_chr_state(CharDriverState *chr, int connected)
>> }
>> }
>>
>> -static void pty_chr_timer(void *opaque)
>> -{
>> - struct CharDriverState *chr = opaque;
>> - PtyCharDriver *s = chr->opaque;
>> -
>> - if (s->connected)
>> - return;
>> - if (s->polling) {
>> - /* If we arrive here without polling being cleared due
>> - * read returning -EIO, then we are (re-)connected */
>> - pty_chr_state(chr, 1);
>> - return;
>> - }
>> -
>> - /* Next poll ... */
>> - pty_chr_update_read_handler(chr);
>> -}
>>
>> static void pty_chr_close(struct CharDriverState *chr)
>> {
>> @@ -1117,8 +1138,9 @@ static void pty_chr_close(struct CharDriverState *chr)
>> fd = g_io_channel_unix_get_fd(s->fd);
>> g_io_channel_unref(s->fd);
>> close(fd);
>> - qemu_del_timer(s->timer);
>> - qemu_free_timer(s->timer);
>> + if (s->timer_tag) {
>> + g_source_remove(s->timer_tag);
>> + }
>> g_free(s);
>> qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
>> }
>> @@ -1170,7 +1192,7 @@ static CharDriverState *qemu_chr_open_pty(QemuOpts *opts)
>> chr->chr_add_watch = pty_chr_add_watch;
>>
>> s->fd = io_channel_from_fd(master_fd);
>> - s->timer = qemu_new_timer_ms(rt_clock, pty_chr_timer, chr);
>> + s->timer_tag = 0;
>>
>> return chr;
>> }
>> --
>> 1.8.1.2
>>
>>
next prev parent reply other threads:[~2013-03-15 15:44 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-05 17:51 [Qemu-devel] [PATCH 00/20] chardev flow control Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 01/20] char-socket: fix error reporting Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 02/20] qemu-char: remove dead/confusing logic with nb_stdio_clients Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 03/20] char: add IOWatchPoll support Amit Shah
2013-03-29 9:53 ` Amit Shah
2013-03-29 12:24 ` Anthony Liguori
2013-03-29 12:42 ` Amit Shah
2013-03-29 14:03 ` Anthony Liguori
2013-03-29 16:08 ` Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 04/20] qemu-char: convert fd_chr to use a GIOChannel Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 05/20] qemu-char: convert pty to GIOChannel Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 06/20] qemu-char: convert UDP " Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 07/20] qemu-char: tcp: make use GIOChannel Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 08/20] qemu-char: add watch support Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 09/20] qemu-char: add pty watch Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 10/20] char: add gio watch fn for tcp backends Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 11/20] qemu-char: use a glib timeout instead of qemu-timer Amit Shah
2013-03-15 15:06 ` Laurent Desnogues
2013-03-15 15:44 ` Anthony Liguori [this message]
2013-03-15 16:19 ` Laurent Desnogues
2013-03-25 9:38 ` Stefan Hajnoczi
2013-03-05 17:51 ` [Qemu-devel] [PATCH 12/20] qemu-char: remove use of QEMUTimer in favor of glib idle function Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 13/20] qemu-char: make char drivers dynamically registerable Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 14/20] qemu-char: move spice registration to spice-qemu-char.c Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 15/20] qemu-char: move baum registration to baum.c Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 16/20] qemu-char: move msmouse registeration to msmouse.c Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 17/20] qemu-char: move text console init to console.c Amit Shah
2013-03-13 17:19 ` Anthony Liguori
2013-03-05 17:51 ` [Qemu-devel] [PATCH 18/20] serial: add flow control to transmit Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 19/20] virtio: console: add flow control Amit Shah
2013-03-05 17:51 ` [Qemu-devel] [PATCH 20/20] virtio-serial: make flow control explicit in virtio-console Amit Shah
2013-03-12 2:02 ` [Qemu-devel] [PATCH 00/20] chardev flow control Anthony Liguori
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=87ppz0oegj.fsf@codemonkey.ws \
--to=aliguori@us.ibm.com \
--cc=amit.shah@redhat.com \
--cc=laurent.desnogues@gmail.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 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.