iommu/arm-smmu-v3: Don't issue CMD_SYNC for zero-length invalidations
authorWill Deacon <will@kernel.org>
Wed, 21 Aug 2019 11:38:15 +0000 (12:38 +0100)
committerWill Deacon <will@kernel.org>
Wed, 21 Aug 2019 16:58:41 +0000 (17:58 +0100)
Calling arm_smmu_tlb_inv_range() with a size of zero, perhaps due to
an empty 'iommu_iotlb_gather' structure, should be a NOP. Elide the
CMD_SYNC when there is no invalidation to be performed.

Signed-off-by: Will Deacon <will@kernel.org>
drivers/iommu/arm-smmu-v3.c

index 2be11a11bb8bf26d48a24a7464ff3538552d13fa..b7b3b0ff8ed6ad918c8265550506920604fd376a 100644 (file)
@@ -1977,6 +1977,9 @@ static void arm_smmu_tlb_inv_range(unsigned long iova, size_t size,
                },
        };
 
+       if (!size)
+               return;
+
        if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
                cmd.opcode      = CMDQ_OP_TLBI_NH_VA;
                cmd.tlbi.asid   = smmu_domain->s1_cfg.cd.asid;