Re: [dpdk-dev] [PATCH v3 2/8] ethdev: new API to aggregate shared Rx queue group
From: Ajit Khaparde <ajit.khaparde@broadcom.com>
Date: 2021-09-26 17:54:20
On Fri, Sep 17, 2021 at 1:02 AM Xueming Li [off-list ref] wrote:
This patch introduces new api to aggreated ports among same shared Rx
s/aggregated/aggregate
queue group. Only queues with specified share group is aggregated.
s/is/are
Rx burst and device close are expected to be supported by new device. Signed-off-by: Xueming Li <redacted>
Minor nits - typos actually!
quoted hunk ↗ jump to hunk
--- lib/ethdev/ethdev_driver.h | 23 ++++++++++++++++++++++- lib/ethdev/rte_ethdev.c | 22 ++++++++++++++++++++++ lib/ethdev/rte_ethdev.h | 16 ++++++++++++++++ lib/ethdev/version.map | 3 +++ 4 files changed, 63 insertions(+), 1 deletion(-)diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h index 524757cf6f..72156a4153 100644 --- a/lib/ethdev/ethdev_driver.h +++ b/lib/ethdev/ethdev_driver.h@@ -786,10 +786,28 @@ typedef int (*eth_get_monitor_addr_t)(void *rxq, * @return * Negative errno value on error, number of info entries otherwise. */ - typedef int (*eth_representor_info_get_t)(struct rte_eth_dev *dev, struct rte_eth_representor_info *info); +/** + * @internal + * Aggregate shared Rx queue. + * + * Create a new port used for shared Rx queue polling. + * + * Only queues with specified share group are aggregated. + * At least Rx burst and device close should be supported. + * + * @param dev + * Ethdev handle of port. + * @param group + * Shared Rx queue group to aggregate. + * @return + * UINT16_MAX if failed, otherwise aggregated port number. + */ +typedef int (*eth_shared_rxq_aggregate_t)(struct rte_eth_dev *dev, + uint32_t group); + /** * @internal A structure containing the functions exported by an Ethernet driver. */@@ -950,6 +968,9 @@ struct eth_dev_ops { eth_representor_info_get_t representor_info_get; /**< Get representor info. */ + + eth_shared_rxq_aggregate_t shared_rxq_aggregate; + /**< Aggregate shared Rx queue. */ }; /**diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index b3a58d5e65..9f2ef58309 100644 --- a/lib/ethdev/rte_ethdev.c +++ b/lib/ethdev/rte_ethdev.c@@ -6301,6 +6301,28 @@ rte_eth_representor_info_get(uint16_t port_id, return eth_err(port_id, (*dev->dev_ops->representor_info_get)(dev, info)); } +uint16_t +rte_eth_shared_rxq_aggregate(uint16_t port_id, uint32_t group) +{ + struct rte_eth_dev *dev; + uint64_t offloads; + + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); + dev = &rte_eth_devices[port_id]; + + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->shared_rxq_aggregate, + UINT16_MAX); + + offloads = dev->data->dev_conf.rxmode.offloads; + if ((offloads & RTE_ETH_RX_OFFLOAD_SHARED_RXQ) == 0) { + RTE_ETHDEV_LOG(ERR, "port_id=%u doesn't support Rx offload\n", + port_id); + return UINT16_MAX; + } + + return (*dev->dev_ops->shared_rxq_aggregate)(dev, group); +} + 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 a578c9db9d..f15d2142b2 100644 --- a/lib/ethdev/rte_ethdev.h +++ b/lib/ethdev/rte_ethdev.h@@ -4895,6 +4895,22 @@ __rte_experimental int rte_eth_representor_info_get(uint16_t port_id, struct rte_eth_representor_info *info); +/** + * Aggregate shared Rx queue ports to one port for polling. + * + * Only queues with specified share group is aggregated.
s/is/are
quoted hunk ↗ jump to hunk
+ * Any operation besides Rx burst and device close is unexpected. + * + * @param port_id + * The port identifier of the device from shared Rx queue group. + * @param group + * Shared Rx queue group to aggregate. + * @return + * UINT16_MAX if failed, otherwise aggregated port number. + */ +__rte_experimental +uint16_t rte_eth_shared_rxq_aggregate(uint16_t port_id, uint32_t group); + #include <rte_ethdev_core.h> /**diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map index 3eece75b72..97a2233508 100644 --- a/lib/ethdev/version.map +++ b/lib/ethdev/version.map@@ -249,6 +249,9 @@ EXPERIMENTAL { rte_mtr_meter_policy_delete; rte_mtr_meter_policy_update; rte_mtr_meter_policy_validate; + + # added in 21.11 + rte_eth_shared_rxq_aggregate; }; INTERNAL { --2.33.0