scsi: mpt3sas: Print function name in which cmd timed out
authorSreekanth Reddy <sreekanth.reddy@broadcom.com>
Thu, 26 Dec 2019 11:13:31 +0000 (06:13 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 3 Jan 2020 03:23:17 +0000 (22:23 -0500)
Print the function name in which MPT command got timed out. This will
facilitate debugging in which path corresponding MPT command got timeout in
first failure instance of log itself.

Link: https://lore.kernel.org/r/20191226111333.26131-9-sreekanth.reddy@broadcom.com
Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpt3sas/mpt3sas_base.c
drivers/scsi/mpt3sas/mpt3sas_base.h
drivers/scsi/mpt3sas/mpt3sas_config.c
drivers/scsi/mpt3sas/mpt3sas_ctl.c
drivers/scsi/mpt3sas/mpt3sas_scsih.c

index 94abb062c1e4a8e0e19f6747ccfd5f9d50e1afdc..120ca4c6545704a1141848573a414ff76c4bd836 100644 (file)
@@ -5984,10 +5984,9 @@ mpt3sas_base_sas_iounit_control(struct MPT3SAS_ADAPTER *ioc,
            ioc->ioc_link_reset_in_progress)
                ioc->ioc_link_reset_in_progress = 0;
        if (!(ioc->base_cmds.status & MPT3_CMD_COMPLETE)) {
-               issue_reset =
-                       mpt3sas_base_check_cmd_timeout(ioc,
-                               ioc->base_cmds.status, mpi_request,
-                               sizeof(Mpi2SasIoUnitControlRequest_t)/4);
+               mpt3sas_check_cmd_timeout(ioc, ioc->base_cmds.status,
+                   mpi_request, sizeof(Mpi2SasIoUnitControlRequest_t)/4,
+                   issue_reset);
                goto issue_host_reset;
        }
        if (ioc->base_cmds.status & MPT3_CMD_REPLY_VALID)
@@ -6060,10 +6059,9 @@ mpt3sas_base_scsi_enclosure_processor(struct MPT3SAS_ADAPTER *ioc,
        wait_for_completion_timeout(&ioc->base_cmds.done,
            msecs_to_jiffies(10000));
        if (!(ioc->base_cmds.status & MPT3_CMD_COMPLETE)) {
-               issue_reset =
-                       mpt3sas_base_check_cmd_timeout(ioc,
-                               ioc->base_cmds.status, mpi_request,
-                               sizeof(Mpi2SepRequest_t)/4);
+               mpt3sas_check_cmd_timeout(ioc,
+                   ioc->base_cmds.status, mpi_request,
+                   sizeof(Mpi2SepRequest_t)/4, issue_reset);
                goto issue_host_reset;
        }
        if (ioc->base_cmds.status & MPT3_CMD_REPLY_VALID)
index 1145af3232e77df526956e53a7ab47554d1170b9..1a85ee877aa9a16711d02d01214008629fbea3f2 100644 (file)
@@ -1579,6 +1579,11 @@ mpt3sas_wait_for_commands_to_complete(struct MPT3SAS_ADAPTER *ioc);
 
 u8 mpt3sas_base_check_cmd_timeout(struct MPT3SAS_ADAPTER *ioc,
        u8 status, void *mpi_request, int sz);
+#define mpt3sas_check_cmd_timeout(ioc, status, mpi_request, sz, issue_reset) \
+do {   ioc_err(ioc, "In func: %s\n", __func__); \
+       issue_reset = mpt3sas_base_check_cmd_timeout(ioc, \
+       status, mpi_request, sz); } while (0)
+
 int mpt3sas_wait_for_ioc(struct MPT3SAS_ADAPTER *ioc, int wait_count);
 
 /* scsih shared API */
index 9912ea4cbf298d6f1012d31872471b86cdc20635..62ddf53ab3aea1b742d5a1373ce48202411d9ba3 100644 (file)
@@ -303,6 +303,7 @@ _config_request(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigRequest_t
        u8 retry_count, issue_host_reset = 0;
        struct config_request mem;
        u32 ioc_status = UINT_MAX;
+       u8 issue_reset = 0;
 
        mutex_lock(&ioc->config_cmds.mutex);
        if (ioc->config_cmds.status != MPT3_CMD_NOT_USED) {
@@ -385,9 +386,9 @@ _config_request(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigRequest_t
                if (!(ioc->logging_level & MPT_DEBUG_CONFIG))
                        _config_display_some_debug(ioc,
                            smid, "config_request", NULL);
-               mpt3sas_base_check_cmd_timeout(ioc,
-                       ioc->config_cmds.status, mpi_request,
-                       sizeof(Mpi2ConfigRequest_t)/4);
+               mpt3sas_check_cmd_timeout(ioc,
+                   ioc->config_cmds.status, mpi_request,
+                   sizeof(Mpi2ConfigRequest_t)/4, issue_reset);
                retry_count++;
                if (ioc->config_cmds.smid == smid)
                        mpt3sas_base_free_smid(ioc, smid);
index 7a9df9c108958ae0fa2e66e394e0435b4fdb24e9..62e552838565fa32fd36d7e8226218845a2e516f 100644 (file)
@@ -1028,10 +1028,9 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg,
                ioc->ignore_loginfos = 0;
        }
        if (!(ioc->ctl_cmds.status & MPT3_CMD_COMPLETE)) {
-               issue_reset =
-                       mpt3sas_base_check_cmd_timeout(ioc,
-                               ioc->ctl_cmds.status, mpi_request,
-                               karg.data_sge_offset);
+               mpt3sas_check_cmd_timeout(ioc,
+                   ioc->ctl_cmds.status, mpi_request,
+                   karg.data_sge_offset, issue_reset);
                goto issue_host_reset;
        }
 
@@ -1741,10 +1740,9 @@ _ctl_diag_register_2(struct MPT3SAS_ADAPTER *ioc,
            MPT3_IOCTL_DEFAULT_TIMEOUT*HZ);
 
        if (!(ioc->ctl_cmds.status & MPT3_CMD_COMPLETE)) {
-               issue_reset =
-                       mpt3sas_base_check_cmd_timeout(ioc,
-                               ioc->ctl_cmds.status, mpi_request,
-                               sizeof(Mpi2DiagBufferPostRequest_t)/4);
+               mpt3sas_check_cmd_timeout(ioc,
+                   ioc->ctl_cmds.status, mpi_request,
+                   sizeof(Mpi2DiagBufferPostRequest_t)/4, issue_reset);
                goto issue_host_reset;
        }
 
@@ -2116,6 +2114,7 @@ mpt3sas_send_diag_release(struct MPT3SAS_ADAPTER *ioc, u8 buffer_type,
        u16 ioc_status;
        u32 ioc_state;
        int rc;
+       u8 reset_needed = 0;
 
        dctlprintk(ioc, ioc_info(ioc, "%s\n",
                                 __func__));
@@ -2123,6 +2122,7 @@ mpt3sas_send_diag_release(struct MPT3SAS_ADAPTER *ioc, u8 buffer_type,
        rc = 0;
        *issue_reset = 0;
 
+
        ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
        if (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
                if (ioc->diag_buffer_status[buffer_type] &
@@ -2165,9 +2165,10 @@ mpt3sas_send_diag_release(struct MPT3SAS_ADAPTER *ioc, u8 buffer_type,
            MPT3_IOCTL_DEFAULT_TIMEOUT*HZ);
 
        if (!(ioc->ctl_cmds.status & MPT3_CMD_COMPLETE)) {
-               *issue_reset = mpt3sas_base_check_cmd_timeout(ioc,
-                               ioc->ctl_cmds.status, mpi_request,
-                               sizeof(Mpi2DiagReleaseRequest_t)/4);
+               mpt3sas_check_cmd_timeout(ioc,
+                   ioc->ctl_cmds.status, mpi_request,
+                   sizeof(Mpi2DiagReleaseRequest_t)/4, reset_needed);
+                *issue_reset = reset_needed;
                rc = -EFAULT;
                goto out;
        }
@@ -2425,10 +2426,9 @@ _ctl_diag_read_buffer(struct MPT3SAS_ADAPTER *ioc, void __user *arg)
            MPT3_IOCTL_DEFAULT_TIMEOUT*HZ);
 
        if (!(ioc->ctl_cmds.status & MPT3_CMD_COMPLETE)) {
-               issue_reset =
-                       mpt3sas_base_check_cmd_timeout(ioc,
-                               ioc->ctl_cmds.status, mpi_request,
-                               sizeof(Mpi2DiagBufferPostRequest_t)/4);
+               mpt3sas_check_cmd_timeout(ioc,
+                   ioc->ctl_cmds.status, mpi_request,
+                   sizeof(Mpi2DiagBufferPostRequest_t)/4, issue_reset);
                goto issue_host_reset;
        }
 
index 0960e25c34ddee2492f537013fe00fbe6c70cf5d..c597d544eb3927da2a0679ef9143fbd6e74922c8 100644 (file)
@@ -2728,6 +2728,7 @@ mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, u64 lun,
        u16 smid = 0;
        u32 ioc_state;
        int rc;
+       u8 issue_reset = 0;
 
        lockdep_assert_held(&ioc->tm_cmds.mutex);
 
@@ -2787,9 +2788,10 @@ mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, u64 lun,
        ioc->put_smid_hi_priority(ioc, smid, msix_task);
        wait_for_completion_timeout(&ioc->tm_cmds.done, timeout*HZ);
        if (!(ioc->tm_cmds.status & MPT3_CMD_COMPLETE)) {
-               if (mpt3sas_base_check_cmd_timeout(ioc,
-                       ioc->tm_cmds.status, mpi_request,
-                       sizeof(Mpi2SCSITaskManagementRequest_t)/4)) {
+               mpt3sas_check_cmd_timeout(ioc,
+                   ioc->tm_cmds.status, mpi_request,
+                   sizeof(Mpi2SCSITaskManagementRequest_t)/4, issue_reset);
+               if (issue_reset) {
                        rc = mpt3sas_base_hard_reset_handler(ioc,
                                        FORCE_BIG_HAMMER);
                        rc = (!rc) ? SUCCESS : FAILED;
@@ -7757,10 +7759,9 @@ _scsih_ir_fastpath(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phys_disk_num)
        wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ);
 
        if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) {
-               issue_reset =
-                       mpt3sas_base_check_cmd_timeout(ioc,
-                               ioc->scsih_cmds.status, mpi_request,
-                               sizeof(Mpi2RaidActionRequest_t)/4);
+               mpt3sas_check_cmd_timeout(ioc,
+                   ioc->scsih_cmds.status, mpi_request,
+                   sizeof(Mpi2RaidActionRequest_t)/4, issue_reset);
                rc = -EFAULT;
                goto out;
        }