[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