diff options
author | Michael Reed <mdr@sgi.com> | 2006-05-24 16:07:57 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-06-10 17:01:52 -0400 |
commit | d6be06c84da9626b10443c664ee55bda96fb3514 (patch) | |
tree | 603c279d787722b9a64208ae7255c34a74af7405 | |
parent | 419835e285c3e39cd62c8c8426da0aebea9cd89f (diff) |
[SCSI] mptfc: abort of board reset leaves port dead requiring reboot
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@sgi.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
-rw-r--r-- | drivers/message/fusion/mptbase.c | 30 | ||||
-rw-r--r-- | drivers/message/fusion/mptfc.c | 2 | ||||
-rw-r--r-- | drivers/message/fusion/mptscsih.c | 2 |
3 files changed, 17 insertions, 17 deletions
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c index 330c29080e3c..08779d79a1f0 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c | |||
@@ -2291,7 +2291,7 @@ MakeIocReady(MPT_ADAPTER *ioc, int force, int sleepFlag) | |||
2291 | } | 2291 | } |
2292 | 2292 | ||
2293 | if (sleepFlag == CAN_SLEEP) { | 2293 | if (sleepFlag == CAN_SLEEP) { |
2294 | msleep_interruptible(1); | 2294 | msleep(1); |
2295 | } else { | 2295 | } else { |
2296 | mdelay (1); /* 1 msec delay */ | 2296 | mdelay (1); /* 1 msec delay */ |
2297 | } | 2297 | } |
@@ -2679,7 +2679,7 @@ SendIocInit(MPT_ADAPTER *ioc, int sleepFlag) | |||
2679 | state = mpt_GetIocState(ioc, 1); | 2679 | state = mpt_GetIocState(ioc, 1); |
2680 | while (state != MPI_IOC_STATE_OPERATIONAL && --cntdn) { | 2680 | while (state != MPI_IOC_STATE_OPERATIONAL && --cntdn) { |
2681 | if (sleepFlag == CAN_SLEEP) { | 2681 | if (sleepFlag == CAN_SLEEP) { |
2682 | msleep_interruptible(1); | 2682 | msleep(1); |
2683 | } else { | 2683 | } else { |
2684 | mdelay(1); | 2684 | mdelay(1); |
2685 | } | 2685 | } |
@@ -2931,7 +2931,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag) | |||
2931 | 2931 | ||
2932 | /* wait 1 msec */ | 2932 | /* wait 1 msec */ |
2933 | if (sleepFlag == CAN_SLEEP) { | 2933 | if (sleepFlag == CAN_SLEEP) { |
2934 | msleep_interruptible(1); | 2934 | msleep(1); |
2935 | } else { | 2935 | } else { |
2936 | mdelay (1); | 2936 | mdelay (1); |
2937 | } | 2937 | } |
@@ -2948,7 +2948,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag) | |||
2948 | } | 2948 | } |
2949 | /* wait .1 sec */ | 2949 | /* wait .1 sec */ |
2950 | if (sleepFlag == CAN_SLEEP) { | 2950 | if (sleepFlag == CAN_SLEEP) { |
2951 | msleep_interruptible (100); | 2951 | msleep (100); |
2952 | } else { | 2952 | } else { |
2953 | mdelay (100); | 2953 | mdelay (100); |
2954 | } | 2954 | } |
@@ -3038,7 +3038,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag) | |||
3038 | 3038 | ||
3039 | /* wait 1 msec */ | 3039 | /* wait 1 msec */ |
3040 | if (sleepFlag == CAN_SLEEP) { | 3040 | if (sleepFlag == CAN_SLEEP) { |
3041 | msleep_interruptible (1); | 3041 | msleep (1); |
3042 | } else { | 3042 | } else { |
3043 | mdelay (1); | 3043 | mdelay (1); |
3044 | } | 3044 | } |
@@ -3086,7 +3086,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag) | |||
3086 | return 0; | 3086 | return 0; |
3087 | } | 3087 | } |
3088 | if (sleepFlag == CAN_SLEEP) { | 3088 | if (sleepFlag == CAN_SLEEP) { |
3089 | msleep_interruptible (10); | 3089 | msleep (10); |
3090 | } else { | 3090 | } else { |
3091 | mdelay (10); | 3091 | mdelay (10); |
3092 | } | 3092 | } |
@@ -3137,7 +3137,7 @@ KickStart(MPT_ADAPTER *ioc, int force, int sleepFlag) | |||
3137 | SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, sleepFlag); | 3137 | SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, sleepFlag); |
3138 | 3138 | ||
3139 | if (sleepFlag == CAN_SLEEP) { | 3139 | if (sleepFlag == CAN_SLEEP) { |
3140 | msleep_interruptible (1000); | 3140 | msleep (1000); |
3141 | } else { | 3141 | } else { |
3142 | mdelay (1000); | 3142 | mdelay (1000); |
3143 | } | 3143 | } |
@@ -3159,7 +3159,7 @@ KickStart(MPT_ADAPTER *ioc, int force, int sleepFlag) | |||
3159 | return hard_reset_done; | 3159 | return hard_reset_done; |
3160 | } | 3160 | } |
3161 | if (sleepFlag == CAN_SLEEP) { | 3161 | if (sleepFlag == CAN_SLEEP) { |
3162 | msleep_interruptible (10); | 3162 | msleep (10); |
3163 | } else { | 3163 | } else { |
3164 | mdelay (10); | 3164 | mdelay (10); |
3165 | } | 3165 | } |
@@ -3230,7 +3230,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag) | |||
3230 | 3230 | ||
3231 | /* wait 100 msec */ | 3231 | /* wait 100 msec */ |
3232 | if (sleepFlag == CAN_SLEEP) { | 3232 | if (sleepFlag == CAN_SLEEP) { |
3233 | msleep_interruptible (100); | 3233 | msleep (100); |
3234 | } else { | 3234 | } else { |
3235 | mdelay (100); | 3235 | mdelay (100); |
3236 | } | 3236 | } |
@@ -3309,7 +3309,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag) | |||
3309 | 3309 | ||
3310 | /* wait 1 sec */ | 3310 | /* wait 1 sec */ |
3311 | if (sleepFlag == CAN_SLEEP) { | 3311 | if (sleepFlag == CAN_SLEEP) { |
3312 | msleep_interruptible (1000); | 3312 | msleep (1000); |
3313 | } else { | 3313 | } else { |
3314 | mdelay (1000); | 3314 | mdelay (1000); |
3315 | } | 3315 | } |
@@ -3337,7 +3337,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag) | |||
3337 | 3337 | ||
3338 | /* wait 1 sec */ | 3338 | /* wait 1 sec */ |
3339 | if (sleepFlag == CAN_SLEEP) { | 3339 | if (sleepFlag == CAN_SLEEP) { |
3340 | msleep_interruptible (1000); | 3340 | msleep (1000); |
3341 | } else { | 3341 | } else { |
3342 | mdelay (1000); | 3342 | mdelay (1000); |
3343 | } | 3343 | } |
@@ -3371,7 +3371,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag) | |||
3371 | 3371 | ||
3372 | /* wait 100 msec */ | 3372 | /* wait 100 msec */ |
3373 | if (sleepFlag == CAN_SLEEP) { | 3373 | if (sleepFlag == CAN_SLEEP) { |
3374 | msleep_interruptible (100); | 3374 | msleep (100); |
3375 | } else { | 3375 | } else { |
3376 | mdelay (100); | 3376 | mdelay (100); |
3377 | } | 3377 | } |
@@ -3465,7 +3465,7 @@ SendIocReset(MPT_ADAPTER *ioc, u8 reset_type, int sleepFlag) | |||
3465 | } | 3465 | } |
3466 | 3466 | ||
3467 | if (sleepFlag == CAN_SLEEP) { | 3467 | if (sleepFlag == CAN_SLEEP) { |
3468 | msleep_interruptible(1); | 3468 | msleep(1); |
3469 | } else { | 3469 | } else { |
3470 | mdelay (1); /* 1 msec delay */ | 3470 | mdelay (1); /* 1 msec delay */ |
3471 | } | 3471 | } |
@@ -3905,7 +3905,7 @@ WaitForDoorbellAck(MPT_ADAPTER *ioc, int howlong, int sleepFlag) | |||
3905 | intstat = CHIPREG_READ32(&ioc->chip->IntStatus); | 3905 | intstat = CHIPREG_READ32(&ioc->chip->IntStatus); |
3906 | if (! (intstat & MPI_HIS_IOP_DOORBELL_STATUS)) | 3906 | if (! (intstat & MPI_HIS_IOP_DOORBELL_STATUS)) |
3907 | break; | 3907 | break; |
3908 | msleep_interruptible (1); | 3908 | msleep (1); |
3909 | count++; | 3909 | count++; |
3910 | } | 3910 | } |
3911 | } else { | 3911 | } else { |
@@ -3954,7 +3954,7 @@ WaitForDoorbellInt(MPT_ADAPTER *ioc, int howlong, int sleepFlag) | |||
3954 | intstat = CHIPREG_READ32(&ioc->chip->IntStatus); | 3954 | intstat = CHIPREG_READ32(&ioc->chip->IntStatus); |
3955 | if (intstat & MPI_HIS_DOORBELL_INTERRUPT) | 3955 | if (intstat & MPI_HIS_DOORBELL_INTERRUPT) |
3956 | break; | 3956 | break; |
3957 | msleep_interruptible(1); | 3957 | msleep(1); |
3958 | count++; | 3958 | count++; |
3959 | } | 3959 | } |
3960 | } else { | 3960 | } else { |
diff --git a/drivers/message/fusion/mptfc.c b/drivers/message/fusion/mptfc.c index 770df553047a..74714e5bcf03 100644 --- a/drivers/message/fusion/mptfc.c +++ b/drivers/message/fusion/mptfc.c | |||
@@ -678,7 +678,7 @@ mptfc_GetFcPortPage0(MPT_ADAPTER *ioc, int portnum) | |||
678 | */ | 678 | */ |
679 | if (pp0dest->PortState == MPI_FCPORTPAGE0_PORTSTATE_UNKNOWN) { | 679 | if (pp0dest->PortState == MPI_FCPORTPAGE0_PORTSTATE_UNKNOWN) { |
680 | if (count-- > 0) { | 680 | if (count-- > 0) { |
681 | msleep_interruptible(100); | 681 | msleep(100); |
682 | goto try_again; | 682 | goto try_again; |
683 | } | 683 | } |
684 | printk(MYIOC_s_INFO_FMT "Firmware discovery not" | 684 | printk(MYIOC_s_INFO_FMT "Firmware discovery not" |
diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c index 2d81831cf628..8242b16e3168 100644 --- a/drivers/message/fusion/mptscsih.c +++ b/drivers/message/fusion/mptscsih.c | |||
@@ -1922,7 +1922,7 @@ mptscsih_tm_wait_for_completion(MPT_SCSI_HOST * hd, ulong timeout ) | |||
1922 | break; | 1922 | break; |
1923 | } | 1923 | } |
1924 | spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags); | 1924 | spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags); |
1925 | msleep_interruptible(250); | 1925 | msleep(250); |
1926 | } while (--loop_count); | 1926 | } while (--loop_count); |
1927 | 1927 | ||
1928 | return status; | 1928 | return status; |