Commit 60a9eadb authored by Quinn Tran's avatar Quinn Tran Committed by Martin K. Petersen

scsi: qla2xxx: Move target stat counters from vha to qpair.

Move counters to qpair to reduce cache miss.
Signed-off-by: default avatarQuinn Tran <quinn.tran@cavium.com>
Signed-off-by: default avatarHimanshu Madhani <himanshu.madhani@cavium.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent b5399f7d
...@@ -3183,6 +3183,18 @@ struct qla_tc_param { ...@@ -3183,6 +3183,18 @@ struct qla_tc_param {
#define QLA_MAX_VPORTS_QLA24XX 128 #define QLA_MAX_VPORTS_QLA24XX 128
#define QLA_MAX_VPORTS_QLA25XX 256 #define QLA_MAX_VPORTS_QLA25XX 256
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;
};
struct qla_qpair; struct qla_qpair;
/* Response queue data structure */ /* Response queue data structure */
...@@ -3285,6 +3297,7 @@ struct qla_qpair { ...@@ -3285,6 +3297,7 @@ struct qla_qpair {
struct list_head qp_list_elem; /* vha->qp_list */ struct list_head qp_list_elem; /* vha->qp_list */
struct list_head hints_list; struct list_head hints_list;
uint16_t cpuid; uint16_t cpuid;
struct qla_tgt_counters tgt_counters;
}; };
/* Place holder for FW buffer parameters */ /* Place holder for FW buffer parameters */
...@@ -3964,18 +3977,6 @@ struct qla_hw_data { ...@@ -3964,18 +3977,6 @@ struct qla_hw_data {
int allow_cna_fw_dump; 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 * Qlogic scsi host structure
*/ */
...@@ -4140,10 +4141,8 @@ typedef struct scsi_qla_host { ...@@ -4140,10 +4141,8 @@ typedef struct scsi_qla_host {
struct fc_host_statistics fc_host_stat; struct fc_host_statistics fc_host_stat;
struct qla_statistics qla_stats; struct qla_statistics qla_stats;
struct bidi_statistics bidi_stats; struct bidi_statistics bidi_stats;
atomic_t vref_count; atomic_t vref_count;
struct qla8044_reset_template reset_tmplt; struct qla8044_reset_template reset_tmplt;
struct qla_tgt_counters tgt_counters;
uint16_t bbcr; uint16_t bbcr;
struct name_list_extended gnl; struct name_list_extended gnl;
/* Count of active session/fcport */ /* Count of active session/fcport */
......
...@@ -164,26 +164,56 @@ static int ...@@ -164,26 +164,56 @@ static int
qla_dfs_tgt_counters_show(struct seq_file *s, void *unused) qla_dfs_tgt_counters_show(struct seq_file *s, void *unused)
{ {
struct scsi_qla_host *vha = s->private; struct scsi_qla_host *vha = s->private;
struct qla_qpair *qpair = vha->hw->base_qpair;
uint64_t qla_core_sbt_cmd, core_qla_que_buf, qla_core_ret_ctio,
core_qla_snd_status, qla_core_ret_sta_ctio, core_qla_free_cmd,
num_q_full_sent, num_alloc_iocb_failed, num_term_xchg_sent;
u16 i;
qla_core_sbt_cmd = qpair->tgt_counters.qla_core_sbt_cmd;
core_qla_que_buf = qpair->tgt_counters.core_qla_que_buf;
qla_core_ret_ctio = qpair->tgt_counters.qla_core_ret_ctio;
core_qla_snd_status = qpair->tgt_counters.core_qla_snd_status;
qla_core_ret_sta_ctio = qpair->tgt_counters.qla_core_ret_sta_ctio;
core_qla_free_cmd = qpair->tgt_counters.core_qla_free_cmd;
num_q_full_sent = qpair->tgt_counters.num_q_full_sent;
num_alloc_iocb_failed = qpair->tgt_counters.num_alloc_iocb_failed;
num_term_xchg_sent = qpair->tgt_counters.num_term_xchg_sent;
for (i = 0; i < vha->hw->max_qpairs; i++) {
qpair = vha->hw->queue_pair_map[i];
qla_core_sbt_cmd += qpair->tgt_counters.qla_core_sbt_cmd;
core_qla_que_buf += qpair->tgt_counters.core_qla_que_buf;
qla_core_ret_ctio += qpair->tgt_counters.qla_core_ret_ctio;
core_qla_snd_status += qpair->tgt_counters.core_qla_snd_status;
qla_core_ret_sta_ctio +=
qpair->tgt_counters.qla_core_ret_sta_ctio;
core_qla_free_cmd += qpair->tgt_counters.core_qla_free_cmd;
num_q_full_sent += qpair->tgt_counters.num_q_full_sent;
num_alloc_iocb_failed +=
qpair->tgt_counters.num_alloc_iocb_failed;
num_term_xchg_sent += qpair->tgt_counters.num_term_xchg_sent;
}
seq_puts(s, "Target Counters\n"); seq_puts(s, "Target Counters\n");
seq_printf(s, "qla_core_sbt_cmd = %lld\n", seq_printf(s, "qla_core_sbt_cmd = %lld\n",
vha->tgt_counters.qla_core_sbt_cmd); qla_core_sbt_cmd);
seq_printf(s, "qla_core_ret_sta_ctio = %lld\n", seq_printf(s, "qla_core_ret_sta_ctio = %lld\n",
vha->tgt_counters.qla_core_ret_sta_ctio); qla_core_ret_sta_ctio);
seq_printf(s, "qla_core_ret_ctio = %lld\n", seq_printf(s, "qla_core_ret_ctio = %lld\n",
vha->tgt_counters.qla_core_ret_ctio); qla_core_ret_ctio);
seq_printf(s, "core_qla_que_buf = %lld\n", seq_printf(s, "core_qla_que_buf = %lld\n",
vha->tgt_counters.core_qla_que_buf); core_qla_que_buf);
seq_printf(s, "core_qla_snd_status = %lld\n", seq_printf(s, "core_qla_snd_status = %lld\n",
vha->tgt_counters.core_qla_snd_status); core_qla_snd_status);
seq_printf(s, "core_qla_free_cmd = %lld\n", seq_printf(s, "core_qla_free_cmd = %lld\n",
vha->tgt_counters.core_qla_free_cmd); core_qla_free_cmd);
seq_printf(s, "num alloc iocb failed = %lld\n", seq_printf(s, "num alloc iocb failed = %lld\n",
vha->tgt_counters.num_alloc_iocb_failed); num_alloc_iocb_failed);
seq_printf(s, "num term exchange sent = %lld\n", seq_printf(s, "num term exchange sent = %lld\n",
vha->tgt_counters.num_term_xchg_sent); num_term_xchg_sent);
seq_printf(s, "num Q full sent = %lld\n", seq_printf(s, "num Q full sent = %lld\n",
vha->tgt_counters.num_q_full_sent); num_q_full_sent);
/* DIF stats */ /* DIF stats */
seq_printf(s, "DIF Inp Bytes = %lld\n", seq_printf(s, "DIF Inp Bytes = %lld\n",
......
...@@ -2189,7 +2189,7 @@ __qla2x00_alloc_iocbs(struct qla_qpair *qpair, srb_t *sp) ...@@ -2189,7 +2189,7 @@ __qla2x00_alloc_iocbs(struct qla_qpair *qpair, srb_t *sp)
} }
queuing_error: queuing_error:
vha->tgt_counters.num_alloc_iocb_failed++; qpair->tgt_counters.num_alloc_iocb_failed++;
return pkt; return pkt;
} }
......
...@@ -3078,9 +3078,9 @@ int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type, ...@@ -3078,9 +3078,9 @@ int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type,
spin_lock_irqsave(qpair->qp_lock_ptr, flags); spin_lock_irqsave(qpair->qp_lock_ptr, flags);
if (xmit_type == QLA_TGT_XMIT_STATUS) if (xmit_type == QLA_TGT_XMIT_STATUS)
vha->tgt_counters.core_qla_snd_status++; qpair->tgt_counters.core_qla_snd_status++;
else else
vha->tgt_counters.core_qla_que_buf++; qpair->tgt_counters.core_qla_que_buf++;
if (!qpair->fw_started || cmd->reset_count != qpair->chip_reset) { if (!qpair->fw_started || cmd->reset_count != qpair->chip_reset) {
/* /*
...@@ -3500,7 +3500,7 @@ static int __qlt_send_term_exchange(struct qla_qpair *qpair, ...@@ -3500,7 +3500,7 @@ static int __qlt_send_term_exchange(struct qla_qpair *qpair,
ret = 1; ret = 1;
} }
vha->tgt_counters.num_term_xchg_sent++; qpair->tgt_counters.num_term_xchg_sent++;
pkt->entry_count = 1; pkt->entry_count = 1;
pkt->handle = QLA_TGT_SKIP_HANDLE | CTIO_COMPLETION_HANDLE_MARK; pkt->handle = QLA_TGT_SKIP_HANDLE | CTIO_COMPLETION_HANDLE_MARK;
...@@ -5103,7 +5103,7 @@ static int __qlt_send_busy(struct qla_qpair *qpair, ...@@ -5103,7 +5103,7 @@ static int __qlt_send_busy(struct qla_qpair *qpair,
return -ENOMEM; return -ENOMEM;
} }
vha->tgt_counters.num_q_full_sent++; qpair->tgt_counters.num_q_full_sent++;
pkt->entry_count = 1; pkt->entry_count = 1;
pkt->handle = QLA_TGT_SKIP_HANDLE | CTIO_COMPLETION_HANDLE_MARK; pkt->handle = QLA_TGT_SKIP_HANDLE | CTIO_COMPLETION_HANDLE_MARK;
...@@ -5466,13 +5466,12 @@ static void qlt_24xx_atio_pkt(struct scsi_qla_host *vha, ...@@ -5466,13 +5466,12 @@ static void qlt_24xx_atio_pkt(struct scsi_qla_host *vha,
static void qlt_response_pkt(struct scsi_qla_host *vha, static void qlt_response_pkt(struct scsi_qla_host *vha,
struct rsp_que *rsp, response_t *pkt) struct rsp_que *rsp, response_t *pkt)
{ {
struct qla_hw_data *ha = vha->hw;
struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; struct qla_tgt *tgt = vha->vha_tgt.qla_tgt;
if (unlikely(tgt == NULL)) { if (unlikely(tgt == NULL)) {
ql_dbg(ql_dbg_tgt, vha, 0xe05d, ql_dbg(ql_dbg_tgt, vha, 0xe05d,
"qla_target(%d): Response pkt %x received, but no " "qla_target(%d): Response pkt %x received, but no tgt (ha %p)\n",
"tgt (ha %p)\n", vha->vp_idx, pkt->entry_type, ha); vha->vp_idx, pkt->entry_type, vha->hw);
return; return;
} }
......
...@@ -283,7 +283,7 @@ static void tcm_qla2xxx_complete_free(struct work_struct *work) ...@@ -283,7 +283,7 @@ static void tcm_qla2xxx_complete_free(struct work_struct *work)
WARN_ON(cmd->trc_flags & TRC_CMD_FREE); WARN_ON(cmd->trc_flags & TRC_CMD_FREE);
cmd->vha->tgt_counters.qla_core_ret_sta_ctio++; cmd->qpair->tgt_counters.qla_core_ret_sta_ctio++;
cmd->trc_flags |= TRC_CMD_FREE; cmd->trc_flags |= TRC_CMD_FREE;
transport_generic_free_cmd(&cmd->se_cmd, 0); transport_generic_free_cmd(&cmd->se_cmd, 0);
} }
...@@ -295,7 +295,7 @@ static void tcm_qla2xxx_complete_free(struct work_struct *work) ...@@ -295,7 +295,7 @@ static void tcm_qla2xxx_complete_free(struct work_struct *work)
*/ */
static void tcm_qla2xxx_free_cmd(struct qla_tgt_cmd *cmd) static void tcm_qla2xxx_free_cmd(struct qla_tgt_cmd *cmd)
{ {
cmd->vha->tgt_counters.core_qla_free_cmd++; cmd->qpair->tgt_counters.core_qla_free_cmd++;
cmd->cmd_in_wq = 1; cmd->cmd_in_wq = 1;
WARN_ON(cmd->trc_flags & TRC_CMD_DONE); WARN_ON(cmd->trc_flags & TRC_CMD_DONE);
...@@ -491,7 +491,7 @@ static int tcm_qla2xxx_handle_cmd(scsi_qla_host_t *vha, struct qla_tgt_cmd *cmd, ...@@ -491,7 +491,7 @@ static int tcm_qla2xxx_handle_cmd(scsi_qla_host_t *vha, struct qla_tgt_cmd *cmd,
} }
#endif #endif
cmd->vha->tgt_counters.qla_core_sbt_cmd++; cmd->qpair->tgt_counters.qla_core_sbt_cmd++;
return target_submit_cmd(se_cmd, se_sess, cdb, &cmd->sense_buffer[0], return target_submit_cmd(se_cmd, se_sess, cdb, &cmd->sense_buffer[0],
cmd->unpacked_lun, data_length, fcp_task_attr, cmd->unpacked_lun, data_length, fcp_task_attr,
data_dir, flags); data_dir, flags);
...@@ -519,7 +519,7 @@ static void tcm_qla2xxx_handle_data_work(struct work_struct *work) ...@@ -519,7 +519,7 @@ static void tcm_qla2xxx_handle_data_work(struct work_struct *work)
} }
spin_unlock_irqrestore(&cmd->cmd_lock, flags); spin_unlock_irqrestore(&cmd->cmd_lock, flags);
cmd->vha->tgt_counters.qla_core_ret_ctio++; cmd->qpair->tgt_counters.qla_core_ret_ctio++;
if (!cmd->write_data_transferred) { if (!cmd->write_data_transferred) {
/* /*
* Check if se_cmd has already been aborted via LUN_RESET, and * Check if se_cmd has already been aborted via LUN_RESET, and
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment