All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Slaby <jirislaby@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/1] Char: moxa, fix and optimise empty timer
Date: Fri, 27 Jul 2007 21:52:10 +0200	[thread overview]
Message-ID: <46AA4CEA.7070400@gmail.com> (raw)
In-Reply-To: <20070725220826.3fdb7677.akpm@linux-foundation.org>

Andrew Morton napsal(a):
> On Wed, 25 Jul 2007 23:43:29 +0200 (CEST) Jiri Slaby <jirislaby@gmail.com> wrote:
> 
>> moxa, fix and optimise empty timer
>>
>> don't wait and delete empty timer in empty timer function. Also fire next
>> empty timer at rounded jiffies to save power.
>>
> 
> What is actually being "fixed" here?

Lockup (see below).

>> ---
>> commit da52793b6347e8b6b048526ce2422e29b20bb335
>> tree ad0bee78e45beef89dc740f81e0606d782296542
>> parent 3a69b463dcad1ff142f46e8fb74e7dc5a092eb60
>> author Jiri Slaby <jirislaby@gmail.com> Wed, 25 Jul 2007 23:42:49 +0200
>> committer Jiri Slaby <jirislaby@gmail.com> Wed, 25 Jul 2007 23:42:49 +0200
>>
>>  drivers/char/moxa.c |    4 ++--
>>  1 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/char/moxa.c b/drivers/char/moxa.c
>> index ed76f0a..5000b3b 100644
>> --- a/drivers/char/moxa.c
>> +++ b/drivers/char/moxa.c
>> @@ -1040,14 +1040,14 @@ static void check_xmit_empty(unsigned long data)
>>  	struct moxa_port *ch;
>>  
>>  	ch = (struct moxa_port *) data;
>> -	del_timer_sync(&moxa_ports[ch->port].emptyTimer);

It's "wait until the code below me is finished". At least the _sync is buggy.

>>  	if (ch->tty && (ch->statusflags & EMPTYWAIT)) {
>>  		if (MoxaPortTxQueue(ch->port) == 0) {
>>  			ch->statusflags &= ~EMPTYWAIT;
>>  			tty_wakeup(ch->tty);
>>  			return;
>>  		}
>> -		mod_timer(&moxa_ports[ch->port].emptyTimer, jiffies + HZ);
>> +		mod_timer(&moxa_ports[ch->port].emptyTimer,
>> +				round_jiffies(jiffies + HZ));
>>  	} else
>>  		ch->statusflags &= ~EMPTYWAIT;
>>  }
> 
> A call to check_xmit_empty() used to guarantee that the timer was no longer
> running (if the first `if' succeeds and the second does not), but that is

Correct me if I'm wrong, but it guaranteed nothing. When the timer function is
called (note, that check_xmit_empty is timer.function), timer base lock is held
and there is no window to schedule the timer again when its function is running.

> no longer the case.  You're sure this is correct?

I still think so.

thanks,
-- 
Jiri Slaby (jirislaby@gmail.com)
Faculty of Informatics, Masaryk University

      reply	other threads:[~2007-07-27 19:51 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-25 21:43 [PATCH 1/1] Char: moxa, fix and optimise empty timer Jiri Slaby
2007-07-26  5:08 ` Andrew Morton
2007-07-27 19:52   ` Jiri Slaby [this message]

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=46AA4CEA.7070400@gmail.com \
    --to=jirislaby@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.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.