From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9097FA04A7; Tue, 25 Jan 2022 10:27:59 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 52F8141C26; Tue, 25 Jan 2022 10:27:59 +0100 (CET) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mails.dpdk.org (Postfix) with ESMTP id D6AAF411A7 for ; Tue, 25 Jan 2022 10:27:57 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643102878; x=1674638878; h=date:from:to:cc:subject:message-id:references: mime-version:in-reply-to; bh=nwKvV4m1l7/dPpabIXZQZU3iIpsF/y9r+2xhS6uPLdI=; b=JW0O1k6yyb+D+skJNKMQTmdkXn4HP83hf6cqTMqxxifiSqYVXQFy5gmI CyTViDjZfYDSz02IHsmzTVoK4FKawW64Vm8W8TRpLS7JN5JK303JE7zM7 p1rL8IPw9UMN6RyboZGPG603t5X3sNogQ2ozh82oKrLsM0/vXNRn8uAJq QuYvlYz0oBs0aoFREN8sA3LBMgVXD7lINogtWU7WCnhG/SBzAlwmpIiti uO/kNnJu5JaOCe6GbYEscn6AVUV3di1Ox4e4beennAA8si8Y97pPnGnPu eWUeqxTjrVKiWSR1K7GBkXh1xOOv5cPX+NfDbcWe610XZZnchRETjJrwd w==; X-IronPort-AV: E=McAfee;i="6200,9189,10237"; a="270707955" X-IronPort-AV: E=Sophos;i="5.88,314,1635231600"; d="scan'208";a="270707955" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jan 2022 01:27:56 -0800 X-IronPort-AV: E=Sophos;i="5.88,314,1635231600"; d="scan'208";a="695772105" Received: from bricha3-mobl.ger.corp.intel.com ([10.252.31.29]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-SHA; 25 Jan 2022 01:27:55 -0800 Date: Tue, 25 Jan 2022 09:27:52 +0000 From: Bruce Richardson To: Ciara Loftus Cc: dev@dpdk.org, ferruh.yigit@intel.com Subject: Re: [PATCH v2] net/af_xdp: use libxdp if available Message-ID: References: <20220112130731.39771-1-ciara.loftus@intel.com> <20220125072043.1590-1-ciara.loftus@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220125072043.1590-1-ciara.loftus@intel.com> 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 On Tue, Jan 25, 2022 at 07:20:43AM +0000, Ciara Loftus wrote: > 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 Hi Ciara, couple of comments inline below. /Bruce > --- > 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 This is a really long macro name. With meson builds we have largely moved away from using "RTE_LIBRTE_" as a prefix, and also have dropped "PMD" from names too. The global enable macro for AF_XDP driver is now "RTE_NET_AF_XDP" so I'd suggest this macro could be shortened to "RTE_NET_AF_XDP_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) Do these defines need to be exposed to the end user, or are they for internal use only? If they don't need to be exposed to the user, I'd suggest changing them to cflags, rather than writing them to the build config. As well as reducing the info we show to the end user, not having them in the build config means that if they change, only this driver needs a rebuild, rather than the whole of DPDK. [Every DPDK file includes the build config, so a change there requires everything rebuild] > + ext_deps += xdp_dep > + ext_deps += bpf_dep > + else > + build = false > + reason = 'missing dependency, libbpf' > + endif