From: Stephen Hemminger <stephen@networkplumber.org>
To: Shivaji Kant <shivajikant@google.com>
Cc: Thomas Monjalon <thomas@monjalon.net>,
Ciara Loftus <ciara.loftus@intel.com>,
Maryam Tahhan <mtahhan@redhat.com>,
dev@dpdk.org, Joshua Washington <joshwash@google.com>
Subject: Re: [PATCH] net/af_xdp: add rx/tx queue support for af_xdp
Date: Thu, 26 Jun 2025 05:55:22 -0700 [thread overview]
Message-ID: <20250626055522.7aa59d41@hermes.local> (raw)
In-Reply-To: <20250618174103.1345466-1-shivajikant@google.com>
On Wed, 18 Jun 2025 17:41:03 +0000
Shivaji Kant <shivajikant@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 <shivajikant@google.com>
> Reviewed-by: Joshua Washington <joshwash@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 <sthotton@marvell.com> <shijith.thotton@caviumnetworks.com>
> Shiqi Liu <835703180@qq.com>
> Shiri Kuzin <shirik@nvidia.com> <shirik@mellanox.com>
> Shivah Shankar S <sshankarnara@marvell.com>
> +Shivaji Kant <shivajikant@google.com>
> Shivanshu Shukla <shivanshu.shukla@intel.com>
> Shiweixian <shiweixian@huawei.com>
> Shiyang He <shiyangx.he@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;
> }
>
next prev parent reply other threads:[~2025-06-26 12:55 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-18 17:41 [PATCH] net/af_xdp: add rx/tx queue support for af_xdp Shivaji Kant
2025-06-19 8:39 ` Loftus, Ciara
2025-06-26 12:55 ` Stephen Hemminger [this message]
2025-06-30 8:50 ` [PATCH v2] " Shivaji Kant
2025-06-30 8:58 ` Shivaji Kant
2025-06-30 18:44 ` Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250626055522.7aa59d41@hermes.local \
--to=stephen@networkplumber.org \
--cc=ciara.loftus@intel.com \
--cc=dev@dpdk.org \
--cc=joshwash@google.com \
--cc=mtahhan@redhat.com \
--cc=shivajikant@google.com \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.