[PATCH v10 12/13] iommu/arm-smmu-v3: Implement iommu_sva_bind/unbind()

Jason Gunthorpe jgg at nvidia.com
Tue Nov 24 18:58:00 EST 2020


On Fri, Sep 18, 2020 at 12:18:52PM +0200, Jean-Philippe Brucker wrote:

> +/* Allocate or get existing MMU notifier for this {domain, mm} pair */
> +static struct arm_smmu_mmu_notifier *
> +arm_smmu_mmu_notifier_get(struct arm_smmu_domain *smmu_domain,
> +			  struct mm_struct *mm)
> +{
> +	int ret;
> +	struct arm_smmu_ctx_desc *cd;
> +	struct arm_smmu_mmu_notifier *smmu_mn;
> +
> +	list_for_each_entry(smmu_mn, &smmu_domain->mmu_notifiers, list) {
> +		if (smmu_mn->mn.mm == mm) {
> +			refcount_inc(&smmu_mn->refs);
> +			return smmu_mn;
> +		}
> +	}
> +
> +	cd = arm_smmu_alloc_shared_cd(mm);
> +	if (IS_ERR(cd))
> +		return ERR_CAST(cd);
> +
> +	smmu_mn = kzalloc(sizeof(*smmu_mn), GFP_KERNEL);
> +	if (!smmu_mn) {
> +		ret = -ENOMEM;
> +		goto err_free_cd;
> +	}
> +
> +	refcount_set(&smmu_mn->refs, 1);
> +	smmu_mn->cd = cd;
> +	smmu_mn->domain = smmu_domain;
> +	smmu_mn->mn.ops = &arm_smmu_mmu_notifier_ops;
> +
> +	ret = mmu_notifier_register(&smmu_mn->mn, mm);
> +	if (ret) {
> +		kfree(smmu_mn);
> +		goto err_free_cd;
> +	}

I suppose this hasn't been applied yet, but someone asked me to look
at this series..

Why did you drop the change to mmu_notifier_get here? I'm strongly
trying to discourage static lists matching mm's like smmu_mn is
doing. This is handled by the core code, don't open code it..

Thanks,
Jason



More information about the linux-arm-kernel mailing list