Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F175376291
D58614.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
9 KB
Referenced Files
None
Subscribers
None
D58614.id.diff
View Options
diff --git a/sys/dev/bnxt/bnxt_en/bnxt.h b/sys/dev/bnxt/bnxt_en/bnxt.h
--- a/sys/dev/bnxt/bnxt_en/bnxt.h
+++ b/sys/dev/bnxt/bnxt_en/bnxt.h
@@ -1294,6 +1294,9 @@
struct tx_port_stats_ext *tx_port_stats_ext;
struct rx_port_stats_ext *rx_port_stats_ext;
+ struct iflib_dma_info hw_generic_stats;
+ struct generic_sw_hw_stats *generic_stats;
+
uint16_t fw_rx_stats_ext_size;
uint16_t fw_tx_stats_ext_size;
uint16_t hw_ring_stats_size;
diff --git a/sys/dev/bnxt/bnxt_en/bnxt_hwrm.h b/sys/dev/bnxt/bnxt_en/bnxt_hwrm.h
--- a/sys/dev/bnxt/bnxt_en/bnxt_hwrm.h
+++ b/sys/dev/bnxt/bnxt_en/bnxt_hwrm.h
@@ -68,6 +68,7 @@
uint64_t paddr);
int bnxt_hwrm_stat_ctx_free(struct bnxt_softc *softc, struct bnxt_cp_ring *cpr);
int bnxt_hwrm_port_qstats(struct bnxt_softc *softc);
+int bnxt_hwrm_generic_qstats(struct bnxt_softc *softc, uint8_t flags);
int bnxt_hwrm_port_qstats_ext(struct bnxt_softc *softc);
int bnxt_hwrm_port_led_qcaps(struct bnxt_softc *softc);
int bnxt_hwrm_port_led_cfg(struct bnxt_softc *softc, bool led_on);
diff --git a/sys/dev/bnxt/bnxt_en/bnxt_hwrm.c b/sys/dev/bnxt/bnxt_en/bnxt_hwrm.c
--- a/sys/dev/bnxt/bnxt_en/bnxt_hwrm.c
+++ b/sys/dev/bnxt/bnxt_en/bnxt_hwrm.c
@@ -2230,6 +2230,26 @@
return rc;
}
+
+int bnxt_hwrm_generic_qstats(struct bnxt_softc *bp, u8 flags)
+{
+ struct hwrm_stat_generic_qstats_input req = {0};
+ int rc;
+
+ if (!(bp->fw_cap & BNXT_FW_CAP_GENERIC_STATS))
+ return 0;
+
+ bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_STAT_GENERIC_QSTATS);
+
+ req.flags = flags;
+ req.generic_stat_size = sizeof(struct generic_sw_hw_stats);
+ req.generic_stat_host_addr = htole64(bp->hw_generic_stats.idi_paddr);
+
+ rc = hwrm_send_message(bp, &req, sizeof(req));
+
+ return rc;
+}
+
static int bnxt_hwrm_pri2cos_idx(struct bnxt_softc *softc, uint32_t path_dir)
{
struct hwrm_queue_pri2cos_qcfg_input req = {0};
diff --git a/sys/dev/bnxt/bnxt_en/bnxt_sysctl.h b/sys/dev/bnxt/bnxt_en/bnxt_sysctl.h
--- a/sys/dev/bnxt/bnxt_en/bnxt_sysctl.h
+++ b/sys/dev/bnxt/bnxt_en/bnxt_sysctl.h
@@ -32,6 +32,7 @@
int bnxt_init_sysctl_ctx(struct bnxt_softc *softc);
int bnxt_free_sysctl_ctx(struct bnxt_softc *softc);
int bnxt_create_port_stats_sysctls(struct bnxt_softc *softc);
+int bnxt_create_generic_stats_sysctls(struct bnxt_softc *softc);
int bnxt_create_tx_sysctls(struct bnxt_softc *softc, int txr);
int bnxt_create_rx_sysctls(struct bnxt_softc *softc, int rxr);
int bnxt_create_ver_sysctls(struct bnxt_softc *softc);
diff --git a/sys/dev/bnxt/bnxt_en/bnxt_sysctl.c b/sys/dev/bnxt/bnxt_en/bnxt_sysctl.c
--- a/sys/dev/bnxt/bnxt_en/bnxt_sysctl.c
+++ b/sys/dev/bnxt/bnxt_en/bnxt_sysctl.c
@@ -336,6 +336,100 @@
return 0;
}
+int
+bnxt_create_generic_stats_sysctls(struct bnxt_softc *softc)
+{
+ struct sysctl_oid *oid;
+ char name[32];
+ char desc[64];
+
+ sprintf(name, "generic_stats");
+ sprintf(desc, "Generic Stats");
+ oid = SYSCTL_ADD_NODE(&softc->hw_stats,
+ SYSCTL_CHILDREN(softc->hw_stats_oid), OID_AUTO, name,
+ CTLFLAG_RD | CTLFLAG_MPSAFE, 0, desc);
+ if (!oid)
+ return ENOMEM;
+
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_statistics_tx_tlp", CTLFLAG_RD,
+ &softc->generic_stats->pcie_statistics_tx_tlp, "pcie_statistics_tx_tlp");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_statistics_rx_tlp", CTLFLAG_RD,
+ &softc->generic_stats->pcie_statistics_rx_tlp, "pcie_statistics_rx_tlp");
+
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_credit_fc_hdr_posted", CTLFLAG_RD,
+ &softc->generic_stats->pcie_credit_fc_hdr_posted, "pcie_credit_fc_hdr_posted");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_credit_fc_hdr_nonposted", CTLFLAG_RD,
+ &softc->generic_stats->pcie_credit_fc_hdr_nonposted, "pcie_credit_fc_hdr_nonposted");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_credit_fc_hdr_cmpl", CTLFLAG_RD,
+ &softc->generic_stats->pcie_credit_fc_hdr_cmpl, "pcie_credit_fc_hdr_cmpl");
+
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_credit_fc_data_posted", CTLFLAG_RD,
+ &softc->generic_stats->pcie_credit_fc_data_posted, "pcie_credit_fc_data_posted");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_credit_fc_data_nonposted", CTLFLAG_RD,
+ &softc->generic_stats->pcie_credit_fc_data_nonposted, "pcie_credit_fc_data_nonposted");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_credit_fc_data_cmpl", CTLFLAG_RD,
+ &softc->generic_stats->pcie_credit_fc_data_cmpl, "pcie_credit_fc_data_cmpl");
+
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_credit_fc_tgt_nonposted", CTLFLAG_RD,
+ &softc->generic_stats->pcie_credit_fc_tgt_nonposted, "pcie_credit_fc_tgt_nonposted");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_credit_fc_tgt_data_posted", CTLFLAG_RD,
+ &softc->generic_stats->pcie_credit_fc_tgt_data_posted, "pcie_credit_fc_tgt_data_posted");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_credit_fc_tgt_hdr_posted", CTLFLAG_RD,
+ &softc->generic_stats->pcie_credit_fc_tgt_hdr_posted, "pcie_credit_fc_tgt_hdr_posted");
+
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_credit_fc_cmpl_hdr_posted", CTLFLAG_RD,
+ &softc->generic_stats->pcie_credit_fc_cmpl_hdr_posted, "pcie_credit_fc_cmpl_hdr_posted");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_credit_fc_cmpl_data_posted", CTLFLAG_RD,
+ &softc->generic_stats->pcie_credit_fc_cmpl_data_posted, "pcie_credit_fc_cmpl_data_posted");
+
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_cmpl_longest", CTLFLAG_RD,
+ &softc->generic_stats->pcie_cmpl_longest, "pcie_cmpl_longest");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "pcie_cmpl_shortest", CTLFLAG_RD,
+ &softc->generic_stats->pcie_cmpl_shortest, "pcie_cmpl_shortest");
+
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "cache_miss_count_cfcq", CTLFLAG_RD,
+ &softc->generic_stats->cache_miss_count_cfcq, "cache_miss_count_cfcq");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "cache_miss_count_cfcs", CTLFLAG_RD,
+ &softc->generic_stats->cache_miss_count_cfcs, "cache_miss_count_cfcs");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "cache_miss_count_cfcc", CTLFLAG_RD,
+ &softc->generic_stats->cache_miss_count_cfcc, "cache_miss_count_cfcc");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "cache_miss_count_cfcm", CTLFLAG_RD,
+ &softc->generic_stats->cache_miss_count_cfcm, "cache_miss_count_cfcm");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "hw_db_recov_dbs_dropped", CTLFLAG_RD,
+ &softc->generic_stats->hw_db_recov_dbs_dropped, "hw_db_recov_dbs_dropped");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "hw_db_recov_drops_serviced", CTLFLAG_RD,
+ &softc->generic_stats->hw_db_recov_drops_serviced, "hw_db_recov_drops_serviced");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "hw_db_recov_dbs_recovered", CTLFLAG_RD,
+ &softc->generic_stats->hw_db_recov_dbs_recovered, "hw_db_recov_dbs_recovered");
+ SYSCTL_ADD_QUAD(&softc->hw_stats, SYSCTL_CHILDREN(oid), OID_AUTO,
+ "hw_db_recov_oo_drop_count", CTLFLAG_RD,
+ &softc->generic_stats->hw_db_recov_oo_drop_count, "hw_db_recov_oo_drop_count");
+
+ return 0;
+}
+
int
bnxt_create_port_stats_sysctls(struct bnxt_softc *softc)
{
diff --git a/sys/dev/bnxt/bnxt_en/if_bnxt.c b/sys/dev/bnxt/bnxt_en/if_bnxt.c
--- a/sys/dev/bnxt/bnxt_en/if_bnxt.c
+++ b/sys/dev/bnxt/bnxt_en/if_bnxt.c
@@ -735,6 +735,7 @@
// Free RX queues
for (i=0; i<softc->nrxqsets; i++)
iflib_dma_free(&softc->rx_stats[i]);
+ iflib_dma_free(&softc->hw_generic_stats);
iflib_dma_free(&softc->hw_tx_port_stats);
iflib_dma_free(&softc->hw_rx_port_stats);
iflib_dma_free(&softc->hw_tx_port_stats_ext);
@@ -808,6 +809,17 @@
*/
#define BNXT_PORT_STAT_PADDING 512
+ rc = iflib_dma_alloc(ctx, sizeof(struct generic_sw_hw_stats), &softc->hw_generic_stats, 0);
+ /* Generic stats are optional */
+ if (rc) {
+ softc->fw_cap &= ~BNXT_FW_CAP_GENERIC_STATS;
+ iflib_dma_free(&softc->hw_generic_stats);
+ } else {
+ bus_dmamap_sync(softc->hw_generic_stats.idi_tag,
+ softc->hw_generic_stats.idi_map, BUS_DMASYNC_PREREAD);
+ softc->generic_stats = (void *) softc->hw_generic_stats.idi_vaddr;
+ }
+
rc = iflib_dma_alloc(ctx, sizeof(struct rx_port_stats) + BNXT_PORT_STAT_PADDING,
&softc->hw_rx_port_stats, 0);
if (rc)
@@ -916,6 +928,7 @@
bnxt_create_rx_sysctls(softc, i);
}
+ bnxt_create_generic_stats_sysctls(softc);
/*
* When SR-IOV is enabled, avoid each VF sending PORT_QSTATS
* HWRM every sec with which firmware timeouts can happen
@@ -4256,6 +4269,8 @@
bit_clear(softc->state_bv, BNXT_STATE_LINK_CHANGE);
bnxt_media_status(softc->ctx, &ifmr);
}
+
+ bnxt_hwrm_generic_qstats(softc, 0);
}
return;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Oct 11, 9:51 AM (5 h, 40 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40598475
Default Alt Text
D58614.id.diff (9 KB)
Attached To
Mode
D58614: if_bnxt: add support for HW generic stats
Attached
Detach File
Event Timeline
Log In to Comment