[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.024 / U:0.412 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site