> 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") > > Signed-off-by: Junxiao Shi <g...@mail1.yoursunny.com>
Thanks for the patch! It's probably too late to make it into 22.03 but cc-ing stable as it should be backported to 21.11.x. Acked-by: Ciara Loftus <ciara.lof...@intel.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.17.1