patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Kevin Traynor <ktraynor@redhat.com>
To: ciara.loftus@intel.com, stable@dpdk.org
Cc: bluca@debian.org, christian.ehrhardt@canonical.com, xuemingl@nvidia.com
Subject: [PATCH 21.11 1/2] net/af_xdp: use libxdp if available
Date: Fri,  6 May 2022 12:03:36 +0100	[thread overview]
Message-ID: <20220506110337.267796-2-ktraynor@redhat.com> (raw)
In-Reply-To: <20220506110337.267796-1-ktraynor@redhat.com>

From: Ciara Loftus <ciara.loftus@intel.com>

[ upstream commit fa4dfda5fe9c3483944955986b60f4d536c4a8bc ]

AF_XDP support is deprecated in libbpf since v0.7.0 [1]. The libxdp library
now provides the functionality which once was in libbpf and which the
AF_XDP PMD relies on. This commit updates the AF_XDP meson build to use the
libxdp library if a version >= v1.2.2 is available. If it is not available,
only versions of libbpf prior to v0.7.0 are allowed, as they still contain
the required AF_XDP functionality.

libbpf still remains a dependency even if libxdp is present, as we use
libbpf APIs for program loading.

The minimum required kernel version for libxdp for use with AF_XDP is v5.3.
For the library to be fully-featured, a kernel v5.10 or newer is
recommended. The full compatibility information can be found in the libxdp
README.

v1.2.2 of libxdp includes an important fix required for linking with DPDK
which is why this version or greater is required. Meson uses pkg-config to
verify the version of libxdp on the system, so it is necessary that the
library is discoverable using pkg-config in order for the PMD to use it. To
verify this, you can run: pkg-config --modversion libxdp

[1] https://github.com/libbpf/libbpf/commit/277846bc6c15

Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
---
 doc/guides/nics/af_xdp.rst          |  6 ++---
 drivers/net/af_xdp/compat.h         |  6 ++++-
 drivers/net/af_xdp/meson.build      | 39 +++++++++++++++++++++++------
 drivers/net/af_xdp/rte_eth_af_xdp.c |  1 -
 4 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/doc/guides/nics/af_xdp.rst b/doc/guides/nics/af_xdp.rst
index c9d0e1ad6c..db02ea1984 100644
--- a/doc/guides/nics/af_xdp.rst
+++ b/doc/guides/nics/af_xdp.rst
@@ -44,7 +44,5 @@ This is a Linux-specific PMD, thus the following prerequisites apply:
 
 *  A Linux Kernel (version > v4.18) with XDP sockets configuration enabled;
-*  libbpf (within kernel version > v5.1-rc4) with latest af_xdp support installed,
-   User can install libbpf via `make install_lib` && `make install_headers` in
-   <kernel src tree>/tools/lib/bpf;
+*  Both libxdp >=v1.2.2 and libbpf libraries installed, or, libbpf <=v0.6.0
 *  A Kernel bound interface to attach to;
 *  For need_wakeup feature, it requires kernel version later than v5.3-rc1;
@@ -144,3 +142,3 @@ Limitations
   on this feature can be found at [1].
 
-  [1] https://lwn.net/Articles/837010/
\ No newline at end of file
+  [1] https://lwn.net/Articles/837010/
diff --git a/drivers/net/af_xdp/compat.h b/drivers/net/af_xdp/compat.h
index 3880dc7dd7..bf40c6572e 100644
--- a/drivers/net/af_xdp/compat.h
+++ b/drivers/net/af_xdp/compat.h
@@ -3,10 +3,14 @@
  */
 
+#ifdef RTE_NET_AF_XDP_LIBXDP
+#include <xdp/xsk.h>
+#else
 #include <bpf/xsk.h>
+#endif
 #include <linux/version.h>
 #include <poll.h>
 
 #if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE && \
-	defined(RTE_LIBRTE_AF_XDP_PMD_SHARED_UMEM)
+	defined(RTE_NET_AF_XDP_SHARED_UMEM)
 #define ETH_AF_XDP_SHARED_UMEM 1
 #endif
diff --git a/drivers/net/af_xdp/meson.build b/drivers/net/af_xdp/meson.build
index 3ed2b29784..93e895eab9 100644
--- a/drivers/net/af_xdp/meson.build
+++ b/drivers/net/af_xdp/meson.build
@@ -10,4 +10,5 @@ endif
 sources = files('rte_eth_af_xdp.c')
 
+xdp_dep = dependency('libxdp', version : '>=1.2.2', required: false, method: 'pkg-config')
 bpf_dep = dependency('libbpf', required: false, method: 'pkg-config')
 if not bpf_dep.found()
@@ -15,13 +16,37 @@ if not bpf_dep.found()
 endif
 
-if bpf_dep.found() and cc.has_header('bpf/xsk.h') and cc.has_header('linux/if_xdp.h')
-    ext_deps += bpf_dep
-    bpf_ver_dep = dependency('libbpf', version : '>=0.2.0',
-            required: false, method: 'pkg-config')
-    if bpf_ver_dep.found()
-        dpdk_conf.set('RTE_LIBRTE_AF_XDP_PMD_SHARED_UMEM', 1)
+if cc.has_header('linux/if_xdp.h')
+    if xdp_dep.found() and cc.has_header('xdp/xsk.h')
+        if bpf_dep.found() and cc.has_header('bpf/bpf.h')
+            cflags += ['-DRTE_NET_AF_XDP_LIBXDP']
+            cflags += ['-DRTE_NET_AF_XDP_SHARED_UMEM']
+            ext_deps += xdp_dep
+            ext_deps += bpf_dep
+        else
+            build = false
+            reason = 'missing dependency, libbpf'
+        endif
+    elif bpf_dep.found() and cc.has_header('bpf/xsk.h') and cc.has_header('bpf/bpf.h')
+        # libxdp not found. Rely solely on libbpf for xsk functionality
+        # which is only available in versions <= v0.6.0.
+        bpf_ver_dep = dependency('libbpf', version : '<=0.6.0',
+                                 required: false, method: 'pkg-config')
+        if bpf_ver_dep.found()
+            ext_deps += bpf_dep
+            bpf_shumem_ver_dep = dependency('libbpf', version : '>=0.2.0',
+                            required: false, method: 'pkg-config')
+            if bpf_shumem_ver_dep.found()
+                cflags += ['-DRTE_NET_AF_XDP_SHARED_UMEM']
+            endif
+        else
+            build = false
+            reason = 'missing dependency, "libxdp" or "libbpf <= v0.6.0"'
+        endif
+    else
+        build = false
+        reason = 'missing dependency, "libxdp" and "libbpf"'
     endif
 else
     build = false
-    reason = 'missing dependency, "libbpf"'
+    reason = 'missing header, "linux/if_xdp.h"'
 endif
diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c
index 80aa55fb22..0366211243 100644
--- a/drivers/net/af_xdp/rte_eth_af_xdp.c
+++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
@@ -17,5 +17,4 @@
 #include "af_xdp_deps.h"
 #include <bpf/bpf.h>
-#include <bpf/xsk.h>
 
 #include <rte_ethdev.h>
-- 
2.34.1


  reply	other threads:[~2022-05-06 11:03 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-06 11:03 [PATCH 21.11 0/2] Fix UNH CI af_xdp build errors Kevin Traynor
2022-05-06 11:03 ` Kevin Traynor [this message]
2022-05-06 11:03 ` [PATCH 21.11 2/2] net/af_xdp: make compatible with libbpf >= 0.7.0 Kevin Traynor
2022-05-06 12:13 ` [PATCH 21.11 0/2] Fix UNH CI af_xdp build errors Loftus, Ciara
2022-05-10  8:37   ` Kevin Traynor

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=20220506110337.267796-2-ktraynor@redhat.com \
    --to=ktraynor@redhat.com \
    --cc=bluca@debian.org \
    --cc=christian.ehrhardt@canonical.com \
    --cc=ciara.loftus@intel.com \
    --cc=stable@dpdk.org \
    --cc=xuemingl@nvidia.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).