LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Advertise
  • Mirrors
  • Logos
  • Contact us
  • Find Resources
  • Job Opportunity
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Openrisc > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    From: Matjaz Breskvar<phoenix@o...>
    Date: Wed Jun 29 13:55:06 CEST 2005
    Subject: [openrisc] Oops when booting Linux
    Top
    Hi Robert,

    i'm already aware of this problem when building linux 2.4 with gcc-3.4.2. at
    the time i was looking at it i traced it to be related to gcc. kernel and
    compiler should be of approx. the same version. i suggest you use gcc-3.2.3
    with linux-2.4 (you shouldn't have any problems with it).

    best regards,
    p.

    * Robert Millan (rmh@a...) wrote:
    > 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
    > _______________________________________________
    > http://www.opencores.org/mailman/listinfo/openrisc

    ReferenceAuthor
    [openrisc] Oops when booting LinuxRobert Millan

    Follow upAuthor
    [openrisc] Oops when booting LinuxRobert Millan

     
    Copyright (c) 1999 OPENCORES.ORG. All rights reserved.