patch 'bus/pci: fix FD in secondary process' has been queued to stable release 21.11.8

Kevin Traynor ktraynor at redhat.com
Fri Aug 23 18:19:15 CEST 2024


Hi,

FYI, your patch has been queued to stable release 21.11.8

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 08/28/24. 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/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/79e957cc34ae379d33847bb0e5e652b9ddbde823

Thanks.

Kevin

---
>From 79e957cc34ae379d33847bb0e5e652b9ddbde823 Mon Sep 17 00:00:00 2001
From: Zerun Fu <zerun.fu at corigine.com>
Date: Tue, 2 Jul 2024 15:40:07 +0800
Subject: [PATCH] bus/pci: fix FD in secondary process

[ upstream commit 847d78fb9530fff401bf167298aad22766a1f04a ]

In the previous logic the 'fd' was only saved in the primary process,
but for some devices this value is also used in the secondary logic.

For example, the call of 'rte_pci_find_ext_capability()' will fail in
the secondary process.

Fix this problem by getting and saving the value of 'fd' also in the
secondary process logic.

Fixes: 9b957f378abf ("pci: merge uio functions for linux and bsd")

Signed-off-by: Zerun Fu <zerun.fu at corigine.com>
Reviewed-by: Chaoyong He <chaoyong.he at corigine.com>
Reviewed-by: Long Wu <long.wu at corigine.com>
Reviewed-by: Peng Zhang <peng.zhang at corigine.com>
Acked-by: Anatoly Burakov <anatoly.burakov at intel.com>
Reviewed-by: Chenbo Xia <chenbox at nvidia.com>
---
 drivers/bus/pci/linux/pci_uio.c  |  5 ++++-
 drivers/bus/pci/pci_common_uio.c | 34 ++++++++++++++++----------------
 2 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/drivers/bus/pci/linux/pci_uio.c b/drivers/bus/pci/linux/pci_uio.c
index d52125e49b..81a1ed6fa0 100644
--- a/drivers/bus/pci/linux/pci_uio.c
+++ b/drivers/bus/pci/linux/pci_uio.c
@@ -246,5 +246,5 @@ pci_uio_alloc_resource(struct rte_pci_device *dev,
 	snprintf(devname, sizeof(devname), "/dev/uio%u", uio_num);
 
-	/* save fd if in primary process */
+	/* save fd */
 	fd = open(devname, O_RDWR);
 	if (fd < 0) {
@@ -284,4 +284,7 @@ pci_uio_alloc_resource(struct rte_pci_device *dev,
 	}
 
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+		return 0;
+
 	/* allocate the mapping details for secondary processes*/
 	*uio_res = rte_zmalloc("UIO_RES", sizeof(**uio_res), 0);
diff --git a/drivers/bus/pci/pci_common_uio.c b/drivers/bus/pci/pci_common_uio.c
index f44ccdf27c..a06378b239 100644
--- a/drivers/bus/pci/pci_common_uio.c
+++ b/drivers/bus/pci/pci_common_uio.c
@@ -107,8 +107,4 @@ pci_uio_map_resource(struct rte_pci_device *dev)
 		return -1;
 
-	/* secondary processes - use already recorded details */
-	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
-		return pci_uio_map_secondary(dev);
-
 	/* allocate uio resource */
 	ret = pci_uio_alloc_resource(dev, &uio_res);
@@ -116,4 +112,8 @@ pci_uio_map_resource(struct rte_pci_device *dev)
 		return ret;
 
+	/* secondary processes - use already recorded details */
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+		return pci_uio_map_secondary(dev);
+
 	/* Map all BARs */
 	for (i = 0; i != PCI_MAX_RESOURCE; i++) {
@@ -231,17 +231,5 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)
 		return;
 
-	/* secondary processes - just free maps */
-	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
-		return pci_uio_unmap(uio_res);
-
-	TAILQ_REMOVE(uio_res_list, uio_res, next);
-
-	/* unmap all resources */
-	pci_uio_unmap(uio_res);
-
-	/* free uio resource */
-	rte_free(uio_res);
-
-	/* close fd if in primary process */
+	/* close fd */
 	if (rte_intr_fd_get(dev->intr_handle) >= 0)
 		close(rte_intr_fd_get(dev->intr_handle));
@@ -254,3 +242,15 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)
 	rte_intr_fd_set(dev->intr_handle, -1);
 	rte_intr_type_set(dev->intr_handle, RTE_INTR_HANDLE_UNKNOWN);
+
+	/* secondary processes - just free maps */
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+		return pci_uio_unmap(uio_res);
+
+	TAILQ_REMOVE(uio_res_list, uio_res, next);
+
+	/* unmap all resources */
+	pci_uio_unmap(uio_res);
+
+	/* free uio resource */
+	rte_free(uio_res);
 }
-- 
2.46.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2024-08-23 17:18:13.518594406 +0100
+++ 0127-bus-pci-fix-FD-in-secondary-process.patch	2024-08-23 17:18:09.891430703 +0100
@@ -1 +1 @@
-From 847d78fb9530fff401bf167298aad22766a1f04a Mon Sep 17 00:00:00 2001
+From 79e957cc34ae379d33847bb0e5e652b9ddbde823 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 847d78fb9530fff401bf167298aad22766a1f04a ]
+
@@ -16 +17,0 @@
-Cc: stable at dpdk.org
@@ -30 +31 @@
-index f7d990d33f..4c1d3327a9 100644
+index d52125e49b..81a1ed6fa0 100644
@@ -33 +34 @@
-@@ -235,5 +235,5 @@ pci_uio_alloc_resource(struct rte_pci_device *dev,
+@@ -246,5 +246,5 @@ pci_uio_alloc_resource(struct rte_pci_device *dev,
@@ -40 +41 @@
-@@ -271,4 +271,7 @@ pci_uio_alloc_resource(struct rte_pci_device *dev,
+@@ -284,4 +284,7 @@ pci_uio_alloc_resource(struct rte_pci_device *dev,
@@ -49 +50 @@
-index 65f72b7cc6..30503bd23a 100644
+index f44ccdf27c..a06378b239 100644
@@ -52 +53 @@
-@@ -106,8 +106,4 @@ pci_uio_map_resource(struct rte_pci_device *dev)
+@@ -107,8 +107,4 @@ pci_uio_map_resource(struct rte_pci_device *dev)
@@ -61 +62 @@
-@@ -115,4 +111,8 @@ pci_uio_map_resource(struct rte_pci_device *dev)
+@@ -116,4 +112,8 @@ pci_uio_map_resource(struct rte_pci_device *dev)
@@ -70 +71 @@
-@@ -226,17 +226,5 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)
+@@ -231,17 +231,5 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)
@@ -89 +90 @@
-@@ -249,3 +237,15 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)
+@@ -254,3 +242,15 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)



More information about the stable mailing list