summaryrefslogtreecommitdiffstats
path: root/mm/rmap.c
diff options
context:
space:
mode:
authorDavidlohr Bueso <dave@stgolabs.net>2017-09-08 19:15:08 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-09-08 21:26:49 -0400
commitf808c13fd3738948e10196496959871130612b61 (patch)
tree0f9b1bf3ccc9c4d051bf4fed87b493dced56d032 /mm/rmap.c
parent09663c86e24953556ff8696efa023557901f2b66 (diff)
lib/interval_tree: fast overlap detection
Allow interval trees to quickly check for overlaps to avoid unnecesary tree lookups in interval_tree_iter_first(). As of this patch, all interval tree flavors will require using a 'rb_root_cached' such that we can have the leftmost node easily available. While most users will make use of this feature, those with special functions (in addition to the generic insert, delete, search calls) will avoid using the cached option as they can do funky things with insertions -- for example, vma_interval_tree_insert_after(). [jglisse@redhat.com: fix deadlock from typo vm_lock_anon_vma()] Link: http://lkml.kernel.org/r/20170808225719.20723-1-jglisse@redhat.com Link: http://lkml.kernel.org/r/20170719014603.19029-12-dave@stgolabs.net Signed-off-by: Davidlohr Bueso <dbueso@suse.de> Signed-off-by: Jérôme Glisse <jglisse@redhat.com> Acked-by: Christian König <christian.koenig@amd.com> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Doug Ledford <dledford@redhat.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Cc: David Airlie <airlied@linux.ie> Cc: Jason Wang <jasowang@redhat.com> Cc: Christian Benvenuti <benve@cisco.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/rmap.c')
-rw-r--r--mm/rmap.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/mm/rmap.c b/mm/rmap.c
index 0618cd85b862..b874c4761e84 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -391,7 +391,7 @@ void unlink_anon_vmas(struct vm_area_struct *vma)
391 * Leave empty anon_vmas on the list - we'll need 391 * Leave empty anon_vmas on the list - we'll need
392 * to free them outside the lock. 392 * to free them outside the lock.
393 */ 393 */
394 if (RB_EMPTY_ROOT(&anon_vma->rb_root)) { 394 if (RB_EMPTY_ROOT(&anon_vma->rb_root.rb_root)) {
395 anon_vma->parent->degree--; 395 anon_vma->parent->degree--;
396 continue; 396 continue;
397 } 397 }
@@ -425,7 +425,7 @@ static void anon_vma_ctor(void *data)
425 425
426 init_rwsem(&anon_vma->rwsem); 426 init_rwsem(&anon_vma->rwsem);
427 atomic_set(&anon_vma->refcount, 0); 427 atomic_set(&anon_vma->refcount, 0);
428 anon_vma->rb_root = RB_ROOT; 428 anon_vma->rb_root = RB_ROOT_CACHED;
429} 429}
430 430
431void __init anon_vma_init(void) 431void __init anon_vma_init(void)