rbtree: Add generic add and find helpers
authorPeter Zijlstra <peterz@infradead.org>
Wed, 29 Apr 2020 15:03:22 +0000 (17:03 +0200)
committerIngo Molnar <mingo@kernel.org>
Wed, 17 Feb 2021 13:07:31 +0000 (14:07 +0100)
commit2d24dd5798d0474d9bf705bfca8725e7d20f9d54
tree895ec9efd5a44987e173310f228135fbeb28b17b
parent9fe1f127b913318c631d0041ecf71486e38c2c2d
rbtree: Add generic add and find helpers

I've always been bothered by the endless (fragile) boilerplate for
rbtree, and I recently wrote some rbtree helpers for objtool and
figured I should lift them into the kernel and use them more widely.

Provide:

partial-order; less() based:
 - rb_add(): add a new entry to the rbtree
 - rb_add_cached(): like rb_add(), but for a rb_root_cached

total-order; cmp() based:
 - rb_find(): find an entry in an rbtree
 - rb_find_add(): find an entry, and add if not found

 - rb_find_first(): find the first (leftmost) matching entry
 - rb_next_match(): continue from rb_find_first()
 - rb_for_each(): iterate a sub-tree using the previous two

Inlining and constant propagation should see the compiler inline the
whole thing, including the various compare functions.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Michel Lespinasse <walken@google.com>
Acked-by: Davidlohr Bueso <dbueso@suse.de>
include/linux/rbtree.h
tools/include/linux/rbtree.h
tools/objtool/elf.c