|
Message
From: Robert Millan<rmh@a...>
Date: Wed Jun 29 13:46:46 CEST 2005
Subject: [openrisc] Oops when booting Linux
Hi!
I got an Oops when booting Linux in or1ksim. I was using linux-2.4 from CVS, compiled with gcc 3.4.2, running on or1ksim from HEAD branch.
Boot log in uart0.tx attached, simulator log (run with verbose = 1 and debug = 1) attached too. I haven't used a higher debug level because lots of errors were printed already and most of them didn't look critical.
Linux boot log lists 0xc000b898 as the PC value when exception happens. Here's a dasm output of this address:
/usr/src/or1k/linux/linux-2.4/include/linux/list.h:83 c000b898: d4 04 18 00 l.sw 0x0(r4),r3
Corresponding C code in list.h:
static inline void __list_del(struct list_head *prev, struct list_head *next) { next->prev = prev; prev->next = next; /* line 83 */ }
Linux boot log lists 0xc000b63c as a "Call Trace" address. Since this address is in the stack trace, I guess it means this is the function that called __list_del (please correct me if i'm confused). The info for 0xc000b63c is:
/usr/src/or1k/linux/linux-2.4/kernel/sched.c:578 c000b63c: 84 61 00 2c l.lwz r3,0x2c(r1) c000b640: 84 83 00 28 l.lwz r4,0x28(r3) c000b644: bc 24 00 02 l.sfnei r4,0x2 c000b648: 0c 00 00 c1 l.bnf c000b94c <_schedule+0x390> c000b64c: 15 00 00 00 l.nop 0x0
Corresponding C code in kernel/sched.c:
/* move an exhausted RR process to be last.. */ if (unlikely(prev->policy == SCHED_RR)) /* line 578 */ if (!prev->counter) { prev->counter = NICE_TO_TICKS(prev->nice); move_last_runqueue(prev); }
Which once preprocessed reads:
if (__builtin_expect ((prev->policy == 2), 0)) if (!prev->counter) { prev->counter = (((20 - (prev->nice)) >> 2) + 1); move_last_runqueue (prev); }
(and I don't quite understand this, since both "unlikely" and "__builtin_expect" seem to be macros:
./include/linux/compiler.h:#define __builtin_expect(x, expected_value) (x) ./include/linux/compiler.h:#define likely(x) __builtin_expect((x),1) ./include/linux/compiler.h:#define unlikely(x) __builtin_expect((x),0) )
Please let me know if you need more info. I can send you a log with higher debug value, or even the vmlinux file.
-- Robert Millan
|
 |