diff options
Diffstat (limited to 'drivers/scsi/mpt2sas/mpt2sas_scsih.c')
-rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_scsih.c | 89 |
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 | */ |
772 | static struct scsi_cmnd * | 771 | static 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 | */ | ||
792 | static 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 | */ | ||
816 | static 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 |