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

From: Hans Petter Selasky <hselasky_at_c2i.net>
Date: Sun, 7 Mar 2010 19:39:51 +0100
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 _at_
> >> /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
Received on Sun Mar 07 2010 - 17:41:29 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:01 UTC