63 lines
2.3 KiB
Diff
63 lines
2.3 KiB
Diff
From 6f6134c35e3d2340e07f86414c75413e3ac7a0bc Mon Sep 17 00:00:00 2001
|
|
From: Junxiao Shi <git@mail1.yoursunny.com>
|
|
Date: Wed, 9 Mar 2022 21:18:43 +0000
|
|
Subject: [PATCH] net/af_xdp: fix custom program loading with multiple queues
|
|
|
|
[ upstream commit 6f6134c35e3d2340e07f86414c75413e3ac7a0bc ]
|
|
|
|
When the PMD is configured to load a custom XDP program, it sets
|
|
XSK_LIBBPF_FLAGS__INHIBIT_PROG_LOAD flag to prevent libbpf from
|
|
loading its default XDP program. However, when queue_count is set to
|
|
greater than 1, this flag is only set for the first XSK socket but not
|
|
for subsequent XSK sockets. This causes XSK socket creation failure.
|
|
|
|
This commit ensures that XSK_LIBBPF_FLAGS__INHIBIT_PROG_LOAD flag is
|
|
set for all XSK socket creations when custom XDP program is being used.
|
|
|
|
Fixes: 01fa83c94d7e ("net/af_xdp: workaround custom program loading")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Junxiao Shi <git@mail1.yoursunny.com>
|
|
---
|
|
drivers/net/af_xdp/rte_eth_af_xdp.c | 23 ++++++++++++-----------
|
|
1 file changed, 12 insertions(+), 11 deletions(-)
|
|
|
|
diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c
|
|
index 65479138d3..9920f49870 100644
|
|
--- a/drivers/net/af_xdp/rte_eth_af_xdp.c
|
|
+++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
|
|
@@ -1307,18 +1307,19 @@ xsk_configure(struct pmd_internals *internals, struct pkt_rx_queue *rxq,
|
|
cfg.bind_flags |= XDP_USE_NEED_WAKEUP;
|
|
#endif
|
|
|
|
- if (strnlen(internals->prog_path, PATH_MAX) &&
|
|
- !internals->custom_prog_configured) {
|
|
- ret = load_custom_xdp_prog(internals->prog_path,
|
|
- internals->if_index,
|
|
- &internals->map);
|
|
- if (ret) {
|
|
- AF_XDP_LOG(ERR, "Failed to load custom XDP program %s\n",
|
|
- internals->prog_path);
|
|
- goto out_umem;
|
|
+ if (strnlen(internals->prog_path, PATH_MAX)) {
|
|
+ if (!internals->custom_prog_configured) {
|
|
+ ret = load_custom_xdp_prog(internals->prog_path,
|
|
+ internals->if_index,
|
|
+ &internals->map);
|
|
+ if (ret) {
|
|
+ AF_XDP_LOG(ERR, "Failed to load custom XDP program %s\n",
|
|
+ internals->prog_path);
|
|
+ goto out_umem;
|
|
+ }
|
|
+ internals->custom_prog_configured = 1;
|
|
}
|
|
- internals->custom_prog_configured = 1;
|
|
- cfg.libbpf_flags = XSK_LIBBPF_FLAGS__INHIBIT_PROG_LOAD;
|
|
+ cfg.libbpf_flags |= XSK_LIBBPF_FLAGS__INHIBIT_PROG_LOAD;
|
|
}
|
|
|
|
if (internals->shared_umem)
|
|
--
|
|
2.33.0
|
|
|