iommu/arm-smmu: Fix the index calculation of strtab
authorZhen Lei <thunder.leizhen@huawei.com>
Fri, 26 Jun 2015 08:32:58 +0000 (09:32 +0100)
committerWill Deacon <will.deacon@arm.com>
Wed, 8 Jul 2015 16:24:38 +0000 (17:24 +0100)
The element size of cfg->strtab is just one DWORD, so we should use a
multiply operation instead of a shift when calculating the level 1
index.

Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
drivers/iommu/arm-smmu-v3.c

index 8e9ec81ce4bbd85473d6d6a35e7c3567569187ee..606852f18808ba13b67ac574f1b6526842cd0213 100644 (file)
@@ -1064,7 +1064,7 @@ static int arm_smmu_init_l2_strtab(struct arm_smmu_device *smmu, u32 sid)
                return 0;
 
        size = 1 << (STRTAB_SPLIT + ilog2(STRTAB_STE_DWORDS) + 3);
-       strtab = &cfg->strtab[sid >> STRTAB_SPLIT << STRTAB_L1_DESC_DWORDS];
+       strtab = &cfg->strtab[(sid >> STRTAB_SPLIT) * STRTAB_L1_DESC_DWORDS];
 
        desc->span = STRTAB_SPLIT + 1;
        desc->l2ptr = dma_zalloc_coherent(smmu->dev, size, &desc->l2ptr_dma,