aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2014-03-17 08:21:54 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-05-05 03:09:14 -0400
commita88cc108f6f39e56577793f66ac69eb0e18ae099 (patch)
treeea07f899e8d482e15654d06d7df9aae857166dda
parent8d4eee9cd7a170342dc6fbc2ee19ae77031a8cd5 (diff)
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>
-rw-r--r--lib/Kconfig14
-rw-r--r--lib/Kconfig.debug1
-rw-r--r--lib/Makefile3
-rw-r--r--lib/interval_tree.c6
-rw-r--r--lib/interval_tree_test.c (renamed from lib/interval_tree_test_main.c)0
5 files changed, 22 insertions, 2 deletions
diff --git a/lib/Kconfig b/lib/Kconfig
index 4771fb3f4da4..334f7722a999 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -331,6 +331,20 @@ config TEXTSEARCH_FSM
331config BTREE 331config BTREE
332 boolean 332 boolean
333 333
334config INTERVAL_TREE
335 boolean
336 help
337 Simple, embeddable, interval-tree. Can find the start of an
338 overlapping range in log(n) time and then iterate over all
339 overlapping nodes. The algorithm is implemented as an
340 augmented rbtree.
341
342 See:
343
344 Documentation/rbtree.txt
345
346 for more information.
347
334config ASSOCIATIVE_ARRAY 348config ASSOCIATIVE_ARRAY
335 bool 349 bool
336 help 350 help
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 819ac51202c0..4bff173fef0a 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1496,6 +1496,7 @@ config RBTREE_TEST
1496config INTERVAL_TREE_TEST 1496config INTERVAL_TREE_TEST
1497 tristate "Interval tree test" 1497 tristate "Interval tree test"
1498 depends on m && DEBUG_KERNEL 1498 depends on m && DEBUG_KERNEL
1499 select INTERVAL_TREE
1499 help 1500 help
1500 A benchmark measuring the performance of the interval tree library 1501 A benchmark measuring the performance of the interval tree library
1501 1502
diff --git a/lib/Makefile b/lib/Makefile
index 0cd7b68e1382..2c6c1a42e1d2 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -50,6 +50,7 @@ CFLAGS_hweight.o = $(subst $(quote),,$(CONFIG_ARCH_HWEIGHT_CFLAGS))
50obj-$(CONFIG_GENERIC_HWEIGHT) += hweight.o 50obj-$(CONFIG_GENERIC_HWEIGHT) += hweight.o
51 51
52obj-$(CONFIG_BTREE) += btree.o 52obj-$(CONFIG_BTREE) += btree.o
53obj-$(CONFIG_INTERVAL_TREE) += interval_tree.o
53obj-$(CONFIG_ASSOCIATIVE_ARRAY) += assoc_array.o 54obj-$(CONFIG_ASSOCIATIVE_ARRAY) += assoc_array.o
54obj-$(CONFIG_DEBUG_PREEMPT) += smp_processor_id.o 55obj-$(CONFIG_DEBUG_PREEMPT) += smp_processor_id.o
55obj-$(CONFIG_DEBUG_LIST) += list_debug.o 56obj-$(CONFIG_DEBUG_LIST) += list_debug.o
@@ -156,8 +157,6 @@ lib-$(CONFIG_LIBFDT) += $(libfdt_files)
156obj-$(CONFIG_RBTREE_TEST) += rbtree_test.o 157obj-$(CONFIG_RBTREE_TEST) += rbtree_test.o
157obj-$(CONFIG_INTERVAL_TREE_TEST) += interval_tree_test.o 158obj-$(CONFIG_INTERVAL_TREE_TEST) += interval_tree_test.o
158 159
159interval_tree_test-objs := interval_tree_test_main.o interval_tree.o
160
161obj-$(CONFIG_PERCPU_TEST) += percpu_test.o 160obj-$(CONFIG_PERCPU_TEST) += percpu_test.o
162 161
163obj-$(CONFIG_ASN1) += asn1_decoder.o 162obj-$(CONFIG_ASN1) += asn1_decoder.o
diff --git a/lib/interval_tree.c b/lib/interval_tree.c
index e6eb406f2d65..f367f9ad544c 100644
--- a/lib/interval_tree.c
+++ b/lib/interval_tree.c
@@ -1,6 +1,7 @@
1#include <linux/init.h> 1#include <linux/init.h>
2#include <linux/interval_tree.h> 2#include <linux/interval_tree.h>
3#include <linux/interval_tree_generic.h> 3#include <linux/interval_tree_generic.h>
4#include <linux/module.h>
4 5
5#define START(node) ((node)->start) 6#define START(node) ((node)->start)
6#define LAST(node) ((node)->last) 7#define LAST(node) ((node)->last)
@@ -8,3 +9,8 @@
8INTERVAL_TREE_DEFINE(struct interval_tree_node, rb, 9INTERVAL_TREE_DEFINE(struct interval_tree_node, rb,
9 unsigned long, __subtree_last, 10 unsigned long, __subtree_last,
10 START, LAST,, interval_tree) 11 START, LAST,, interval_tree)
12
13EXPORT_SYMBOL_GPL(interval_tree_insert);
14EXPORT_SYMBOL_GPL(interval_tree_remove);
15EXPORT_SYMBOL_GPL(interval_tree_iter_first);
16EXPORT_SYMBOL_GPL(interval_tree_iter_next);
diff --git a/lib/interval_tree_test_main.c b/lib/interval_tree_test.c
index 245900b98c8e..245900b98c8e 100644
--- a/lib/interval_tree_test_main.c
+++ b/lib/interval_tree_test.c