From c0a187635ff97b7571bdbd91e7c768b4e4898825 Mon Sep 17 00:00:00 2001 From: Dengdui Huang Date: Fri, 11 Oct 2024 09:43:58 +0800 Subject: [PATCH] fix UIO resource mapping in secondary process Signed-off-by: Dengdui Huang (cherry picked from commit 995630c7cd13b2dd46372cc3ebe094c662723660) --- ...esource-mapping-in-secondary-process.patch | 75 +++++++++++++++++++ dpdk.spec | 7 +- 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 0046-bus-pci-fix-UIO-resource-mapping-in-secondary-process.patch diff --git a/0046-bus-pci-fix-UIO-resource-mapping-in-secondary-process.patch b/0046-bus-pci-fix-UIO-resource-mapping-in-secondary-process.patch new file mode 100644 index 0000000..948cb62 --- /dev/null +++ b/0046-bus-pci-fix-UIO-resource-mapping-in-secondary-process.patch @@ -0,0 +1,75 @@ +From 9e0a0e38ecaa7efaca9d349737d0a5ef9ca33a57 Mon Sep 17 00:00:00 2001 +From: Zerun Fu +Date: Tue, 2 Jul 2024 15:40:06 +0800 +Subject: [PATCH] bus/pci: fix UIO resource mapping in secondary process + +[ upstream commit 9e0a0e38ecaa7efaca9d349737d0a5ef9ca33a57 ] + +For the primary process, the logic loops all BARs and will skip +the map of BAR with an invalid physical address (0), also will +assign 'uio_res->nb_maps' with the real mapped BARs number. But +for the secondary process, instead of loops all BARs, the logic +using the 'uio_res->nb_map' as index. If the device uses continuous +BARs there will be no problem, whereas if it uses discrete BARs, +it will lead to mapping errors. + +Fix this problem by also loops all BARs and skip the map of BAR +with an invalid physical address in secondary process. + +Fixes: 9b957f378abf ("pci: merge uio functions for linux and bsd") +Cc: stable@dpdk.org + +Signed-off-by: Zerun Fu +Reviewed-by: Chaoyong He +Reviewed-by: Long Wu +Reviewed-by: Peng Zhang +Acked-by: Anatoly Burakov +Reviewed-by: Chenbo Xia +--- + drivers/bus/pci/pci_common_uio.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/drivers/bus/pci/pci_common_uio.c b/drivers/bus/pci/pci_common_uio.c +index ff1b02b6bd..65f72b7cc6 100644 +--- a/drivers/bus/pci/pci_common_uio.c ++++ b/drivers/bus/pci/pci_common_uio.c +@@ -26,7 +26,7 @@ EAL_REGISTER_TAILQ(rte_uio_tailq) + static int + pci_uio_map_secondary(struct rte_pci_device *dev) + { +- int fd, i, j; ++ int fd, i = 0, j, res_idx; + struct mapped_pci_resource *uio_res; + struct mapped_pci_res_list *uio_res_list = + RTE_TAILQ_CAST(rte_uio_tailq.head, mapped_pci_res_list); +@@ -37,7 +37,15 @@ pci_uio_map_secondary(struct rte_pci_device *dev) + if (rte_pci_addr_cmp(&uio_res->pci_addr, &dev->addr)) + continue; + +- for (i = 0; i != uio_res->nb_maps; i++) { ++ /* Map all BARs */ ++ for (res_idx = 0; res_idx != PCI_MAX_RESOURCE; res_idx++) { ++ /* skip empty BAR */ ++ if (dev->mem_resource[res_idx].phys_addr == 0) ++ continue; ++ ++ if (i >= uio_res->nb_maps) ++ return -1; ++ + /* + * open devname, to mmap it + */ +@@ -70,7 +78,9 @@ pci_uio_map_secondary(struct rte_pci_device *dev) + } + return -1; + } +- dev->mem_resource[i].addr = mapaddr; ++ dev->mem_resource[res_idx].addr = mapaddr; ++ ++ i++; + } + return 0; + } +-- +2.21.0 + diff --git a/dpdk.spec b/dpdk.spec index baf6df1..2b8f415 100644 --- a/dpdk.spec +++ b/dpdk.spec @@ -11,7 +11,7 @@ Name: dpdk Version: 23.11 -Release: 22 +Release: 23 URL: http://dpdk.org Source: https://fast.dpdk.org/rel/dpdk-%{version}.tar.xz @@ -72,6 +72,8 @@ Patch9037: 0043-remove-symbol-for-examples-and-app.patch Patch6044: 0044-net-hns3-support-more-VLAN-fields-matching.patch Patch6045: 0045-net-hns3-add-Rx-DMA-address-align-check.patch +Patch6046: 0046-bus-pci-fix-UIO-resource-mapping-in-secondary-process.patch + BuildRequires: meson BuildRequires: python3-pyelftools BuildRequires: diffutils @@ -275,6 +277,9 @@ fi /usr/sbin/depmod %changelog +* Fri Oct 11 2024 huangdengdui - 23.11-23 + Fix UIO resource mapping in secondary process + * Wed Oct 09 2024 lifeifei - 23.11-22 create weak dependency for ko files -- Gitee