aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/message/fusion/mptscsih.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/message/fusion/mptscsih.c')
-rw-r--r--drivers/message/fusion/mptscsih.c18
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 */
1027static void 1028void
1028mptscsih_flush_running_cmds(MPT_SCSI_HOST *hd) 1029mptscsih_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}
1059EXPORT_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