mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 22:14:04 +02:00
iommu/arm-smmu-v3: Do not zero the strtab twice
dmam_alloc_coherent() already returns zero'd memory so cfg->strtab.l1_desc (the list of DMA addresses for the L2 entries) is already zero'd. arm_smmu_init_l1_strtab() goes through and calls arm_smmu_write_strtab_l1_desc() on the newly allocated (and zero'd) struct arm_smmu_strtab_l1_desc, which ends up computing 'val = 0' and zeroing it again. Remove arm_smmu_init_l1_strtab() and just call devm_kcalloc() from arm_smmu_init_strtab_2lvl to allocate the companion struct. Tested-by: Nicolin Chen <nicolinc@nvidia.com> Reviewed-by: Mostafa Saleh <smostafa@google.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> Link: https://lore.kernel.org/r/1-v2-318ed5f6983b+198f-smmuv3_tidy_jgg@nvidia.com Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
f3b273b7c7
commit
c84c5ab76c
|
|
@ -3523,25 +3523,6 @@ static int arm_smmu_init_queues(struct arm_smmu_device *smmu)
|
|||
PRIQ_ENT_DWORDS, "priq");
|
||||
}
|
||||
|
||||
static int arm_smmu_init_l1_strtab(struct arm_smmu_device *smmu)
|
||||
{
|
||||
unsigned int i;
|
||||
struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg;
|
||||
void *strtab = smmu->strtab_cfg.strtab;
|
||||
|
||||
cfg->l1_desc = devm_kcalloc(smmu->dev, cfg->num_l1_ents,
|
||||
sizeof(*cfg->l1_desc), GFP_KERNEL);
|
||||
if (!cfg->l1_desc)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < cfg->num_l1_ents; ++i) {
|
||||
arm_smmu_write_strtab_l1_desc(strtab, &cfg->l1_desc[i]);
|
||||
strtab += STRTAB_L1_DESC_DWORDS << 3;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int arm_smmu_init_strtab_2lvl(struct arm_smmu_device *smmu)
|
||||
{
|
||||
void *strtab;
|
||||
|
|
@ -3577,7 +3558,12 @@ static int arm_smmu_init_strtab_2lvl(struct arm_smmu_device *smmu)
|
|||
reg |= FIELD_PREP(STRTAB_BASE_CFG_SPLIT, STRTAB_SPLIT);
|
||||
cfg->strtab_base_cfg = reg;
|
||||
|
||||
return arm_smmu_init_l1_strtab(smmu);
|
||||
cfg->l1_desc = devm_kcalloc(smmu->dev, cfg->num_l1_ents,
|
||||
sizeof(*cfg->l1_desc), GFP_KERNEL);
|
||||
if (!cfg->l1_desc)
|
||||
return -ENOMEM;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int arm_smmu_init_strtab_linear(struct arm_smmu_device *smmu)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user