linux-mips
[Top] [All Lists]

[PATCH] smp sched typo

To: Linus Torvalds <torvalds@transmeta.com>
Subject: [PATCH] smp sched typo
From: Jun Sun <jsun@mvista.com>
Date: Wed, 15 May 2002 13:17:36 -0700
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>, ralf@oss.sgi.com, linux-mips@oss.sgi.com, linuxppc-dev@lists.linuxppc.org
Sender: owner-linux-mips@oss.sgi.com
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.2.1) Gecko/20010901

Linus,

I found this bug in 2.4 kernel. I have verified that the bug exists on MIPS SMP and PPC SMP, but not on i386 SMP. See the detailed explanation inside the patch.

2.5 sched.c has been re-written quite a bit and does not have this problem.


http://linux.junsun.net/patches/generic/submitted/020515-2.4.18-smp-sched-typo.patch

Jun

Gcc will optimizie out the whole 'if' branch on platforms where
cycles_t is not unsigned long long (such as MIPS, PPC).

The symptom for this bug is not fatal - perhaps that is ther reason
why nobody has found it so far.  Higher priority process will be delayed
to start its execution.  One of my tests shows on a heavy-loaded system 
the delay is about 5 to 6 jiffies.  

Jun, 020515

diff -Nru link/kernel/sched.c.orig link/kernel/sched.c
--- link/kernel/sched.c.orig    Fri Dec 21 09:42:04 2001
+++ link/kernel/sched.c Wed May 15 12:38:12 2002
@@ -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) {
<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] smp sched typo, Jun Sun <=