From a89b9bd2c2dc8bf9fe00c1b553e7898d7a5e5c38 Mon Sep 17 00:00:00 2001 From: Xiang Chen Date: Mon, 24 May 2021 12:10:21 +0000 Subject: [PATCH] iommu: Fix a boundary issue to avoid performance drop stable inclusion from stable-5.10.37 commit 620aa5821aaa2636d1675c72ab89ee1f26ee4fa1 bugzilla: 51868 CVE: NA -------------------------------- [ Upstream commit 3431c3f660a39f6ced954548a59dba6541ce3eb1 ] After the change of patch ("iommu: Switch gather->end to the inclusive end"), the performace drops from 1600+K IOPS to 1200K in our kunpeng ARM64 platform. We find that the range [start1, end1) actually is joint from the range [end1, end2), but it is considered as disjoint after the change, so it needs more times of TLB sync, and spends more time on it. So fix the boundary issue to avoid performance drop. Fixes: 862c3715de8f ("iommu: Switch gather->end to the inclusive end") Signed-off-by: Xiang Chen Acked-by: Will Deacon Link: https://lore.kernel.org/r/1616643504-120688-1-git-send-email-chenxiang66@hisilicon.com Signed-off-by: Joerg Roedel Signed-off-by: Sasha Levin Signed-off-by: Chen Jun Acked-by: Weilong Chen Signed-off-by: Zheng Zengkai --- include/linux/iommu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 644200bff589..54a5ec5eea0d 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -561,7 +561,7 @@ static inline void iommu_iotlb_gather_add_page(struct iommu_domain *domain, * structure can be rewritten. */ if (gather->pgsize != size || - end < gather->start || start > gather->end) { + end + 1 < gather->start || start > gather->end + 1) { if (gather->pgsize) iommu_iotlb_sync(domain, gather); gather->pgsize = size; -- GitLab