Re: [PATCH v4 06/13] iommu/arm-smmu-v3: Add context descriptor tables allocators
From: Will Deacon <will@kernel.org>
Date: 2020-01-14 11:56:25
Also in:
linux-acpi, linux-devicetree, linux-iommu, linux-pci
On Tue, Jan 14, 2020 at 12:52:30PM +0100, Jean-Philippe Brucker wrote:
On Tue, Jan 14, 2020 at 11:06:52AM +0000, Will Deacon wrote:quoted
quoted
/* Context descriptor manipulation functions */ +static int arm_smmu_alloc_cd_leaf_table(struct arm_smmu_device *smmu, + struct arm_smmu_cd_table *table, + size_t num_entries) +{ + size_t size = num_entries * (CTXDESC_CD_DWORDS << 3); + + table->ptr = dmam_alloc_coherent(smmu->dev, size, &table->ptr_dma, + GFP_KERNEL); + if (!table->ptr) { + dev_warn(smmu->dev, + "failed to allocate context descriptor table\n"); + return -ENOMEM; + } + return 0; +} + +static void arm_smmu_free_cd_leaf_table(struct arm_smmu_device *smmu, + struct arm_smmu_cd_table *table, + size_t num_entries) +{ + size_t size = num_entries * (CTXDESC_CD_DWORDS << 3); + + dmam_free_coherent(smmu->dev, size, table->ptr, table->ptr_dma); +}I think we'd be better off taking the 'arm_smmu_s1_cfg' as a parameter here instead of the table pointer and a num_entries value, since the code above implies that we support partial freeing of the context descriptors. I can do that as a follow-up patch if you agree. Thoughts?Do you mean only changing the arguments of arm_smmu_free_cd_leaf_table(), or arm_smmu_alloc_cd_leaf_table() as well? For free() I agree, for alloc() I'm not sure it would look better.
Yeah, just for free(). I'll spin something on top after I've finished reviewing the series.
For my tests I have a debug patch that allocates PASIDs randomly which quickly consumes DMA for leaf tables. So I do have to free the leaves individually when they aren't used, but it will be easy for me to update.
Cool. Will _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel