Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Mar 2010 00:56:58 +0100
From:      Giovanni Trematerra <giovanni.trematerra@gmail.com>
To:        Garrett Cooper <yanefbsd@gmail.com>
Cc:        Tom Couch <tom.couch.storage@gmail.com>, FreeBSD Current <freebsd-current@freebsd.org>
Subject:   Re: Removing USB keyboard after filesystems synced causes panic with destroyed mutex twa(4)?
Message-ID:  <4e6cba831003131556t2cb787e0xc9e2d649320d6e59@mail.gmail.com>
In-Reply-To: <7d6fde3d1003121933s4ba7b57fw6542628c16edf723@mail.gmail.com>
References:  <7d6fde3d1003070207q621e69ado2cb64e431feacd76@mail.gmail.com> <7d6fde3d1003070224k3626a9b5y98c11a43eef1bed4@mail.gmail.com> <4e6cba831003101356i534341ffr2961b983854ab788@mail.gmail.com> <7dc40bd01003101407m605e41ey2d8ace0049cf5e61@mail.gmail.com> <7d6fde3d1003102158o7834ca67lce3eca23aa723fd1@mail.gmail.com> <7d6fde3d1003121933s4ba7b57fw6542628c16edf723@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Mar 13, 2010 at 4:33 AM, Garrett Cooper <yanefbsd@gmail.com> wrote:
> On Wed, Mar 10, 2010 at 9:58 PM, Garrett Cooper <yanefbsd@gmail.c
>>>

>
> Apart from the typo above (s/ctrl/ctlr/), things work appropriately

Oopss I'm sorry.

> now at reboot. The only problem is that bootup is really wonky now,
> because the RAID had a LOT of issues attaching to cam(4) (failed in
> 2/3 cold boot attempts); an additional branch condition may need to be
> added to the above if-statement if this change didn't take that into
> account. However, if the old behavior was incorrect and the new
> behavior is correct, s.t. the RAID controller demonstrating bus
> detection timeout issue that is occurring with a lot of USB devices
> and some RAID controllers today, this could be extremely problematic.
>

if you don't mind could you try this patch? Less dirty but always quick :)

Thank you for your time.

--
Gianni


diff -r 69c84861a227 sys/dev/twa/tw_cl.h
--- a/sys/dev/twa/tw_cl.h       Thu Mar 11 16:18:11 2010 -0500
+++ b/sys/dev/twa/tw_cl.h       Sat Mar 13 18:50:16 2010 -0500
@@ -66,6 +66,8 @@
 #define TW_CLI_CTLR_STATE_RESET_PHASE1_IN_PROGRESS     (1<<5)
 /* G66 register write access bug needs to be worked around. */
 #define TW_CLI_CTLR_STATE_G66_WORKAROUND_NEEDED        (1<<6)
+/* Controller is shutting down. */
+#define TW_CLI_CTLR_STATE_SHUTDOWN_IN_PROGRESS (1<<7)

 /* Possible values of ctlr->ioctl_lock.lock. */
 #define TW_CLI_LOCK_FREE               0x0     /* lock is free */
diff -r 69c84861a227 sys/dev/twa/tw_cl_init.c
--- a/sys/dev/twa/tw_cl_init.c  Thu Mar 11 16:18:11 2010 -0500
+++ b/sys/dev/twa/tw_cl_init.c  Sat Mar 13 18:50:16 2010 -0500
@@ -598,6 +598,7 @@ tw_cl_shutdown_ctlr(struct tw_cl_ctlr_ha
         * and notify the controller that we are going down.
         */
        ctlr->state &= ~TW_CLI_CTLR_STATE_ACTIVE;
+       ctlr->state |= TW_CLI_CTLR_STATE_SHUTDOWN_IN_PROGRESS;

        tw_cli_disable_interrupts(ctlr);

diff -r 69c84861a227 sys/dev/twa/tw_cl_intr.c
--- a/sys/dev/twa/tw_cl_intr.c  Thu Mar 11 16:18:11 2010 -0500
+++ b/sys/dev/twa/tw_cl_intr.c  Sat Mar 13 18:50:16 2010 -0500
@@ -75,9 +75,12 @@ tw_cl_interrupt(struct tw_cl_ctlr_handle
        if (ctlr == NULL)
                goto out;

-       /* If we get an interrupt while resetting, it is a shared
-          one for another device, so just bail */
-       if (ctlr->state & TW_CLI_CTLR_STATE_RESET_IN_PROGRESS)
+       /*
+        * If we get an interrupt while resetting or shutting down,
+        * it is a shared one for another device, so just bail
+        */
+       if (ctlr->state & TW_CLI_CTLR_STATE_RESET_IN_PROGRESS ||
+               ctlr->state & TW_CLI_CTLR_STATE_SHUTDOWN_IN_PROGRESS)
                goto out;

        /*



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