Re: PROBLEM: Oops in __is_prefetch with 2.6.0-test9-bk4 at boottime with Athlon XP 1800+

From: Andi Kleen
Date: Sun Nov 02 2003 - 08:36:55 EST


On Sun, 2 Nov 2003 10:48:51 +0100
Matthias Hanisch <matze@xxxxxxxxxxx> wrote:

> Then it faults in __get_user, (double-fault), enters again __is_prefetch via
> do_page_fault, this address (the fault address in first __is_prefetch call) is
> handled properly and then the oops is reported as described yesterday.
> Applying your init patch seems to cure this problem, but then - as I said in
> the beginning - it loops infinitely.

When the __init patch helps means someone uses an exception table entry
in an __init or __exit function. The linker cannot deal with that and the
exception table ends up unordered, which breaks the exception handling.
That's a bug and needs to be fixed because it will break more than just
__is_prefetch

There are two options:
- Either sort the exception table at runtime
- Or track down the code. The way to track this down (if you want to do this) is to dump
the __ex_table ELF section in vmlinux using objdump. It consists of pairs
of addresses. The first address in the pair should be ordered over the section.
Find the unordered address and decode the second address using System.map. Then fix
that function either dropping the __init/__exit or eliminating the bad entry otherwise.
If you send me your .config in an usable way I can probably do this for you.

>
> At the moment I have no more ideas what to do here...

Maybe you just have a miscompilation of some sort. Do a make mrproper and try
again. You can also try if it happens with a smaller configuration.

-Andi


>
>
>
>
>
>
>
>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/