OSDN Git Service

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 94abb06..120ca4c 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 1145af3..1a85ee8 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 9912ea4..62ddf53 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 7a9df9c..62e5528 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 0960e25..c597d54 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;
        }