[dpdk-dev] [PATCH v2 2/6] ethdev: add new attributes to hairpin config
Ori Kam
orika at nvidia.com
Thu Oct 8 11:23:53 CEST 2020
Hi Bing,
> -----Original Message-----
> From: Bing Zhao <bingz at nvidia.com>
> Sent: Thursday, October 8, 2020 11:52 AM
> Subject: [PATCH v2 2/6] ethdev: add new attributes to hairpin config
>
> To support two ports hairpin mode and keep the backward compatibility
> for the application, two new attribute members of hairpin queue
> configuration structure are added.
>
> `tx_explicit` means if the application itself will insert the TX part
> flow rules. If not set, PMD will insert the rules implicitly.
> `manual_bind` means if the hairpin TX queue and peer RX queue will be
> bound automatically during device start stage.
>
> Different TX and RX queue pairs could have different values, but it
> is highly recommended that all paired queues between one egress and
> its peer ingress ports have the same values, in order not to bring
> any chaos to the system. The actual support of these attribute
> parameters will be checked and decided by the PMD drivers.
>
> In a single port hairpin, if both are zero without any setting, the
> behavior will remain the same as before. It means no bind API needs
> to be called and no TX flow rules need to be inserted manually by
> the application.
>
> Signed-off-by: Bing Zhao <bingz at nvidia.com>
> ---
> v2: optimize the structure and remove unused macros
> ---
> lib/librte_ethdev/rte_ethdev.c | 8 ++++----
> lib/librte_ethdev/rte_ethdev.h | 5 ++++-
> 2 files changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
> index 85a19bd..a4adeff 100644
> --- a/lib/librte_ethdev/rte_ethdev.c
> +++ b/lib/librte_ethdev/rte_ethdev.c
> @@ -1954,13 +1954,13 @@ struct rte_eth_dev *
> }
> if (conf->peer_count > cap.max_rx_2_tx) {
> RTE_ETHDEV_LOG(ERR,
> - "Invalid value for number of peers for Rx queue(=%hu),
> should be: <= %hu",
> + "Invalid value for number of peers for Rx queue(=%u),
> should be: <= %hu",
> conf->peer_count, cap.max_rx_2_tx);
> return -EINVAL;
> }
> if (conf->peer_count == 0) {
> RTE_ETHDEV_LOG(ERR,
> - "Invalid value for number of peers for Rx queue(=%hu),
> should be: > 0",
> + "Invalid value for number of peers for Rx queue(=%u),
> should be: > 0",
> conf->peer_count);
> return -EINVAL;
> }
> @@ -2125,13 +2125,13 @@ struct rte_eth_dev *
> }
> if (conf->peer_count > cap.max_tx_2_rx) {
> RTE_ETHDEV_LOG(ERR,
> - "Invalid value for number of peers for Tx queue(=%hu),
> should be: <= %hu",
> + "Invalid value for number of peers for Tx queue(=%u),
> should be: <= %hu",
> conf->peer_count, cap.max_tx_2_rx);
> return -EINVAL;
> }
> if (conf->peer_count == 0) {
> RTE_ETHDEV_LOG(ERR,
> - "Invalid value for number of peers for Tx queue(=%hu),
> should be: > 0",
> + "Invalid value for number of peers for Tx queue(=%u),
> should be: > 0",
> conf->peer_count);
> return -EINVAL;
> }
> diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
> index 6206643..94a981c 100644
> --- a/lib/librte_ethdev/rte_ethdev.h
> +++ b/lib/librte_ethdev/rte_ethdev.h
> @@ -1045,7 +1045,10 @@ struct rte_eth_hairpin_peer {
> * A structure used to configure hairpin binding.
> */
> struct rte_eth_hairpin_conf {
> - uint16_t peer_count; /**< The number of peers. */
> + uint32_t peer_count:16; /**< The number of peers. */
> + uint32_t tx_explicit:1; /**< Explicit TX flow rule mode. */
> + uint32_t manual_bind:1; /**< Manually bind hairpin queues. */
> + uint32_t reserved:14; /**< Reserved bits. */
> struct rte_eth_hairpin_peer peers[RTE_ETH_MAX_HAIRPIN_PEERS];
> };
>
> --
> 1.8.3.1
Acked-by: Ori Kam <orika at nvidia.com>
Thanks,
Ori
More information about the dev
mailing list