lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20241107-pci_acs_fix-v1-1-185a2462a571@quicinc.com>
Date: Thu, 7 Nov 2024 13:29:15 +0530
From: Pavankumar Kondeti <quic_pkondeti@...cinc.com>
To: Joerg Roedel <joro@...tes.org>, Will Deacon <will@...nel.org>,
        "Robin
 Murphy" <robin.murphy@....com>,
        Bjorn Helgaas <bhelgaas@...gle.com>,
        "Greg
 Kroah-Hartman" <gregkh@...uxfoundation.org>
CC: Joerg Roedel <jroedel@...e.de>, Rob Herring <robh@...nel.org>,
        "Marek
 Szyprowski" <m.szyprowski@...sung.com>,
        Anders Roxell
	<anders.roxell@...aro.org>, <iommu@...ts.linux.dev>,
        <linux-kernel@...r.kernel.org>, <linux-pci@...r.kernel.org>,
        Xingang Wang
	<wangxingang5@...wei.com>,
        Pavankumar Kondeti <quic_pkondeti@...cinc.com>
Subject: [PATCH RESEND] iommu/of: Fix pci_request_acs() before enumerating
 PCI devices

From: Xingang Wang <wangxingang5@...wei.com>

When booting with devicetree, the pci_request_acs() is called after the
enumeration and initialization of PCI devices, thus the ACS is not
enabled. And ACS should be enabled when IOMMU is detected for the
PCI host bridge, so add check for IOMMU before probe of PCI host and call
pci_request_acs() to make sure ACS will be enabled when enumerating PCI
devices.

Fixes: 6bf6c24720d33 ("iommu/of: Request ACS from the PCI core when configuring IOMMU linkage")
Signed-off-by: Xingang Wang <wangxingang5@...wei.com>
Signed-off-by: Pavankumar Kondeti <quic_pkondeti@...cinc.com>
---
Earlier this patch made it to linux-next but got dropped later as it
broke PCI on ARM Juno R1 board. AFAICT, this issue is never root caused,
so resending this patch to get attention again.

https://lore.kernel.org/all/1621566204-37456-1-git-send-email-wangxingang5@huawei.com/

The original problem that is being fixed by this patch still exists. In
my use case, all the PCI VF(s) assigned to a VM are sharing the same
group since these functions are attached under a Multi function PCIe root port 
emulated by the QEMU. This patch fixes that problem.
---
 drivers/iommu/of_iommu.c | 1 -
 drivers/pci/of.c         | 8 +++++++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c
index e7a6a1611d19..f19db52388f5 100644
--- a/drivers/iommu/of_iommu.c
+++ b/drivers/iommu/of_iommu.c
@@ -141,7 +141,6 @@ int of_iommu_configure(struct device *dev, struct device_node *master_np,
 			.np = master_np,
 		};
 
-		pci_request_acs();
 		err = pci_for_each_dma_alias(to_pci_dev(dev),
 					     of_pci_iommu_init, &info);
 		of_pci_check_device_ats(dev, master_np);
diff --git a/drivers/pci/of.c b/drivers/pci/of.c
index dacea3fc5128..dc90f4e45dd3 100644
--- a/drivers/pci/of.c
+++ b/drivers/pci/of.c
@@ -637,9 +637,15 @@ static int pci_parse_request_of_pci_ranges(struct device *dev,
 
 int devm_of_pci_bridge_init(struct device *dev, struct pci_host_bridge *bridge)
 {
-	if (!dev->of_node)
+	struct device_node *node = dev->of_node;
+
+	if (!node)
 		return 0;
 
+	/* Detect IOMMU and make sure ACS will be enabled */
+	if (of_property_read_bool(node, "iommu-map"))
+		pci_request_acs();
+
 	bridge->swizzle_irq = pci_common_swizzle;
 	bridge->map_irq = of_irq_parse_and_map_pci;
 

---
base-commit: 59b723cd2adbac2a34fc8e12c74ae26ae45bf230
change-id: 20241107-pci_acs_fix-2239e0fb1768

Best regards,
-- 
Pavankumar Kondeti <quic_pkondeti@...cinc.com>


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ