[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: system hang + kernel oops because of high usb load? (seems to be reproducable) (followup)

----- Original Message -----
From: "Friedrich Lobenstock" <fl@xxxxxxx.at>
To: "Axis Etrax Mailing Liste" <dev-etrax@xxxxxxx.com>
Cc: "Orjan Friberg" <orjanf@xxxxxxx.com>
Sent: den 16 december 2003 18:51
Subject: Re: system hang + kernel oops because of high usb load? (seems to
be reproducable) (followup)

> Friedrich Lobenstock wrote on 16.12.2003 18:36 MET:
> >
> > [....further stuff deleted, it is available on request to not overwhelm
> > the list...]
> >
> The script tools/build/bin/ksymoops-cris seems to have a bug because the
> line in "oops.out" is just:
>    #### OOPS ####
> Looking at it I see it should have printed a code fragment there:
>    echo "#### OOPS ####"  | tee -a oops.out
>    discris -d -S -l --start-address=$STARTADDR2 --stop-address=$STOPADDR2
$VMLINUX | grep '      '  | tee -a oops.out
> Analizing this I ran the following on the commandline:
> fl:~/axis/devboard_82> export PC=0x$(grep '>>PC;' oops.out | sed -e
's/>>PC;  \(........\) .*$/\1/'); echo $PC
> 0xc000d752
> fl:~/axis/devboard_82> perl -e ' printf("0x%08X\n", $ENV{PC}+0);'
> 0x00000000
> ==> this seems to not work on my machine
> fl:~/axis/devboard_82>
discris -d -S -l --start-address=0xc000d752 --stop-address=0xc000d768 $(grep
' -v ' oops.out | sed -e 's/ *-v \(.*\) (specified)$/\1/')
> os/linux/vmlinux:     file format elf32-cris
> Disassembly of section .text:
> c000d752 <run_timer_list+0x100>:
> run_timer_list():
> c000d752:       4c94                    movu.b $r12,$r9
> c000d754:       7f0d f8b5 10c0 e99b     move.d $r9,[c010b5f8 <tv1>]
> c000d75c:       20e1 600a               move.d [$sp+32],$r0
> c000d760:       e506                    cmp.d $r5,$r0
> c000d762:       1030                    beq c000d774
> c000d764:       60a6                    move.d $r0,$r10
> c000d766:       600a                    move.d [$r0],$r0
> Disassembly of section .text.init:
> --
> MfG / Regards
> Friedrich Lobenstock

ksymoops-cris is a rather fast hack that I found useful enough to add
to the tools directory, the disassembly thing has worked for me though.

Doesn't make any difference for me, but try changing:
STOPADDR=`perl -e ' printf("0x%08X\n", $ENV{PC}-1);'`
STARTADDR2=`perl -e ' printf("0x%08X\n", $ENV{PC}+0);'`
STOPADDR2=`perl -e ' printf("0x%08X\n", $ENV{PC}+16);'`
STOPADDR=`perl -e ' printf("0x%08X\n", hex($ENV{PC})-1);'`
STARTADDR2=`perl -e ' printf("0x%08X\n", hex($ENV{PC})+0);'`
STOPADDR2=`perl -e ' printf("0x%08X\n", hex($ENV{PC})+16);'`

note the added hex().

regarding why run_timer_list loops so long with interrupts disabled,
my guess is that someone swamps the system with timers or that
the lists somehow got corrupt.
Try adding a loopcounter in run_timer_list and a function that print
the timerlists etc. and call that from the watchdog_bite_hook() function
in arch/cris/kernel/traps.c