Skip to content

Commit

Permalink
qla2xxx: Enable Target counters in DebugFS.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Himanshu Madhani authored and Nicholas Bellinger committed Jan 7, 2016
1 parent 2f56a7f commit ce1025c
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 1 deletion.
2 changes: 1 addition & 1 deletion drivers/scsi/qla2xxx/qla_dbg.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
* | | | 0xb13c-0xb140 |
* | | | 0xb149 |
* | MultiQ | 0xc00c | |
* | Misc | 0xd300 | 0xd031-0xd0ff |
* | Misc | 0xd301 | 0xd031-0xd0ff |
* | | | 0xd101-0xd1fe |
* | | | 0xd214-0xd2fe |
* | Target Mode | 0xe080 | |
Expand Down
15 changes: 15 additions & 0 deletions drivers/scsi/qla2xxx/qla_def.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
*/
Expand Down Expand Up @@ -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
Expand Down
56 changes: 56 additions & 0 deletions drivers/scsi/qla2xxx/qla_dfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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) {
Expand All @@ -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;
Expand Down
1 change: 1 addition & 0 deletions drivers/scsi/qla2xxx/qla_iocb.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
7 changes: 7 additions & 0 deletions drivers/scsi/qla2xxx/qla_target.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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;

Expand Down
4 changes: 4 additions & 0 deletions drivers/scsi/qla2xxx/tcm_qla2xxx.c
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,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);
}
Expand All @@ -295,6 +296,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);
Expand Down Expand Up @@ -454,6 +456,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);
Expand All @@ -469,6 +472,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
Expand Down

0 comments on commit ce1025c

Please sign in to comment.