2003-02-23 23:42:47

by Kasper Dupont

[permalink] [raw]
Subject: Panic in i810

I have a reproducable kernel panic with different 2.4.x kernels.
I'm using XFree86-4.2.0-8 with a i810 onboard chipset. Sometimes
when I log off X the kernel panics. This can be reproduced by
loging in on a VC as root and typing:

while [ ! -f /tmp/stopit ] ; do
killall gdmlogin || killall gdm ; sleep 7 ; deallocvt
done

The panic first happened on a RH7.3 system with kernel version
2.4.18-19.7.x. I have no serial port so I had to type the panic
from the screen. That did BTW give me a lot of trouble, because
the flashing LEDs prevented my KVM switch from working correctly.
The last 24 lines of the panic is below.

I applied all updates and reproduced the problem with kernel
version 2.4.18-24.7.x. I have no panic dump though, sometimes
the screen is black when this panic happens (but judging from
the hsync and vsync it is in text mode).

I tried reproducing with 2.4.21-pre4 and netconsole. (I have no
serial port, so netconsole is my only option.) Unfortunately the
netconsole patch from http://people.redhat.com/mingo/netconsole-patches/
does not support my onboard sis900 ethernet chip. But I tried
making the same changes to the sis900 driver as this patch has
done to a few others. And it worked. (Might not be stable, but
worked well enough to catch the entire Oops and panic messages.)
The patch and the output is below.


This is the error messages from 2.4.18-19.7.x visible on the
screen:

esi: 04000001 edi: 0000000b ebp: d11f3eb8 esp: d11f3e6c
ds: 0018 es: 0018 ss: 0018
Process X (pid: 1156, stackpage=d11f3000)
Stack: ce778ec0 04000001 c0109d5a 0000000b d27a8000 d11f3eb8 d11f3eb8 0000000b
c0340a60 c1d13f40 c0109ef8 0000000b d11f3eb8 c1d13f40 c1281710 00000000
c02d25bc 00000000 c010c308 c1281710 00000000 cb744000 00000000 c02d25bc
Call Trace: [<c0109d5a>] handle_IRQ_event [kernel] 0x3a (0xd11f3e74))
[<c0109ef8>] do_IRQ [kernel] 0x88 (0xd11f3e94))
[<c010c308>] call_do_IRQ [kernel] 0x5 (0xd11f3eb4))
[<c0114d1b>] flush_kernel_map [kernel] 0xb (0xd11f3ee0))
[<c0114fe9>] change_page_attr [kernel] 0x49 (0xd11f3eec))
[<d4dd5ee3>] agp_generic_destroy_page [agpart] 0x43 (0xd11f3f08))
[<d4dd547d>] agp_free_memory_R48653576 [agpart] 0x5d (0xd11f3f20))
[<d4e76a99>] i810_agp_free_memory [i810] 0x19 (0xd11f3f30))
[<d4e7ca5c>] i810_free_agp [i810] 0x2c (0xd11f3f38))
[<d4e7676d>] i810_agp_free [i810] 0xdd (0xd11f3f44))
[<d4e7a934>] i810_ioctl [i810] 0xe4 (0xd11f3f70))
[<c0146c97>] sys_ioctl [kernel] 0x217 (0xd11f3f94))
[<c010894b>] system_call [kernel] 0x33 (0xd11f3fc0))


Code: 8b 40 08 8b 50 10 0f b7 82 a4 20 00 00 25 ff 9f 00 00 74 55
<0>Kernel panic: Aiee, killing interrupt handler!
In interrupt handler - not syncing


This is the error messages from 2.4.21-pre4 dumped with
netconsole and passed through ksymoops. (The kernel is
tainted because of the missing module license in netconsole):

ksymoops 2.4.4 on i686 2.4.21-pre4-nc. Options used
-V (default)
-k /proc/ksyms (default)
-l /proc/modules (default)
-o /lib/modules/2.4.21-pre4-nc/ (default)
-m /boot/System.map-2.4.21-pre4-nc (default)

Warning: You did not tell me where to find symbol information. I will
assume that the log matches the kernel and modules that are running
right now and I'll use the default options above for symbol resolution.
If the current kernel and/or modules do not match the log, you can get
more accurate output by telling me the kernel version and where to find
map, modules, ksyms etc. ksymoops -h explains the options.

Error (expand_objects): cannot stat(/lib/reiserfs.o) for reiserfs
Warning (map_ksym_to_module): cannot match loaded module reiserfs to a unique module object. Trace may not be reliable.
Unable to handle kernel NULL pointer dereference at virtual address 00000008
d4e8bb72
*pde = 11123067
Oops: 0000
CPU: 0
EIP: 0010:[<d4e8bb72>] Tainted: P
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00013202
eax: 00000000 ebx: ce38d920 ecx: d2460000 edx: 0000c010
esi: 04000001 edi: 0000000b ebp: d0e4fed4 esp: d0e4fe88
ds: 0018 es: 0018 ss: 0018
Process X (pid: 1432, stackpage=d0e4f000)
Stack: ce38d920 04000001 c0109d2a 0000000b d2460000 d0e4fed4 d0e4fed4 0000000b
c02a6a60 d3b1fbe0 c0109ea8 0000000b d0e4fed4 d3b1fbe0 c024a9d0 d023a000
000017f7 d2460000 c021af54 c024a9d0 c1306b00 00000001 d023a000 000017f7
Call Trace: [<c0109d2a>] [<c0109ea8>] [<c0110018>] [<c0127c7d>] [<d4de1ee0>]
[<d4de1473>] [<d4e82ae9>] [<d4e88adc>] [<d4e8276d>] [<d4e86994>] [<c0141e27>]
[<c0108923>]
Code: 8b 40 08 8b 50 10 0f b7 82 a4 20 00 00 25 ff 9f 00 00 74 55

>>EIP; d4e8bb72 <[i810]i810_dma_service+12/80> <=====
Trace; c0109d2a <handle_IRQ_event+3a/70>
Trace; c0109ea8 <do_IRQ+68/b0>
Trace; c0110018 <pcibios_setup+1a8/240>
Trace; c0127c7d <unlock_page+d/70>
Trace; d4de1ee0 <[agpgart]agp_generic_destroy_page+50/70>
Trace; d4de1473 <[agpgart]agp_free_memory+53/90>
Trace; d4e82ae9 <[i810]i810_agp_free_memory+19/20>
Trace; d4e88adc <[i810]i810_free_agp+2c/80>
Trace; d4e8276d <[i810]i810_agp_free+dd/100>
Trace; d4e86994 <[i810]i810_ioctl+e4/f0>
Trace; c0141e27 <sys_ioctl+177/190>
Trace; c0108923 <system_call+33/38>
Code; d4e8bb72 <[i810]i810_dma_service+12/80>
00000000 <_EIP>:
Code; d4e8bb72 <[i810]i810_dma_service+12/80> <=====
0: 8b 40 08 mov 0x8(%eax),%eax <=====
Code; d4e8bb75 <[i810]i810_dma_service+15/80>
3: 8b 50 10 mov 0x10(%eax),%edx
Code; d4e8bb78 <[i810]i810_dma_service+18/80>
6: 0f b7 82 a4 20 00 00 movzwl 0x20a4(%edx),%eax
Code; d4e8bb7f <[i810]i810_dma_service+1f/80>
d: 25 ff 9f 00 00 and $0x9fff,%eax
Code; d4e8bb84 <[i810]i810_dma_service+24/80>
12: 74 55 je 69 <_EIP+0x69> d4e8bbdb <[i810]i810_dma_service+7b/80>

<0>Kernel panic: Aiee, killing interrupt handler!

2 warnings and 1 error issued. Results may not be reliable.


The netconsole patch with my modifications is here:
http://www.daimi.au.dk/~kasperd/linux_kernel/netconsole-2.4.20.patch

--
Kasper Dupont -- der bruger for meget tid p? usenet.
For sending spam use mailto:[email protected]
for(_=52;_;(_%5)||(_/=5),(_%5)&&(_-=2))putchar(_);


2003-02-24 02:17:22

by Toplica Tanaskovic

[permalink] [raw]
Subject: Re: Panic in i810

Dana ponedeljak 24. februar 2003. 00:52, Kasper Dupont je napisao/la:
> I have a reproducable kernel panic with different 2.4.x kernels.
> I'm using XFree86-4.2.0-8 with a i810 onboard chipset. Sometimes
> when I log off X the kernel panics. This can be reproduced by
> loging in on a VC as root and typing:

Have you tried my latest backport for agpgart from 2.5 to 2.4.21-pre4.
If you did not, try it. I do not suggest that it will work correctly with
your configuration (you did not mention which graphics card you own). I've
tested it with ATI Radeon R9000 and GeForce 2MX400 on Abit(i810) mobo. And
everything worked fine.
--
Pozdrav,
Tanasković Toplica


2003-02-24 09:58:16

by Kasper Dupont

[permalink] [raw]
Subject: Re: Panic in i810

Toplica Tanaskovi? wrote:
>
> Dana ponedeljak 24. februar 2003. 00:52, Kasper Dupont je napisao/la:
> > I have a reproducable kernel panic with different 2.4.x kernels.
> > I'm using XFree86-4.2.0-8 with a i810 onboard chipset. Sometimes
> > when I log off X the kernel panics. This can be reproduced by
> > loging in on a VC as root and typing:
>
> Have you tried my latest backport for agpgart from 2.5 to 2.4.21-pre4.

No. I notice some talk about that backport, but I see no patch.
Where can I find it?

> If you did not, try it. I do not suggest that it will work correctly with
> your configuration (you did not mention which graphics card you own).

All I know is that the PC is a model called "F@MILY net PC" and
has onboard i810. How do I find more relevant informations?

--
Kasper Dupont -- der bruger for meget tid p? usenet.
For sending spam use mailto:[email protected]
for(_=52;_;(_%5)||(_/=5),(_%5)&&(_-=2))putchar(_);

2003-02-26 12:33:40

by Kasper Dupont

[permalink] [raw]
Subject: Re: Panic in i810

diff -Nur linux.old/drivers/char/drm/i810_dma.c linux.new/drivers/char/drm/i810_dma.c
--- linux.old/drivers/char/drm/i810_dma.c Wed Feb 26 13:36:14 2003
+++ linux.new/drivers/char/drm/i810_dma.c Wed Feb 26 13:36:20 2003
@@ -894,6 +894,7 @@
void i810_dma_service(int irq, void *device, struct pt_regs *regs)
{
drm_device_t *dev = (drm_device_t *)device;
+ if (dev && dev->dev_private && dev->counts) {
drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private;
u16 temp;

@@ -907,6 +908,9 @@

queue_task(&dev->tq, &tq_immediate);
mark_bh(IMMEDIATE_BH);
+ } else {
+ printk(KERN_CRIT __FUNCTION__ ": NULL pointer\n");
+ }
}

void i810_dma_immediate_bh(void *device)


Attachments:
i810.patch (711.00 B)

2003-02-26 15:54:58

by Kasper Dupont

[permalink] [raw]
Subject: Re: Panic in i810

Kasper Dupont wrote:
>
> Kasper Dupont wrote:
> >
> > I have a reproducable kernel panic with different 2.4.x kernels.
> > I'm using XFree86-4.2.0-8 with a i810 onboard chipset. Sometimes
> > when I log off X the kernel panics. This can be reproduced by
> > loging in on a VC as root and typing:
> >
> > while [ ! -f /tmp/stopit ] ; do
> > killall gdmlogin || killall gdm ; sleep 7 ; deallocvt
> > done
>
> I made a patch, that at least prevents the system from panicing.

I said that too early. It did survive my stress testing. But shortly
thereafter on logout I got an endless stream of NULL pointer errors
from the i810_dma_service IRQ handler.

--
Kasper Dupont -- der bruger for meget tid p? usenet.
For sending spam use mailto:[email protected]
for(_=52;_;(_%5)||(_/=5),(_%5)&&(_-=2))putchar(_);