155 lines
5.9 KiB
Diff
155 lines
5.9 KiB
Diff
From fa4dfda5fe9c3483944955986b60f4d536c4a8bc Mon Sep 17 00:00:00 2001
|
|
From: Ciara Loftus <ciara.loftus@intel.com>
|
|
Date: Fri, 28 Jan 2022 09:50:29 +0000
|
|
Subject: [PATCH] net/af_xdp: use libxdp if available
|
|
|
|
[ 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, 43 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
|
|
@@ -43,9 +43,7 @@ Prerequisites
|
|
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;
|
|
* For PMD zero copy, it requires kernel version later than v5.4-rc1;
|
|
@@ -143,4 +141,4 @@ Limitations
|
|
NAPI context from a watchdog timer instead of from softirqs. More information
|
|
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
|
|
@@ -2,12 +2,16 @@
|
|
* Copyright(c) 2020 Intel Corporation.
|
|
*/
|
|
|
|
+#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
|
|
@@ -9,19 +9,44 @@ 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()
|
|
bpf_dep = cc.find_library('bpf', required: false)
|
|
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 b3ed704b36..1b6192fa44 100644
|
|
--- a/drivers/net/af_xdp/rte_eth_af_xdp.c
|
|
+++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
|
|
@@ -16,7 +16,6 @@
|
|
#include <linux/sockios.h>
|
|
#include "af_xdp_deps.h"
|
|
#include <bpf/bpf.h>
|
|
-#include <bpf/xsk.h>
|
|
|
|
#include <rte_ethdev.h>
|
|
#include <ethdev_driver.h>
|
|
--
|
|
2.33.0
|
|
|