Removing USB keyboard after filesystems synced causes panic
with destroyed mutex twa(4)?
Giovanni Trematerra
giovanni.trematerra at gmail.com
Sat Mar 13 23:57:00 UTC 2010
On Sat, Mar 13, 2010 at 4:33 AM, Garrett Cooper <yanefbsd at gmail.com> wrote:
> On Wed, Mar 10, 2010 at 9:58 PM, Garrett Cooper <yanefbsd at 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;
/*
More information about the freebsd-current
mailing list