NetBSD-Bugs archive

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

Re: kern/53066: nearly reproducable softint panic on shutdown



The following reply was made to PR kern/53066; it has been noted by GNATS.

From: =?UTF-8?B?SmFyb23DrXIgRG9sZcSNZWs=?= <jaromir.dolecek%gmail.com@localhost>
To: "gnats-bugs%NetBSD.org@localhost" <gnats-bugs%netbsd.org@localhost>
Cc: 
Subject: Re: kern/53066: nearly reproducable softint panic on shutdown
Date: Mon, 23 Apr 2018 20:23:11 +0200

 So it's apparently mishandled shared interrupt in your case. Checked
 xhci_intr1(), it simply does not check if it should handle the
 interrupt, and always triggers the usb callback.
 
 Looking at dmesg, I see pin 18 intr is shared with ohci0-3, and
 nouveau0. From the detach list before panic, I see strikingly missing
 e.g. usb7, to which uplcom0 is attached. So I guess something is still
 triggering interrupts for uplcom0/ohci3 during detach, which xhci0
 misinterprets as something for itself.
 
 Quick fix would be to check sc_child/sc_child2 and skip the
 usb_schedsoftintr() call. Correct fix would be to fix xhci_intr() to
 check if it should handle the interrupt.
 
 I'll see what can be done to improve this.
 
 Jaromir
 
 2018-04-23 13:53 GMT+02:00 Martin Husemann <martin%duskware.de@localhost>:
 > On Mon, Apr 23, 2018 at 11:35:00AM +0000, Jarom=C3=ADr Dole?ek wrote:
 >>  Can you please check backtrace for reboot command, to see what in
 >>  particular triggered the interrupt? It was waiting on xscmd for my
 >>  sd(4) case, might be something else for yours.
 >
 > Sure:
 >
 > db{0}> trace/a ffffe4042bba04e0
 > trace: pid 37 lid 1 at 0xffff800144becd70
 > sleepq_block() at netbsd:sleepq_block+0x91
 > cv_wait() at netbsd:cv_wait+0xfb
 > kthread_join() at netbsd:kthread_join+0x89
 > audiodetach() at netbsd:audiodetach+0xcd
 > config_detach() at netbsd:config_detach+0x121
 > config_detach_all() at netbsd:config_detach_all+0x97
 > cpu_reboot() at netbsd:cpu_reboot+0x19a
 > sys_reboot() at netbsd:sys_reboot+0x75
 > syscall() at netbsd:syscall+0x208
 >
 > Nothing related to USB or umass.
 >
 >>  It's very strange that interrupt for xhci() would be triggered when
 >>  both child busses are already detached.
 >
 > Yes, but that is what is happening:
 >
 > [   1.1321399] xhci0 at pci4 dev 0 function 0: vendor 1033 product 0194 (=
 rev. 0x03)
 > [   1.1321399] xhci0: interrupting at ioapic0 pin 18
 > [   1.1321399] usb0 at xhci0: USB revision 3.0
 > [   1.1321399] usb1 at xhci0: USB revision 2.0
 > ..
 > [   1.1321399] fwohci0: BUS reset
 > [   1.1321399] fwohci0: node_id=3D0xc800ffc0, gen=3D1, CYCLEMASTER mode
 > [   1.1321399] ieee1394if0: 1 nodes, maxhop <=3D 0 cable IRM irm(0) (me)
 > [   1.1321399] ieee1394if0: bus manager 0
 > [   2.0103103] uhub0 at usb0: NetBSD (0000) xHCI Root Hub (0000), class 9=
 /0, rev 3.00/1.00, addr 0
 > [   2.1127363] uhub1 at usb1: NetBSD (0000) xHCI Root Hub (0000), class 9=
 /0, rev 2.00/1.00, addr 0
 > [   2.8278330] uhub2 at usb3: NetBSD (0000) EHCI root hub (0000), class 9=
 /0, rev 2.00/1.00, addr 1
 > ..
 > # reboot
 > reboot: rebooted by root
 > [  44.5996539] syncing disks... done
 > [  44.6396593] uhub1: detached
 > [  44.6696670] uhub0: detached
 > [  44.6996751] atabus0: detached
 > [  44.7396859] cd0: detached
 > [  44.7696940] usb1: detached
 > [  44.7997124] usb0: detached
 > [  44.8297205] atabus1: detached
 > [  44.8697210] atapibus0: detached
 > [  44.9097317] wd0: detached
 > [  44.9397399] uhub6: detached
 > [  44.9697480] uhub5: detached
 > [  44.9997560] uhub4: detached
 > [  45.0397668] uhub3: detached
 > [  45.0697749] uhub2: detached
 > [  45.0997830] spkr1: detached
 > [  45.1397938] Skipping crash dump on recursive panic
 > [  45.1397938] panic: kernel diagnostic assertion "sc->sc_child || sc->sc=
 _child2" failed: file "../../../../dev/usb/xhci.c", line 1239
 > [  45.1397938] cpu0: Begin traceback...
 > [  45.1397938] vpanic() at netbsd:vpanic+0x16f
 > [  45.1397938] ch_voltag_convert_in() at netbsd:ch_voltag_convert_in
 > [  45.1397938] xhci_intr() at netbsd:xhci_intr+0xd4
 > [  45.1397938] intr_biglock_wrapper() at netbsd:intr_biglock_wrapper+0x36
 > [  45.1397938] Xhandle_ioapic_level1() at netbsd:Xhandle_ioapic_level1+0x=
 6a
 > [  45.1397938] --- interrupt ---
 > [  45.1397938] x86_pause() at netbsd:x86_pause
 > [  45.1397938] callout_softclock() at netbsd:callout_softclock+0x41a
 > [  45.1397938] softint_dispatch() at netbsd:softint_dispatch+0xee
 > [  45.1397938] DDB lost frame for netbsd:Xsoftintr+0x4f, trying 0xffff800=
 13d2db0f0
 > [  45.1397938] Xsoftintr() at netbsd:Xsoftintr+0x4f
 >
 >
 >
 > Martin
 


Home | Main Index | Thread Index | Old Index