bnxt_re: Expose the missing hw counters
authorChandramohan Akula <chandramohan.akula@broadcom.com>
Wed, 26 Jul 2023 14:51:20 +0000 (07:51 -0700)
committerLeon Romanovsky <leon@kernel.org>
Sun, 30 Jul 2023 11:37:04 +0000 (14:37 +0300)
Add code to expose some of the HW counters related
to tx/rx data and Congestion control.

Signed-off-by: Chandramohan Akula <chandramohan.akula@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Link: https://lore.kernel.org/r/1690383081-15033-4-git-send-email-selvin.xavier@broadcom.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/bnxt_re/hw_counters.c
drivers/infiniband/hw/bnxt_re/hw_counters.h
drivers/infiniband/hw/bnxt_re/qplib_sp.c

index 8598af5..e50a1cb 100644 (file)
@@ -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:
index 7231a2b..f3c4e35 100644 (file)
@@ -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
 };
 
index ab45f9d..7e57faa 100644 (file)
@@ -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);