[parisc-linux] Re: Kernel faults on boot
Richard Hirst
rhirst@linuxcare.com
Mon, 11 Jun 2001 17:03:54 +0100
Just tried my new installer that tries to run the second stage installer
automatically on reboot. Crashed the kernel in kfree(), called from
vc_resize() again. I'm guessing there is something screwy about the
screenbuf allocation. Possibly due to the first ones being allocated
from the bootmem allocator?
Richard
On Mon, Jun 11, 2001 at 01:16:36PM +0100, Richard Hirst wrote:
> On Mon, Jun 11, 2001 at 01:17:39PM +0200, Peter Weilbacher wrote:
> > Hmm, it seems that the numbers change every time, but here are the
> > ones from the last instance:
> >
> > Kernel Fault: Code=15 regs=1051ca80 (Addr=1dc0ce18)
> >
> > YZrvWESTHLNXBCVMcbcbcbcbOGFRQPDI
> > PSW: 00000000000001000000000000001111
> > r0-3o 00000000 10236000 10193d70 1dc0cd18
> > r4-7o 146fc000 102fe13c 00000001 00000100
> > r8-11o 4020b1a8 00000000 00000004 146ff000
> > r12-15o 00000100 00000030 00003000 102fe138
> > r16-19o 00000080 1051c908 00000001 14786000
> > r20-23o 146fc000 102959f8 101da1d4 00000000
> > r24-27o 000000ff 1dc0ce18 146fc000 10268010
> > r28-31o 00001920 00000004 1051ccc0 10192c78
> > sr0-3o 00000000 0000012a 00000000 0000012a
> > sr4-7o 00000000 00000000 00000000 00000000
> >
> > IASQ: 00000000 00000000 IAOQ: 10236234 10236238
> > IIR: 0f221033 ISR: 00000000 IOR: 1dc0ce18
> > ORIG_R28: 1005f210
> >
> > Phew, quite a work to type all this stuff, I am glad that you are
> > not interested in the stack... Perhaps this is useful.
>
> The 'o' chars are actually tabs, which are supposed to make the register
> dump line up.
>
> IAOQ is the most important. You can look up the value in the
> sti/sys_map file on the CD:
>
> ...
> 10236204 T bcopy
> 10236228 T memcpy
> 1023624c T memmove
> ...
>
> so it crashed in memcpy. r2 is often the return address, so back to sys_map:
>
> ...
> 10193a98 T vc_allocate
> 10193bc8 T vc_resize
> 10193ed8 t .L1003
> 10193f40 t .L1043
> 10193fcc T vc_disallocate
> ...
>
> looks like memcpy was called from vc_resize().
>
> r236,r25,r24,r23 are the call params, if they havn't been overwritten.
>
> memcpy() disassembles as
>
> 00000000 <memcpy>:
> 0: 37 18 3f ff ldo -1(r24),r24
> 4: 87 1f 20 20 cmpib,= -1,r24,1c <memcpy+0x1c>
> 8: 08 1a 02 54 copy r26,r20
> c: 0f 22 10 33 ldb,ma 1(sr0,r25),r19
> 10: 37 18 3f ff ldo -1(r24),r24
> 14: 8f 1f 3f e5 cmpib,<> -1,r24,c <memcpy+0xc>
> 18: 0e 93 12 22 stb,ma r19,1(sr0,r20)
> 1c: e8 40 c0 00 bv r0(rp)
> 20: 08 1a 02 5c copy r26,ret0
>
> r26 = r20, so it failed on the first byte of the move, so call was
>
> memcpy(0x146fc000,0x1dc0ce18,0x100);
>
> with 0x1dc0ce18 being an invalid address.
>
> I guess that comes from this loop in drivers/char/screen.c:
>
> while (ol < scr_end) {
> scr_memcpyw((unsigned short *) nl, (unsigned short *) ol, rlth);
> if (rrem)
> scr_memsetw((void *)(nl + rlth), video_erase_char, rrem);
> ol += osr;
> nl += sr;
> }
>
>
> At this point I'll stop and hope Helge can comment...
>
>
> > In the meantime I noticed that about every 6th time it boots up
> > without crashing, but the keyboard setting from the installation
> > (German) was obviously not saved.
>
> Correct, keyboard config is broken in the release sti image. If you
> manage to boot you could try
>
> mv /bin/loadkeys /bin/loadkeys.old
> mv /bin/dumpkeys /bin/dumpkeys.old
> mv /etc/console-tools /etc/console-tools.old
> apt-get install console-data console-common console-tools console-tools-libs
>
>
> If that works, let me know and I'll add it to the errata.
>
> Richard
>