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 _at__at_ -66,6 +66,8 _at__at_ #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 _at__at_ -598,6 +598,7 _at__at_ 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 _at__at_ -75,9 +75,12 _at__at_ 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; /*Received on Sat Mar 13 2010 - 22:57:00 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:01 UTC