[lkml]   [1998]   [Apr]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: enable_ioapic_irq broken in arch/i386/kernel/irq.c
On Mon, 27 Apr 1998, Linus Torvalds wrote:

> Hi,
> could everyone involved with this discussion please check out:
> pre-patch-2.1.99-1.gz
> which is a cleanup of my previous patches wrt irq handling, and also fixes
> a real bug (we used to ACK the io-apic outside the irq-controller lock,
> which meant that the ack's we did and "ipi_pending[]" might have gotten
> out of sync - which could certainly have resulted in bad behaviour).
> This also re-enables the code that replays interrupts in enable_irq(),
> because it should be ok now that the rest of the code is cleaned up.
> People that had the earlier problem with locking up with floppies, please
> test: if this re-introduces the lockup, please just #if 0 out all the code
> inside trigger_pending_irqs(), and send me a note telling me that that
> code still doesn't work.


I have just recompiled the kernel with clean 2.1.98+pre-patch-2.1.99-1
Only printer driver and ppp compressors are compiled as module.
Now I'm running that kernel, searching hard for troubles.

My hardware is:
Tyan Tomcat IIID (Dual P200)
32 MB ram
80 MB swap
Audio Excel DSP 16 (MSS emulation)
4 serial (1xUPS control; 1xmouse; 1xinternal modem; 1xhandheld backup)
1 parallel (driver modularized, not loaded)

I'm running:

kernel ricompilation (make -j3)
Kmidi (midi2wav realtime converter and output to /dev/dsp)
pine (big mailbox, lot'o'memory consumed)

The compilation terminated okay in 23 minutes and nothing wrong occurred.

Then I have started to play with floppy disks and the troubles started.
Mounted /dev/fd0 (1.44M) and /dev/fd1 (1.2M) disks and ... just some bytes
written to fd0 ... *ka-boom* !!
Machine was totally frozen (hmm but X11 hides text console)
So I rebooted in text mode .. and tested _only_ the floppy driver.
Mounted fd0 and fd1 and .. after some writes .. *ka-boom* !!
But now I can see that alt-sysrq-* works ... *ah-ehm* .. sort of .. I can
sysrq-P ... sysrq-B okay, it rebooted the PC ... sysrq-U not worked at all
(it told me that disks was remounted R/O but my bcheckrc fsck'ed all the
sysrq-P told me that the kernel was trapped in an (I guess) infinite loop.
Let's see where.
Hmm I have to admit I have alredy run make clean - stupid me - but I am
remaking the kernel just to rebuild the (I hope it will not
change between two subsequent 'make', same configuration).

Now a description of the deadly loop.

IP caught with alt-sysrq-P: c01e2fcc / c01e2fd3 / c01e2fe7 / c01e2fef

c01e2fc0 T __lock_kernel
c01e2ffc T __delay

arch/i386/lib/locks.S::__lock_kernel() [disassembled]

locks.o: file format elf32-i386

Disassembly of section .text:

00000000 <__lock_kernel>:
0: f0 0f ba 2d 00 lock btsl $0x0,0x0
5: 00 00 00 00
9: 73 29 jae 34 <__lock_kernel+0x34>
b: fb sti
c: 0f a3 15 00 00 btl %edx,0x0
11: 00 00
13: 73 12 jae 27 <__lock_kernel+0x27>
15: f0 0f b3 15 00 lock btrl %edx,0x0
1a: 00 00 00
1d: 73 08 jae 27 <__lock_kernel+0x27>
1f: 50 pushl %eax
20: 0f 20 d8 movl %cr3,%eax
23: 0f 22 d8 movl %eax,%cr3
26: 58 popl %eax
27: 0f ba 25 00 00 btl $0x0,0x0
2c: 00 00 00
2f: 72 db jb c <__lock_kernel+0xc>
31: fa cli
32: eb cc jmp 0 <__lock_kernel>
34: 88 15 00 00 00 movb %dl,0x0
39: 00
3a: c3 ret

The loop seems to be: 0c -> 13 -> 27 -> 2f

It seems consistent with the IPs I have caugth with sysrq-P so I think the
(rebuilt) is good and the kernel was locked in __lock_kernel().

Hope this helps.


To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to

 \ /
  Last update: 2005-03-22 13:42    [W:0.069 / U:1.852 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site