[PATCH v7 13/14] iommu/arm-smmu-v3: Allow a PASID to be set when RID is IDENTITY/BLOCKED
Nicolin Chen
nicolinc at nvidia.com
Mon May 13 01:31:31 PDT 2024
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?
Thanks
Nicolin
More information about the linux-arm-kernel
mailing list