aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoonsoo Kim <iamjoonsoo.kim@lge.com>2013-09-11 17:21:40 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-09-11 18:57:34 -0400
commitb136be5e0b6e8e3e4dcb6722b51bb35199b06810 (patch)
treeec898b9b4cca78e69b8cdf3fd1232c1d7f066e1d
parent6b70f7dff8f7ce2f4692afc7d4ef9f73f8c82434 (diff)
mm, vmalloc: use well-defined find_last_bit() func
Our intention in here is to find last_bit within the region to flush. There is well-defined function, find_last_bit() for this purpose and its performance may be slightly better than current implementation. So change it. Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> Reviewed-by: Wanpeng Li <liwanp@linux.vnet.ibm.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--mm/vmalloc.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index d23c43258727..93d3182c3300 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -1016,15 +1016,16 @@ void vm_unmap_aliases(void)
1016 1016
1017 rcu_read_lock(); 1017 rcu_read_lock();
1018 list_for_each_entry_rcu(vb, &vbq->free, free_list) { 1018 list_for_each_entry_rcu(vb, &vbq->free, free_list) {
1019 int i; 1019 int i, j;
1020 1020
1021 spin_lock(&vb->lock); 1021 spin_lock(&vb->lock);
1022 i = find_first_bit(vb->dirty_map, VMAP_BBMAP_BITS); 1022 i = find_first_bit(vb->dirty_map, VMAP_BBMAP_BITS);
1023 while (i < VMAP_BBMAP_BITS) { 1023 if (i < VMAP_BBMAP_BITS) {
1024 unsigned long s, e; 1024 unsigned long s, e;
1025 int j; 1025
1026 j = find_next_zero_bit(vb->dirty_map, 1026 j = find_last_bit(vb->dirty_map,
1027 VMAP_BBMAP_BITS, i); 1027 VMAP_BBMAP_BITS);
1028 j = j + 1; /* need exclusive index */
1028 1029
1029 s = vb->va->va_start + (i << PAGE_SHIFT); 1030 s = vb->va->va_start + (i << PAGE_SHIFT);
1030 e = vb->va->va_start + (j << PAGE_SHIFT); 1031 e = vb->va->va_start + (j << PAGE_SHIFT);
@@ -1034,10 +1035,6 @@ void vm_unmap_aliases(void)
1034 start = s; 1035 start = s;
1035 if (e > end) 1036 if (e > end)
1036 end = e; 1037 end = e;
1037
1038 i = j;
1039 i = find_next_bit(vb->dirty_map,
1040 VMAP_BBMAP_BITS, i);
1041 } 1038 }
1042 spin_unlock(&vb->lock); 1039 spin_unlock(&vb->lock);
1043 } 1040 }