From 6bcdbbd19fef2bb931e4165d21ac52ec727c71b3 Mon Sep 17 00:00:00 2001 From: c00284940 Date: Fri, 21 May 2021 18:31:27 +0800 Subject: [PATCH 7/9] add get_rb_cnt and get_rb_retry_cnt --- drivers/iommu/iommu-debugfs.c | 4 ++++ drivers/iommu/iova.c | 4 ++++ include/linux/iova.h | 2 ++ 3 files changed, 10 insertions(+) diff --git a/drivers/iommu/iommu-debugfs.c b/drivers/iommu/iommu-debugfs.c index f0434a8..63fdf88 100644 --- a/drivers/iommu/iommu-debugfs.c +++ b/drivers/iommu/iommu-debugfs.c @@ -119,6 +119,10 @@ static int debugfs_iova_rcache_show(struct seq_file *s, void *p) } pr_err("%s\n", string); pr_err("rb_total: %lld\n", iovad->rb_total); + pr_err("get_rb_cnt:%lld get_rb_retry_cnt:%d\n", iovad->get_rb_cnt, + iovad->get_rb_retry_cnt); + iovad->get_rb_cnt = 0; + iovad->get_rb_retry_cnt = 0; return 0; } DEFINE_SHOW_ATTRIBUTE(debugfs_iova_rcache); diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c index c8e8432..a0373dd 100644 --- a/drivers/iommu/iova.c +++ b/drivers/iommu/iova.c @@ -67,6 +67,8 @@ init_iova_domain(struct iova_domain *iovad, unsigned long granule, iovad->fq = NULL; iovad->anchor.pfn_lo = iovad->anchor.pfn_hi = IOVA_ANCHOR; iovad->rb_total = 0; + iovad->get_rb_cnt = 0; + iovad->get_rb_retry_cnt = 0; rb_link_node(&iovad->anchor.node, NULL, &iovad->rbroot.rb_node); rb_insert_color(&iovad->anchor.node, &iovad->rbroot); cpuhp_state_add_instance_nocalls(CPUHP_IOMMU_IOVA_DEAD, &iovad->cpuhp_dead); @@ -249,6 +251,7 @@ static int __alloc_and_insert_iova_range(struct iova_domain *iovad, /* Walk the tree backwards */ spin_lock_irqsave(&iovad->iova_rbtree_lock, flags); + iovad->get_rb_cnt++; if (limit_pfn <= iovad->dma_32bit_pfn && size >= iovad->max32_alloc_size) goto iova32_full; @@ -272,6 +275,7 @@ static int __alloc_and_insert_iova_range(struct iova_domain *iovad, low_pfn = retry_pfn; curr = iova_find_limit(iovad, limit_pfn); curr_iova = to_iova(curr); + iovad->get_rb_retry_cnt++; goto retry; } iovad->max32_alloc_size = size; diff --git a/include/linux/iova.h b/include/linux/iova.h index 8c86237..29bd27b 100644 --- a/include/linux/iova.h +++ b/include/linux/iova.h @@ -109,6 +109,8 @@ struct iova_domain { when not */ struct hlist_node cpuhp_dead; u64 rb_total; + u64 get_rb_cnt; + u64 get_rb_retry_cnt; }; static inline unsigned long iova_size(struct iova *iova) -- 2.8.1