Hi,
We have two customers reported the issue "DMAR: Setup RID2PASID failed",The IOMMU driver shares the pasid table for PCI alias devices. When the RID2PASID entry of the shared pasid table has been filled by the first device, the subsequent devices will encounter the "DMAR: Setup RID2PASID failed" failure as the pasid entry has already been marke as present. As the result, the IOMMU probing process will be aborted. This fixes it by skipping RID2PASID setting if the pasid entry has been populated. This works because the IOMMU core ensures that only the same IOMMU domain can be attached to all PCI alias devices at the same time. Therefore the subsequent devices just try to setup the RID2PASID entry with the same domain, which is negligible.
Two ASPEED devices locate behind one PCIe-PCI bridge and iommu SM, PT mode is enabled. Most
Interesting thing is the second device is only used by BIOS, and BIOS left it to OS without shutting down,
and it is useless for OS. Is there
practical case multi devices behind PCIe-PCI bridge share the
same
PASID entry without any security
concern ? these two customer's case is not.
Thanks,
Ethan
Fixes: ef848b7e5a6a0 ("iommu/vt-d: Setup pasid entry for RID2PASID support")
Reported-by: Chenyi Qiang <chenyi.qiang@intel.com>
Cc: stable@vger.kernel.org
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
---
drivers/iommu/intel/iommu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 44016594831d..b9966c01a2a2 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -2564,7 +2564,7 @@ static int domain_add_dev_info(struct dmar_domain *domain, struct device *dev)
ret = intel_pasid_setup_second_level(iommu, domain,
dev, PASID_RID2PASID);
spin_unlock_irqrestore(&iommu->lock, flags);
- if (ret) {
+ if (ret && ret != -EBUSY) {
dev_err(dev, "Setup RID2PASID failed\n");
dmar_remove_one_dev_info(dev);
return ret;
-- AFAIK = As Far As I Know AKA = Also Known As ASAP = As Soon As Possible BTW = By The Way (used to introduce some piece of information or question that is on a different topic but may be of interest) COLA = comp.os.linux.announce (newsgroup) ETA = Estimated Time of Arrival FAQ = Frequently Asked Question FUD = Fear, Uncertainty and Doubt FWIW = For What It's Worth FYI = For Your Information IANAL = I Am Not A Lawyer IIRC = If I Recall Correctly IMHO = In My Humble Opinion IMNSHO = In My Not-So-Humble Opinion IOW = In Other Words LART = Luser Attitude Readjustment Tool (quoting Al Viro: "Anything you use to forcibly implant the clue into the place where luser's head is") LUSER = pronounced "loser", a user who is considered to indeed be a loser (idiot, drongo, wanker, dim-wit, fool, etc.) OTOH = On The Other Hand PEBKAC = Problem Exists Between Keyboard And Chair ROTFL = Rolling On The Floor Laughing RSN = Real Soon Now RTFM = Read The Fucking Manual (original definition) or Read The Fine Manual (if you want to pretend to be polite) TANSTAAFL = There Ain't No Such Thing As A Free Lunch (contributed by David Niemi, quoting Robert Heinlein in his science fiction novel 'The Moon is a Harsh Mistress') THX = Thanks (thank you) TIA = Thanks In Advance WIP = Work In Progress WRT = With Respect To