diff options
Diffstat (limited to 'drivers/message/fusion/mptscsih.c')
-rw-r--r-- | drivers/message/fusion/mptscsih.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c index ce61a5769765..0c3ced70707b 100644 --- a/drivers/message/fusion/mptscsih.c +++ b/drivers/message/fusion/mptscsih.c | |||
@@ -830,7 +830,8 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr) | |||
830 | if ((pScsiReq->CDB[0] == READ_6 && ((pScsiReq->CDB[1] & 0x02) == 0)) || | 830 | if ((pScsiReq->CDB[0] == READ_6 && ((pScsiReq->CDB[1] & 0x02) == 0)) || |
831 | pScsiReq->CDB[0] == READ_10 || | 831 | pScsiReq->CDB[0] == READ_10 || |
832 | pScsiReq->CDB[0] == READ_12 || | 832 | pScsiReq->CDB[0] == READ_12 || |
833 | pScsiReq->CDB[0] == READ_16 || | 833 | (pScsiReq->CDB[0] == READ_16 && |
834 | ((pScsiReq->CDB[1] & 0x02) == 0)) || | ||
834 | pScsiReq->CDB[0] == VERIFY || | 835 | pScsiReq->CDB[0] == VERIFY || |
835 | pScsiReq->CDB[0] == VERIFY_16) { | 836 | pScsiReq->CDB[0] == VERIFY_16) { |
836 | if (scsi_bufflen(sc) != | 837 | if (scsi_bufflen(sc) != |
@@ -1024,7 +1025,7 @@ out: | |||
1024 | * | 1025 | * |
1025 | * Must be called while new I/Os are being queued. | 1026 | * Must be called while new I/Os are being queued. |
1026 | */ | 1027 | */ |
1027 | static void | 1028 | void |
1028 | mptscsih_flush_running_cmds(MPT_SCSI_HOST *hd) | 1029 | mptscsih_flush_running_cmds(MPT_SCSI_HOST *hd) |
1029 | { | 1030 | { |
1030 | MPT_ADAPTER *ioc = hd->ioc; | 1031 | MPT_ADAPTER *ioc = hd->ioc; |
@@ -1055,6 +1056,7 @@ mptscsih_flush_running_cmds(MPT_SCSI_HOST *hd) | |||
1055 | sc->scsi_done(sc); | 1056 | sc->scsi_done(sc); |
1056 | } | 1057 | } |
1057 | } | 1058 | } |
1059 | EXPORT_SYMBOL(mptscsih_flush_running_cmds); | ||
1058 | 1060 | ||
1059 | /* | 1061 | /* |
1060 | * mptscsih_search_running_cmds - Delete any commands associated | 1062 | * mptscsih_search_running_cmds - Delete any commands associated |
@@ -1629,7 +1631,13 @@ mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, int lun, | |||
1629 | return 0; | 1631 | return 0; |
1630 | } | 1632 | } |
1631 | 1633 | ||
1632 | if (ioc_raw_state & MPI_DOORBELL_ACTIVE) { | 1634 | /* DOORBELL ACTIVE check is not required if |
1635 | * MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q is supported. | ||
1636 | */ | ||
1637 | |||
1638 | if (!((ioc->facts.IOCCapabilities & MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q) | ||
1639 | && (ioc->facts.MsgVersion >= MPI_VERSION_01_05)) && | ||
1640 | (ioc_raw_state & MPI_DOORBELL_ACTIVE)) { | ||
1633 | printk(MYIOC_s_WARN_FMT | 1641 | printk(MYIOC_s_WARN_FMT |
1634 | "TaskMgmt type=%x: ioc_state: " | 1642 | "TaskMgmt type=%x: ioc_state: " |
1635 | "DOORBELL_ACTIVE (0x%x)!\n", | 1643 | "DOORBELL_ACTIVE (0x%x)!\n", |
@@ -1728,7 +1736,9 @@ mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, int lun, | |||
1728 | printk(MYIOC_s_WARN_FMT | 1736 | printk(MYIOC_s_WARN_FMT |
1729 | "Issuing Reset from %s!! doorbell=0x%08x\n", | 1737 | "Issuing Reset from %s!! doorbell=0x%08x\n", |
1730 | ioc->name, __func__, mpt_GetIocState(ioc, 0)); | 1738 | ioc->name, __func__, mpt_GetIocState(ioc, 0)); |
1731 | retval = mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); | 1739 | retval = (ioc->bus_type == SAS) ? |
1740 | mpt_HardResetHandler(ioc, CAN_SLEEP) : | ||
1741 | mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); | ||
1732 | mpt_free_msg_frame(ioc, mf); | 1742 | mpt_free_msg_frame(ioc, mf); |
1733 | } | 1743 | } |
1734 | 1744 | ||