[PATCH v2 16/19] iommu/arm-smmu-v3: Add a global static BLOCKED domain
Michael Shavit
mshavit at google.com
Wed Nov 15 07:57:39 PST 2023
On Tue, Nov 14, 2023 at 1:53 AM Jason Gunthorpe <jgg at nvidia.com> wrote:
>
> Using the same design as the IDENTITY domain install an
> STRTAB_STE_0_CFG_ABORT STE.
>
> Signed-off-by: Jason Gunthorpe <jgg at nvidia.com>
Reviewed-by: Michael Shavit <mshavit at google.com>
Are there any subtle observable changes hidden here? IIUC the iommu
framework would have previously installed an empty UNMANAGED domain
but will now end up installing an abort STE instead.
> ---
> drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> index d6f68a6187d290..48981c2ff7a746 100644
> --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> @@ -2647,6 +2647,24 @@ static struct iommu_domain arm_smmu_identity_domain = {
> .ops = &arm_smmu_identity_ops,
> };
>
> +static int arm_smmu_attach_dev_blocked(struct iommu_domain *domain,
> + struct device *dev)
> +{
> + struct arm_smmu_ste ste;
> +
> + arm_smmu_make_abort_ste(&ste);
> + return arm_smmu_attach_dev_ste(dev, &ste);
> +}
> +
> +static const struct iommu_domain_ops arm_smmu_blocked_ops = {
> + .attach_dev = arm_smmu_attach_dev_blocked,
> +};
> +
> +static struct iommu_domain arm_smmu_blocked_domain = {
> + .type = IOMMU_DOMAIN_BLOCKED,
> + .ops = &arm_smmu_blocked_ops,
> +};
> +
> static int arm_smmu_map_pages(struct iommu_domain *domain, unsigned long iova,
> phys_addr_t paddr, size_t pgsize, size_t pgcount,
> int prot, gfp_t gfp, size_t *mapped)
> @@ -3040,6 +3058,7 @@ static void arm_smmu_remove_dev_pasid(struct device *dev, ioasid_t pasid)
>
> static struct iommu_ops arm_smmu_ops = {
> .identity_domain = &arm_smmu_identity_domain,
> + .blocked_domain = &arm_smmu_blocked_domain,
> .capable = arm_smmu_capable,
> .domain_alloc = arm_smmu_domain_alloc,
> .probe_device = arm_smmu_probe_device,
> --
> 2.42.0
>
More information about the linux-arm-kernel
mailing list