patch 'common/mlx5: adjust fork call with new kernel API' has been queued to stable release 20.11.9

luca.boccassi at gmail.com luca.boccassi at gmail.com
Wed Jun 28 16:10:46 CEST 2023


Hi,

FYI, your patch has been queued to stable release 20.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 06/30/23. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable

This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/893798a07c221da3e952d13a66b4449539cc3412

Thanks.

Luca Boccassi

---
>From 893798a07c221da3e952d13a66b4449539cc3412 Mon Sep 17 00:00:00 2001
From: Erez Ferber <erezf at nvidia.com>
Date: Wed, 24 May 2023 15:01:40 +0300
Subject: [PATCH] common/mlx5: adjust fork call with new kernel API

[ upstream commit 42f113c53cbbbc4585ad68b4d2a8aa9bddad23da ]

While doing process fork() the operating system remaps all the parent
process's memory to the address space of the child process and activates
the Copy-on-Write mechanics - it duplicates physical pages once memory
writing happens in the child process. Sometimes memory duplication is
not allowed - for example, if the page contains hardware queue
descriptors. To handle similar issues the rdma-core library should be
prepared for forking.

The ibv_fork_init() prepares the library to track all the related memory
and prevent it from forking using madvise() system API. This approach
allows fork, but not all the memory is forked to the child process and,
application should care not to touch pages where the parent application
allocated the rdma-core objects.

The newer kernels propose an option of copy-on-fork for DMA pages and
tracking all the memory and disabling it for the forking is no longer
needed. The new API routine ibv_is_fork_initialized() should be involved
to decide if library initialization for forking is required.

Fixes: 0e83b8e536c1 ("net/mlx5: move rdma-core calls to separate file")

Signed-off-by: Erez Ferber <erezf at nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo at nvidia.com>
---
 drivers/common/mlx5/linux/meson.build | 2 ++
 drivers/common/mlx5/linux/mlx5_glue.c | 4 ++++
 2 files changed, 6 insertions(+)

diff --git a/drivers/common/mlx5/linux/meson.build b/drivers/common/mlx5/linux/meson.build
index 43d70c1324..e000bbb211 100644
--- a/drivers/common/mlx5/linux/meson.build
+++ b/drivers/common/mlx5/linux/meson.build
@@ -190,6 +190,8 @@ has_sym_args = [
         'mlx5dv_dr_action_create_aso' ],
         [ 'HAVE_MLX5_IBV_REG_MR_IOVA', 'infiniband/verbs.h',
             'ibv_reg_mr_iova' ],
+        [ 'HAVE_IBV_FORK_UNNEEDED', 'infiniband/verbs.h',
+            'ibv_is_fork_initialized'],
 ]
 config = configuration_data()
 foreach arg:has_sym_args
diff --git a/drivers/common/mlx5/linux/mlx5_glue.c b/drivers/common/mlx5/linux/mlx5_glue.c
index 97ac5d3b5e..c1aae60478 100644
--- a/drivers/common/mlx5/linux/mlx5_glue.c
+++ b/drivers/common/mlx5/linux/mlx5_glue.c
@@ -19,6 +19,10 @@
 static int
 mlx5_glue_fork_init(void)
 {
+#ifdef HAVE_IBV_FORK_UNNEEDED
+	if (ibv_is_fork_initialized() == IBV_FORK_UNNEEDED)
+		return 0; /* ibv_fork_init() not needed */
+#endif
 	return ibv_fork_init();
 }
 
-- 
2.39.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2023-06-28 11:40:08.996947261 +0100
+++ 0022-common-mlx5-adjust-fork-call-with-new-kernel-API.patch	2023-06-28 11:40:08.092028248 +0100
@@ -1 +1 @@
-From 42f113c53cbbbc4585ad68b4d2a8aa9bddad23da Mon Sep 17 00:00:00 2001
+From 893798a07c221da3e952d13a66b4449539cc3412 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 42f113c53cbbbc4585ad68b4d2a8aa9bddad23da ]
+
@@ -26 +27,0 @@
-Cc: stable at dpdk.org
@@ -36 +37 @@
-index 718da020f7..15edc13041 100644
+index 43d70c1324..e000bbb211 100644
@@ -39,4 +40,4 @@
-@@ -221,6 +221,8 @@ has_sym_args = [
-             'mlx5dv_dr_action_create_dest_root_table' ],
-         [ 'HAVE_MLX5DV_CREATE_STEERING_ANCHOR', 'infiniband/mlx5dv.h',
-             'mlx5dv_create_steering_anchor'],
+@@ -190,6 +190,8 @@ has_sym_args = [
+         'mlx5dv_dr_action_create_aso' ],
+         [ 'HAVE_MLX5_IBV_REG_MR_IOVA', 'infiniband/verbs.h',
+             'ibv_reg_mr_iova' ],
@@ -46,2 +47,2 @@
- if  libmtcr_ul_found
-     has_sym_args += [
+ config = configuration_data()
+ foreach arg:has_sym_args
@@ -49 +50 @@
-index 3497aa940d..6f858db8fc 100644
+index 97ac5d3b5e..c1aae60478 100644


More information about the stable mailing list