Commit 47b2de35 authored by Jason Gunthorpe's avatar Jason Gunthorpe Committed by Will Deacon

iommu/arm-smmu-v3: Do not use devm for the cd table allocations

The master->cd_table is entirely contained within the struct
arm_smmu_master which is guaranteed to be freed by the core code under
arm_smmu_release_device().

There is no reason to use devm here, arm_smmu_free_cd_tables() is reliably
called to free the CD related memory. Remove it and save some memory.
Tested-by: default avatarNicolin Chen <nicolinc@nvidia.com>
Reviewed-by: default avatarNicolin Chen <nicolinc@nvidia.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/5-v4-6416877274e1+1af-smmuv3_tidy_jgg@nvidia.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
parent 8c153ef9
...@@ -1222,8 +1222,8 @@ static int arm_smmu_alloc_cd_leaf_table(struct arm_smmu_device *smmu, ...@@ -1222,8 +1222,8 @@ static int arm_smmu_alloc_cd_leaf_table(struct arm_smmu_device *smmu,
{ {
size_t size = CTXDESC_L2_ENTRIES * (CTXDESC_CD_DWORDS << 3); size_t size = CTXDESC_L2_ENTRIES * (CTXDESC_CD_DWORDS << 3);
l1_desc->l2ptr = dmam_alloc_coherent(smmu->dev, size, l1_desc->l2ptr = dma_alloc_coherent(smmu->dev, size,
&l1_desc->l2ptr_dma, GFP_KERNEL); &l1_desc->l2ptr_dma, GFP_KERNEL);
if (!l1_desc->l2ptr) { if (!l1_desc->l2ptr) {
dev_warn(smmu->dev, dev_warn(smmu->dev,
"failed to allocate context descriptor table\n"); "failed to allocate context descriptor table\n");
...@@ -1437,17 +1437,17 @@ static int arm_smmu_alloc_cd_tables(struct arm_smmu_master *master) ...@@ -1437,17 +1437,17 @@ static int arm_smmu_alloc_cd_tables(struct arm_smmu_master *master)
cd_table->num_l1_ents = DIV_ROUND_UP(max_contexts, cd_table->num_l1_ents = DIV_ROUND_UP(max_contexts,
CTXDESC_L2_ENTRIES); CTXDESC_L2_ENTRIES);
cd_table->l1_desc = devm_kcalloc(smmu->dev, cd_table->num_l1_ents, cd_table->l1_desc = kcalloc(cd_table->num_l1_ents,
sizeof(*cd_table->l1_desc), sizeof(*cd_table->l1_desc),
GFP_KERNEL); GFP_KERNEL);
if (!cd_table->l1_desc) if (!cd_table->l1_desc)
return -ENOMEM; return -ENOMEM;
l1size = cd_table->num_l1_ents * (CTXDESC_L1_DESC_DWORDS << 3); l1size = cd_table->num_l1_ents * (CTXDESC_L1_DESC_DWORDS << 3);
} }
cd_table->cdtab = dmam_alloc_coherent(smmu->dev, l1size, &cd_table->cdtab_dma, cd_table->cdtab = dma_alloc_coherent(smmu->dev, l1size,
GFP_KERNEL); &cd_table->cdtab_dma, GFP_KERNEL);
if (!cd_table->cdtab) { if (!cd_table->cdtab) {
dev_warn(smmu->dev, "failed to allocate context descriptor\n"); dev_warn(smmu->dev, "failed to allocate context descriptor\n");
ret = -ENOMEM; ret = -ENOMEM;
...@@ -1458,7 +1458,7 @@ static int arm_smmu_alloc_cd_tables(struct arm_smmu_master *master) ...@@ -1458,7 +1458,7 @@ static int arm_smmu_alloc_cd_tables(struct arm_smmu_master *master)
err_free_l1: err_free_l1:
if (cd_table->l1_desc) { if (cd_table->l1_desc) {
devm_kfree(smmu->dev, cd_table->l1_desc); kfree(cd_table->l1_desc);
cd_table->l1_desc = NULL; cd_table->l1_desc = NULL;
} }
return ret; return ret;
...@@ -1478,21 +1478,18 @@ static void arm_smmu_free_cd_tables(struct arm_smmu_master *master) ...@@ -1478,21 +1478,18 @@ static void arm_smmu_free_cd_tables(struct arm_smmu_master *master)
if (!cd_table->l1_desc[i].l2ptr) if (!cd_table->l1_desc[i].l2ptr)
continue; continue;
dmam_free_coherent(smmu->dev, size, dma_free_coherent(smmu->dev, size,
cd_table->l1_desc[i].l2ptr, cd_table->l1_desc[i].l2ptr,
cd_table->l1_desc[i].l2ptr_dma); cd_table->l1_desc[i].l2ptr_dma);
} }
devm_kfree(smmu->dev, cd_table->l1_desc); kfree(cd_table->l1_desc);
cd_table->l1_desc = NULL;
l1size = cd_table->num_l1_ents * (CTXDESC_L1_DESC_DWORDS << 3); l1size = cd_table->num_l1_ents * (CTXDESC_L1_DESC_DWORDS << 3);
} else { } else {
l1size = cd_table->num_l1_ents * (CTXDESC_CD_DWORDS << 3); l1size = cd_table->num_l1_ents * (CTXDESC_CD_DWORDS << 3);
} }
dmam_free_coherent(smmu->dev, l1size, cd_table->cdtab, cd_table->cdtab_dma); dma_free_coherent(smmu->dev, l1size, cd_table->cdtab, cd_table->cdtab_dma);
cd_table->cdtab_dma = 0;
cd_table->cdtab = NULL;
} }
/* Stream table manipulation functions */ /* Stream table manipulation functions */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment