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 519B6A04FD; Mon, 30 May 2022 13:00:17 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 42B9842B78; Mon, 30 May 2022 13:00:17 +0200 (CEST) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id E6DF342B75 for ; Mon, 30 May 2022 13:00:14 +0200 (CEST) Received: from kwepemi500012.china.huawei.com (unknown [172.30.72.57]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4LBXT74gshzgYR4; Mon, 30 May 2022 18:58:35 +0800 (CST) Received: from [10.67.103.128] (10.67.103.128) by kwepemi500012.china.huawei.com (7.221.188.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Mon, 30 May 2022 19:00:12 +0800 Subject: Re: [PATCH 1/4] ethdev: introduce ethdev HW desc dump PI To: Ray Kinsella CC: , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko References: <20220527023351.40577-1-humin29@huawei.com> <20220527023351.40577-2-humin29@huawei.com> <87fskrwf8r.fsf@mdr78.vserver.site> From: "Min Hu (Connor)" Message-ID: Date: Mon, 30 May 2022 19:00:12 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1 MIME-Version: 1.0 In-Reply-To: <87fskrwf8r.fsf@mdr78.vserver.site> Content-Type: text/plain; charset="gbk"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.67.103.128] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemi500012.china.huawei.com (7.221.188.12) X-CFilter-Loop: Reflected 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 Hi, Ray, ÔÚ 2022/5/30 17:17, Ray Kinsella дµÀ: > > "Min Hu (Connor)" writes: > >> Added the ethdev HW Rx desc dump API which provides functions for query >> HW descriptor from device. HW descriptor info differs in different NICs. >> The information demonstrates I/O process which is important for debug. >> As the information is different between NICs, the new API is introduced. >> >> Signed-off-by: Min Hu (Connor) >> --- >> doc/guides/rel_notes/release_22_07.rst | 6 ++++ >> lib/ethdev/ethdev_driver.h | 42 ++++++++++++++++++++++++ >> lib/ethdev/rte_ethdev.c | 44 ++++++++++++++++++++++++++ >> lib/ethdev/rte_ethdev.h | 44 ++++++++++++++++++++++++++ >> lib/ethdev/version.map | 2 ++ >> 5 files changed, 138 insertions(+) >> >> diff --git a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst >> index 0ed4f92820..cfb9117dd3 100644 >> --- a/doc/guides/rel_notes/release_22_07.rst >> +++ b/doc/guides/rel_notes/release_22_07.rst >> @@ -95,6 +95,12 @@ New Features >> * Added AH mode support in lookaside protocol (IPsec) for CN9K & CN10K. >> * Added AES-GMAC support in lookaside protocol (IPsec) for CN9K & CN10K. >> >> +* **Added ethdev HW desc dump API, to dump Rx/Tx HW desc info from device.** >> + >> + Added the ethdev HW Rx desc dump API which provides functions for query >> + HW descriptor from device. HW descriptor info differs in different NICs. >> + The information demonstrates I/O process which is important for debug. >> + As the information is different between NICs, the new API is introduced. >> >> Removed Items >> ------------- >> diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h >> index 69d9dc21d8..89512ab360 100644 >> --- a/lib/ethdev/ethdev_driver.h >> +++ b/lib/ethdev/ethdev_driver.h >> @@ -1073,6 +1073,42 @@ typedef int (*eth_ip_reassembly_conf_set_t)(struct rte_eth_dev *dev, >> */ >> typedef int (*eth_dev_priv_dump_t)(struct rte_eth_dev *dev, FILE *file); >> >> +/** >> + * @internal >> + * Dump ethdev Rx descriptor info to a file. >> + * >> + * @param file >> + * A pointer to a file for output. >> + * @param dev >> + * Port (ethdev) handle. >> + * @param queue_id >> + * The selected queue. >> + * @param desc_id >> + * The selected descriptor. >> + * @return >> + * Negative errno value on error, zero on success. >> + */ >> +typedef int (*eth_rx_hw_desc_dump_t)(FILE *file, struct rte_eth_dev *dev, >> + uint16_t queue_id, uint16_t desc_id); >> + >> +/** >> + * @internal >> + * Dump ethdev Tx descriptor info to a file. >> + * >> + * @param file >> + * A pointer to a file for output. >> + * @param dev >> + * Port (ethdev) handle. >> + * @param queue_id >> + * The selected queue. >> + * @param desc_id >> + * The selected descriptor. >> + * @return >> + * Negative errno value on error, zero on success. >> + */ >> +typedef int (*eth_tx_hw_desc_dump_t)(FILE *file, struct rte_eth_dev *dev, >> + uint16_t queue_id, uint16_t desc_id); >> + >> /** >> * @internal A structure containing the functions exported by an Ethernet driver. >> */ >> @@ -1283,6 +1319,12 @@ struct eth_dev_ops { >> >> /** Dump private info from device */ >> eth_dev_priv_dump_t eth_dev_priv_dump; >> + >> + /** Dump ethdev Rx descriptor info */ >> + eth_rx_hw_desc_dump_t eth_rx_hw_desc_dump; >> + >> + /** Dump ethdev Tx descriptor info */ >> + eth_tx_hw_desc_dump_t eth_tx_hw_desc_dump; >> }; >> >> /** >> diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c >> index a175867651..09abee6345 100644 >> --- a/lib/ethdev/rte_ethdev.c >> +++ b/lib/ethdev/rte_ethdev.c >> @@ -5874,6 +5874,50 @@ rte_eth_dev_priv_dump(uint16_t port_id, FILE *file) >> return eth_err(port_id, (*dev->dev_ops->eth_dev_priv_dump)(dev, file)); >> } >> >> +int >> +rte_eth_rx_hw_desc_dump(FILE *file, uint16_t port_id, uint16_t queue_id, >> + uint16_t desc_id) >> +{ >> + struct rte_eth_dev *dev; >> + int ret; >> + >> + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); >> + dev = &rte_eth_devices[port_id]; >> + >> + if (queue_id >= dev->data->nb_rx_queues) { >> + RTE_ETHDEV_LOG(ERR, "Invalid Rx queue_id=%u\n", queue_id); >> + return -EINVAL; >> + } >> + >> + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->eth_rx_hw_desc_dump, -ENOTSUP); >> + ret = (*dev->dev_ops->eth_rx_hw_desc_dump)(file, dev, queue_id, >> + desc_id); >> + >> + return ret; >> +} >> + >> +int >> +rte_eth_tx_hw_desc_dump(FILE *file, uint16_t port_id, uint16_t queue_id, >> + uint16_t desc_id) >> +{ >> + struct rte_eth_dev *dev; >> + int ret; >> + >> + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); >> + dev = &rte_eth_devices[port_id]; >> + >> + if (queue_id >= dev->data->nb_tx_queues) { >> + RTE_ETHDEV_LOG(ERR, "Invalid Tx queue_id=%u\n", queue_id); >> + return -EINVAL; >> + } >> + >> + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->eth_tx_hw_desc_dump, -ENOTSUP); >> + ret = (*dev->dev_ops->eth_tx_hw_desc_dump)(file, dev, queue_id, >> + desc_id); >> + >> + return ret; >> +} >> + >> RTE_LOG_REGISTER_DEFAULT(rte_eth_dev_logtype, INFO); >> >> RTE_INIT(ethdev_init_telemetry) >> diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h >> index 02df65d923..56ae630209 100644 >> --- a/lib/ethdev/rte_ethdev.h >> +++ b/lib/ethdev/rte_ethdev.h >> @@ -5456,6 +5456,50 @@ typedef struct { >> __rte_experimental >> int rte_eth_dev_priv_dump(uint16_t port_id, FILE *file); >> >> +/** >> + * @warning >> + * @b EXPERIMENTAL: this API may change, or be removed, without prior notice >> + * >> + * Dump ethdev Rx descriptor info to a file. >> + * >> + * @param file >> + * A pointer to a file for output. >> + * @param dev >> + * Port (ethdev) handle. >> + * @param queue_id >> + * The selected queue. >> + * @param desc_id >> + * The selected descriptor. >> + * @return >> + * - On success, zero. >> + * - On failure, a negative value. >> + */ >> +__rte_experimental >> +int rte_eth_rx_hw_desc_dump(FILE *file, uint16_t port_id, uint16_t queue_id, >> + uint16_t desc_id); >> + >> +/** >> + * @warning >> + * @b EXPERIMENTAL: this API may change, or be removed, without prior notice >> + * >> + * Dump ethdev Tx descriptor info to a file. >> + * >> + * @param file >> + * A pointer to a file for output. >> + * @param dev >> + * Port (ethdev) handle. >> + * @param queue_id >> + * The selected queue. >> + * @param desc_id >> + * The selected descriptor. >> + * @return >> + * - On success, zero. >> + * - On failure, a negative value. >> + */ >> +__rte_experimental >> +int rte_eth_tx_hw_desc_dump(FILE *file, uint16_t port_id, uint16_t queue_id, >> + uint16_t desc_id); >> + >> #include >> >> /** >> diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map >> index daca7851f2..109f4ea818 100644 >> --- a/lib/ethdev/version.map >> +++ b/lib/ethdev/version.map >> @@ -285,6 +285,8 @@ EXPERIMENTAL { >> rte_mtr_color_in_protocol_priority_get; >> rte_mtr_color_in_protocol_set; >> rte_mtr_meter_vlan_table_update; > > Please annotate with a comment indicating in which release the symbols > have been added. The patch doesn't show the whole picture. Actually, The code is: # added in 22.07 rte_mtr_color_in_protocol_get; rte_mtr_color_in_protocol_priority_get; rte_mtr_color_in_protocol_set; rte_mtr_meter_vlan_table_update; rte_eth_rx_hw_desc_dump; rte_eth_tx_hw_desc_dump; Thanks. > >> + rte_eth_rx_hw_desc_dump; >> + rte_eth_tx_hw_desc_dump; >> }; >> >> INTERNAL { > >