From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5B8F3A0C43; Thu, 30 Sep 2021 19:12:29 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DCC4B410F6; Thu, 30 Sep 2021 19:12:26 +0200 (CEST) Received: from stargate.chelsio.com (stargate.chelsio.com [12.32.117.8]) by mails.dpdk.org (Postfix) with ESMTP id 59767410F2 for ; Thu, 30 Sep 2021 19:12:25 +0200 (CEST) Received: from localhost (scalar.blr.asicdesigners.com [10.193.185.94]) by stargate.chelsio.com (8.14.7/8.14.7) with ESMTP id 18UHCK71001706; Thu, 30 Sep 2021 10:12:21 -0700 From: Rahul Lakkireddy To: dev@dpdk.org Cc: nikhil.vasoya@chelsio.com Date: Thu, 30 Sep 2021 22:39:58 +0530 Message-Id: <16e466805aa12b976d915d588549475559fa875f.1633018789.git.rahul.lakkireddy@chelsio.com> X-Mailer: git-send-email 2.5.3 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2 1/2] net/cxgbe: add support for xstats API for the VF X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Nikhil Vasoya Add support to fetch port and queue stats via xstats API. Also remove queue stats from basic stats because they're now available via xstats API for the VF. Signed-off-by: Nikhil Vasoya Signed-off-by: Rahul Lakkireddy --- v2: - Update Extended Stats feature in cxgbe.ini and cxgbevf.ini doc/guides/nics/features/cxgbe.ini | 1 + doc/guides/nics/features/cxgbevf.ini | 1 + drivers/net/cxgbe/cxgbe_ethdev.c | 68 ++++++++++++++++++++-------- drivers/net/cxgbe/cxgbe_pfvf.h | 11 +++++ drivers/net/cxgbe/cxgbevf_ethdev.c | 20 +++----- 5 files changed, 69 insertions(+), 32 deletions(-) diff --git a/doc/guides/nics/features/cxgbe.ini b/doc/guides/nics/features/cxgbe.ini index a3ecf12aad..6721740fbd 100644 --- a/doc/guides/nics/features/cxgbe.ini +++ b/doc/guides/nics/features/cxgbe.ini @@ -24,6 +24,7 @@ L3 checksum offload = Y L4 checksum offload = Y Packet type parsing = Y Basic stats = Y +Extended stats = Y Stats per queue = Y EEPROM dump = Y Registers dump = Y diff --git a/doc/guides/nics/features/cxgbevf.ini b/doc/guides/nics/features/cxgbevf.ini index 303d6f2337..c8a25c9a8b 100644 --- a/doc/guides/nics/features/cxgbevf.ini +++ b/doc/guides/nics/features/cxgbevf.ini @@ -20,6 +20,7 @@ L3 checksum offload = Y L4 checksum offload = Y Packet type parsing = Y Basic stats = Y +Extended stats = Y Stats per queue = Y Multiprocess aware = Y Linux = Y diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c index 177eca3976..a6b5c0110a 100644 --- a/drivers/net/cxgbe/cxgbe_ethdev.c +++ b/drivers/net/cxgbe/cxgbe_ethdev.c @@ -881,15 +881,37 @@ static const struct cxgbe_dev_xstats_name_off cxgbe_dev_port_stats_strings[] = { {"rx_bg3_truncated_packets", offsetof(struct port_stats, rx_trunc3)}, }; +static const struct cxgbe_dev_xstats_name_off +cxgbevf_dev_port_stats_strings[] = { + {"tx_bytes", offsetof(struct port_stats, tx_octets)}, + {"tx_broadcast_packets", offsetof(struct port_stats, tx_bcast_frames)}, + {"tx_multicast_packets", offsetof(struct port_stats, tx_mcast_frames)}, + {"tx_unicast_packets", offsetof(struct port_stats, tx_ucast_frames)}, + {"tx_drop_packets", offsetof(struct port_stats, tx_drop)}, + {"rx_broadcast_packets", offsetof(struct port_stats, rx_bcast_frames)}, + {"rx_multicast_packets", offsetof(struct port_stats, rx_mcast_frames)}, + {"rx_unicast_packets", offsetof(struct port_stats, rx_ucast_frames)}, + {"rx_length_error_packets", offsetof(struct port_stats, rx_len_err)}, +}; + #define CXGBE_NB_RXQ_STATS RTE_DIM(cxgbe_dev_rxq_stats_strings) #define CXGBE_NB_TXQ_STATS RTE_DIM(cxgbe_dev_txq_stats_strings) #define CXGBE_NB_PORT_STATS RTE_DIM(cxgbe_dev_port_stats_strings) +#define CXGBEVF_NB_PORT_STATS RTE_DIM(cxgbevf_dev_port_stats_strings) static u16 cxgbe_dev_xstats_count(struct port_info *pi) { - return CXGBE_NB_PORT_STATS + - (pi->n_tx_qsets * CXGBE_NB_TXQ_STATS) + - (pi->n_rx_qsets * CXGBE_NB_RXQ_STATS); + u16 count; + + count = (pi->n_tx_qsets * CXGBE_NB_TXQ_STATS) + + (pi->n_rx_qsets * CXGBE_NB_RXQ_STATS); + + if (is_pf4(pi->adapter) != 0) + count += CXGBE_NB_PORT_STATS; + else + count += CXGBEVF_NB_PORT_STATS; + + return count; } static int cxgbe_dev_xstats(struct rte_eth_dev *dev, @@ -900,20 +922,28 @@ static int cxgbe_dev_xstats(struct rte_eth_dev *dev, struct port_info *pi = dev->data->dev_private; struct adapter *adap = pi->adapter; struct sge *s = &adap->sge; + u16 count, i, qid, nstats; struct port_stats ps; - u16 count, i, qid; u64 *stats_ptr; count = cxgbe_dev_xstats_count(pi); if (size < count) return count; - /* port stats */ - cxgbe_stats_get(pi, &ps); + if (is_pf4(adap) != 0) { + /* port stats for PF*/ + cxgbe_stats_get(pi, &ps); + xstats_str = cxgbe_dev_port_stats_strings; + nstats = CXGBE_NB_PORT_STATS; + } else { + /* port stats for VF*/ + cxgbevf_stats_get(pi, &ps); + xstats_str = cxgbevf_dev_port_stats_strings; + nstats = CXGBEVF_NB_PORT_STATS; + } count = 0; - xstats_str = cxgbe_dev_port_stats_strings; - for (i = 0; i < CXGBE_NB_PORT_STATS; i++, count++) { + for (i = 0; i < nstats; i++, count++) { if (xstats_names != NULL) snprintf(xstats_names[count].name, sizeof(xstats_names[count].name), @@ -970,9 +1000,9 @@ static int cxgbe_dev_xstats(struct rte_eth_dev *dev, } /* Get port extended statistics by ID. */ -static int cxgbe_dev_xstats_get_by_id(struct rte_eth_dev *dev, - const uint64_t *ids, uint64_t *values, - unsigned int n) +int cxgbe_dev_xstats_get_by_id(struct rte_eth_dev *dev, + const uint64_t *ids, uint64_t *values, + unsigned int n) { struct port_info *pi = dev->data->dev_private; struct rte_eth_xstat *xstats_copy; @@ -1005,9 +1035,9 @@ static int cxgbe_dev_xstats_get_by_id(struct rte_eth_dev *dev, } /* Get names of port extended statistics by ID. */ -static int cxgbe_dev_xstats_get_names_by_id(struct rte_eth_dev *dev, - struct rte_eth_xstat_name *xnames, - const uint64_t *ids, unsigned int n) +int cxgbe_dev_xstats_get_names_by_id(struct rte_eth_dev *dev, + struct rte_eth_xstat_name *xnames, + const uint64_t *ids, unsigned int n) { struct port_info *pi = dev->data->dev_private; struct rte_eth_xstat_name *xnames_copy; @@ -1041,16 +1071,16 @@ static int cxgbe_dev_xstats_get_names_by_id(struct rte_eth_dev *dev, } /* Get port extended statistics. */ -static int cxgbe_dev_xstats_get(struct rte_eth_dev *dev, - struct rte_eth_xstat *xstats, unsigned int n) +int cxgbe_dev_xstats_get(struct rte_eth_dev *dev, + struct rte_eth_xstat *xstats, unsigned int n) { return cxgbe_dev_xstats(dev, NULL, xstats, n); } /* Get names of port extended statistics. */ -static int cxgbe_dev_xstats_get_names(struct rte_eth_dev *dev, - struct rte_eth_xstat_name *xstats_names, - unsigned int n) +int cxgbe_dev_xstats_get_names(struct rte_eth_dev *dev, + struct rte_eth_xstat_name *xstats_names, + unsigned int n) { return cxgbe_dev_xstats(dev, xstats_names, NULL, n); } diff --git a/drivers/net/cxgbe/cxgbe_pfvf.h b/drivers/net/cxgbe/cxgbe_pfvf.h index 801d6995d1..3c7aee0ae7 100644 --- a/drivers/net/cxgbe/cxgbe_pfvf.h +++ b/drivers/net/cxgbe/cxgbe_pfvf.h @@ -52,4 +52,15 @@ uint16_t cxgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t cxgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts); const uint32_t *cxgbe_dev_supported_ptypes_get(struct rte_eth_dev *eth_dev); +int cxgbe_dev_xstats_get_by_id(struct rte_eth_dev *dev, + const uint64_t *ids, uint64_t *values, + unsigned int n); +int cxgbe_dev_xstats_get_names_by_id(struct rte_eth_dev *dev, + struct rte_eth_xstat_name *xnames, + const uint64_t *ids, unsigned int n); +int cxgbe_dev_xstats_get_names(struct rte_eth_dev *dev, + struct rte_eth_xstat_name *xstats_names, + unsigned int n); +int cxgbe_dev_xstats_get(struct rte_eth_dev *dev, + struct rte_eth_xstat *xstats, unsigned int n); #endif /* _CXGBE_PFVF_H_ */ diff --git a/drivers/net/cxgbe/cxgbevf_ethdev.c b/drivers/net/cxgbe/cxgbevf_ethdev.c index bf1815c25f..4c809991b7 100644 --- a/drivers/net/cxgbe/cxgbevf_ethdev.c +++ b/drivers/net/cxgbe/cxgbevf_ethdev.c @@ -54,22 +54,12 @@ static int cxgbevf_dev_stats_get(struct rte_eth_dev *eth_dev, eth_stats->oerrors = ps.tx_drop; for (i = 0; i < pi->n_rx_qsets; i++) { - struct sge_eth_rxq *rxq = - &s->ethrxq[pi->first_rxqset + i]; + struct sge_eth_rxq *rxq = &s->ethrxq[pi->first_rxqset + i]; - eth_stats->q_ipackets[i] = rxq->stats.pkts; - eth_stats->q_ibytes[i] = rxq->stats.rx_bytes; - eth_stats->ipackets += eth_stats->q_ipackets[i]; - eth_stats->ibytes += eth_stats->q_ibytes[i]; + eth_stats->ipackets += rxq->stats.pkts; + eth_stats->ibytes += rxq->stats.rx_bytes; } - for (i = 0; i < pi->n_tx_qsets; i++) { - struct sge_eth_txq *txq = - &s->ethtxq[pi->first_txqset + i]; - - eth_stats->q_opackets[i] = txq->stats.pkts; - eth_stats->q_obytes[i] = txq->stats.tx_bytes; - } return 0; } @@ -97,6 +87,10 @@ static const struct eth_dev_ops cxgbevf_eth_dev_ops = { .rx_queue_stop = cxgbe_dev_rx_queue_stop, .rx_queue_release = cxgbe_dev_rx_queue_release, .stats_get = cxgbevf_dev_stats_get, + .xstats_get = cxgbe_dev_xstats_get, + .xstats_get_by_id = cxgbe_dev_xstats_get_by_id, + .xstats_get_names = cxgbe_dev_xstats_get_names, + .xstats_get_names_by_id = cxgbe_dev_xstats_get_names_by_id, .mac_addr_set = cxgbe_mac_addr_set, }; -- 2.27.0