summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiang Chen <chenxiang66@hisilicon.com>2021-03-25 11:38:24 +0800
committerJoerg Roedel <jroedel@suse.de>2021-04-07 10:23:58 +0200
commit3431c3f660a39f6ced954548a59dba6541ce3eb1 (patch)
tree3064657245bb795be6add23b086560faf710162e
parente49d033bddf5b565044e2abe4241353959bc9120 (diff)
iommu: Fix a boundary issue to avoid performance drop
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 <chenxiang66@hisilicon.com> Acked-by: Will Deacon <will@kernel.org> Link: https://lore.kernel.org/r/1616643504-120688-1-git-send-email-chenxiang66@hisilicon.com Signed-off-by: Joerg Roedel <jroedel@suse.de>
-rw-r--r--include/linux/iommu.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 5e7fe519430a..9ca6e6b8084d 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -547,7 +547,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;