[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210621165230.3.I7accc008905590bb2b46f40f91a4aeda5b378007@changeid>
Date: Mon, 21 Jun 2021 16:52:45 -0700
From: Douglas Anderson <dianders@...omium.org>
To: gregkh@...uxfoundation.org, rafael@...nel.org,
rafael.j.wysocki@...el.com, will@...nel.org, robin.murphy@....com,
joro@...tes.org, bjorn.andersson@...aro.org,
ulf.hansson@...aro.org, adrian.hunter@...el.com,
bhelgaas@...gle.com
Cc: robdclark@...omium.org, linux-arm-msm@...r.kernel.org,
linux-pci@...r.kernel.org, quic_c_gdjako@...cinc.com,
iommu@...ts.linux-foundation.org, sonnyrao@...omium.org,
saiprakash.ranjan@...eaurora.org, linux-mmc@...r.kernel.org,
vbadigan@...eaurora.org, rajatja@...gle.com, saravanak@...gle.com,
joel@...lfernandes.org, Douglas Anderson <dianders@...omium.org>,
linux-kernel@...r.kernel.org
Subject: [PATCH 3/6] PCI: Indicate that we want to force strict DMA for untrusted devices
At the moment the generic IOMMU framework reaches into the PCIe device
to check the "untrusted" state and uses this information to figure out
if it should be running the IOMMU in strict or non-strict mode. Let's
instead set the new boolean in "struct device" to indicate when we
want forced strictness.
NOTE: we still continue to set the "untrusted" bit in PCIe since that
apparently is used for more than just IOMMU strictness. It probably
makes sense for a later patchset to clarify all of the other needs we
have for "untrusted" PCIe devices (perhaps add more booleans into the
"struct device") so we can fully eliminate the need for the IOMMU
framework to reach into a PCIe device.
Signed-off-by: Douglas Anderson <dianders@...omium.org>
---
drivers/pci/probe.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 275204646c68..8d81f0fb3e50 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1572,8 +1572,10 @@ static void set_pcie_untrusted(struct pci_dev *dev)
* untrusted as well.
*/
parent = pci_upstream_bridge(dev);
- if (parent && (parent->untrusted || parent->external_facing))
+ if (parent && (parent->untrusted || parent->external_facing)) {
dev->untrusted = true;
+ dev->dev.force_strict_iommu = true;
+ }
}
/**
--
2.32.0.288.g62a8d224e6-goog
Powered by blists - more mailing lists