2.0.29 stuck in loop in grow_buffers

Zach (zab@grumblesmurf.net)
Thu, 20 Mar 1997 15:56:59 -0800 (PST)


i have 3 ppro166 with 132megs ecc, 2 on board aic7880s..

when running it with 64meg (the most, it seems, the bios will report) all
is well. when i add mem=132M to the kernel args, it hangs just after

Partition check:
sda: sda1 sda2
sdb: sdb1 sdb2 sdb3

alt-scrolllock still works, and points to the problem (symptom?..)

(this is all hand recorded..)

eip: 0010:[<0012b307>] flags=206 ds/es/gs=18 fs=2b
eax/edx = -1 (ffffffff) ebx=1 ecx=83effac esi=83eefac edi=83f0000
ebp = 1ada4

and hitting it repeatedly makes eip jump around, but always ending in
{307,2fe,328,304} the flags jump around 202,216,286 and i'm way too lazy
to figure out what those mean :) ax,cx, and dx toggle between -1 and
83effac

so poking around with objdump shows that this is all in the while(1) loop
in grow_buffers.

while (1) {
nr_free[isize]++;
if (insert_point) {
tmp->b_next_free = insert_point->b_next_free;
tmp->b_prev_free = insert_point;
insert_point->b_next_free->b_prev_free = tmp;
insert_point->b_next_free = tmp;
} else {
tmp->b_prev_free = tmp;
tmp->b_next_free = tmp;
}
insert_point = tmp;
++nr_buffers;
++nr_buffers_size[isize];
if (tmp->b_this_page)
tmp = tmp->b_this_page;
else
break;
}

from looking at objdump (see way below) is used for temp space now and
again.. ecx = insert_point, and edx = tmp.

so for whatever reason, it seems that a -1 is getting in there are
confusing the bajeebies out of things. i can do more debugging if people
want (hitting whatever keys that give the process and buffer listings). I
haven't tried 2.1.x kernels to see if its in there too.

now, i'm not quite conviced that the hardware isn't at fault. this box
is.. sort of experimental :) is there some way we can find out?

thanks, zach

0012b270 <grow_buffers> pushl %edi
0012b271 <grow_buffers+1> pushl %esi
0012b272 <grow_buffers+2> pushl %ebx
0012b273 <grow_buffers+3> movl 0x10(%esp,1),%edx
0012b277 <grow_buffers+7> movl 0x14(%esp,1),%esi
0012b27b <grow_buffers+b> testl $0x1ff,%esi
0012b281 <grow_buffers+11> jne 0012b28b <grow_buffers+1b>
0012b283 <grow_buffers+13> cmpl $0x1000,%esi
0012b289 <grow_buffers+19> jbe 0012b2a0 <grow_buffers+30>
0012b28b <grow_buffers+1b> pushl %esi
0012b28c <grow_buffers+1c> pushl $0x1ad9e3
0012b291 <grow_buffers+21> call 001170c8 <printk>
0012b296 <grow_buffers+26> xorl %eax,%eax
0012b298 <grow_buffers+28> addl $0x8,%esp
0012b29b <grow_buffers+2b> popl %ebx
0012b29c <grow_buffers+2c> popl %esi
0012b29d <grow_buffers+2d> popl %edi
0012b29e <grow_buffers+2e> ret
0012b29f <grow_buffers+2f> nop
0012b2a0 <grow_buffers+30> movl %esi,%eax
0012b2a2 <grow_buffers+32> sarl $0x9,%eax
0012b2fb <grow_buffers+8b> movl 0x18(%ecx),%eax
0012b2fe <grow_buffers+8e> movl %eax,0x18(%edx)
0012b301 <grow_buffers+91> movl %ecx,0x3c(%edx)
0012b304 <grow_buffers+94> movl 0x18(%ecx),%eax
0012b307 <grow_buffers+97> movl %edx,0x3c(%eax)
0012b30a <grow_buffers+9a> movl %edx,0x18(%ecx)
0012b30d <grow_buffers+9d> jmp 0012b316 <grow_buffers+a6>
0012b30f <grow_buffers+9f> nop
0012b310 <grow_buffers+a0> movl %edx,0x3c(%edx)
0012b313 <grow_buffers+a3> movl %edx,0x18(%edx)
0012b316 <grow_buffers+a6> movl %edx,%ecx
0012b318 <grow_buffers+a8> incl 0x1c515c
0012b31e <grow_buffers+ae> incl 0x1c5178(,%ebx,4)
0012b325 <grow_buffers+b5> movl 0x10(%edx),%eax
0012b328 <grow_buffers+b8> testl %eax,%eax
0012b32a <grow_buffers+ba> je 0012b330 <grow_buffers+c0>
0012b32c <grow_buffers+bc> movl %eax,%edx
0012b32e <grow_buffers+be> jmp 0012b2f0 <grow_buffers+80>
0012b330 <grow_buffers+c0> movl %esi,0x10(%edx)
0012b333 <grow_buffers+c3> movl %esi,0x1c513c(,%ebx,4)
0012b33a <grow_buffers+ca> movl %edi,%eax
0012b33c <grow_buffers+cc> shrl $0xc,%eax
0012b33f <grow_buffers+cf> movl 0x1c44a0,%ecx
0012b345 <grow_buffers+d5> leal (%eax,%eax,2),%edx
0012b348 <grow_buffers+d8> leal (%eax,%edx,4),%edx
0012b34b <grow_buffers+db> movl %esi,0x28(%ecx,%edx,4)
0012b34f <grow_buffers+df> addl $0x1000,0x1c5240
0012b359 <grow_buffers+e9> movl $0x1,%eax
0012b35e <grow_buffers+ee> popl %ebx
0012b35f <grow_buffers+ef> popl %esi
0012b360 <grow_buffers+f0> popl %edi
0012b361 <grow_buffers+f1> ret
0012b362 <grow_buffers+f2> leal (%esi),%esi