mpt fusion - abort of board reset leaves port dead requiring reboot
Subsystems (2)
PATCH 5/6 mpt fusion - 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.
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.
drivers/message/fusion/mptbase.c +15 -15
@@ -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 {
drivers/message/fusion/mptfc.c +1 -1
@@ -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"
drivers/message/fusion/mptscsih.c +1 -1
@@ -1922,7 +1922,7 @@break ; }spin_unlock_irqrestore (&hd->ioc->FreeQlock, flags); -msleep_interruptible (250 ); +msleep (250 ); }while (--loop_count);return status;
PATCH 5/6 mpt fusion - abort of board reset leaves port dead requiring reboot
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.
Quoted 173 lines · Michael Reed
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 frommsleep_interruptible()tomsleep()corrects the problem.Signed-off-by Michael Reed <[email protected]>------------------------------------------------------------------------
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 frommsleep_interruptible()tomsleep()corrects the problem.Signed-off-by Michael Reed <[email protected]>drivers/message/fusion/mptbase.c +15
-15@@ -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 {drivers/message/fusion/mptfc.c +1
-1@@ -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"
drivers/message/fusion/mptscsih.c line 1928
Quoted 8 lines
drivers/message/fusion/mptscsih.c +1
-1@@ -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.
drivers/message/fusion/mptbase.c +15 -15
@@ -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 {
drivers/message/fusion/mptfc.c +1 -1
@@ -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"
drivers/message/fusion/mptscsih.c +1 -1
@@ -1922,7 +1922,7 @@break ; }spin_unlock_irqrestore (&hd->ioc->FreeQlock, flags); -msleep_interruptible (250 ); +msleep (250 ); }while (--loop_count);return status;