NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

kern/48733: deadlock in if_output() with interrupt on KERNEL_LOCK

>Number:         48733
>Category:       kern
>Synopsis:       deadlock in if_output() with interrupt on KERNEL_LOCK
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Apr 11 14:40:00 +0000 2014
>Originator:     Wolfgang Stukenbrock
>Release:        NetBSD 6.1 - MAIN
Dr. Nagler & Company GmbH
System: NetBSD e013 6.1 NetBSD 6.1 (NSW-E013) #64: Tue Oct 22 11:03:30 CEST 
Architecture: x86_64
Machine: amd64
        Problem located in /src/sys/netinet/ip_output.c.
        Since file revision 1.208 the Kernel-Lock is locked prior calling 
        on the interface.
        Now - at least the wm-driver - will call splnet() and splx() inside the 
        If any interrupt occurs in between splnet() and splx(), the interrupt 
is delayed and
        is processes in splx() when the level is released again.
        If such an interrupt is e.g. not MP-SAFE, the call stup in 
intr_biglock_wrapper() is
        used to call the interrupt routine and that one will lock the 
        So we try to lock it again here -> dead-lock.

        Our system runs fine with 4 8257x interfaces, but after adding 2 
additional 8254x
        interfaces, the system lock-up after a short time. Don't ask me, why 
the if_output
        call takes "to long" with theese two additonal interfaces, but it is 
        I've analysed this several times with DDB. Most times I've seen an 
        that dead-lock the system.
        Run a lot of trafic over wm-interfaces and do shomething e.g. on USB at 
the same
        time. It is just a question of time till system-dead-lock.
        Fist guess: revert change done from 1.207 to 1.208.
        But I've no idea about side effects.


Home | Main Index | Thread Index | Old Index