Crash with BenH's 2.4.10/2.4.11-pre on 7600

Michel Lanners mlan at cpu.lu
Mon Oct 8 06:50:46 EST 2001


Hi all,

Sorry to reply to myself.....

> Recent 2.4 kernels refuse to boot my old faithful 7600 (OldWorld). Ben's
> current 2.4.11-pre4-ben0 crashes inside kmalloc(), called from
> __request_region():
>
> vector: 300 at pc = c002e150, lr = c0019a08
> msr = 9032, sp = c01d91f0 [c01d9140]
> dar = 2c, dsisr = 40000000
> current = c01d7460, pid = 0, comm = swapper
> mon>
>
> pc is here:
>
> c002e0c4 <kmalloc>:
> c002e0c4:       94 21 ff d0     stwu    r1,-48(r1)
> c002e0c8:       7c 08 02 a6     mflr    r0
> c002e0cc:       bf 81 00 20     stmw    r28,32(r1)
> c002e0d0:       90 01 00 34     stw     r0,52(r1)
> c002e0d4:       3d 20 c0 1e     lis     r9,-16354
> c002e0d8:       80 09 ab 80     lwz     r0,-21632(r9)
> c002e0dc:       7c 6b 1b 78     mr      r11,r3
> c002e0e0:       2c 00 00 00     cmpwi   r0,0
> c002e0e4:       7c 9c 23 78     mr      r28,r4
> c002e0e8:       38 69 ab 80     addi    r3,r9,-21632
> c002e0ec:       41 82 01 78     beq     c002e264 <kmalloc+0x1a0>
> c002e0f0:       73 80 00 01     andi.   r0,r28,1
> c002e0f4:       3d 20 c0 18     lis     r9,-16360
> c002e0f8:       3c 80 c0 18     lis     r4,-16360
> c002e0fc:       4f 80 00 00     mcrf    cr7,cr0
> c002e100:       80 03 00 00     lwz     r0,0(r3)
> c002e104:       7c 0b 00 40     cmplw   r11,r0
> c002e108:       41 81 01 50     bgt     c002e258 <kmalloc+0x194>
> c002e10c:       41 9e 00 0c     beq     cr7,c002e118 <kmalloc+0x54>
> c002e110:       83 e3 00 08     lwz     r31,8(r3)
> c002e114:       48 00 00 08     b       c002e11c <kmalloc+0x58>
> c002e118:       83 e3 00 04     lwz     r31,4(r3)
> c002e11c:       41 9e 00 34     beq     cr7,c002e150 <kmalloc+0x8c>
> c002e120:       80 1f 00 2c     lwz     r0,44(r31)
> c002e124:       3b c1 00 08     addi    r30,r1,8
> c002e128:       70 0b 00 01     andi.   r11,r0,1
> c002e12c:       3b bf 00 08     addi    r29,r31,8
> c002e130:       40 82 00 4c     bne     c002e17c <kmalloc+0xb8>
> c002e134:       38 84 f0 5c     addi    r4,r4,-4004
> c002e138:       38 69 ef 70     addi    r3,r9,-4240
> c002e13c:       38 a0 04 bd     li      r5,1213
> c002e140:       4b fe 5d 5d     bl      c0013e9c <printk>
> c002e144:       38 60 00 00     li      r3,0
> c002e148:       48 05 ed 35     bl      c008ce7c <xmon>
> c002e14c:       48 00 00 30     b       c002e17c <kmalloc+0xb8>
> c002e150:       80 1f 00 2c     lwz     r0,44(r31)
> ^^^^^^^^

A register dump from xmon shows r31 indeed contains 0.

> I've tried to follow the code in kmalloc(), but I've not found a lot....
> if I understand xmon's crashinfo right, it would seem that r31 points
> into nowhereland, but I'm not sure where it gets loaded with what
> address... that would be (r3+8), right? And r3 would point at
> 0xc01eab80, right?

Wrong, r3 contains c01dab80, which is, according to System.map:

c01dab80 <cache_sizes>

So far, so good. But what's the problem? Unitialized cache_sizes array?
Or bug in gcc?

Loking closely at the kmalloc() code, it seems to crash in the first
test in kmem_cache_alloc_head(), where it accesses cachep->gfpflags.
That would mean it hit an unitialized entry in cache_sizes??

Cheers

Michel

-------------------------------------------------------------------------
Michel Lanners                 |  " Read Philosophy.  Study Art.
23, Rue Paul Henkes            |    Ask Questions.  Make Mistakes.
L-1710 Luxembourg              |
email   mlan at cpu.lu            |
http://www.cpu.lu/~mlan        |                     Learn Always. "


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-dev mailing list