[REPOST][PATCH 5/6] mpt fusion - abort of board reset leaves port dead requiring reboot

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <mdr@xxxxxxx>


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
> <ctrl-c> 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 <mdr@xxxxxxx>
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> The driver uses msleep_interruptible() in the code path responsible
> for resetting the card's ports via the lsiutil command.  If a
> <ctrl-c> 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 <mdr@xxxxxxx>
> 
> 
> --- 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;
The driver uses msleep_interruptible() in the code path responsible
for resetting the card's ports via the lsiutil command.  If a
<ctrl-c> 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 <mdr@xxxxxxx>


--- rc4u/drivers/message/fusion/mptbase.c	2006-05-18 16:34:08.109594401 -0500
+++ rc4/drivers/message/fusion/mptbase.c	2006-05-18 16:36:24.094798383 -0500
@@ -2279,7 +2279,7 @@
 		}
 
 		if (sleepFlag == CAN_SLEEP) {
-			msleep_interruptible(1);
+			msleep(1);
 		} else {
 			mdelay (1);	/* 1 msec delay */
 		}
@@ -2667,7 +2667,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);
 		}
@@ -2919,7 +2919,7 @@
 
 	/* wait 1 msec */
 	if (sleepFlag == CAN_SLEEP) {
-		msleep_interruptible(1);
+		msleep(1);
 	} else {
 		mdelay (1);
 	}
@@ -2936,7 +2936,7 @@
 		}
 		/* wait .1 sec */
 		if (sleepFlag == CAN_SLEEP) {
-			msleep_interruptible (100);
+			msleep (100);
 		} else {
 			mdelay (100);
 		}
@@ -3026,7 +3026,7 @@
 
 		/* wait 1 msec */
 		if (sleepFlag == CAN_SLEEP) {
-			msleep_interruptible (1);
+			msleep (1);
 		} else {
 			mdelay (1);
 		}
@@ -3074,7 +3074,7 @@
 			return 0;
 		}
 		if (sleepFlag == CAN_SLEEP) {
-			msleep_interruptible (10);
+			msleep (10);
 		} else {
 			mdelay (10);
 		}
@@ -3125,7 +3125,7 @@
 		SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, sleepFlag);
 
 		if (sleepFlag == CAN_SLEEP) {
-			msleep_interruptible (1000);
+			msleep (1000);
 		} else {
 			mdelay (1000);
 		}
@@ -3147,7 +3147,7 @@
 			return hard_reset_done;
 		}
 		if (sleepFlag == CAN_SLEEP) {
-			msleep_interruptible (10);
+			msleep (10);
 		} else {
 			mdelay (10);
 		}
@@ -3218,7 +3218,7 @@
 
 			/* wait 100 msec */
 			if (sleepFlag == CAN_SLEEP) {
-				msleep_interruptible (100);
+				msleep (100);
 			} else {
 				mdelay (100);
 			}
@@ -3297,7 +3297,7 @@
 
 				/* wait 1 sec */
 				if (sleepFlag == CAN_SLEEP) {
-					msleep_interruptible (1000);
+					msleep (1000);
 				} else {
 					mdelay (1000);
 				}
@@ -3325,7 +3325,7 @@
 
 				/* wait 1 sec */
 				if (sleepFlag == CAN_SLEEP) {
-					msleep_interruptible (1000);
+					msleep (1000);
 				} else {
 					mdelay (1000);
 				}
@@ -3359,7 +3359,7 @@
 
 		/* wait 100 msec */
 		if (sleepFlag == CAN_SLEEP) {
-			msleep_interruptible (100);
+			msleep (100);
 		} else {
 			mdelay (100);
 		}
@@ -3453,7 +3453,7 @@
 		}
 
 		if (sleepFlag == CAN_SLEEP) {
-			msleep_interruptible(1);
+			msleep(1);
 		} else {
 			mdelay (1);	/* 1 msec delay */
 		}
@@ -3893,7 +3893,7 @@
 			intstat = CHIPREG_READ32(&ioc->chip->IntStatus);
 			if (! (intstat & MPI_HIS_IOP_DOORBELL_STATUS))
 				break;
-			msleep_interruptible (1);
+			msleep (1);
 			count++;
 		}
 	} else {
@@ -3942,7 +3942,7 @@
 			intstat = CHIPREG_READ32(&ioc->chip->IntStatus);
 			if (intstat & MPI_HIS_DOORBELL_INTERRUPT)
 				break;
-			msleep_interruptible(1);
+			msleep(1);
 			count++;
 		}
 	} else {
--- rc4u/drivers/message/fusion/mptfc.c	2006-05-18 16:35:11.290436058 -0500
+++ rc4/drivers/message/fusion/mptfc.c	2006-05-18 16:36:24.094798383 -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"
--- rc4u/drivers/message/fusion/mptscsih.c	2006-05-18 16:34:08.117594001 -0500
+++ rc4/drivers/message/fusion/mptscsih.c	2006-05-18 16:36:24.098798183 -0500
@@ -1922,7 +1922,7 @@
 			break;
 		}
 		spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags);
-		msleep_interruptible(250);
+		msleep(250);
 	} while (--loop_count);
 
 	return status;

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux