possible. Which was the previous kernel running in the machine before
2.4.18-SuSE?
It could be an unlucky trashing pattern run by the tasklist walking that
is eliminated in the SuSE kernel, so it may not be a bug in mainline,
but we don't know for sure.
> With the relocation you are right - I thought it would test against
> NULL :-(
>
> I think that the tasklist is broken inbetween - either due to broken
> readlocks (no working EFENCE on PPRO)
The SuSE kernel should have exactly the same read/write locks and you
said the SuSE kernel works fine for you (the read/write locks aren't
used only in the tasklist).
> Can someone explain me the difference for label 1 and 2?
> Why is the "js 2f" there? This I don't understand fully -
> it looks broken to me.
it's correct, if not we would have noticed since a long time ;)
What it does is to subtract 1 to the lock, if it goes negative (signed)
it jumps into the looping slow path (label 2), then when it finally
stops looping because it acquired the lock, it jumps back to 1 and
enters the critical section. The slow path takes care of acquiring the
lock internally, first polling and doing without requiring the cacheline
exclusive the trylock again.
>
> include/asm-i386/rwlock.h
>
> #define __build_read_lock_ptr(rw, helper) \
> asm volatile(LOCK "subl $1,(%0)\n\t" \
> "js 2f\n" \
> "1:\n" \
> LOCK_SECTION_START("") \
> "2:\tcall " helper "\n\t" \
> "jmp 1b\n" \
> LOCK_SECTION_END \
> ::"a" (rw) : "memory")
As said the oops shows clear corruption in the tasklist, that contains
null pointers or random values. So I still tend to think this is
not shown in the SuSE kernel because it doesn't need to loop through all
the long tasklist to make the scheduling decision reducing signficantly
the cacheline trashing and memory I/O. You can also try to run a loop
like:
import os
while 1:
x = os.listdir('/proc')
that will trigger a frequent tasklist walking too, even if it's not a
tight loop like the one that schedule triggered. You could try to
simulate it with a kernel module too. If you make it easily reproducible
it'll be easier to find what's wrong.
You can also try to backout the dynsched patch from the 8.0 kernel, and
see if it returns reproducible then (you should find the patch in the srpm
or in my kernel.org directory).
You can also compare the number of tasks in the system with the number
of simultaneously runnable tasks. And also have a look if the problem
goes away if you stop setiathome.
Hope this helps,
Andrea
-
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/