]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
qla2xxx: Enable Target counters in DebugFS.
authorHimanshu Madhani <himanshu.madhani@qlogic.com>
Wed, 13 Sep 2017 08:44:19 +0000 (14:14 +0530)
committerBrian Maly <brian.maly@oracle.com>
Thu, 2 Nov 2017 18:14:14 +0000 (14:14 -0400)
Orabug: 2684419726923029

Following counters are added in target mode to help debugging efforts.

Target Counters

qla_core_sbt_cmd = 0
qla_core_ret_sta_ctio = 0
qla_core_ret_ctio = 0
core_qla_que_buf = 0
core_qla_snd_status = 0
core_qla_free_cmd = 0
num alloc iocb failed = 0
num term exchange sent = 0
num Q full sent = 0

Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
Reviewed-by: Jack Vogel <jack.vogel@oracle.com>
drivers/scsi/qla2xxx/qla_dbg.c
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_dfs.c
drivers/scsi/qla2xxx/qla_iocb.c
drivers/scsi/qla2xxx/qla_target.c
drivers/scsi/qla2xxx/tcm_qla2xxx.c

index 1e3c010751310bb7a60faebe0d205b3cfb9cc8ed..2cfae30d873c6b6aee83ca8c8991a5484743ca72 100644 (file)
@@ -59,7 +59,7 @@
  * |                              |                    | 0xb13c-0xb140  |
  * |                              |                    | 0xb149                |
  * | MultiQ                       |       0xc010       |               |
- * | Misc                         |       0xd300       | 0xd016-0xd017 |
+ * | Misc                         |       0xd301       | 0xd016-0xd017 |
  * |                              |                    | 0xd021,0xd024 |
  * |                              |                    | 0xd025,0xd029 |
  * |                              |                    | 0xd02a,0xd02e |
index fd46fce57267c57a16d5e9aaacb311b71d5a5393..8a4d9013d981ee91800fd8b0d95eea371febc6d7 100644 (file)
@@ -3418,6 +3418,8 @@ struct qla_hw_data {
        uint32_t        chain_offset;
        struct dentry *dfs_dir;
        struct dentry *dfs_fce;
+       struct dentry *dfs_tgt_counters;
+
        dma_addr_t      fce_dma;
        void            *fce;
        uint32_t        fce_bufs;
@@ -3580,6 +3582,18 @@ struct qla_hw_data {
        int     allow_cna_fw_dump;
 };
 
+struct qla_tgt_counters {
+       uint64_t qla_core_sbt_cmd;
+       uint64_t core_qla_que_buf;
+       uint64_t qla_core_ret_ctio;
+       uint64_t core_qla_snd_status;
+       uint64_t qla_core_ret_sta_ctio;
+       uint64_t core_qla_free_cmd;
+       uint64_t num_q_full_sent;
+       uint64_t num_alloc_iocb_failed;
+       uint64_t num_term_xchg_sent;
+};
+
 /*
  * Qlogic scsi host structure
  */
@@ -3740,6 +3754,7 @@ typedef struct scsi_qla_host {
 
        atomic_t        vref_count;
        struct qla8044_reset_template reset_tmplt;
+       struct qla_tgt_counters tgt_counters;
        uint16_t        bbcr;
 
        wait_queue_head_t vref_waitq;
index 15cf074ffa3c717e0936d0be8428dccd97e96ec3..449541f007074e1e2d30a03202b7696fe354af70 100644 (file)
 static struct dentry *qla2x00_dfs_root;
 static atomic_t qla2x00_dfs_root_count;
 
+static int
+qla_dfs_tgt_counters_show(struct seq_file *s, void *unused)
+{
+       struct scsi_qla_host *vha = s->private;
+
+       seq_puts(s, "Target Counters\n");
+       seq_printf(s, "qla_core_sbt_cmd = %lld\n",
+               vha->tgt_counters.qla_core_sbt_cmd);
+       seq_printf(s, "qla_core_ret_sta_ctio = %lld\n",
+               vha->tgt_counters.qla_core_ret_sta_ctio);
+       seq_printf(s, "qla_core_ret_ctio = %lld\n",
+               vha->tgt_counters.qla_core_ret_ctio);
+       seq_printf(s, "core_qla_que_buf = %lld\n",
+               vha->tgt_counters.core_qla_que_buf);
+       seq_printf(s, "core_qla_snd_status = %lld\n",
+               vha->tgt_counters.core_qla_snd_status);
+       seq_printf(s, "core_qla_free_cmd = %lld\n",
+               vha->tgt_counters.core_qla_free_cmd);
+       seq_printf(s, "num alloc iocb failed = %lld\n",
+               vha->tgt_counters.num_alloc_iocb_failed);
+       seq_printf(s, "num term exchange sent = %lld\n",
+               vha->tgt_counters.num_term_xchg_sent);
+       seq_printf(s, "num Q full sent = %lld\n",
+               vha->tgt_counters.num_q_full_sent);
+
+       return 0;
+}
+
+static int
+qla_dfs_tgt_counters_open(struct inode *inode, struct file *file)
+{
+       struct scsi_qla_host *vha = inode->i_private;
+       return single_open(file, qla_dfs_tgt_counters_show, vha);
+}
+
+static const struct file_operations dfs_tgt_counters_ops = {
+       .open           = qla_dfs_tgt_counters_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
 static int
 qla2x00_dfs_fce_show(struct seq_file *s, void *unused)
 {
@@ -146,6 +188,14 @@ create_dir:
        atomic_inc(&qla2x00_dfs_root_count);
 
 create_nodes:
+       ha->dfs_tgt_counters = debugfs_create_file("tgt_counters", S_IRUSR,
+           ha->dfs_dir, vha, &dfs_tgt_counters_ops);
+       if (!ha->dfs_tgt_counters) {
+               ql_log(ql_log_warn, vha, 0xd301,
+                   "Unable to create debugFS tgt_counters node.\n");
+               goto out;
+       }
+
        ha->dfs_fce = debugfs_create_file("fce", S_IRUSR, ha->dfs_dir, vha,
            &dfs_fce_ops);
        if (!ha->dfs_fce) {
@@ -161,6 +211,12 @@ int
 qla2x00_dfs_remove(scsi_qla_host_t *vha)
 {
        struct qla_hw_data *ha = vha->hw;
+
+       if (ha->dfs_tgt_counters) {
+               debugfs_remove(ha->dfs_tgt_counters);
+               ha->dfs_tgt_counters = NULL;
+       }
+
        if (ha->dfs_fce) {
                debugfs_remove(ha->dfs_fce);
                ha->dfs_fce = NULL;
index 42eea3855413c9bda05974cea3535c1bf9a2423e..28ff465769a24c3a47eb4d3d53849f72eac41453 100644 (file)
@@ -2202,6 +2202,7 @@ skip_cmd_array:
        }
 
 queuing_error:
+       vha->tgt_counters.num_alloc_iocb_failed++;
        return pkt;
 }
 
index 4380723d3f5bdc57f21a0f3f2bf8f8f4c8610751..05f3ba7539fdcac454e4078f3b58d0dd90f9a972 100644 (file)
@@ -2517,6 +2517,11 @@ int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type,
 
        spin_lock_irqsave(&ha->hardware_lock, flags);
 
+       if (xmit_type == QLA_TGT_XMIT_STATUS)
+               vha->tgt_counters.core_qla_snd_status++;
+       else
+               vha->tgt_counters.core_qla_que_buf++;
+
        if (qla2x00_reset_active(vha) || cmd->reset_count != ha->chip_reset) {
                /*
                 * Either a chip reset is active or this request was from
@@ -2965,6 +2970,7 @@ static int __qlt_send_term_exchange(struct scsi_qla_host *vha,
                        ret = 1;
        }
 
+       vha->tgt_counters.num_term_xchg_sent++;
        pkt->entry_count = 1;
        pkt->handle = QLA_TGT_SKIP_HANDLE | CTIO_COMPLETION_HANDLE_MARK;
 
@@ -4926,6 +4932,7 @@ static int __qlt_send_busy(struct scsi_qla_host *vha,
                return -ENOMEM;
        }
 
+       vha->tgt_counters.num_q_full_sent++;
        pkt->entry_count = 1;
        pkt->handle = QLA_TGT_SKIP_HANDLE | CTIO_COMPLETION_HANDLE_MARK;
 
index fdad875ca7778bc57dd7cbf8f17d712e409bb0e0..32bd868508427ca11c010200322f707618ca1905 100644 (file)
@@ -401,6 +401,7 @@ static void tcm_qla2xxx_complete_free(struct work_struct *work)
 
        WARN_ON(cmd->cmd_flags &  BIT_16);
 
+       cmd->vha->tgt_counters.qla_core_ret_sta_ctio++;
        cmd->cmd_flags |= BIT_16;
        transport_generic_free_cmd(&cmd->se_cmd, 0);
 }
@@ -412,6 +413,7 @@ static void tcm_qla2xxx_complete_free(struct work_struct *work)
  */
 static void tcm_qla2xxx_free_cmd(struct qla_tgt_cmd *cmd)
 {
+       cmd->vha->tgt_counters.core_qla_free_cmd++;
        cmd->cmd_in_wq = 1;
        INIT_WORK(&cmd->work, tcm_qla2xxx_complete_free);
        queue_work(tcm_qla2xxx_free_wq, &cmd->work);
@@ -578,6 +580,7 @@ static int tcm_qla2xxx_handle_cmd(scsi_qla_host_t *vha, struct qla_tgt_cmd *cmd,
                return -EINVAL;
        }
 
+       cmd->vha->tgt_counters.qla_core_sbt_cmd++;
        return target_submit_cmd(se_cmd, se_sess, cdb, &cmd->sense_buffer[0],
                                cmd->unpacked_lun, data_length, fcp_task_attr,
                                data_dir, flags);
@@ -593,6 +596,7 @@ static void tcm_qla2xxx_handle_data_work(struct work_struct *work)
         */
        cmd->cmd_in_wq = 0;
        cmd->cmd_flags |= BIT_11;
+       cmd->vha->tgt_counters.qla_core_ret_ctio++;
        if (!cmd->write_data_transferred) {
                /*
                 * Check if se_cmd has already been aborted via LUN_RESET, and