Rebase to 23.11

Use -Denable_libs, update internal dependencies (vhost requires
cryptodev and dmadev, net/iavf requires security).
Filter generated manuals and package them in the -devel rpm.

Note:
- switched to https URIs,
- mandb is hidden through the build to avoid a call to it in the
  buildroot,
- documentation artefacts were not correctly removed from the buildroot,
- net/mlx4 has been disabled since it is not supported anymore,
- a leftover patch from 21.11 support is removed,

Resolves: RHEL-19571
Signed-off-by: David Marchand <david.marchand@redhat.com>
This commit is contained in:
David Marchand 2023-11-21 10:19:03 +01:00
parent 54f868467a
commit 9e2f315c92
6 changed files with 44 additions and 303 deletions

1
.gitignore vendored
View File

@ -13,3 +13,4 @@
/dpdk-21.11.1.tar.xz
/dpdk-21.11.2.tar.xz
/dpdk-22.11.tar.xz
/dpdk-23.11.tar.xz

View File

@ -1,135 +0,0 @@
From 3812e23f6b19d7e1e850094d1a5a04b7403d194f Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Tue, 13 Dec 2022 10:18:37 +0100
Subject: [PATCH] net/i40e: revert link status check on device start
[ upstream commit a8ca8edf8c076c765c6d142ab4664a1f61414233 ]
The mentioned changes broke existing applications when the link status
of i40e ports is down at the time the port is started.
Revert those changes, the original issue will need a different fix.
Fixes: a4ba77367923 ("net/i40e: enable maximum frame size at port level")
Fixes: 2184f7cdeeaa ("net/i40e: fix max frame size config at port level")
Fixes: 719469f13b11 ("net/i40e: fix jumbo frame Rx with X722")
Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2173794
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Simei Su <simei.su@intel.com>
---
drivers/net/i40e/i40e_ethdev.c | 50 +++++-----------------------------
1 file changed, 7 insertions(+), 43 deletions(-)
diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 7726a89d99..a982e42264 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -387,7 +387,6 @@ static int i40e_set_default_mac_addr(struct rte_eth_dev *dev,
struct rte_ether_addr *mac_addr);
static int i40e_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);
-static void i40e_set_mac_max_frame(struct rte_eth_dev *dev, uint16_t size);
static int i40e_ethertype_filter_convert(
const struct rte_eth_ethertype_filter *input,
@@ -1711,6 +1710,11 @@ eth_i40e_dev_init(struct rte_eth_dev *dev, void *init_params __rte_unused)
*/
i40e_add_tx_flow_control_drop_filter(pf);
+ /* Set the max frame size to 0x2600 by default,
+ * in case other drivers changed the default value.
+ */
+ i40e_aq_set_mac_config(hw, I40E_FRAME_SIZE_MAX, TRUE, false, 0, NULL);
+
/* initialize RSS rule list */
TAILQ_INIT(&pf->rss_config_list);
@@ -2328,7 +2332,6 @@ i40e_dev_start(struct rte_eth_dev *dev)
uint32_t intr_vector = 0;
struct i40e_vsi *vsi;
uint16_t nb_rxq, nb_txq;
- uint16_t max_frame_size;
hw->adapter_stopped = 0;
@@ -2467,9 +2470,6 @@ i40e_dev_start(struct rte_eth_dev *dev)
"please call hierarchy_commit() "
"before starting the port");
- max_frame_size = dev->data->mtu + I40E_ETH_OVERHEAD;
- i40e_set_mac_max_frame(dev, max_frame_size);
-
return I40E_SUCCESS;
tx_err:
@@ -2809,9 +2809,6 @@ i40e_dev_set_link_down(struct rte_eth_dev *dev)
return i40e_phy_conf_link(hw, abilities, speed, false);
}
-#define CHECK_INTERVAL 100 /* 100ms */
-#define MAX_REPEAT_TIME 10 /* 1s (10 * 100ms) in total */
-
static __rte_always_inline void
update_link_reg(struct i40e_hw *hw, struct rte_eth_link *link)
{
@@ -2878,6 +2875,8 @@ static __rte_always_inline void
update_link_aq(struct i40e_hw *hw, struct rte_eth_link *link,
bool enable_lse, int wait_to_complete)
{
+#define CHECK_INTERVAL 100 /* 100ms */
+#define MAX_REPEAT_TIME 10 /* 1s (10 * 100ms) in total */
uint32_t rep_cnt = MAX_REPEAT_TIME;
struct i40e_link_status link_status;
int status;
@@ -6738,7 +6737,6 @@ i40e_dev_handle_aq_msg(struct rte_eth_dev *dev)
if (!ret)
rte_eth_dev_callback_process(dev,
RTE_ETH_EVENT_INTR_LSC, NULL);
-
break;
default:
PMD_DRV_LOG(DEBUG, "Request %u is not supported yet",
@@ -12123,40 +12121,6 @@ i40e_cloud_filter_qinq_create(struct i40e_pf *pf)
return ret;
}
-static void
-i40e_set_mac_max_frame(struct rte_eth_dev *dev, uint16_t size)
-{
- struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private);
- uint32_t rep_cnt = MAX_REPEAT_TIME;
- struct rte_eth_link link;
- enum i40e_status_code status;
- bool can_be_set = true;
-
- /*
- * I40E_MEDIA_TYPE_BASET link up can be ignored
- * I40E_MEDIA_TYPE_BASET link down that hw->phy.media_type
- * is I40E_MEDIA_TYPE_UNKNOWN
- */
- if (hw->phy.media_type != I40E_MEDIA_TYPE_BASET &&
- hw->phy.media_type != I40E_MEDIA_TYPE_UNKNOWN) {
- do {
- update_link_reg(hw, &link);
- if (link.link_status)
- break;
- rte_delay_ms(CHECK_INTERVAL);
- } while (--rep_cnt);
- can_be_set = !!link.link_status;
- }
-
- if (can_be_set) {
- status = i40e_aq_set_mac_config(hw, size, TRUE, 0, false, NULL);
- if (status != I40E_SUCCESS)
- PMD_DRV_LOG(ERR, "Failed to set max frame size at port level");
- } else {
- PMD_DRV_LOG(ERR, "Set max frame size at port level not applicable on link down");
- }
-}
-
RTE_LOG_REGISTER_SUFFIX(i40e_logtype_init, init, NOTICE);
RTE_LOG_REGISTER_SUFFIX(i40e_logtype_driver, driver, NOTICE);
#ifdef RTE_ETHDEV_DEBUG_RX
--
2.39.2

View File

@ -1,34 +0,0 @@
From 8010a15523e896ca2f2436432602210cab793f87 Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Mon, 25 Jul 2022 22:32:03 +0200
Subject: [PATCH] vhost: fix virtqueue use after free on NUMA reallocation
[ upstream commit 0b2a2ca35037d6a5168f0832c11d9858b8ae946a ]
translate_ring_addresses (via numa_realloc) may change a virtio device and
virtio queue.
The virtqueue object must be refreshed before accessing the lock.
Fixes: 04c27cb673b9 ("vhost: fix unsafe vring addresses modifications")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
lib/vhost/vhost_user.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c
index df780fd7d6..2b45e35d4a 100644
--- a/lib/vhost/vhost_user.c
+++ b/lib/vhost/vhost_user.c
@@ -2575,6 +2575,7 @@ vhost_user_iotlb_msg(struct virtio_net **pdev, struct VhostUserMsg *msg,
if (is_vring_iotlb(dev, vq, imsg)) {
rte_spinlock_lock(&vq->access_lock);
*pdev = dev = translate_ring_addresses(dev, i);
+ vq = dev->virtqueue[i];
rte_spinlock_unlock(&vq->access_lock);
}
}
--
2.37.3

86
README
View File

@ -1,86 +0,0 @@
The RH DPDK Configuration System
================================
Overview
--------
As we're aware, the DPDK configuration is an important thing to manage
well. We have a number of concerns that must be addressed in any
configuration management system.
1. We want to make sure that we have 'conscious' configurations made up
for each platform, and for each DPDK-enabled package
2. We want to make sure that when DPDK project adds a new configuration,
we make a conscious decision about whether we enable that
configuration.
3. We need to make sure that we can accommodate the wacky new
configuration management system coming down the pipe for
DPDK (meson+ninja).
Procedure (High level)
----------------------
Taking some inspiration from the kernel config DPDK packages will use
the following procedure:
1. We generate the DPDK configuration from source (as we do today with
'make T=TEMPLATE config'). This creates a base configuration file.
In this case TEMPLATE is the combination of $arch and $release that
can vary for the package.
2. We generate a sha256 sum from that file (based on a rules engine
described later).
3. We take a hand-built checked-in configuration (dpdk.TEMPLATE.config)
which has a special tag inside containing the required base sha256
sum and compare with the generated sha256 sum.
4. If the comparison succeeds, we overwrite the generated config with
the hand-built config. Proceed building as normal.
5. If the comparison fails, we halt the build. Clearly a new
configuration was introduced which was not considered and needs to be
addressed.
It's important to note that if the default configuration changes, that
will also cause the shasum to change. Even if the default for a
parameter that we override changes, this will trip up this simplistic
version.
SHA Sum
-------
To generate the sha256 sum:
* remove all 'comment' and empty lines
* sort the remaining lines
* calculate the sha sum
This is expressed in bash as a one-liner:
egrep -v ^"$cmnt" $1 | egrep -v ^$ | sort -u | sha256sum | cut -d" " -f1
The new DPDK configuration will be generating into a header file
(rte_config.h), and so some 'forward' consideration was given to making
the comment line as configurable (instead of using straight '#') - hence the
'$cmnt' variable.
The SHA sum will be identified in the 'new' header by the standard ascii
tag format:
# -*- cfg-sha: [a-z0-9]+
Or in the case of a .c file:
/* -*- cfg-sha: [a-z0-9]+ */
Helper scripts
--------------
Included are a set of scripts for DPDK configuration, which replaces
the original setconf functions in the old spec file.
* set_config.sh - A script which copies the new DPDK configuration over the
old one. This validates the sha sum.
* gen_config_group.sh - A script which reads the .spec file for all of the
architectures and generates starting configurations.
Use this script to get a baseline configuration for
modifying.
* configlib.sh - A library for generating and reading SHA sums.

View File

@ -8,8 +8,8 @@
#% define date 20191128
#% define shortcommit0 %(c=%{commit0}; echo ${c:0:7})
%define ver 22.11
%define rel 4
%define ver 23.11
%define rel 1
%define srcname dpdk%(awk -F. '{ if (NF > 2) print "-stable" }' <<<%{version})
@ -23,16 +23,14 @@ Epoch: 2
%endif
URL: http://dpdk.org
%if 0%{?commit0:1}
Source: http://dpdk.org/browse/dpdk/snapshot/dpdk-%{commit0}.tar.xz
Source: https://dpdk.org/browse/dpdk/snapshot/dpdk-%{commit0}.tar.xz
%else
Source: http://fast.dpdk.org/rel/dpdk-%{ver}.tar.xz
Source: https://fast.dpdk.org/rel/dpdk-%{ver}.tar.xz
%endif
# Only needed for creating snapshot tarballs, not used in build itself
Source100: dpdk-snapshot.sh
Patch1: 0001-net-i40e-revert-link-status-check-on-device-start.patch
Summary: Set of libraries and drivers for fast packet processing
#
@ -153,11 +151,11 @@ ENABLED_DRIVERS+=(
bus/vmbus
common/iavf
common/mlx5
common/nfp
net/bnxt
net/enic
net/iavf
net/ice
net/mlx4
net/mlx5
net/netvsc
net/nfp
@ -177,48 +175,40 @@ for driver in "${ENABLED_DRIVERS[@]}"; do
enable_drivers="${enable_drivers:+$enable_drivers,}"$driver
done
# As of 22.11, following libraries can be disabled:
# optional_libs = [
# 'bitratestats',
# 'cfgfile',
# 'flow_classify',
# 'gpudev',
# 'gro',
# 'gso',
# 'kni',
# 'jobstats',
# 'latencystats',
# 'metrics',
# 'node',
# 'pdump',
# 'pipeline',
# 'port',
# 'power',
# 'table',
# 'vhost',
# ]
# If doing any updates, this must be aligned with:
# https://access.redhat.com/articles/3538141
DISABLED_LIBS=(
cfgfile
flow_classify
gpudev
kni
jobstats
node
pipeline
port
power
table
ENABLED_LIBS=(
bbdev
bitratestats
bpf
cmdline
cryptodev
dmadev
gro
gso
hash
ip_frag
latencystats
member
meter
metrics
pcapng
pdump
security
stack
vhost
)
for lib in "${DISABLED_LIBS[@]}"; do
disable_libs="${disable_libs:+$disable_libs,}"$lib
for lib in "${ENABLED_LIBS[@]}"; do
enable_libs="${enable_libs:+$enable_libs,}"$lib
done
ln -s /usr/bin/true mandb
export PATH=$(pwd):$PATH
%meson --includedir=include/dpdk \
--default-library=shared \
-Ddisable_libs="$disable_libs" \
-Ddeveloper_mode=disabled \
-Denable_libs="$enable_libs" \
-Ddrivers_install_subdir=dpdk-pmds \
-Denable_apps="$enable_apps" \
-Denable_docs=true \
@ -235,10 +225,10 @@ for driver in "${ENABLED_DRIVERS[@]}"; do
echo "!!! Could not find $driver in rte_build_config.h, please check dependencies. !!!"
false
done
for lib in "${DISABLED_LIBS[@]}"; do
for lib in "${ENABLED_LIBS[@]}"; do
config_token="RTE_LIB_$(echo "$lib" | tr [a-z/] [A-Z_])"
grep -Fqw "$config_token" */rte_build_config.h || continue
echo "!!! Found $lib in rte_build_config.h. !!!"
! grep -Fqw "$config_token" */rte_build_config.h || continue
echo "!!! Could not find $lib in rte_build_config.h, please check dependencies. !!!"
false
done
%meson_build
@ -248,9 +238,10 @@ done
rm -f %{buildroot}%{_libdir}/*.a
# Taken from debian/rules
rm -f %{docdir}/html/.buildinfo
rm -f %{docdir}/html/objects.inv
rm -rf %{docdir}/html/.doctrees
rm -f %{buildroot}%{docdir}/html/.buildinfo
rm -f %{buildroot}%{docdir}/html/objects.inv
rm -rf %{buildroot}%{docdir}/html/.doctrees
find %{buildroot}%{_datadir}/man/ -type f -a ! -iname "*rte_*" -exec rm {} \;
%files
# BSD
@ -281,6 +272,7 @@ rm -rf %{docdir}/html/.doctrees
%{pmddir}/*.so
%{_libdir}/pkgconfig/libdpdk.pc
%{_libdir}/pkgconfig/libdpdk-libs.pc
%{_datadir}/man
%if %{with examples}
%files examples
%{_bindir}/dpdk-*
@ -293,6 +285,9 @@ rm -rf %{docdir}/html/.doctrees
%endif
%changelog
* Fri Dec 15 2023 David Marchand <david.marchand@redhat.com> - 23.11-1
- Rebase to 23.11 (RHEL-19571)
* Tue Apr 11 2023 David Marchand <david.marchand@redhat.com> - 22.11-4
- Fix MTU regression for net/i40e (#2182799)

View File

@ -1,2 +1,2 @@
SHA512 (dpdk-22.11.tar.xz) = 69dff391bf619c6fa206d856fe85450629046554c7759707b20a862ac66ab40f2c22e485dc41160886be2cdfc0f779c16796235639817dadc3c0844ae9565f59
SHA512 (dpdk-23.11.tar.xz) = e5177d658fca8df55090a92ea1a8932aac5847314fed7c686b8a36e709f34b14c05e68d6c4c433ff5371b67a39c4324b4eefab8c138f417468f57092bf269b4c
SHA512 (pyelftools-0.27.tar.gz) = bb0a00e5500016e3d4f64be0a728e190f84b11a805f78d668b5a74716a30400e6794946f198ef4a3f3b8f64a63deb1b5a96180b09e56b7357b988b28e25fad0a