Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Mar 2010 21:58:57 -0800
From:      Garrett Cooper <yanefbsd@gmail.com>
To:        Tom Couch <tom.couch.storage@gmail.com>
Cc:        freebsd-current@freebsd.org
Subject:   Re: Removing USB keyboard after filesystems synced causes panic with destroyed mutex twa(4)?
Message-ID:  <7d6fde3d1003102158o7834ca67lce3eca23aa723fd1@mail.gmail.com>
In-Reply-To: <7dc40bd01003101407m605e41ey2d8ace0049cf5e61@mail.gmail.com>
References:  <7d6fde3d1003070207q621e69ado2cb64e431feacd76@mail.gmail.com> <7d6fde3d1003070224k3626a9b5y98c11a43eef1bed4@mail.gmail.com> <4e6cba831003101356i534341ffr2961b983854ab788@mail.gmail.com> <7dc40bd01003101407m605e41ey2d8ace0049cf5e61@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Mar 10, 2010 at 2:07 PM, Tom Couch <tom.couch.storage@gmail.com> wr=
ote:
> Hi FreeBSD-current,
> =A0 =A0 My name is Tom Couch,
> I am part of the 3ware driver team recently acquired by LSI.
> I believe Giovanni's patch, below, is the correct fix for this bug.
>
> I am available to maintain the twa driver, now that I am on this list.
> Let me know how I can help,
>
> Tom
>
>
> On Wed, Mar 10, 2010 at 1:56 PM, Giovanni Trematerra <
> giovanni.trematerra@gmail.com> wrote:
>
>> On Sun, Mar 7, 2010 at 11:24 AM, Garrett Cooper <yanefbsd@gmail.com>
>> wrote:
>> > On Sun, Mar 7, 2010 at 2:07 AM, Garrett Cooper <yanefbsd@gmail.com>
>> wrote:
>> >> Hi Alexander and Hans,
>> >> =A0 =A0I 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 =3D 1
>> >> KDB: enter: panic
>> >> [thread pid 12 tid 100025 ]
>> >> Stopped at =A0 =A0 =A0 =A0 kdb_enter+0x3d: movq =A0 =A0 $0,0x40289c(%=
rip)
>> >> db>
>> >>
>> >> =A0 =A0I wish I could provide you with more details, but unfortunatel=
y 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 yo=
u
>> >> guys had seen this problem before.
>> >
>> > =A0 =A0Phew... it's reproducible with that kernel. Here's what I did
>> > exactly (because my original directions were incorrect):
>> > =A0 =A01. Hit power button (for S5).
>> > =A0 =A02. Disconnect keyboard RIGHT as `Uptime: ...' is displayed.
>> > =A0 =A0Kernel panicked on my system again. Now to figure out if it sti=
ll
>> > exists with a kernel compiled today, and also how to debug it if it
>> > still does exist :/...
>> > Thanks,
>> > -Garrett
>>
>> Hi Garrett,
>> Could you please try the patch below and report back?
>>
>> Thank you
>>
>> diff -r cab6489de66d sys/dev/twa/tw_cl_intr.c
>> --- a/sys/dev/twa/tw_cl_intr.c =A0 =A0 =A0 =A0Wed Mar 03 04:51:13 2010 -=
0500
>> +++ b/sys/dev/twa/tw_cl_intr.c =A0 =A0 =A0 =A0Wed Mar 10 06:29:05 2010 -=
0500
>> @@ -75,9 +75,12 @@ tw_cl_interrupt(struct tw_cl_ctlr_handle
>> =A0 =A0 =A0if (ctlr =3D=3D NULL)
>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 goto out;
>>
>> - =A0 =A0 /* If we get an interrupt while resetting, it is a shared
>> - =A0 =A0 =A0 =A0one for another device, so just bail */
>> - =A0 =A0 if (ctlr->state & TW_CLI_CTLR_STATE_RESET_IN_PROGRESS)
>> + =A0 =A0 /*
>> + =A0 =A0 =A0* =A0If we get an interrupt while resetting or shutting dow=
n,
>> + =A0 =A0 =A0* =A0it is a shared one for another device, so just bail
>> + =A0 =A0 =A0*/
>> + =A0 =A0 if (ctlr->state & TW_CLI_CTLR_STATE_RESET_IN_PROGRESS ||
>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (ctrl->state & TW_CLI_CTLR_STA=
TE_ACTIVE) =3D=3D 0)
>> =A0 =A0 =A0 =A0 =A0 =A0 =A0goto out;
>>
>> =A0 =A0 =A0/*

I'll give the patch a try sometime before the weekend; I have a
critical deadline that I need to work through and the machine can't be
taken offline until then.
Thanks!
-Garrett



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?7d6fde3d1003102158o7834ca67lce3eca23aa723fd1>