lkml.org 
[lkml]   [2003]   [Jul]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subjecttypecast bug in sched.c bites reschedule_idle on alpha
On SMP Alpha, a saturated system (with one busy userland process per
CPU) becomes almost completely unusable. The busy loops don't have to
be doing anything more complicated than "while(1) ;". The symptom is
that even logging into the system (with ssh) takes on the order of 30
seconds. (Tested on an ES40 with 4 processors, 2.4.18.)

It turns out that the problem is in kernel/schedule.c:reschedule_idle.

cycles_t oldest_idle;
...
oldest_idle = (cycles_t) -1;
...
if (oldest_idle == -1ULL) {

Since asm-alpha/timex.h defines cycles_t as unsigned int, this
comparison is always false. Changing it to (cycles_t)-1 fixes the
problem.

Patch below. I'd like this to go into 2.4.22, if nobody has a problem
with that. I would like confirmation from other eyes -- this patch
doesn't break semantics on any architecture, does it?

-andy

--- linux-2.4.21/kernel/sched.c Thu Jul 17 16:43:37 2003
+++ linux-2.4.21-idle-fix/kernel/sched.c Thu Jul 17 16:23:25 2003
@@ -282,7 +282,7 @@
target_tsk = tsk;
}
} else {
- if (oldest_idle == -1ULL) {
+ if (oldest_idle == (cycles_t)-1) {
int prio = preemption_goodness(tsk, p, cpu);

if (prio > max_prio) {
@@ -294,7 +294,7 @@
}
tsk = target_tsk;
if (tsk) {
- if (oldest_idle != -1ULL) {
+ if (oldest_idle != (cycles_t)-1) {
best_cpu = tsk->processor;
goto send_now_idle;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 13:46    [W:0.026 / U:0.024 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site