lib: Export interval_tree
lib/interval_tree.c provides a simple interface for an interval-tree (an augmented red-black tree) but is only built when testing the generic macros for building interval-trees. For drivers with modest needs, export the simple interval-tree library as is. v2: Lots of help from Michel Lespinasse to only compile the code as required: - make INTERVAL_TREE a config option - make INTERVAL_TREE_TEST select the library functions and sanitize the filenames & Makefile - prepare interval_tree for being built as a module if required Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Michel Lespinasse <walken@google.com> Cc: Rik van Riel <riel@redhat.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: David Woodhouse <dwmw2@infradead.org> Cc: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: Michel Lespinasse <walken@google.com> [Acked for inclusion via drm/i915 by Andrew Morton.] [danvet: switch to _GPL as per the mailing list discussion.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
Родитель
8d4eee9cd7
Коммит
a88cc108f6
14
lib/Kconfig
14
lib/Kconfig
|
@ -331,6 +331,20 @@ config TEXTSEARCH_FSM
|
|||
config BTREE
|
||||
boolean
|
||||
|
||||
config INTERVAL_TREE
|
||||
boolean
|
||||
help
|
||||
Simple, embeddable, interval-tree. Can find the start of an
|
||||
overlapping range in log(n) time and then iterate over all
|
||||
overlapping nodes. The algorithm is implemented as an
|
||||
augmented rbtree.
|
||||
|
||||
See:
|
||||
|
||||
Documentation/rbtree.txt
|
||||
|
||||
for more information.
|
||||
|
||||
config ASSOCIATIVE_ARRAY
|
||||
bool
|
||||
help
|
||||
|
|
|
@ -1496,6 +1496,7 @@ config RBTREE_TEST
|
|||
config INTERVAL_TREE_TEST
|
||||
tristate "Interval tree test"
|
||||
depends on m && DEBUG_KERNEL
|
||||
select INTERVAL_TREE
|
||||
help
|
||||
A benchmark measuring the performance of the interval tree library
|
||||
|
||||
|
|
|
@ -50,6 +50,7 @@ CFLAGS_hweight.o = $(subst $(quote),,$(CONFIG_ARCH_HWEIGHT_CFLAGS))
|
|||
obj-$(CONFIG_GENERIC_HWEIGHT) += hweight.o
|
||||
|
||||
obj-$(CONFIG_BTREE) += btree.o
|
||||
obj-$(CONFIG_INTERVAL_TREE) += interval_tree.o
|
||||
obj-$(CONFIG_ASSOCIATIVE_ARRAY) += assoc_array.o
|
||||
obj-$(CONFIG_DEBUG_PREEMPT) += smp_processor_id.o
|
||||
obj-$(CONFIG_DEBUG_LIST) += list_debug.o
|
||||
|
@ -156,8 +157,6 @@ lib-$(CONFIG_LIBFDT) += $(libfdt_files)
|
|||
obj-$(CONFIG_RBTREE_TEST) += rbtree_test.o
|
||||
obj-$(CONFIG_INTERVAL_TREE_TEST) += interval_tree_test.o
|
||||
|
||||
interval_tree_test-objs := interval_tree_test_main.o interval_tree.o
|
||||
|
||||
obj-$(CONFIG_PERCPU_TEST) += percpu_test.o
|
||||
|
||||
obj-$(CONFIG_ASN1) += asn1_decoder.o
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/interval_tree.h>
|
||||
#include <linux/interval_tree_generic.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#define START(node) ((node)->start)
|
||||
#define LAST(node) ((node)->last)
|
||||
|
@ -8,3 +9,8 @@
|
|||
INTERVAL_TREE_DEFINE(struct interval_tree_node, rb,
|
||||
unsigned long, __subtree_last,
|
||||
START, LAST,, interval_tree)
|
||||
|
||||
EXPORT_SYMBOL_GPL(interval_tree_insert);
|
||||
EXPORT_SYMBOL_GPL(interval_tree_remove);
|
||||
EXPORT_SYMBOL_GPL(interval_tree_iter_first);
|
||||
EXPORT_SYMBOL_GPL(interval_tree_iter_next);
|
||||
|
|
Загрузка…
Ссылка в новой задаче