Commit 4405baf8 authored by Chandramohan Akula's avatar Chandramohan Akula Committed by Leon Romanovsky
Browse files

bnxt_re: Expose the missing hw counters



Add code to expose some of the HW counters related
to tx/rx data and Congestion control.

Signed-off-by: default avatarChandramohan Akula <chandramohan.akula@broadcom.com>
Signed-off-by: default avatarSelvin Xavier <selvin.xavier@broadcom.com>
Link: https://lore.kernel.org/r/1690383081-15033-4-git-send-email-selvin.xavier@broadcom.com


Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent cb95709e
Loading
Loading
Loading
Loading
+23 −2
Original line number Diff line number Diff line
@@ -82,6 +82,8 @@ static const struct rdma_stat_desc bnxt_re_stat_descs[] = {
	[BNXT_RE_TX_PKTS].name		=  "tx_pkts",
	[BNXT_RE_TX_BYTES].name		=  "tx_bytes",
	[BNXT_RE_RECOVERABLE_ERRORS].name	=  "recoverable_errors",
	[BNXT_RE_TX_ERRORS].name                =  "tx_roce_errors",
	[BNXT_RE_TX_DISCARDS].name              =  "tx_roce_discards",
	[BNXT_RE_RX_ERRORS].name		=  "rx_roce_errors",
	[BNXT_RE_RX_DISCARDS].name		=  "rx_roce_discards",
	[BNXT_RE_TO_RETRANSMITS].name        = "to_retransmits",
@@ -129,14 +131,21 @@ static const struct rdma_stat_desc bnxt_re_stat_descs[] = {
	[BNXT_RE_TX_READ_RES].name	     = "tx_read_resp",
	[BNXT_RE_TX_WRITE_REQ].name	     = "tx_write_req",
	[BNXT_RE_TX_SEND_REQ].name	     = "tx_send_req",
	[BNXT_RE_TX_ROCE_PKTS].name          = "tx_roce_only_pkts",
	[BNXT_RE_TX_ROCE_BYTES].name         = "tx_roce_only_bytes",
	[BNXT_RE_RX_ATOMIC_REQ].name	     = "rx_atomic_req",
	[BNXT_RE_RX_READ_REQ].name	     = "rx_read_req",
	[BNXT_RE_RX_READ_RESP].name	     = "rx_read_resp",
	[BNXT_RE_RX_WRITE_REQ].name	     = "rx_write_req",
	[BNXT_RE_RX_SEND_REQ].name	     = "rx_send_req",
	[BNXT_RE_RX_ROCE_PKTS].name          = "rx_roce_only_pkts",
	[BNXT_RE_RX_ROCE_BYTES].name         = "rx_roce_only_bytes",
	[BNXT_RE_RX_ROCE_GOOD_PKTS].name     = "rx_roce_good_pkts",
	[BNXT_RE_RX_ROCE_GOOD_BYTES].name    = "rx_roce_good_bytes",
	[BNXT_RE_OOB].name		     = "rx_out_of_buffer"
	[BNXT_RE_OOB].name		     = "rx_out_of_buffer",
	[BNXT_RE_TX_CNP].name                = "tx_cnp_pkts",
	[BNXT_RE_RX_CNP].name                = "rx_cnp_pkts",
	[BNXT_RE_RX_ECN].name                = "rx_ecn_marked_pkts",
};

static void bnxt_re_copy_ext_stats(struct bnxt_re_dev *rdev,
@@ -148,14 +157,22 @@ static void bnxt_re_copy_ext_stats(struct bnxt_re_dev *rdev,
	stats->value[BNXT_RE_TX_READ_RES]   = s->tx_read_res;
	stats->value[BNXT_RE_TX_WRITE_REQ]  = s->tx_write_req;
	stats->value[BNXT_RE_TX_SEND_REQ]   = s->tx_send_req;
	stats->value[BNXT_RE_TX_ROCE_PKTS]  = s->tx_roce_pkts;
	stats->value[BNXT_RE_TX_ROCE_BYTES] = s->tx_roce_bytes;
	stats->value[BNXT_RE_RX_ATOMIC_REQ] = s->rx_atomic_req;
	stats->value[BNXT_RE_RX_READ_REQ]   = s->rx_read_req;
	stats->value[BNXT_RE_RX_READ_RESP]  = s->rx_read_res;
	stats->value[BNXT_RE_RX_WRITE_REQ]  = s->rx_write_req;
	stats->value[BNXT_RE_RX_SEND_REQ]   = s->rx_send_req;
	stats->value[BNXT_RE_RX_ROCE_PKTS]  = s->rx_roce_pkts;
	stats->value[BNXT_RE_RX_ROCE_BYTES] = s->rx_roce_bytes;
	stats->value[BNXT_RE_RX_ROCE_GOOD_PKTS] = s->rx_roce_good_pkts;
	stats->value[BNXT_RE_RX_ROCE_GOOD_BYTES] = s->rx_roce_good_bytes;
	stats->value[BNXT_RE_OOB] = s->rx_out_of_buffer;
	stats->value[BNXT_RE_TX_CNP] = s->tx_cnp;
	stats->value[BNXT_RE_RX_CNP] = s->rx_cnp;
	stats->value[BNXT_RE_RX_ECN] = s->rx_ecn_marked;
	stats->value[BNXT_RE_OUT_OF_SEQ_ERR] = s->rx_out_of_sequence;
}

static int bnxt_re_get_ext_stat(struct bnxt_re_dev *rdev,
@@ -298,6 +315,10 @@ int bnxt_re_ib_get_hw_stats(struct ib_device *ibdev,
	if (hw_stats) {
		stats->value[BNXT_RE_RECOVERABLE_ERRORS] =
			le64_to_cpu(hw_stats->tx_bcast_pkts);
		stats->value[BNXT_RE_TX_DISCARDS] =
			le64_to_cpu(hw_stats->tx_discard_pkts);
		stats->value[BNXT_RE_TX_ERRORS] =
			le64_to_cpu(hw_stats->tx_error_pkts);
		stats->value[BNXT_RE_RX_ERRORS] =
			le64_to_cpu(hw_stats->rx_error_pkts);
		stats->value[BNXT_RE_RX_DISCARDS] =
@@ -319,6 +340,7 @@ int bnxt_re_ib_get_hw_stats(struct ib_device *ibdev,
				  &rdev->flags);
			goto done;
		}
		bnxt_re_copy_err_stats(rdev, stats, err_s);
		if (_is_ext_stats_supported(rdev->dev_attr.dev_cap_flags) &&
		    !rdev->is_virtfn) {
			rc = bnxt_re_get_ext_stat(rdev, stats);
@@ -328,7 +350,6 @@ int bnxt_re_ib_get_hw_stats(struct ib_device *ibdev,
				goto done;
			}
		}
		bnxt_re_copy_err_stats(rdev, stats, err_s);
	}

done:
+9 −0
Original line number Diff line number Diff line
@@ -65,6 +65,8 @@ enum bnxt_re_hw_stats {
	BNXT_RE_TX_PKTS,
	BNXT_RE_TX_BYTES,
	BNXT_RE_RECOVERABLE_ERRORS,
	BNXT_RE_TX_ERRORS,
	BNXT_RE_TX_DISCARDS,
	BNXT_RE_RX_ERRORS,
	BNXT_RE_RX_DISCARDS,
	BNXT_RE_TO_RETRANSMITS,
@@ -112,14 +114,21 @@ enum bnxt_re_hw_stats {
	BNXT_RE_TX_READ_RES,
	BNXT_RE_TX_WRITE_REQ,
	BNXT_RE_TX_SEND_REQ,
	BNXT_RE_TX_ROCE_PKTS,
	BNXT_RE_TX_ROCE_BYTES,
	BNXT_RE_RX_ATOMIC_REQ,
	BNXT_RE_RX_READ_REQ,
	BNXT_RE_RX_READ_RESP,
	BNXT_RE_RX_WRITE_REQ,
	BNXT_RE_RX_SEND_REQ,
	BNXT_RE_RX_ROCE_PKTS,
	BNXT_RE_RX_ROCE_BYTES,
	BNXT_RE_RX_ROCE_GOOD_PKTS,
	BNXT_RE_RX_ROCE_GOOD_BYTES,
	BNXT_RE_OOB,
	BNXT_RE_TX_CNP,
	BNXT_RE_RX_CNP,
	BNXT_RE_RX_ECN,
	BNXT_RE_NUM_EXT_COUNTERS
};

+7 −0
Original line number Diff line number Diff line
@@ -832,15 +832,22 @@ int bnxt_qplib_qext_stat(struct bnxt_qplib_rcfw *rcfw, u32 fid,
	estat->tx_read_res = le64_to_cpu(sb->tx_read_res_pkts);
	estat->tx_write_req = le64_to_cpu(sb->tx_write_req_pkts);
	estat->tx_send_req = le64_to_cpu(sb->tx_send_req_pkts);
	estat->tx_roce_pkts = le64_to_cpu(sb->tx_roce_pkts);
	estat->tx_roce_bytes = le64_to_cpu(sb->tx_roce_bytes);
	estat->rx_atomic_req = le64_to_cpu(sb->rx_atomic_req_pkts);
	estat->rx_read_req = le64_to_cpu(sb->rx_read_req_pkts);
	estat->rx_read_res = le64_to_cpu(sb->rx_read_res_pkts);
	estat->rx_write_req = le64_to_cpu(sb->rx_write_req_pkts);
	estat->rx_send_req = le64_to_cpu(sb->rx_send_req_pkts);
	estat->rx_roce_pkts = le64_to_cpu(sb->rx_roce_pkts);
	estat->rx_roce_bytes = le64_to_cpu(sb->rx_roce_bytes);
	estat->rx_roce_good_pkts = le64_to_cpu(sb->rx_roce_good_pkts);
	estat->rx_roce_good_bytes = le64_to_cpu(sb->rx_roce_good_bytes);
	estat->rx_out_of_buffer = le64_to_cpu(sb->rx_out_of_buffer_pkts);
	estat->rx_out_of_sequence = le64_to_cpu(sb->rx_out_of_sequence_pkts);
	estat->tx_cnp = le64_to_cpu(sb->tx_cnp_pkts);
	estat->rx_cnp = le64_to_cpu(sb->rx_cnp_pkts);
	estat->rx_ecn_marked = le64_to_cpu(sb->rx_ecn_marked_pkts);

bail:
	bnxt_qplib_rcfw_free_sbuf(rcfw, sbuf);