From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5BA52A04BC; Sun, 27 Sep 2020 05:19:14 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9555E1D92D; Sun, 27 Sep 2020 05:19:12 +0200 (CEST) Received: from huawei.com (szxga05-in.huawei.com [45.249.212.191]) by dpdk.org (Postfix) with ESMTP id E99AD1D92D for ; Sun, 27 Sep 2020 05:19:10 +0200 (CEST) Received: from DGGEMS414-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 968147756200DF6844D1; Sun, 27 Sep 2020 11:19:08 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by DGGEMS414-HUB.china.huawei.com (10.3.19.214) with Microsoft SMTP Server id 14.3.487.0; Sun, 27 Sep 2020 11:19:05 +0800 From: "Min Hu (Connor)" To: CC: , , , Date: Sun, 27 Sep 2020 11:16:35 +0800 Message-ID: <1601176596-29900-2-git-send-email-humin29@huawei.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1601176596-29900-1-git-send-email-humin29@huawei.com> References: <1598845317-55956-1-git-send-email-humin29@huawei.com> <1601176596-29900-1-git-send-email-humin29@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.69.192.56] X-CFilter-Loop: Reflected Subject: [dpdk-dev] [PATCH V5 1/2] dpdk: resolve compiling errors for per-queue stats X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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: Huisong Li Currently, only statistics of rx/tx queues with queue_id less than RTE_ETHDEV_QUEUE_STAT_CNTRS can be displayed. If there is a certain application scenario that it needs to use 256 or more than 256 queues and display all statistics of rx/tx queue. At this moment, we have to change the macro to be equaled to the queue number. However, modifying the macro to be greater than 256 will trigger many errors and warnings from test-pmd, PMD drivers and librte_ethdev during compiling dpdk project. But it is possible and permitted that rx/tx queue number is greater than 256 and all statistics of rx/tx queue need to be displayed. In addition, the data type of rx/tx queue number in rte_eth_dev_configure API is 'uint16_t'. So It is unreasonable to use the 'uint8_t' type for variables that control which per-queue statistics can be displayed. Fixes: ed30d9b691b2 ("app/testpmd: add stats per queue") Fixes: 09c7e63a71f9 ("net/memif: introduce memory interface PMD") Fixes: abf7275bbaa2 ("ixgbe: move to drivers/net/") Fixes: e6defdfddc3b ("net/igc: enable statistics") Fixes: 2265e4b4e84b ("net/octeontx2: add basic stats operation") Fixes: 6c3169a3dc04 ("virtio: move to drivers/net/") Signed-off-by: Huisong Li Signed-off-by: Min Hu (Connor) Reviewed-by: Wei Hu (Xavier) Reviewed-by: Dongdong Liu --- V4 -> V5: add release notes updated. --- v3->v4: add a change in cmd_setqmap_mapvalue. --- v2->v3: change 'uint8_t i' to 'uint16_t i' in nic_stats_display function. --- app/proc-info/main.c | 2 +- app/test-pmd/cmdline.c | 4 ++-- app/test-pmd/config.c | 4 ++-- app/test-pmd/testpmd.c | 2 +- app/test-pmd/testpmd.h | 5 +++-- doc/guides/rel_notes/release_20_11.rst | 5 +++++ drivers/net/igc/igc_ethdev.c | 4 ++-- drivers/net/ixgbe/ixgbe_ethdev.c | 4 ++-- drivers/net/memif/rte_eth_memif.c | 2 +- drivers/net/octeontx2/otx2_ethdev.h | 2 +- drivers/net/octeontx2/otx2_stats.c | 2 +- drivers/net/virtio/virtio_ethdev.c | 4 ++-- lib/librte_ethdev/rte_ethdev.c | 6 +++--- lib/librte_ethdev/rte_ethdev.h | 4 ++-- lib/librte_ethdev/rte_ethdev_driver.h | 2 +- 15 files changed, 29 insertions(+), 23 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 64fb83b..26d9355 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -348,7 +348,7 @@ static void nic_stats_display(uint16_t port_id) { struct rte_eth_stats stats; - uint8_t i; + uint16_t i; static const char *nic_stats_border = "########################"; diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 08e123f..23e624f 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -8315,7 +8315,7 @@ struct cmd_set_qmap_result { cmdline_fixed_string_t what; portid_t port_id; uint16_t queue_id; - uint8_t map_value; + uint16_t map_value; }; static void @@ -8346,7 +8346,7 @@ cmdline_parse_token_num_t cmd_setqmap_queueid = queue_id, UINT16); cmdline_parse_token_num_t cmd_setqmap_mapvalue = TOKEN_NUM_INITIALIZER(struct cmd_set_qmap_result, - map_value, UINT8); + map_value, UINT16); cmdline_parse_inst_t cmd_set_qmap = { .f = cmd_set_qmap_parsed, diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 17a6efe..dfe5627 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -161,7 +161,7 @@ nic_stats_display(portid_t port_id) uint64_t mpps_rx, mpps_tx, mbps_rx, mbps_tx; struct rte_eth_stats stats; struct rte_port *port = &ports[port_id]; - uint8_t i; + uint16_t i; static const char *nic_stats_border = "########################"; @@ -3742,7 +3742,7 @@ tx_vlan_pvid_set(portid_t port_id, uint16_t vlan_id, int on) } void -set_qmap(portid_t port_id, uint8_t is_rx, uint16_t queue_id, uint8_t map_value) +set_qmap(portid_t port_id, uint8_t is_rx, uint16_t queue_id, uint16_t map_value) { uint16_t i; uint8_t existing_mapping_found = 0; diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index fe6450c..4b26c5c 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -1840,7 +1840,7 @@ fwd_stats_display(void) fwd_cycles += fs->core_cycles; } for (i = 0; i < cur_fwd_config.nb_fwd_ports; i++) { - uint8_t j; + uint16_t j; pt_id = fwd_ports_ids[i]; port = &ports[pt_id]; diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index c7e7e41..9ad002c 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -279,7 +279,7 @@ enum dcb_mode_enable struct queue_stats_mappings { portid_t port_id; uint16_t queue_id; - uint8_t stats_counter_id; + uint16_t stats_counter_id; } __rte_cache_aligned; extern struct queue_stats_mappings tx_queue_stats_mappings_array[]; @@ -794,7 +794,8 @@ void tx_qinq_set(portid_t port_id, uint16_t vlan_id, uint16_t vlan_id_outer); void tx_vlan_reset(portid_t port_id); void tx_vlan_pvid_set(portid_t port_id, uint16_t vlan_id, int on); -void set_qmap(portid_t port_id, uint8_t is_rx, uint16_t queue_id, uint8_t map_value); +void set_qmap(portid_t port_id, uint8_t is_rx, uint16_t queue_id, + uint16_t map_value); void set_xstats_hide_zero(uint8_t on_off); diff --git a/doc/guides/rel_notes/release_20_11.rst b/doc/guides/rel_notes/release_20_11.rst index 4bcf220..1ef6f0e 100644 --- a/doc/guides/rel_notes/release_20_11.rst +++ b/doc/guides/rel_notes/release_20_11.rst @@ -178,6 +178,11 @@ API Changes * bpf: ``RTE_BPF_XTYPE_NUM`` has been dropped from ``rte_bpf_xtype``. +* ethdev: Data type of input parameter ``stat_idx`` in ``set_queue_stats_mapping``, + ``rte_eth_dev_set_tx_queue_stats_mapping`` and ``rte_eth_dev_set_rx_queue_stats_mapping`` + function will be changed from ``uint8_t`` to ``uint16_t``, which supports for + using 256 or more than 256 queues and displaying all statistics of rx/tx queue. + ABI Changes ----------- diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c index 810568b..875874e 100644 --- a/drivers/net/igc/igc_ethdev.c +++ b/drivers/net/igc/igc_ethdev.c @@ -221,7 +221,7 @@ static int eth_igc_xstats_get_names_by_id(struct rte_eth_dev *dev, static int eth_igc_xstats_reset(struct rte_eth_dev *dev); static int eth_igc_queue_stats_mapping_set(struct rte_eth_dev *dev, - uint16_t queue_id, uint8_t stat_idx, uint8_t is_rx); + uint16_t queue_id, uint16_t stat_idx, uint8_t is_rx); static int eth_igc_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id); static int @@ -2075,7 +2075,7 @@ eth_igc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids, static int eth_igc_queue_stats_mapping_set(struct rte_eth_dev *dev, - uint16_t queue_id, uint8_t stat_idx, uint8_t is_rx) + uint16_t queue_id, uint16_t stat_idx, uint8_t is_rx) { struct igc_adapter *igc = IGC_DEV_PRIVATE(dev); diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 8da963a..c6ea83a 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -178,7 +178,7 @@ static int ixgbe_dev_xstats_get_names_by_id( unsigned int limit); static int ixgbe_dev_queue_stats_mapping_set(struct rte_eth_dev *eth_dev, uint16_t queue_id, - uint8_t stat_idx, + uint16_t stat_idx, uint8_t is_rx); static int ixgbe_fw_version_get(struct rte_eth_dev *dev, char *fw_version, size_t fw_size); @@ -890,7 +890,7 @@ ixgbe_reset_qstat_mappings(struct ixgbe_hw *hw) static int ixgbe_dev_queue_stats_mapping_set(struct rte_eth_dev *eth_dev, uint16_t queue_id, - uint8_t stat_idx, + uint16_t stat_idx, uint8_t is_rx) { #define QSM_REG_NB_BITS_PER_QMAP_FIELD 8 diff --git a/drivers/net/memif/rte_eth_memif.c b/drivers/net/memif/rte_eth_memif.c index a19c0f3..29cea93 100644 --- a/drivers/net/memif/rte_eth_memif.c +++ b/drivers/net/memif/rte_eth_memif.c @@ -1356,7 +1356,7 @@ memif_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) struct pmd_internals *pmd = dev->data->dev_private; struct memif_queue *mq; int i; - uint8_t tmp, nq; + uint16_t tmp, nq; stats->ipackets = 0; stats->ibytes = 0; diff --git a/drivers/net/octeontx2/otx2_ethdev.h b/drivers/net/octeontx2/otx2_ethdev.h index a114112..0c761e3 100644 --- a/drivers/net/octeontx2/otx2_ethdev.h +++ b/drivers/net/octeontx2/otx2_ethdev.h @@ -476,7 +476,7 @@ int otx2_nix_dev_stats_get(struct rte_eth_dev *eth_dev, int otx2_nix_dev_stats_reset(struct rte_eth_dev *eth_dev); int otx2_nix_queue_stats_mapping(struct rte_eth_dev *dev, - uint16_t queue_id, uint8_t stat_idx, + uint16_t queue_id, uint16_t stat_idx, uint8_t is_rx); int otx2_nix_xstats_get(struct rte_eth_dev *eth_dev, struct rte_eth_xstat *xstats, unsigned int n); diff --git a/drivers/net/octeontx2/otx2_stats.c b/drivers/net/octeontx2/otx2_stats.c index 8aaf270..6efe122 100644 --- a/drivers/net/octeontx2/otx2_stats.c +++ b/drivers/net/octeontx2/otx2_stats.c @@ -145,7 +145,7 @@ otx2_nix_dev_stats_reset(struct rte_eth_dev *eth_dev) int otx2_nix_queue_stats_mapping(struct rte_eth_dev *eth_dev, uint16_t queue_id, - uint8_t stat_idx, uint8_t is_rx) + uint16_t stat_idx, uint8_t is_rx) { struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev); diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index 013a290..9d26012 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -82,7 +82,7 @@ static int virtio_intr_disable(struct rte_eth_dev *dev); static int virtio_dev_queue_stats_mapping_set( struct rte_eth_dev *eth_dev, uint16_t queue_id, - uint8_t stat_idx, + uint16_t stat_idx, uint8_t is_rx); static void virtio_notify_peers(struct rte_eth_dev *dev); @@ -2648,7 +2648,7 @@ virtio_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) */ static int virtio_dev_queue_stats_mapping_set(__rte_unused struct rte_eth_dev *eth_dev, -__rte_unused uint16_t queue_id, __rte_unused uint8_t stat_idx, +__rte_unused uint16_t queue_id, __rte_unused uint16_t stat_idx, __rte_unused uint8_t is_rx) { return 0; diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index dfe5c1b..749b372 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -2942,7 +2942,7 @@ rte_eth_xstats_reset(uint16_t port_id) } static int -set_queue_stats_mapping(uint16_t port_id, uint16_t queue_id, uint8_t stat_idx, +set_queue_stats_mapping(uint16_t port_id, uint16_t queue_id, uint16_t stat_idx, uint8_t is_rx) { struct rte_eth_dev *dev; @@ -2969,7 +2969,7 @@ set_queue_stats_mapping(uint16_t port_id, uint16_t queue_id, uint8_t stat_idx, int rte_eth_dev_set_tx_queue_stats_mapping(uint16_t port_id, uint16_t tx_queue_id, - uint8_t stat_idx) + uint16_t stat_idx) { return eth_err(port_id, set_queue_stats_mapping(port_id, tx_queue_id, stat_idx, STAT_QMAP_TX)); @@ -2978,7 +2978,7 @@ rte_eth_dev_set_tx_queue_stats_mapping(uint16_t port_id, uint16_t tx_queue_id, int rte_eth_dev_set_rx_queue_stats_mapping(uint16_t port_id, uint16_t rx_queue_id, - uint8_t stat_idx) + uint16_t stat_idx) { return eth_err(port_id, set_queue_stats_mapping(port_id, rx_queue_id, stat_idx, STAT_QMAP_RX)); diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h index 645a186..ff3a616 100644 --- a/lib/librte_ethdev/rte_ethdev.h +++ b/lib/librte_ethdev/rte_ethdev.h @@ -2679,7 +2679,7 @@ int rte_eth_xstats_reset(uint16_t port_id); * Zero if successful. Non-zero otherwise. */ int rte_eth_dev_set_tx_queue_stats_mapping(uint16_t port_id, - uint16_t tx_queue_id, uint8_t stat_idx); + uint16_t tx_queue_id, uint16_t stat_idx); /** * Set a mapping for the specified receive queue to the specified per-queue @@ -2700,7 +2700,7 @@ int rte_eth_dev_set_tx_queue_stats_mapping(uint16_t port_id, */ int rte_eth_dev_set_rx_queue_stats_mapping(uint16_t port_id, uint16_t rx_queue_id, - uint8_t stat_idx); + uint16_t stat_idx); /** * Retrieve the Ethernet address of an Ethernet device. diff --git a/lib/librte_ethdev/rte_ethdev_driver.h b/lib/librte_ethdev/rte_ethdev_driver.h index 23cc1e0..c68d465 100644 --- a/lib/librte_ethdev/rte_ethdev_driver.h +++ b/lib/librte_ethdev/rte_ethdev_driver.h @@ -222,7 +222,7 @@ typedef int (*eth_xstats_get_names_by_id_t)(struct rte_eth_dev *dev, typedef int (*eth_queue_stats_mapping_set_t)(struct rte_eth_dev *dev, uint16_t queue_id, - uint8_t stat_idx, + uint16_t stat_idx, uint8_t is_rx); /**< @internal Set a queue statistics mapping for a tx/rx queue of an Ethernet device. */ -- 2.7.4