]> git.baikalelectronics.ru Git - kernel.git/commit
lib/interval_tree: fast overlap detection
authorDavidlohr Bueso <dave@stgolabs.net>
Fri, 8 Sep 2017 23:15:08 +0000 (16:15 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 9 Sep 2017 01:26:49 +0000 (18:26 -0700)
commit8d1de687659106fffcae613033e3010a9fcfc95a
tree0f9b1bf3ccc9c4d051bf4fed87b493dced56d032
parent58e77c56bba1122f0533888547ee7243f8e10bf5
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>
33 files changed:
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
drivers/gpu/drm/drm_mm.c
drivers/gpu/drm/drm_vma_manager.c
drivers/gpu/drm/i915/i915_gem_userptr.c
drivers/gpu/drm/radeon/radeon.h
drivers/gpu/drm/radeon/radeon_mn.c
drivers/gpu/drm/radeon/radeon_vm.c
drivers/infiniband/core/umem_rbtree.c
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/hw/hfi1/mmu_rb.c
drivers/infiniband/hw/usnic/usnic_uiom.c
drivers/infiniband/hw/usnic/usnic_uiom.h
drivers/infiniband/hw/usnic/usnic_uiom_interval_tree.c
drivers/infiniband/hw/usnic/usnic_uiom_interval_tree.h
drivers/vhost/vhost.c
drivers/vhost/vhost.h
fs/hugetlbfs/inode.c
fs/inode.c
include/drm/drm_mm.h
include/linux/fs.h
include/linux/interval_tree.h
include/linux/interval_tree_generic.h
include/linux/mm.h
include/linux/rmap.h
include/rdma/ib_umem_odp.h
include/rdma/ib_verbs.h
lib/interval_tree_test.c
mm/interval_tree.c
mm/memory.c
mm/mmap.c
mm/rmap.c