On Wed, 18 Jun 2025 17:41:03 +0000
Shivaji Kant <shivajik...@google.com> wrote:

> Driver like GVE do support rx/tx queue configuration
> rather than combined queue. Enable AF_XDP vdev to use
> rx/tx queue configuration instead of combined queue
> configuration if available.

The first sentence is awkward to read.

Is there anything about queues in the driver documentation?

> 
> Signed-off-by: Shivaji Kant <shivajik...@google.com>
> Reviewed-by: Joshua Washington <joshw...@google.com>
> ---
>  .mailmap                            |  1 +
>  drivers/net/af_xdp/rte_eth_af_xdp.c | 30 ++++++++++++++++++-----------
>  2 files changed, 20 insertions(+), 11 deletions(-)
> 
> diff --git a/.mailmap b/.mailmap
> index 8483d96ec5..c67caa7c9d 100644
> --- a/.mailmap
> +++ b/.mailmap
> @@ -1423,6 +1423,7 @@ Shijith Thotton <sthot...@marvell.com> 
> <shijith.thot...@caviumnetworks.com>
>  Shiqi Liu <835703...@qq.com>
>  Shiri Kuzin <shi...@nvidia.com> <shi...@mellanox.com>
>  Shivah Shankar S <sshankarn...@marvell.com>
> +Shivaji Kant <shivajik...@google.com>
>  Shivanshu Shukla <shivanshu.shu...@intel.com>
>  Shiweixian <shiweix...@huawei.com>
>  Shiyang He <shiyangx...@intel.com>
> diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c 
> b/drivers/net/af_xdp/rte_eth_af_xdp.c
> index 05115150a7..6899b6b165 100644
> --- a/drivers/net/af_xdp/rte_eth_af_xdp.c
> +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
> @@ -168,7 +168,7 @@ struct pmd_internals {
>       int start_queue_idx;
>       int queue_cnt;
>       int max_queue_cnt;
> -     int combined_queue_cnt;
> +     int configured_queue_cnt;
>       bool shared_umem;
>       char prog_path[PATH_MAX];
>       bool custom_prog_configured;
> @@ -2043,11 +2043,11 @@ parse_prog_arg(const char *key __rte_unused,
>  
>  static int
>  xdp_get_channels_info(const char *if_name, int *max_queues,
> -                             int *combined_queues)
> +                             int *configured_queues)
>  {
>       struct ethtool_channels channels;
>       struct ifreq ifr;
> -     int fd, ret;
> +     int fd, ret, rxtx_q_count;
>  
>       fd = socket(AF_INET, SOCK_DGRAM, 0);
>       if (fd < 0)
> @@ -2066,15 +2066,23 @@ xdp_get_channels_info(const char *if_name, int 
> *max_queues,
>               }
>       }
>  
> -     if (channels.max_combined == 0 || errno == EOPNOTSUPP) {
> +     /* For dirvers with rx/tx queue configured */

Spelling errors.

> +     rxtx_q_count = RTE_MIN(channels.rx_count, channels.tx_count);
> +
> +     if ((channels.max_combined == 0 && rxtx_q_count == 0) || errno == 
> EOPNOTSUPP) {
>               /* If the device says it has no channels, then all traffic
>                * is sent to a single stream, so max queues = 1.
>                */
>               *max_queues = 1;
> -             *combined_queues = 1;
> -     } else {
> +             *configured_queues = 1;
> +     } else if (channels.max_combined > 0) {
>               *max_queues = channels.max_combined;
> -             *combined_queues = channels.combined_count;
> +             *configured_queues = channels.combined_count;
> +             AF_XDP_LOG_LINE(INFO, "Using Combined queues configuration");
> +     } else {
> +             *max_queues = RTE_MIN(channels.max_rx, channels.max_tx);
> +             *configured_queues = rxtx_q_count;
> +             AF_XDP_LOG_LINE(INFO, "Using Rx/Tx queues configuration");
>       }
>  
>   out:
> @@ -2215,15 +2223,15 @@ init_internals(struct rte_vdev_device *dev, const 
> char *if_name,
>       strlcpy(internals->dp_path, dp_path, PATH_MAX);
>  
>       if (xdp_get_channels_info(if_name, &internals->max_queue_cnt,
> -                               &internals->combined_queue_cnt)) {
> +                               &internals->configured_queue_cnt)) {
>               AF_XDP_LOG_LINE(ERR, "Failed to get channel info of interface: 
> %s",
>                               if_name);
>               goto err_free_internals;
>       }
>  
> -     if (queue_cnt > internals->combined_queue_cnt) {
> -             AF_XDP_LOG_LINE(ERR, "Specified queue count %d is larger than 
> combined queue count %d.",
> -                             queue_cnt, internals->combined_queue_cnt);
> +     if (queue_cnt > internals->configured_queue_cnt) {
> +             AF_XDP_LOG_LINE(ERR, "Specified queue count %d is larger than 
> configured queue count %d.",
> +                             queue_cnt, internals->configured_queue_cnt);
>               goto err_free_internals;
>       }
>  

Reply via email to