Re: [PATCH 04/20] qla2xxx: Add FW resource count in DebugFS.

2015-12-08 Thread Hannes Reinecke
On 12/08/2015 01:48 AM, Himanshu Madhani wrote:
> From: Quinn Tran 
> 
> DebugFS now will show fw_resource_count node.
> 
> FW Resource count
> 
> Original TGT exchg count[0]
> current TGT exchg count[0]
> original Initiator Exchange count[2048]
> Current Initiator Exchange count[2048]
> Original IOCB count[2078]
> Current IOCB count[2067]
> MAX VP count[254]
> MAX FCF count[0]
> 
> Signed-off-by: Quinn Tran 
> Signed-off-by: Himanshu Madhani 
> ---
Reviewed-by: Hannes Reinecke 

Cheers,

Hannes
-- 
Dr. Hannes Reinecke   zSeries & Storage
h...@suse.de  +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 04/20] qla2xxx: Add FW resource count in DebugFS.

2015-12-07 Thread Himanshu Madhani
From: Quinn Tran 

DebugFS now will show fw_resource_count node.

FW Resource count

Original TGT exchg count[0]
current TGT exchg count[0]
original Initiator Exchange count[2048]
Current Initiator Exchange count[2048]
Original IOCB count[2078]
Current IOCB count[2067]
MAX VP count[254]
MAX FCF count[0]

Signed-off-by: Quinn Tran 
Signed-off-by: Himanshu Madhani 
---
 drivers/scsi/qla2xxx/qla_def.h |   13 +++--
 drivers/scsi/qla2xxx/qla_dfs.c |   50 
 drivers/scsi/qla2xxx/qla_gbl.h |3 +-
 drivers/scsi/qla2xxx/qla_init.c|   12 +++-
 drivers/scsi/qla2xxx/qla_mbx.c |   28 ---
 drivers/scsi/qla2xxx/qla_target.c  |4 +-
 drivers/scsi/qla2xxx/tcm_qla2xxx.c |2 +-
 7 files changed, 81 insertions(+), 31 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 1d2a51a..cf32fb9 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -2917,7 +2917,7 @@ struct qlt_hw_data {
 #define MAX_QFULL_CMDS_ALLOC   8192
 #define Q_FULL_THRESH_HOLD_PERCENT 90
 #define Q_FULL_THRESH_HOLD(ha) \
-   ((ha->fw_xcb_count/100) * Q_FULL_THRESH_HOLD_PERCENT)
+   ((ha->cur_fw_xcb_count/100) * Q_FULL_THRESH_HOLD_PERCENT)
 
 #define LEAK_EXCHG_THRESH_HOLD_PERCENT 75  /* 75 percent */
 
@@ -3298,8 +3298,14 @@ struct qla_hw_data {
 #define RISC_START_ADDRESS_2100 0x1000
 #define RISC_START_ADDRESS_2300 0x800
 #define RISC_START_ADDRESS_2400 0x10
-   uint16_tfw_xcb_count;
-   uint16_tfw_iocb_count;
+
+   uint16_torig_fw_tgt_xcb_count;
+   uint16_tcur_fw_tgt_xcb_count;
+   uint16_torig_fw_xcb_count;
+   uint16_tcur_fw_xcb_count;
+   uint16_torig_fw_iocb_count;
+   uint16_tcur_fw_iocb_count;
+   uint16_tfw_max_fcf_count;
 
uint32_tfw_shared_ram_start;
uint32_tfw_shared_ram_end;
@@ -3343,6 +3349,7 @@ struct qla_hw_data {
struct dentry *dfs_dir;
struct dentry *dfs_fce;
struct dentry *dfs_tgt_counters;
+   struct dentry *dfs_fw_resource_cnt;
 
dma_addr_t  fce_dma;
void*fce;
diff --git a/drivers/scsi/qla2xxx/qla_dfs.c b/drivers/scsi/qla2xxx/qla_dfs.c
index 449541f..cd8b96a 100644
--- a/drivers/scsi/qla2xxx/qla_dfs.c
+++ b/drivers/scsi/qla2xxx/qla_dfs.c
@@ -13,6 +13,43 @@ static struct dentry *qla2x00_dfs_root;
 static atomic_t qla2x00_dfs_root_count;
 
 static int
+qla_dfs_fw_resource_cnt_show(struct seq_file *s, void *unused)
+{
+   struct scsi_qla_host *vha = s->private;
+   struct qla_hw_data *ha = vha->hw;
+
+   seq_puts(s, "FW Resource count\n\n");
+   seq_printf(s, "Original TGT exchg count[%d]\n",
+   ha->orig_fw_tgt_xcb_count);
+   seq_printf(s, "current TGT exchg count[%d]\n",
+   ha->cur_fw_tgt_xcb_count);
+   seq_printf(s, "original Initiator Exchange count[%d]\n",
+   ha->orig_fw_xcb_count);
+   seq_printf(s, "Current Initiator Exchange count[%d]\n",
+   ha->cur_fw_xcb_count);
+   seq_printf(s, "Original IOCB count[%d]\n", ha->orig_fw_iocb_count);
+   seq_printf(s, "Current IOCB count[%d]\n", ha->cur_fw_iocb_count);
+   seq_printf(s, "MAX VP count[%d]\n", ha->max_npiv_vports);
+   seq_printf(s, "MAX FCF count[%d]\n", ha->fw_max_fcf_count);
+
+   return 0;
+}
+
+static int
+qla_dfs_fw_resource_cnt_open(struct inode *inode, struct file *file)
+{
+   struct scsi_qla_host *vha = inode->i_private;
+   return single_open(file, qla_dfs_fw_resource_cnt_show, vha);
+}
+
+static const struct file_operations dfs_fw_resource_cnt_ops = {
+   .open   = qla_dfs_fw_resource_cnt_open,
+   .read   = seq_read,
+   .llseek = seq_lseek,
+   .release= single_release,
+};
+
+static int
 qla_dfs_tgt_counters_show(struct seq_file *s, void *unused)
 {
struct scsi_qla_host *vha = s->private;
@@ -188,6 +225,14 @@ create_dir:
atomic_inc(_dfs_root_count);
 
 create_nodes:
+   ha->dfs_fw_resource_cnt = debugfs_create_file("fw_resource_count",
+   S_IRUSR, ha->dfs_dir, vha, _fw_resource_cnt_ops);
+   if (!ha->dfs_fw_resource_cnt) {
+   ql_log(ql_log_warn, vha, 0x00fd,
+   "Unable to create debugFS fw_resource_count node.\n");
+   goto out;
+   }
+
ha->dfs_tgt_counters = debugfs_create_file("tgt_counters", S_IRUSR,
ha->dfs_dir, vha, _tgt_counters_ops);
if (!ha->dfs_tgt_counters) {
@@ -212,6 +257,11 @@ qla2x00_dfs_remove(scsi_qla_host_t *vha)
 {
struct qla_hw_data *ha = vha->hw;
 
+   if (ha->dfs_fw_resource_cnt) {
+   debugfs_remove(ha->dfs_fw_resource_cnt);
+   ha->dfs_fw_resource_cnt = NULL;
+   }
+
if (ha->dfs_tgt_counters) {