[dpdk-dev] [PATCH v3 2/8] ethdev: new API to aggregate shared Rx queue group
Ajit Khaparde
ajit.khaparde at broadcom.com
Sun Sep 26 19:54:00 CEST 2021
On Fri, Sep 17, 2021 at 1:02 AM Xueming Li <xuemingl at nvidia.com> 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 <xuemingl at nvidia.com>
Minor nits - typos actually!
> ---
> 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
> + * 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
>
More information about the dev
mailing list