Hi Jacob, On 7/1/20 5:33 PM, Jacob Pan wrote: > For the unlikely use case where multiple aux domains from the same pdev > are attached to a single guest and then bound to a single process > (thus same PASID) within that guest, we cannot easily support this case > by refcounting the number of users. As there is only one SL page table > per PASID while we have multiple aux domains thus multiple SL page tables > for the same PASID. > > Extra unbinding guest PASID can happen due to race between normal and > exception cases. Termination of one aux domain may affect others unless > we actively track and switch aux domains to ensure the validity of SL > page tables and TLB states in the shared PASID entry. > > Support for sharing second level PGDs across domains can reduce the > complexity but this is not available due to the limitations on VFIO > container architecture. We can revisit this decision once sharing PGDs > are available. > > Overall, the complexity and potential glitch do not warrant this unlikely > use case thereby removed by this patch. > > Fixes: 56722a4398a30 ("iommu/vt-d: Add bind guest PASID support") > Acked-by: Lu Baolu <baolu...@linux.intel.com> > Cc: Kevin Tian <kevin.t...@intel.com> > Cc: Lu Baolu <baolu...@linux.intel.com> > Signed-off-by: Liu Yi L <yi.l....@intel.com> > Signed-off-by: Jacob Pan <jacob.jun....@linux.intel.com> Reviewed-by: Eric Auger <eric.au...@redhat.com>
Thanks Eric > --- > drivers/iommu/intel/svm.c | 22 +++++++++------------- > 1 file changed, 9 insertions(+), 13 deletions(-) > > diff --git a/drivers/iommu/intel/svm.c b/drivers/iommu/intel/svm.c > index 6c87c807a0ab..d386853121a2 100644 > --- a/drivers/iommu/intel/svm.c > +++ b/drivers/iommu/intel/svm.c > @@ -277,20 +277,16 @@ int intel_svm_bind_gpasid(struct iommu_domain *domain, > struct device *dev, > goto out; > } > > + /* > + * Do not allow multiple bindings of the same device-PASID since > + * there is only one SL page tables per PASID. We may revisit > + * once sharing PGD across domains are supported. > + */ > for_each_svm_dev(sdev, svm, dev) { > - /* > - * For devices with aux domains, we should allow > - * multiple bind calls with the same PASID and pdev. > - */ > - if (iommu_dev_feature_enabled(dev, > - IOMMU_DEV_FEAT_AUX)) { > - sdev->users++; > - } else { > - dev_warn_ratelimited(dev, > - "Already bound with PASID > %u\n", > - svm->pasid); > - ret = -EBUSY; > - } > + dev_warn_ratelimited(dev, > + "Already bound with PASID %u\n", > + svm->pasid); > + ret = -EBUSY; > goto out; > } > } else { > _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu