[1/4] ethdev: introduce ethdev HW desc dump PI
Checks
Commit Message
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) <humin29@huawei.com>
---
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(+)
Comments
On Fri, 27 May 2022 10:33:48 +0800
"Min Hu (Connor)" <humin29@huawei.com> wrote:
> 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) <humin29@huawei.com>
> ---
> 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);
Should be 'const struct rte_eth_dev *dev' to remind developers that dump
should not modify device?
Thanks Stephen, v2 has been sent.
在 2022/5/27 23:34, Stephen Hemminger 写道:
> On Fri, 27 May 2022 10:33:48 +0800
> "Min Hu (Connor)" <humin29@huawei.com> wrote:
>
>> 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) <humin29@huawei.com>
>> ---
>> 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);
>
> Should be 'const struct rte_eth_dev *dev' to remind developers that dump
> should not modify device?
> .
>
"Min Hu (Connor)" <humin29@huawei.com> 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) <humin29@huawei.com>
> ---
> 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 <rte_ethdev_core.h>
>
> /**
> 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.
> + rte_eth_rx_hw_desc_dump;
> + rte_eth_tx_hw_desc_dump;
> };
>
> INTERNAL {
Hi, Ray,
在 2022/5/30 17:17, Ray Kinsella 写道:
>
> "Min Hu (Connor)" <humin29@huawei.com> 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) <humin29@huawei.com>
>> ---
>> 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 <rte_ethdev_core.h>
>>
>> /**
>> 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 {
>
>
"Min Hu (Connor)" <humin29@huawei.com> writes:
> Hi, Ray,
>
> 在 2022/5/30 17:17, Ray Kinsella 写道:
>> "Min Hu (Connor)" <humin29@huawei.com> 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) <humin29@huawei.com>
>>> ---
>>> 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(+)
>>>
Acked-by: Ray Kinsella <mdr@ashroe.eu>
@@ -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
-------------
@@ -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;
};
/**
@@ -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)
@@ -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 <rte_ethdev_core.h>
/**
@@ -285,6 +285,8 @@ EXPERIMENTAL {
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;
};
INTERNAL {