|
|
@@ -2217,6 +2217,7 @@ mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, uint channel,
|
|
|
unsigned long timeleft;
|
|
|
struct scsiio_tracker *scsi_lookup = NULL;
|
|
|
int rc;
|
|
|
+ u16 msix_task = 0;
|
|
|
|
|
|
if (m_type == TM_MUTEX_ON)
|
|
|
mutex_lock(&ioc->tm_cmds.mutex);
|
|
|
@@ -2280,7 +2281,12 @@ mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, uint channel,
|
|
|
int_to_scsilun(lun, (struct scsi_lun *)mpi_request->LUN);
|
|
|
mpt3sas_scsih_set_tm_flag(ioc, handle);
|
|
|
init_completion(&ioc->tm_cmds.done);
|
|
|
- mpt3sas_base_put_smid_hi_priority(ioc, smid);
|
|
|
+ if ((type == MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK) &&
|
|
|
+ (scsi_lookup->msix_io < ioc->reply_queue_count))
|
|
|
+ msix_task = scsi_lookup->msix_io;
|
|
|
+ else
|
|
|
+ msix_task = 0;
|
|
|
+ mpt3sas_base_put_smid_hi_priority(ioc, smid, msix_task);
|
|
|
timeleft = wait_for_completion_timeout(&ioc->tm_cmds.done, timeout*HZ);
|
|
|
if (!(ioc->tm_cmds.status & MPT3_CMD_COMPLETE)) {
|
|
|
pr_err(MPT3SAS_FMT "%s: timeout\n",
|
|
|
@@ -3187,7 +3193,7 @@ _scsih_tm_tr_send(struct MPT3SAS_ADAPTER *ioc, u16 handle)
|
|
|
mpi_request->Function = MPI2_FUNCTION_SCSI_TASK_MGMT;
|
|
|
mpi_request->DevHandle = cpu_to_le16(handle);
|
|
|
mpi_request->TaskType = MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET;
|
|
|
- mpt3sas_base_put_smid_hi_priority(ioc, smid);
|
|
|
+ mpt3sas_base_put_smid_hi_priority(ioc, smid, 0);
|
|
|
mpt3sas_trigger_master(ioc, MASTER_TRIGGER_DEVICE_REMOVAL);
|
|
|
|
|
|
out:
|
|
|
@@ -3376,7 +3382,7 @@ _scsih_tm_tr_volume_send(struct MPT3SAS_ADAPTER *ioc, u16 handle)
|
|
|
mpi_request->Function = MPI2_FUNCTION_SCSI_TASK_MGMT;
|
|
|
mpi_request->DevHandle = cpu_to_le16(handle);
|
|
|
mpi_request->TaskType = MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET;
|
|
|
- mpt3sas_base_put_smid_hi_priority(ioc, smid);
|
|
|
+ mpt3sas_base_put_smid_hi_priority(ioc, smid, 0);
|
|
|
}
|
|
|
|
|
|
/**
|