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

Xueming Li xuemingl at nvidia.com
Mon Aug 12 14:50:15 CEST 2024


Hi,

FYI, your patch has been queued to stable release 23.11.2

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/14/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://git.dpdk.org/dpdk-stable/log/?h=23.11-staging

This queued commit can be viewed at:
https://git.dpdk.org/dpdk-stable/commit/?h=23.11-staging&id=a5375f449286d4b81e5fc9f4af51054e24aac361

Thanks.

Xueming Li <xuemingl at nvidia.com>

---
>From a5375f449286d4b81e5fc9f4af51054e24aac361 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
Cc: Xueming Li <xuemingl at nvidia.com>

[ 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 | 32 ++++++++++++++++----------------
 2 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/drivers/bus/pci/linux/pci_uio.c b/drivers/bus/pci/linux/pci_uio.c
index 97d740dfe5..4afda97858 100644
--- a/drivers/bus/pci/linux/pci_uio.c
+++ b/drivers/bus/pci/linux/pci_uio.c
@@ -237,7 +237,7 @@ 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) {
 		RTE_LOG(ERR, EAL, "Cannot open %s: %s\n",
@@ -275,6 +275,9 @@ 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);
 	if (*uio_res == NULL) {
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
@@ -106,15 +106,15 @@ pci_uio_map_resource(struct rte_pci_device *dev)
 	if (rte_intr_dev_fd_set(dev->intr_handle, -1))
 		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);
 	if (ret)
 		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++) {
 		/* skip empty BAR */
@@ -230,6 +230,18 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)
 	if (uio_res == NULL)
 		return;
 
+	/* close fd */
+	if (rte_intr_fd_get(dev->intr_handle) >= 0)
+		close(rte_intr_fd_get(dev->intr_handle));
+	uio_cfg_fd = rte_intr_dev_fd_get(dev->intr_handle);
+	if (uio_cfg_fd >= 0) {
+		close(uio_cfg_fd);
+		rte_intr_dev_fd_set(dev->intr_handle, -1);
+	}
+
+	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);
@@ -241,16 +253,4 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)
 
 	/* free uio resource */
 	rte_free(uio_res);
-
-	/* close fd if in primary process */
-	if (rte_intr_fd_get(dev->intr_handle) >= 0)
-		close(rte_intr_fd_get(dev->intr_handle));
-	uio_cfg_fd = rte_intr_dev_fd_get(dev->intr_handle);
-	if (uio_cfg_fd >= 0) {
-		close(uio_cfg_fd);
-		rte_intr_dev_fd_set(dev->intr_handle, -1);
-	}
-
-	rte_intr_fd_set(dev->intr_handle, -1);
-	rte_intr_type_set(dev->intr_handle, RTE_INTR_HANDLE_UNKNOWN);
 }
-- 
2.34.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2024-08-12 20:44:06.865533453 +0800
+++ 0138-bus-pci-fix-FD-in-secondary-process.patch	2024-08-12 20:44:02.555069385 +0800
@@ -1 +1 @@
-From 847d78fb9530fff401bf167298aad22766a1f04a Mon Sep 17 00:00:00 2001
+From a5375f449286d4b81e5fc9f4af51054e24aac361 Mon Sep 17 00:00:00 2001
@@ -4,0 +5,3 @@
+Cc: Xueming Li <xuemingl at nvidia.com>
+
+[ upstream commit 847d78fb9530fff401bf167298aad22766a1f04a ]
@@ -16 +18,0 @@
-Cc: stable at dpdk.org
@@ -30 +32 @@
-index f7d990d33f..4c1d3327a9 100644
+index 97d740dfe5..4afda97858 100644
@@ -33 +35 @@
-@@ -234,7 +234,7 @@ pci_uio_alloc_resource(struct rte_pci_device *dev,
+@@ -237,7 +237,7 @@ pci_uio_alloc_resource(struct rte_pci_device *dev,
@@ -41,2 +43,2 @@
- 		PCI_LOG(ERR, "Cannot open %s: %s", devname, strerror(errno));
-@@ -270,6 +270,9 @@ pci_uio_alloc_resource(struct rte_pci_device *dev,
+ 		RTE_LOG(ERR, EAL, "Cannot open %s: %s\n",
+@@ -275,6 +275,9 @@ pci_uio_alloc_resource(struct rte_pci_device *dev,
@@ -53 +55 @@
-index 65f72b7cc6..30503bd23a 100644
+index f44ccdf27c..a06378b239 100644
@@ -56 +58 @@
-@@ -105,15 +105,15 @@ pci_uio_map_resource(struct rte_pci_device *dev)
+@@ -106,15 +106,15 @@ pci_uio_map_resource(struct rte_pci_device *dev)
@@ -76 +78 @@
-@@ -225,6 +225,18 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)
+@@ -230,6 +230,18 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)
@@ -95 +97 @@
-@@ -236,16 +248,4 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)
+@@ -241,16 +253,4 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)


More information about the stable mailing list