|
Message
From: Balint Cristian<cristian.balint@o...>
Date: Wed Jun 29 14:14:44 CEST 2005
Subject: [openrisc] Oops when booting Linux
On Wednesday 29 June 2005 14:46, Robert Millan wrote: Only if you buy an FPGA board.
To be onest is not so expensive.
> > 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. >
-- Cristian Balint Romania Data Systems SA - filiala Oradea Departamentul Tehnic ➧ str. Independentei nr. 24, Oradea tel. + 40-259-447.252 fax. + 40-259-467.440 ➧ email: cristian.balint@o... suport@r... ➧ http://www.rdsnet.ro
|
 |