From 59e90e026284607f3c643d24b65139cd9e815d2c Mon Sep 17 00:00:00 2001 From: David Marchand Date: Fri, 18 Oct 2024 18:17:36 +0200 Subject: [PATCH] dpdk: Update to use v24.11. This commit adds support for DPDK v24.11. It updates the CI script and documentation and includes the following changes coming from the dpdk-latest branch: - netdev-offload-dpdk: Fix build with v24.11-rc1. https://patchwork.ozlabs.org/project/openvswitch/list/?series=428784&state=* Signed-off-by: David Marchand --- .github/workflows/build-and-test.yml | 4 ++-- Documentation/faq/releases.rst | 2 +- Documentation/intro/install/dpdk.rst | 16 ++++++------- Documentation/topics/dpdk/phy.rst | 12 +++++----- Documentation/topics/dpdk/vdev.rst | 2 +- Documentation/topics/dpdk/vhost-user.rst | 2 +- Documentation/topics/testing.rst | 2 +- Documentation/topics/userspace-tso.rst | 2 +- NEWS | 2 +- debian/control.in | 2 +- lib/netdev-offload-dpdk.c | 30 ++++++++++++------------ rhel/openvswitch-fedora.spec.in | 2 +- 12 files changed, 39 insertions(+), 39 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 64e9feabddb..ba45fce294a 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -13,8 +13,8 @@ jobs: env: dependencies: gcc libnuma-dev libxdp-dev ninja-build pkgconf CC: gcc - DPDK_GIT: https://dpdk.org/git/dpdk-stable - DPDK_VER: 23.11.2 + DPDK_GIT: https://dpdk.org/git/dpdk + DPDK_VER: 24.11 name: dpdk gcc outputs: dpdk_key: ${{ steps.gen_dpdk_key.outputs.key }} diff --git a/Documentation/faq/releases.rst b/Documentation/faq/releases.rst index d345b63d5b5..3dcbb850b47 100644 --- a/Documentation/faq/releases.rst +++ b/Documentation/faq/releases.rst @@ -238,7 +238,7 @@ Q: Are all the DPDK releases that OVS versions work with maintained? The latest information about DPDK stable and LTS releases can be found at `DPDK stable`_. -.. _DPDK stable: http://doc.dpdk.org/guides-23.11/contributing/stable.html +.. _DPDK stable: http://doc.dpdk.org/guides-24.11/contributing/stable.html Q: I get an error like this when I configure Open vSwitch: diff --git a/Documentation/intro/install/dpdk.rst b/Documentation/intro/install/dpdk.rst index ebd29a45a96..4a0de02c7c4 100644 --- a/Documentation/intro/install/dpdk.rst +++ b/Documentation/intro/install/dpdk.rst @@ -42,7 +42,7 @@ Build requirements In addition to the requirements described in :doc:`general`, building Open vSwitch with DPDK will require the following: -- DPDK 23.11.2 +- DPDK 24.11 - A `DPDK supported NIC`_ @@ -59,8 +59,8 @@ vSwitch with DPDK will require the following: Detailed system requirements can be found at `DPDK requirements`_. -.. _DPDK supported NIC: https://doc.dpdk.org/guides-23.11/nics/index.html -.. _DPDK requirements: https://doc.dpdk.org/guides-23.11/linux_gsg/sys_reqs.html +.. _DPDK supported NIC: https://doc.dpdk.org/guides-24.11/nics/index.html +.. _DPDK requirements: https://doc.dpdk.org/guides-24.11/linux_gsg/sys_reqs.html .. _dpdk-install: @@ -73,9 +73,9 @@ Install DPDK #. Download the `DPDK sources`_, extract the file and set ``DPDK_DIR``:: $ cd /usr/src/ - $ wget https://fast.dpdk.org/rel/dpdk-23.11.2.tar.xz - $ tar xf dpdk-23.11.2.tar.xz - $ export DPDK_DIR=/usr/src/dpdk-stable-23.11.2 + $ wget https://fast.dpdk.org/rel/dpdk-24.11.tar.xz + $ tar xf dpdk-24.11.tar.xz + $ export DPDK_DIR=/usr/src/dpdk-24.11 $ cd $DPDK_DIR #. Configure and install DPDK using Meson @@ -121,7 +121,7 @@ Install DPDK .. _DPDK sources: http://dpdk.org/rel .. _DPDK documentation: - https://doc.dpdk.org/guides-23.11/linux_gsg/build_dpdk.html + https://doc.dpdk.org/guides-24.11/linux_gsg/build_dpdk.html Install OVS ~~~~~~~~~~~ @@ -722,7 +722,7 @@ Limitations release notes`_. .. _DPDK release notes: - https://doc.dpdk.org/guides-23.11/rel_notes/release_23_11.html + https://doc.dpdk.org/guides-24.11/rel_notes/release_24_11.html - Upper bound MTU: DPDK device drivers differ in how the L2 frame for a given MTU value is calculated e.g. i40e driver includes 2 x vlan headers in diff --git a/Documentation/topics/dpdk/phy.rst b/Documentation/topics/dpdk/phy.rst index eefc25613d2..4704ab21c87 100644 --- a/Documentation/topics/dpdk/phy.rst +++ b/Documentation/topics/dpdk/phy.rst @@ -117,7 +117,7 @@ tool:: For more information, refer to the `DPDK drivers documentation`_. -.. _DPDK drivers documentation: https://doc.dpdk.org/guides-23.11/linux_gsg/linux_drivers.html +.. _DPDK drivers documentation: https://doc.dpdk.org/guides-24.11/linux_gsg/linux_drivers.html .. _dpdk-phy-multiqueue: @@ -148,14 +148,14 @@ situation. Some physical NICs can be programmed to put these protocols in a dedicated hardware Rx queue using the rte_flow__ API. -__ https://doc.dpdk.org/guides-23.11/prog_guide/rte_flow.html +__ https://doc.dpdk.org/guides-24.11/prog_guide/rte_flow.html .. warning:: This feature is not compatible with all NICs. Refer to the DPDK `compatibility matrix`__ and vendor documentation for more details. - __ https://doc.dpdk.org/guides-23.11/nics/overview.html + __ https://doc.dpdk.org/guides-24.11/nics/overview.html Rx steering must be enabled for specific protocols per port. The ``rx-steering`` option takes one of the following values: @@ -322,7 +322,7 @@ To hotplug a port with igb_uio in this case, DPDK must be configured to use physical addressing for IOVA mode. For more information regarding IOVA modes in DPDK please refer to the `DPDK IOVA Mode Detection`__. -__ https://doc.dpdk.org/guides-23.11/prog_guide/env_abstraction_layer.html#iova-mode-detection +__ https://doc.dpdk.org/guides-24.11/prog_guide/env_abstraction_layer.html#iova-mode-detection To configure OVS DPDK to use physical addressing for IOVA:: @@ -354,7 +354,7 @@ Representors are multi devices created on top of one PF. For more information, refer to the `DPDK documentation`__. -__ https://doc.dpdk.org/guides-23.11/prog_guide/switch_representation.html#port-representors +__ https://doc.dpdk.org/guides-24.11/prog_guide/switch_representation.html#port-representors Prior to port representors there was a one-to-one relationship between the PF and the eth device. With port representors the relationship becomes one PF to @@ -488,7 +488,7 @@ in the ``options`` column of the ``Interface`` table. kernel netdevice, and be inherited from it when Open vSwitch is restarted, even if the options described in this section are unset from Open vSwitch. -.. _bifurcated drivers: https://doc.dpdk.org/guides-23.11/linux_gsg/linux_drivers.html#bifurcated-driver +.. _bifurcated drivers: https://doc.dpdk.org/guides-24.11/linux_gsg/linux_drivers.html#bifurcated-driver - Configure the VF MAC address:: diff --git a/Documentation/topics/dpdk/vdev.rst b/Documentation/topics/dpdk/vdev.rst index f1f59af5d95..9effe6bd07b 100644 --- a/Documentation/topics/dpdk/vdev.rst +++ b/Documentation/topics/dpdk/vdev.rst @@ -63,4 +63,4 @@ run:: More information on the different types of virtual DPDK PMDs can be found in the `DPDK documentation`__. -__ https://doc.dpdk.org/guides-23.11/nics/overview.html +__ https://doc.dpdk.org/guides-24.11/nics/overview.html diff --git a/Documentation/topics/dpdk/vhost-user.rst b/Documentation/topics/dpdk/vhost-user.rst index 7bba08ac216..3c02738cfcc 100644 --- a/Documentation/topics/dpdk/vhost-user.rst +++ b/Documentation/topics/dpdk/vhost-user.rst @@ -541,4 +541,4 @@ shown with:: Further information can be found in the `DPDK documentation -`__ +`__ diff --git a/Documentation/topics/testing.rst b/Documentation/topics/testing.rst index dcf10a4db2d..b97bf32a9ae 100644 --- a/Documentation/topics/testing.rst +++ b/Documentation/topics/testing.rst @@ -358,7 +358,7 @@ with a mlx5 device:: All tests are skipped if no hugepages are configured. User must look into the DPDK manual to figure out how to `Configure hugepages`_. -.. _Configure hugepages: https://doc.dpdk.org/guides-23.11/linux_gsg/sys_reqs.html +.. _Configure hugepages: https://doc.dpdk.org/guides-24.11/linux_gsg/sys_reqs.html All the features documented under `Unit Tests`_ are available for the DPDK testsuite. diff --git a/Documentation/topics/userspace-tso.rst b/Documentation/topics/userspace-tso.rst index a21bb2b5dee..ae08496bdde 100644 --- a/Documentation/topics/userspace-tso.rst +++ b/Documentation/topics/userspace-tso.rst @@ -46,7 +46,7 @@ datasheet for compatibility. Secondly, the NIC must have an associated DPDK Poll Mode Driver (PMD) which supports `TSO`. For a list of features per PMD, refer to the `DPDK documentation`__. -__ https://doc.dpdk.org/guides-23.11/nics/overview.html +__ https://doc.dpdk.org/guides-24.11/nics/overview.html Enabling TSO ~~~~~~~~~~~~ diff --git a/NEWS b/NEWS index 6e3f56d731e..7127249f2db 100644 --- a/NEWS +++ b/NEWS @@ -24,7 +24,7 @@ Post-v3.4.0 and datapath flow dumps and displaying them in several different formats. - DPDK: - * OVS validated with DPDK 23.11.2. + * Add support for DPDK 24.11. v3.4.0 - 15 Aug 2024 diff --git a/debian/control.in b/debian/control.in index 6737672d1ae..47b1f8cdd6e 100644 --- a/debian/control.in +++ b/debian/control.in @@ -21,7 +21,7 @@ Build-Depends: iproute2, libcap-ng-dev, libdbus-1-dev [amd64 i386 ppc64el arm64], -# DPDK_NETDEV libdpdk-dev (>= 23.11) [amd64 i386 ppc64el arm64], +# DPDK_NETDEV libdpdk-dev (>= 24.11) [amd64 i386 ppc64el arm64], libnuma-dev [amd64 i386 ppc64el arm64], libpcap-dev [amd64 i386 ppc64el arm64], libssl-dev, diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c index 1a6e100ffb3..b820aa60e34 100644 --- a/lib/netdev-offload-dpdk.c +++ b/lib/netdev-offload-dpdk.c @@ -530,15 +530,15 @@ dump_flow_pattern(struct ds *s, if (!ipv6_mask) { ipv6_mask = &rte_flow_item_ipv6_mask; } - memcpy(&addr, ipv6_spec->hdr.src_addr, sizeof addr); - memcpy(&mask, ipv6_mask->hdr.src_addr, sizeof mask); + memcpy(&addr, &ipv6_spec->hdr.src_addr, sizeof addr); + memcpy(&mask, &ipv6_mask->hdr.src_addr, sizeof mask); ipv6_string_mapped(addr_str, &addr); ipv6_string_mapped(mask_str, &mask); DUMP_PATTERN_ITEM(mask, false, "src", "%s", addr_str, mask_str, ""); - memcpy(&addr, ipv6_spec->hdr.dst_addr, sizeof addr); - memcpy(&mask, ipv6_mask->hdr.dst_addr, sizeof mask); + memcpy(&addr, &ipv6_spec->hdr.dst_addr, sizeof addr); + memcpy(&mask, &ipv6_mask->hdr.dst_addr, sizeof mask); ipv6_string_mapped(addr_str, &addr); ipv6_string_mapped(mask_str, &mask); DUMP_PATTERN_ITEM(mask, false, "dst", "%s", @@ -695,10 +695,10 @@ dump_vxlan_encap(struct ds *s, const struct rte_flow_item *items) struct in6_addr addr; ds_put_cstr(s, "ip-src "); - memcpy(&addr, ipv6->hdr.src_addr, sizeof addr); + memcpy(&addr, &ipv6->hdr.src_addr, sizeof addr); ipv6_format_mapped(&addr, s); ds_put_cstr(s, " ip-dst "); - memcpy(&addr, ipv6->hdr.dst_addr, sizeof addr); + memcpy(&addr, &ipv6->hdr.dst_addr, sizeof addr); ipv6_format_mapped(&addr, s); ds_put_cstr(s, " "); } @@ -834,7 +834,7 @@ dump_flow_action(struct ds *s, struct ds *s_extra, struct in6_addr addr; ds_put_cstr(s, "ipv6_addr "); - memcpy(&addr, set_ipv6->ipv6_addr, sizeof addr); + memcpy(&addr, &set_ipv6->ipv6_addr, sizeof addr); ipv6_format_addr(&addr, s); ds_put_cstr(s, " "); } @@ -1210,18 +1210,18 @@ parse_tnl_ip_match(struct flow_patterns *patterns, spec->hdr.hop_limits = match->flow.tunnel.ip_ttl; spec->hdr.vtc_flow = htonl((uint32_t) match->flow.tunnel.ip_tos << RTE_IPV6_HDR_TC_SHIFT); - memcpy(spec->hdr.src_addr, &match->flow.tunnel.ipv6_src, + memcpy(&spec->hdr.src_addr, &match->flow.tunnel.ipv6_src, sizeof spec->hdr.src_addr); - memcpy(spec->hdr.dst_addr, &match->flow.tunnel.ipv6_dst, + memcpy(&spec->hdr.dst_addr, &match->flow.tunnel.ipv6_dst, sizeof spec->hdr.dst_addr); mask->hdr.proto = UINT8_MAX; mask->hdr.hop_limits = match->wc.masks.tunnel.ip_ttl; mask->hdr.vtc_flow = htonl((uint32_t) match->wc.masks.tunnel.ip_tos << RTE_IPV6_HDR_TC_SHIFT); - memcpy(mask->hdr.src_addr, &match->wc.masks.tunnel.ipv6_src, + memcpy(&mask->hdr.src_addr, &match->wc.masks.tunnel.ipv6_src, sizeof mask->hdr.src_addr); - memcpy(mask->hdr.dst_addr, &match->wc.masks.tunnel.ipv6_dst, + memcpy(&mask->hdr.dst_addr, &match->wc.masks.tunnel.ipv6_dst, sizeof mask->hdr.dst_addr); consumed_masks->tunnel.ip_tos = 0; @@ -1532,9 +1532,9 @@ parse_flow_match(struct netdev *netdev, spec->hdr.hop_limits = match->flow.nw_ttl; spec->hdr.vtc_flow = htonl((uint32_t) match->flow.nw_tos << RTE_IPV6_HDR_TC_SHIFT); - memcpy(spec->hdr.src_addr, &match->flow.ipv6_src, + memcpy(&spec->hdr.src_addr, &match->flow.ipv6_src, sizeof spec->hdr.src_addr); - memcpy(spec->hdr.dst_addr, &match->flow.ipv6_dst, + memcpy(&spec->hdr.dst_addr, &match->flow.ipv6_dst, sizeof spec->hdr.dst_addr); if ((match->wc.masks.nw_frag & FLOW_NW_FRAG_ANY) && (match->flow.nw_frag & FLOW_NW_FRAG_ANY)) { @@ -1545,9 +1545,9 @@ parse_flow_match(struct netdev *netdev, mask->hdr.hop_limits = match->wc.masks.nw_ttl; mask->hdr.vtc_flow = htonl((uint32_t) match->wc.masks.nw_tos << RTE_IPV6_HDR_TC_SHIFT); - memcpy(mask->hdr.src_addr, &match->wc.masks.ipv6_src, + memcpy(&mask->hdr.src_addr, &match->wc.masks.ipv6_src, sizeof mask->hdr.src_addr); - memcpy(mask->hdr.dst_addr, &match->wc.masks.ipv6_dst, + memcpy(&mask->hdr.dst_addr, &match->wc.masks.ipv6_dst, sizeof mask->hdr.dst_addr); consumed_masks->nw_ttl = 0; diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch-fedora.spec.in index 2ee5d3e72f7..715cbf7aa75 100644 --- a/rhel/openvswitch-fedora.spec.in +++ b/rhel/openvswitch-fedora.spec.in @@ -73,7 +73,7 @@ BuildRequires: libcap-ng libcap-ng-devel %endif %if %{with dpdk} BuildRequires: libpcap-devel numactl-devel -BuildRequires: dpdk-devel >= 23.11 +BuildRequires: dpdk-devel >= 24.11 Provides: %{name}-dpdk = %{version}-%{release} %endif %if %{with afxdp}