* [KJ] [PATCH 13/21] polling loops: change exit condition to
@ 2005-12-04 0:20 Marcin Slusarz
0 siblings, 0 replies; only message in thread
From: Marcin Slusarz @ 2005-12-04 0:20 UTC (permalink / raw)
To: kernel-janitors
who is responsible for those files?
Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
diff -upr -X linux-2.6.15-rc4/Documentation/dontdiff linux-2.6.15-rc4-orig/drivers/message/fusion/mptbase.c linux-2.6.15-rc4/drivers/message/fusion/mptbase.c
--- linux-2.6.15-rc4-orig/drivers/message/fusion/mptbase.c 2005-12-03 15:22:33.000000000 +0100
+++ linux-2.6.15-rc4/drivers/message/fusion/mptbase.c 2005-12-03 16:53:10.000000000 +0100
@@ -2874,6 +2874,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFw
u32 fwSize;
u32 diag0val;
int count;
+ unsigned long end_time;
u32 *ptrFw;
u32 diagRwData;
u32 nextImage;
@@ -2902,7 +2903,9 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFw
diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic);
CHIPREG_WRITE32(&ioc->chip->Diagnostic, diag0val | MPI_DIAG_RESET_ADAPTER);
- for (count = 0; count < 30; count ++) {
+ count = 0;
+ end_time = jiffies + msecs_to_jiffies(3000);
+ while (time_before(jiffies, end_time)) {
diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic);
if (!(diag0val & MPI_DIAG_RESET_ADAPTER)) {
ddlprintk((MYIOC_s_INFO_FMT "RESET_ADAPTER cleared, count=%d\n",
@@ -2915,9 +2918,10 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFw
} else {
mdelay (100);
}
+ ++count;
}
- if ( count = 30 ) {
+ if (diag0val & MPI_DIAG_RESET_ADAPTER) {
ddlprintk((MYIOC_s_INFO_FMT "downloadboot failed! "
"Unable to get MPI_DIAG_DRWE mode, diag0val=%x\n",
ioc->name, diag0val));
@@ -3032,7 +3036,9 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFw
}
}
- for (count=0; count<HZ*20; count++) {
+ count = 0;
+ end_time = jiffies + msecs_to_jiffies(HZ * 200);
+ while (time_before(jiffies, end_time)) {
if ((ioc_state = mpt_GetIocState(ioc, 0)) & MPI_IOC_STATE_READY) {
ddlprintk((MYIOC_s_INFO_FMT "downloadboot successful! (count=%d) IocState=%x\n",
ioc->name, count, ioc_state));
@@ -3053,6 +3059,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFw
} else {
mdelay (10);
}
+ ++count;
}
ddlprintk((MYIOC_s_INFO_FMT "downloadboot failed! IocState=%x\n",
ioc->name, ioc_state));
@@ -3090,7 +3097,8 @@ KickStart(MPT_ADAPTER *ioc, int force, i
{
int hard_reset_done = 0;
u32 ioc_state=0;
- int cnt,cntdn;
+ int cnt;
+ unsigned long end_time;
dinitprintk((KERN_WARNING MYNAM ": KickStarting %s!\n", ioc->name));
if (ioc->bus_type = SCSI) {
@@ -3113,8 +3121,9 @@ KickStart(MPT_ADAPTER *ioc, int force, i
dinitprintk((MYIOC_s_INFO_FMT "Diagnostic reset successful!\n",
ioc->name));
- cntdn = ((sleepFlag = CAN_SLEEP) ? HZ : 1000) * 2; /* 2 seconds */
- for (cnt=0; cnt<cntdn; cnt++) {
+ cnt = 0;
+ end_time = jiffies + msecs_to_jiffies(2000);
+ while (time_before(jiffies, end_time)) {
ioc_state = mpt_GetIocState(ioc, 1);
if ((ioc_state = MPI_IOC_STATE_READY) || (ioc_state = MPI_IOC_STATE_OPERATIONAL)) {
dinitprintk((MYIOC_s_INFO_FMT "KickStart successful! (cnt=%d)\n",
@@ -3126,6 +3135,7 @@ KickStart(MPT_ADAPTER *ioc, int force, i
} else {
mdelay (10);
}
+ ++cnt;
}
printk(MYIOC_s_ERR_FMT "Failed to come READY after reset! IocState=%x\n",
@@ -3162,6 +3172,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ign
#ifdef MPT_DEBUG
u32 diag1val = 0;
#endif
+ unsigned long end_time;
/* Clear any existing interrupts */
CHIPREG_WRITE32(&ioc->chip->IntStatus, 0);
@@ -3180,6 +3191,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ign
* or if the reset history is 0
*/
if (ignore || !(diag0val & MPI_DIAG_RESET_HISTORY)) {
+ end_time = jiffies + msecs_to_jiffies(2000);
while ((diag0val & MPI_DIAG_DRWE) = 0) {
/* Write magic sequence to WriteSequence register
* Loop until in diagnostic mode
@@ -3198,12 +3210,10 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ign
mdelay (100);
}
- count++;
- if (count > 20) {
+ if (time_after(jiffies, end_time)) {
printk(MYIOC_s_ERR_FMT "Enable Diagnostic mode FAILED! (%02xh)\n",
ioc->name, diag0val);
return -2;
-
}
diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic);
@@ -3264,7 +3274,8 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ign
* IOC will be left unusable. This is a fatal error
* case. _diag_reset will return < 0
*/
- for (count = 0; count < 30; count ++) {
+ end_time = jiffies + msecs_to_jiffies(30000);
+ while (time_before(jiffies, end_time)) {
diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic);
if (!(diag0val & MPI_DIAG_RESET_ADAPTER)) {
break;
@@ -3290,7 +3301,8 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ign
* If fail, no error will check again
* with calling program.
*/
- for (count = 0; count < 60; count ++) {
+ end_time = jiffies + msecs_to_jiffies(60000);
+ while (time_before(jiffies, end_time)) {
doorbell = CHIPREG_READ32(&ioc->chip->Doorbell);
doorbell &= MPI_IOC_STATE_MASK;
diff -upr -X linux-2.6.15-rc4/Documentation/dontdiff linux-2.6.15-rc4-orig/drivers/message/fusion/mptscsih.c linux-2.6.15-rc4/drivers/message/fusion/mptscsih.c
--- linux-2.6.15-rc4-orig/drivers/message/fusion/mptscsih.c 2005-12-03 15:22:33.000000000 +0100
+++ linux-2.6.15-rc4/drivers/message/fusion/mptscsih.c 2005-12-03 16:53:10.000000000 +0100
@@ -1964,10 +1964,11 @@ static int
mptscsih_tm_pending_wait(MPT_SCSI_HOST * hd)
{
unsigned long flags;
- int loop_count = 4 * 10; /* Wait 10 seconds */
int status = FAILED;
+ unsigned long end_time;
- do {
+ end_time = jiffies + msecs_to_jiffies(10000); /* Wait 10 seconds */
+ while (time_before(jiffies, end_time)) {
spin_lock_irqsave(&hd->ioc->FreeQlock, flags);
if (hd->tmState = TM_STATE_NONE) {
hd->tmState = TM_STATE_IN_PROGRESS;
@@ -1978,7 +1979,7 @@ mptscsih_tm_pending_wait(MPT_SCSI_HOST *
}
spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags);
msleep(250);
- } while (--loop_count);
+ }
return status;
}
@@ -1994,19 +1995,20 @@ static int
mptscsih_tm_wait_for_completion(MPT_SCSI_HOST * hd, ulong timeout )
{
unsigned long flags;
- int loop_count = 4 * timeout;
int status = FAILED;
+ unsigned long end_time;
- do {
+ end_time = jiffies + msecs_to_jiffies(timeout * 1000);
+ while (time_before(jiffies, end_time)) {
spin_lock_irqsave(&hd->ioc->FreeQlock, flags);
- if(hd->tmPending = 0) {
+ if (hd->tmPending = 0) {
status = SUCCESS;
spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags);
break;
}
spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags);
msleep_interruptible(250);
- } while (--loop_count);
+ }
return status;
}
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
https://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2005-12-04 0:20 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-12-04 0:20 [KJ] [PATCH 13/21] polling loops: change exit condition to Marcin Slusarz
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.