Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ce1025cd authored by Himanshu Madhani's avatar Himanshu Madhani Committed by Nicholas Bellinger
Browse files

qla2xxx: Enable Target counters in DebugFS.



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: default avatarHimanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: default avatarGiridhar Malavali <giridhar.malavali@qlogic.com>
Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 2f56a7f1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@
 * |                              |                    | 0xb13c-0xb140  |
 * |                              |                    | 0xb149		|
 * | MultiQ                       |       0xc00c       |		|
 * | Misc                         |       0xd300       | 0xd031-0xd0ff	|
 * | Misc                         |       0xd301       | 0xd031-0xd0ff	|
 * |                              |                    | 0xd101-0xd1fe	|
 * |                              |                    | 0xd214-0xd2fe	|
 * | Target Mode		  |	  0xe080       |		|
+15 −0
Original line number Diff line number Diff line
@@ -3342,6 +3342,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;
@@ -3499,6 +3501,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
 */
@@ -3651,6 +3665,7 @@ typedef struct scsi_qla_host {

	atomic_t	vref_count;
	struct qla8044_reset_template reset_tmplt;
	struct qla_tgt_counters tgt_counters;
} scsi_qla_host_t;

#define SET_VP_IDX	1
+56 −0
Original line number Diff line number Diff line
@@ -12,6 +12,48 @@
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 @@ qla2x00_dfs_setup(scsi_qla_host_t *vha)
	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;
+1 −0
Original line number Diff line number Diff line
@@ -1868,6 +1868,7 @@ qla2x00_alloc_iocbs(scsi_qla_host_t *vha, srb_t *sp)
	}

queuing_error:
	vha->tgt_counters.num_alloc_iocb_failed++;
	return pkt;
}

+7 −0
Original line number Diff line number Diff line
@@ -2510,6 +2510,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
@@ -2957,6 +2962,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;

@@ -4916,6 +4922,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;

Loading