Removing USB keyboard after filesystems synced causes panic with destroyed mutex twa(4)?

Hans Petter Selasky hselasky at c2i.net
Sun Mar 7 18:41:29 UTC 2010


On Sunday 07 March 2010 11:46:58 Garrett Cooper wrote:
> On Sun, Mar 7, 2010 at 2:24 AM, Garrett Cooper <yanefbsd at gmail.com> wrote:
> > On Sun, Mar 7, 2010 at 2:07 AM, Garrett Cooper <yanefbsd at gmail.com> wrote:
> >> Hi Alexander and Hans,
> >>    I recently did the following which generated a panic on a
> >> 9-CURRENT kernel compiled on the 26th:
> >>
> >> 1. Executed reboot
> >> 2. Removed keyboard.
> >> 3. Some time after `All buffers synced\nUptime: ...' was displayed,
> >> the keyboard was registered disconnected.
> >> 4. The interrupt was delivered to my twa(4) enabled card and the
> >> kernel panicked, like so:
> >>
> >> ugen2.2: <Mitsumi Electric> at usbus2 (disconnected)
> >> uhub8: at uhub2, port 1, addr 2 (disconnected)
> >> ugen2.3: <Mitsumi Electric> at usbus2 (disconnected)
> >> ukbd0: at uhub8, port 3, addr 3 (disconnected)
> >> uhid0: at uhub8, port 3, addr 3 (disconnected)
> >> panic: mtx_lock_spin() of destroyed mutex @
> >> /usr/src/sys/dev/twa/tw_cl_intr.c:88
> >>
> >> cpuid = 1
> >> KDB: enter: panic
> >> [thread pid 12 tid 100025 ]
> >> Stopped at         kdb_enter+0x3d: movq     $0,0x40289c(%rip)
> >> db>
> >>
> >>    I wish I could provide you with more details, but unfortunately I
> >> the USB bus isn't registering the fact that I'm reattaching the
> >> keyboard right now and the box won't reboot automatically :( (didn't
> >> set the right sysctl beforehand to panic automatically). I'll try and
> >> reproduce the issue again, but I was just wondering whether or not you
> >> guys had seen this problem before.
> >
> >    Phew... it's reproducible with that kernel. Here's what I did
> > exactly (because my original directions were incorrect):
> >    1. Hit power button (for S5).
> >    2. Disconnect keyboard RIGHT as `Uptime: ...' is displayed.
> >    Kernel panicked on my system again. Now to figure out if it still
> > exists with a kernel compiled today, and also how to debug it if it
> > still does exist :/...
> 
> 1. It still does exist with today's kernel.
> 2. Here's the backtrace:
> 
> db_trace_self_wrapper() at db_trace_self_wrapper+0x2a
> panic() at panic+0x17d
> _mtx_lock_spin_flags() at _mtx_lock_spin_flags+0x126
> tw_cl_interrupt() at tw_cl_interrupt+0x14c
> twa_pci_intr() at twa_pci_intr+0x11
> intr_event_execute_handlers() at intr_event_execute_handlers+0x67
> ithread_loop() at ithread_loop+0xae
> fork_exit() at fork_exit+0x12a
> fork_trampoline() at fork_trampoline+0xe
> --- trap 0, rip = 0, rsp = 0xffffff80751d6d30, rbp = 0 ---
> KDB: enter: panic
> [ithread pid 12 tid 100025 ]
> Stopped at kdb_enter+0x3d: movq $0, 0x40289c(%rip)
> 
> I'll have to wait until tomorrow to grab a PS/2 keyboard to get more
> helpful info :/...
> Thanks,
> -Garrett
> 

Hi,

The reason you get this panic when you unplug the USB keyboard is probably 
because the twa interrupt handler is shared with the USB one. It does not look 
like a USB problem to me but rather a problem inside the twa_pci_intr() code.

--HPS


More information about the freebsd-current mailing list