This patch has been respun to take into account James Bottomley's version of the fix to the fusion reset handlers. This patch replaces the previous patch. http://marc.theaimsgroup.com/?l=linux-scsi&m=114790729315904&w=2 Aside from line number differences, there is no content difference. Only patches two and five in the sequence required change. Signed-off-by: Michael Reed Michael Reed wrote: > The driver uses msleep_interruptible() in the code path responsible > for resetting the card's ports via the lsiutil command. If a > is received during the reset it can leave a port in such > a state that the only way to regain its use is to reboot the system. > Changing from msleep_interruptible() to msleep() corrects the problem. > > Signed-off-by: Michael Reed > > > > > ------------------------------------------------------------------------ > > The driver uses msleep_interruptible() in the code path responsible > for resetting the card's ports via the lsiutil command. If a > is received during the reset it can leave a port in such > a state that the only way to regain its use is to reboot the system. > Changing from msleep_interruptible() to msleep() corrects the problem. > > Signed-off-by: Michael Reed > > > --- rc3c/drivers/message/fusion/mptbase.c 2006-05-08 14:55:27.276697653 -0500 > +++ rc3/drivers/message/fusion/mptbase.c 2006-05-08 14:58:55.364106345 -0500 > @@ -2264,7 +2264,7 @@ > } > > if (sleepFlag == CAN_SLEEP) { > - msleep_interruptible(1); > + msleep(1); > } else { > mdelay (1); /* 1 msec delay */ > } > @@ -2652,7 +2652,7 @@ > state = mpt_GetIocState(ioc, 1); > while (state != MPI_IOC_STATE_OPERATIONAL && --cntdn) { > if (sleepFlag == CAN_SLEEP) { > - msleep_interruptible(1); > + msleep(1); > } else { > mdelay(1); > } > @@ -2904,7 +2904,7 @@ > > /* wait 1 msec */ > if (sleepFlag == CAN_SLEEP) { > - msleep_interruptible(1); > + msleep(1); > } else { > mdelay (1); > } > @@ -2921,7 +2921,7 @@ > } > /* wait .1 sec */ > if (sleepFlag == CAN_SLEEP) { > - msleep_interruptible (100); > + msleep (100); > } else { > mdelay (100); > } > @@ -3011,7 +3011,7 @@ > > /* wait 1 msec */ > if (sleepFlag == CAN_SLEEP) { > - msleep_interruptible (1); > + msleep (1); > } else { > mdelay (1); > } > @@ -3059,7 +3059,7 @@ > return 0; > } > if (sleepFlag == CAN_SLEEP) { > - msleep_interruptible (10); > + msleep (10); > } else { > mdelay (10); > } > @@ -3110,7 +3110,7 @@ > SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, sleepFlag); > > if (sleepFlag == CAN_SLEEP) { > - msleep_interruptible (1000); > + msleep (1000); > } else { > mdelay (1000); > } > @@ -3132,7 +3132,7 @@ > return hard_reset_done; > } > if (sleepFlag == CAN_SLEEP) { > - msleep_interruptible (10); > + msleep (10); > } else { > mdelay (10); > } > @@ -3203,7 +3203,7 @@ > > /* wait 100 msec */ > if (sleepFlag == CAN_SLEEP) { > - msleep_interruptible (100); > + msleep (100); > } else { > mdelay (100); > } > @@ -3282,7 +3282,7 @@ > > /* wait 1 sec */ > if (sleepFlag == CAN_SLEEP) { > - msleep_interruptible (1000); > + msleep (1000); > } else { > mdelay (1000); > } > @@ -3310,7 +3310,7 @@ > > /* wait 1 sec */ > if (sleepFlag == CAN_SLEEP) { > - msleep_interruptible (1000); > + msleep (1000); > } else { > mdelay (1000); > } > @@ -3344,7 +3344,7 @@ > > /* wait 100 msec */ > if (sleepFlag == CAN_SLEEP) { > - msleep_interruptible (100); > + msleep (100); > } else { > mdelay (100); > } > @@ -3438,7 +3438,7 @@ > } > > if (sleepFlag == CAN_SLEEP) { > - msleep_interruptible(1); > + msleep(1); > } else { > mdelay (1); /* 1 msec delay */ > } > @@ -3878,7 +3878,7 @@ > intstat = CHIPREG_READ32(&ioc->chip->IntStatus); > if (! (intstat & MPI_HIS_IOP_DOORBELL_STATUS)) > break; > - msleep_interruptible (1); > + msleep (1); > count++; > } > } else { > @@ -3927,7 +3927,7 @@ > intstat = CHIPREG_READ32(&ioc->chip->IntStatus); > if (intstat & MPI_HIS_DOORBELL_INTERRUPT) > break; > - msleep_interruptible(1); > + msleep(1); > count++; > } > } else { > --- rc3c/drivers/message/fusion/mptfc.c 2006-05-08 14:55:38.828222127 -0500 > +++ rc3/drivers/message/fusion/mptfc.c 2006-05-08 14:58:58.911964756 -0500 > @@ -678,7 +678,7 @@ > */ > if (pp0dest->PortState == MPI_FCPORTPAGE0_PORTSTATE_UNKNOWN) { > if (count-- > 0) { > - msleep_interruptible(100); > + msleep(100); > goto try_again; > } > printk(MYIOC_s_INFO_FMT "Firmware discovery not" > --- rc3c/drivers/message/fusion/mptscsih.c 2006-05-08 14:55:06.453554069 -0500 > +++ rc3/drivers/message/fusion/mptscsih.c 2006-05-08 14:59:04.163755105 -0500 > @@ -1922,7 +1922,7 @@ > break; > } > spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags); > - msleep_interruptible(250); > + msleep(250); > } while (--loop_count); > > return status;