[PATCH v7 13/14] iommu/arm-smmu-v3: Allow a PASID to be set when RID is IDENTITY/BLOCKED
Jason Gunthorpe
jgg at nvidia.com
Tue May 21 10:51:51 PDT 2024
On Mon, May 13, 2024 at 01:31:31AM -0700, Nicolin Chen wrote:
> On Wed, May 08, 2024 at 03:57:21PM -0300, Jason Gunthorpe wrote:
> > If the STE doesn't point to the CD table we can upgrade it by
> > reprogramming the STE with the appropriate S1DSS. We may also need to turn
> > on ATS at the same time.
> >
> > Keep track if the installed STE is pointing at the cd_table and the ATS
> > state to trigger this path.
> >
> > Tested-by: Nicolin Chen <nicolinc at nvidia.com>
> > Tested-by: Shameer Kolothum <shameerali.kolothum.thodi at huawei.com>
> > Signed-off-by: Jason Gunthorpe <jgg at nvidia.com>
> > ---
> > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 49 ++++++++++++++++++++-
> > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 3 +-
> > 2 files changed, 49 insertions(+), 3 deletions(-)
>
> > @@ -2819,6 +2851,19 @@ static void arm_smmu_remove_dev_pasid(struct device *dev, ioasid_t pasid,
> > arm_smmu_atc_inv_master(master, pasid);
> > arm_smmu_remove_master_domain(master, &smmu_domain->domain, pasid);
> > mutex_unlock(&arm_smmu_asid_lock);
> > +
> > + /*
> > + * When the last user of the CD table goes away downgrade the STE back
> > + * to a non-cd_table one.
> > + */
> > + if (!arm_smmu_ssids_in_use(&master->cd_table)) {
> > + struct iommu_domain *sid_domain =
> > + iommu_get_domain_for_dev(master->dev);
> > +
> > + if (domain->type == IOMMU_DOMAIN_IDENTITY ||
> > + domain->type == IOMMU_DOMAIN_BLOCKED)
> > + sid_domain->ops->attach_dev(sid_domain, dev);
>
> Should we check against sid_domain->type instead?
Yes, I typo'd that after some edit
Thanks,
Jason
More information about the linux-arm-kernel
mailing list