aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/mpt2sas/mpt2sas_scsih.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/mpt2sas/mpt2sas_scsih.c')
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_scsih.c89
1 files changed, 19 insertions, 70 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
index 10d99086ed46..d4b003a618a1 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
@@ -762,66 +762,16 @@ _scsih_is_end_device(u32 device_info)
762} 762}
763 763
764/** 764/**
765 * _scsih_scsi_lookup_get - returns scmd entry 765 * mptscsih_get_scsi_lookup - returns scmd entry
766 * @ioc: per adapter object 766 * @ioc: per adapter object
767 * @smid: system request message index 767 * @smid: system request message index
768 * Context: This function will acquire ioc->scsi_lookup_lock.
769 * 768 *
770 * Returns the smid stored scmd pointer. 769 * Returns the smid stored scmd pointer.
771 */ 770 */
772static struct scsi_cmnd * 771static struct scsi_cmnd *
773_scsih_scsi_lookup_get(struct MPT2SAS_ADAPTER *ioc, u16 smid) 772_scsih_scsi_lookup_get(struct MPT2SAS_ADAPTER *ioc, u16 smid)
774{ 773{
775 unsigned long flags; 774 return ioc->scsi_lookup[smid - 1].scmd;
776 struct scsi_cmnd *scmd;
777
778 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
779 scmd = ioc->scsi_lookup[smid - 1].scmd;
780 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
781 return scmd;
782}
783
784/**
785 * mptscsih_getclear_scsi_lookup - returns scmd entry
786 * @ioc: per adapter object
787 * @smid: system request message index
788 * Context: This function will acquire ioc->scsi_lookup_lock.
789 *
790 * Returns the smid stored scmd pointer, as well as clearing the scmd pointer.
791 */
792static struct scsi_cmnd *
793_scsih_scsi_lookup_getclear(struct MPT2SAS_ADAPTER *ioc, u16 smid)
794{
795 unsigned long flags;
796 struct scsi_cmnd *scmd;
797
798 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
799 scmd = ioc->scsi_lookup[smid - 1].scmd;
800 ioc->scsi_lookup[smid - 1].scmd = NULL;
801 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
802 return scmd;
803}
804
805/**
806 * _scsih_scsi_lookup_set - updates scmd entry in lookup
807 * @ioc: per adapter object
808 * @smid: system request message index
809 * @scmd: pointer to scsi command object
810 * Context: This function will acquire ioc->scsi_lookup_lock.
811 *
812 * This will save scmd pointer in the scsi_lookup array.
813 *
814 * Return nothing.
815 */
816static void
817_scsih_scsi_lookup_set(struct MPT2SAS_ADAPTER *ioc, u16 smid,
818 struct scsi_cmnd *scmd)
819{
820 unsigned long flags;
821
822 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
823 ioc->scsi_lookup[smid - 1].scmd = scmd;
824 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
825} 775}
826 776
827/** 777/**
@@ -844,9 +794,9 @@ _scsih_scsi_lookup_find_by_scmd(struct MPT2SAS_ADAPTER *ioc, struct scsi_cmnd
844 794
845 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); 795 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
846 smid = 0; 796 smid = 0;
847 for (i = 0; i < ioc->request_depth; i++) { 797 for (i = 0; i < ioc->scsiio_depth; i++) {
848 if (ioc->scsi_lookup[i].scmd == scmd) { 798 if (ioc->scsi_lookup[i].scmd == scmd) {
849 smid = i + 1; 799 smid = ioc->scsi_lookup[i].smid;
850 goto out; 800 goto out;
851 } 801 }
852 } 802 }
@@ -875,7 +825,7 @@ _scsih_scsi_lookup_find_by_target(struct MPT2SAS_ADAPTER *ioc, int id,
875 825
876 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); 826 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
877 found = 0; 827 found = 0;
878 for (i = 0 ; i < ioc->request_depth; i++) { 828 for (i = 0 ; i < ioc->scsiio_depth; i++) {
879 if (ioc->scsi_lookup[i].scmd && 829 if (ioc->scsi_lookup[i].scmd &&
880 (ioc->scsi_lookup[i].scmd->device->id == id && 830 (ioc->scsi_lookup[i].scmd->device->id == id &&
881 ioc->scsi_lookup[i].scmd->device->channel == channel)) { 831 ioc->scsi_lookup[i].scmd->device->channel == channel)) {
@@ -909,7 +859,7 @@ _scsih_scsi_lookup_find_by_lun(struct MPT2SAS_ADAPTER *ioc, int id,
909 859
910 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); 860 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
911 found = 0; 861 found = 0;
912 for (i = 0 ; i < ioc->request_depth; i++) { 862 for (i = 0 ; i < ioc->scsiio_depth; i++) {
913 if (ioc->scsi_lookup[i].scmd && 863 if (ioc->scsi_lookup[i].scmd &&
914 (ioc->scsi_lookup[i].scmd->device->id == id && 864 (ioc->scsi_lookup[i].scmd->device->id == id &&
915 ioc->scsi_lookup[i].scmd->device->channel == channel && 865 ioc->scsi_lookup[i].scmd->device->channel == channel &&
@@ -1119,7 +1069,7 @@ _scsih_change_queue_depth(struct scsi_device *sdev, int qdepth)
1119} 1069}
1120 1070
1121/** 1071/**
1122 * _scsih_change_queue_depth - changing device queue tag type 1072 * _scsih_change_queue_type - changing device queue tag type
1123 * @sdev: scsi device struct 1073 * @sdev: scsi device struct
1124 * @tag_type: requested tag type 1074 * @tag_type: requested tag type
1125 * 1075 *
@@ -1822,7 +1772,7 @@ mpt2sas_scsih_issue_tm(struct MPT2SAS_ADAPTER *ioc, u16 handle, uint lun,
1822 goto issue_host_reset; 1772 goto issue_host_reset;
1823 } 1773 }
1824 1774
1825 smid = mpt2sas_base_get_smid(ioc, ioc->tm_cb_idx); 1775 smid = mpt2sas_base_get_smid_hpr(ioc, ioc->tm_cb_idx);
1826 if (!smid) { 1776 if (!smid) {
1827 printk(MPT2SAS_ERR_FMT "%s: failed obtaining a smid\n", 1777 printk(MPT2SAS_ERR_FMT "%s: failed obtaining a smid\n",
1828 ioc->name, __func__); 1778 ioc->name, __func__);
@@ -1830,7 +1780,8 @@ mpt2sas_scsih_issue_tm(struct MPT2SAS_ADAPTER *ioc, u16 handle, uint lun,
1830 } 1780 }
1831 1781
1832 dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "sending tm: handle(0x%04x)," 1782 dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "sending tm: handle(0x%04x),"
1833 " task_type(0x%02x), smid(%d)\n", ioc->name, handle, type, smid)); 1783 " task_type(0x%02x), smid(%d)\n", ioc->name, handle, type,
1784 smid_task));
1834 ioc->tm_cmds.status = MPT2_CMD_PENDING; 1785 ioc->tm_cmds.status = MPT2_CMD_PENDING;
1835 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid); 1786 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid);
1836 ioc->tm_cmds.smid = smid; 1787 ioc->tm_cmds.smid = smid;
@@ -2082,7 +2033,7 @@ _scsih_target_reset(struct scsi_cmnd *scmd)
2082} 2033}
2083 2034
2084/** 2035/**
2085 * _scsih_abort - eh threads main host reset routine 2036 * _scsih_host_reset - eh threads main host reset routine
2086 * @sdev: scsi device struct 2037 * @sdev: scsi device struct
2087 * 2038 *
2088 * Returns SUCCESS if command aborted else FAILED 2039 * Returns SUCCESS if command aborted else FAILED
@@ -2440,8 +2391,8 @@ _scsih_flush_running_cmds(struct MPT2SAS_ADAPTER *ioc)
2440 u16 smid; 2391 u16 smid;
2441 u16 count = 0; 2392 u16 count = 0;
2442 2393
2443 for (smid = 1; smid <= ioc->request_depth; smid++) { 2394 for (smid = 1; smid <= ioc->scsiio_depth; smid++) {
2444 scmd = _scsih_scsi_lookup_getclear(ioc, smid); 2395 scmd = _scsih_scsi_lookup_get(ioc, smid);
2445 if (!scmd) 2396 if (!scmd)
2446 continue; 2397 continue;
2447 count++; 2398 count++;
@@ -2623,7 +2574,7 @@ _scsih_qcmd(struct scsi_cmnd *scmd, void (*done)(struct scsi_cmnd *))
2623 if ((sas_device_priv_data->flags & MPT_DEVICE_TLR_ON)) 2574 if ((sas_device_priv_data->flags & MPT_DEVICE_TLR_ON))
2624 mpi_control |= MPI2_SCSIIO_CONTROL_TLR_ON; 2575 mpi_control |= MPI2_SCSIIO_CONTROL_TLR_ON;
2625 2576
2626 smid = mpt2sas_base_get_smid(ioc, ioc->scsi_io_cb_idx); 2577 smid = mpt2sas_base_get_smid_scsiio(ioc, ioc->scsi_io_cb_idx, scmd);
2627 if (!smid) { 2578 if (!smid) {
2628 printk(MPT2SAS_ERR_FMT "%s: failed obtaining a smid\n", 2579 printk(MPT2SAS_ERR_FMT "%s: failed obtaining a smid\n",
2629 ioc->name, __func__); 2580 ioc->name, __func__);
@@ -2665,7 +2616,6 @@ _scsih_qcmd(struct scsi_cmnd *scmd, void (*done)(struct scsi_cmnd *))
2665 } 2616 }
2666 } 2617 }
2667 2618
2668 _scsih_scsi_lookup_set(ioc, smid, scmd);
2669 mpt2sas_base_put_smid_scsi_io(ioc, smid, 2619 mpt2sas_base_put_smid_scsi_io(ioc, smid,
2670 sas_device_priv_data->sas_target->handle); 2620 sas_device_priv_data->sas_target->handle);
2671 return 0; 2621 return 0;
@@ -2984,7 +2934,7 @@ _scsih_io_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
2984 u32 response_code; 2934 u32 response_code;
2985 2935
2986 mpi_reply = mpt2sas_base_get_reply_virt_addr(ioc, reply); 2936 mpi_reply = mpt2sas_base_get_reply_virt_addr(ioc, reply);
2987 scmd = _scsih_scsi_lookup_getclear(ioc, smid); 2937 scmd = _scsih_scsi_lookup_get(ioc, smid);
2988 if (scmd == NULL) 2938 if (scmd == NULL)
2989 return; 2939 return;
2990 2940
@@ -3406,9 +3356,8 @@ _scsih_expander_add(struct MPT2SAS_ADAPTER *ioc, u16 handle)
3406 } 3356 }
3407 } 3357 }
3408 3358
3409 sas_address = le64_to_cpu(expander_pg0.SASAddress);
3410
3411 spin_lock_irqsave(&ioc->sas_node_lock, flags); 3359 spin_lock_irqsave(&ioc->sas_node_lock, flags);
3360 sas_address = le64_to_cpu(expander_pg0.SASAddress);
3412 sas_expander = mpt2sas_scsih_expander_find_by_sas_address(ioc, 3361 sas_expander = mpt2sas_scsih_expander_find_by_sas_address(ioc,
3413 sas_address); 3362 sas_address);
3414 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); 3363 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
@@ -4081,7 +4030,7 @@ _scsih_sas_broadcast_primative_event(struct MPT2SAS_ADAPTER *ioc,
4081 termination_count = 0; 4030 termination_count = 0;
4082 query_count = 0; 4031 query_count = 0;
4083 mpi_reply = ioc->tm_cmds.reply; 4032 mpi_reply = ioc->tm_cmds.reply;
4084 for (smid = 1; smid <= ioc->request_depth; smid++) { 4033 for (smid = 1; smid <= ioc->scsiio_depth; smid++) {
4085 scmd = _scsih_scsi_lookup_get(ioc, smid); 4034 scmd = _scsih_scsi_lookup_get(ioc, smid);
4086 if (!scmd) 4035 if (!scmd)
4087 continue; 4036 continue;
@@ -4145,8 +4094,8 @@ _scsih_sas_discovery_event(struct MPT2SAS_ADAPTER *ioc,
4145 (event_data->ReasonCode == MPI2_EVENT_SAS_DISC_RC_STARTED) ? 4094 (event_data->ReasonCode == MPI2_EVENT_SAS_DISC_RC_STARTED) ?
4146 "start" : "stop"); 4095 "start" : "stop");
4147 if (event_data->DiscoveryStatus) 4096 if (event_data->DiscoveryStatus)
4148 printk(MPT2SAS_DEBUG_FMT ", discovery_status(0x%08x)", 4097 printk("discovery_status(0x%08x)",
4149 ioc->name, le32_to_cpu(event_data->DiscoveryStatus)); 4098 le32_to_cpu(event_data->DiscoveryStatus));
4150 printk("\n"); 4099 printk("\n");
4151 } 4100 }
4152#endif 4101#endif