From: Norbert van Bolhuis <nvbolhuis@aimvalley.nl>
To: linux-kernel@vger.kernel.org
Subject: PROBLEM: CONFIG_NO_HZ could cause software timeouts
Date: Thu, 03 Sep 2009 12:50:12 +0200 [thread overview]
Message-ID: <4A9F9F64.5080305@aimvalley.nl> (raw)
The problem occurs when e.g. drivers use time_after(jiffes, timeout).
CONFIG_NO_HZ could make jiffies advance by more than 1.
This is done by: tick_nohz_update_jiffies->tick_do_update_jiffies64->do_timer
If drivers use a timeout value of jiffies+1,
"time_after(jiffies, timeout)" will be true after 1 interrupt
(given that it advances jiffies by at least 2).
This is exactly what happens in cfi_cmdset_0002.c:do_write_buffer
for our case (Powerpc MPC8313, linux-2.6.28, CONFIG_HZ=250, CONFIG_NO_HZ=y).
do_write_buffer does the following:
unsigned long uWriteTimeout = ( HZ / 1000 ) + 1;
...
timeo = jiffies + uWriteTimeout;
...
for (;;) {
...
if (time_after(jiffies, timeo) && !chip_ready(map, adr))
break;
if (chip_ready(map, adr)) {
xip_enable(map, chip, adr);
goto op_done;
}
UDELAY(map, chip, adr, 1);
}
/* software timeout */
ret = -EIO;
opdone:
...
I've seen a few software timeouts after the for-loop
looped only 13 times (= 13 us delay, i.s.o. the expected 1 ms). Typically
our NOR flash (S29GL01GP) may need upto ~ 200 us to be ready.
disabling CONFIG_NO_HZ fixes the problem.
replacing time_after by a for-loop counter to loop max 1000 times
also fixes the problem.
the latest kernel seems to have the same problem.
do I miss something here or is this a known problem of CONFIG_NO_HZ ?
next reply other threads:[~2009-09-03 10:50 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-03 10:50 Norbert van Bolhuis [this message]
2009-09-03 11:22 ` PROBLEM: CONFIG_NO_HZ could cause software timeouts Corrado Zoccolo
2009-09-03 11:59 ` Norbert van Bolhuis
2009-09-05 18:19 ` Marcin Slusarz
2009-09-06 5:58 ` Pavel Machek
2009-09-06 10:11 ` Marcin Slusarz
2009-09-06 5:27 ` Pavel Machek
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=4A9F9F64.5080305@aimvalley.nl \
--to=nvbolhuis@aimvalley.nl \
--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.