On Fri, Sep 17, 2021 at 1:02 AM Xueming Li 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 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 > > /** > 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 >