From patchwork Tue Jan 25 07:20:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Loftus, Ciara" X-Patchwork-Id: 106472 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4A73FA04A9; Tue, 25 Jan 2022 08:21:05 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0802B41C25; Tue, 25 Jan 2022 08:21:05 +0100 (CET) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 6665F4013F for ; Tue, 25 Jan 2022 08:21:03 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643095263; x=1674631263; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=wJ/j+RGZkQCj+NtfDpNYFStelHINGXGJSp+TsMUPwyg=; b=SIz8bBG02ShoB8EC2uonMhIyYiyoguaPvGq2t8R70MoTsebzYds6L7nU 0oiwxKLWJmBOmYBjDlb4znPPZGicsMKfr3/jl+Au5hnSiTThe6Q2IEbPD 4n6LNpG4RCyxzZee+Jd+e7fXwIzzJCnciO/x2WZSLC43FVZjiWwxyLwKF L62IKWnLG76tfTJLDzzl9RBSg7W6FhvbUxlgx/P07aYUSn1Vp6XWx53W0 ewE7/rj1lxY0PV6wm8i8Nz4iBCjWJtORvXW0YnaqnjG4eQRBFgybsEB6k YPynZeBtAI3fMDa3pmT1+t5aDBuenjvIFpNE+CUSqG5xIolmRG+ridUqQ Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10237"; a="226218431" X-IronPort-AV: E=Sophos;i="5.88,314,1635231600"; d="scan'208";a="226218431" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jan 2022 23:21:02 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,314,1635231600"; d="scan'208";a="673903635" Received: from silpixa00401086.ir.intel.com (HELO localhost.localdomain) ([10.55.129.110]) by fmsmga001.fm.intel.com with ESMTP; 24 Jan 2022 23:21:00 -0800 From: Ciara Loftus To: dev@dpdk.org Cc: ferruh.yigit@intel.com, Ciara Loftus Subject: [PATCH v2] net/af_xdp: use libxdp if available Date: Tue, 25 Jan 2022 07:20:43 +0000 Message-Id: <20220125072043.1590-1-ciara.loftus@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220112130731.39771-1-ciara.loftus@intel.com> References: <20220112130731.39771-1-ciara.loftus@intel.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org 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 --- v2: * Set minimum libxdp version at v1.2.2 RFC -> v1: * Set minimum libxdp version at v1.3.0 * Don't provide alternative to discovery via pkg-config * Add missing newline to end of file --- doc/guides/nics/af_xdp.rst | 6 ++-- doc/guides/rel_notes/release_22_03.rst | 4 +++ drivers/net/af_xdp/compat.h | 4 +++ drivers/net/af_xdp/meson.build | 39 +++++++++++++++++++++----- drivers/net/af_xdp/rte_eth_af_xdp.c | 1 - 5 files changed, 42 insertions(+), 12 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 - /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/doc/guides/rel_notes/release_22_03.rst b/doc/guides/rel_notes/release_22_03.rst index 8a202ec4f4..ad7283df65 100644 --- a/doc/guides/rel_notes/release_22_03.rst +++ b/doc/guides/rel_notes/release_22_03.rst @@ -55,6 +55,10 @@ New Features Also, make sure to start the actual text at the margin. ======================================================= +* **Update AF_XDP PMD** + + * Added support for libxdp >=v1.2.2. + Removed Items ------------- diff --git a/drivers/net/af_xdp/compat.h b/drivers/net/af_xdp/compat.h index 3880dc7dd7..245df1b109 100644 --- a/drivers/net/af_xdp/compat.h +++ b/drivers/net/af_xdp/compat.h @@ -2,7 +2,11 @@ * Copyright(c) 2020 Intel Corporation. */ +#ifdef RTE_LIBRTE_AF_XDP_PMD_LIBXDP +#include +#else #include +#endif #include #include diff --git a/drivers/net/af_xdp/meson.build b/drivers/net/af_xdp/meson.build index 3ed2b29784..981d4c6087 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') + dpdk_conf.set('RTE_LIBRTE_AF_XDP_PMD_LIBXDP', 1) + dpdk_conf.set('RTE_LIBRTE_AF_XDP_PMD_SHARED_UMEM', 1) + 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() + dpdk_conf.set('RTE_LIBRTE_AF_XDP_PMD_SHARED_UMEM', 1) + 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 96c2c9d939..5d89bebb01 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 #include "af_xdp_deps.h" #include -#include #include #include