augmented rbtree: add new RB_DECLARE_CALLBACKS_MAX macro
Add RB_DECLARE_CALLBACKS_MAX, which generates augmented rbtree callbacks for the case where the augmented value is a scalar whose definition follows a max(f(node)) pattern. This actually covers all present uses of RB_DECLARE_CALLBACKS, and saves some (source) code duplication in the various RBCOMPUTE function definitions. [walken@google.com: fix mm/vmalloc.c] Link: http://lkml.kernel.org/r/CANN689FXgK13wDYNh1zKxdipeTuALG4eKvKpsdZqKFJ-rvtGiQ@mail.gmail.com [walken@google.com: re-add check to check_augmented()] Link: http://lkml.kernel.org/r/20190727022027.GA86863@google.com Link: http://lkml.kernel.org/r/20190703040156.56953-3-walken@google.com Signed-off-by: Michel Lespinasse <walken@google.com> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: David Howells <dhowells@redhat.com> Cc: Davidlohr Bueso <dbueso@suse.de> Cc: Uladzislau Rezki <urezki@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committad av
Linus Torvalds

förälder
444b8a83f1
incheckning
315cc066b8
@@ -54,23 +54,10 @@ static u64 get_subtree_max_end(struct rb_node *node)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static u64 compute_subtree_max_end(struct memtype *data)
|
||||
{
|
||||
u64 max_end = data->end, child_max_end;
|
||||
#define NODE_END(node) ((node)->end)
|
||||
|
||||
child_max_end = get_subtree_max_end(data->rb.rb_right);
|
||||
if (child_max_end > max_end)
|
||||
max_end = child_max_end;
|
||||
|
||||
child_max_end = get_subtree_max_end(data->rb.rb_left);
|
||||
if (child_max_end > max_end)
|
||||
max_end = child_max_end;
|
||||
|
||||
return max_end;
|
||||
}
|
||||
|
||||
RB_DECLARE_CALLBACKS(static, memtype_rb_augment_cb, struct memtype, rb,
|
||||
u64, subtree_max_end, compute_subtree_max_end)
|
||||
RB_DECLARE_CALLBACKS_MAX(static, memtype_rb_augment_cb,
|
||||
struct memtype, rb, u64, subtree_max_end, NODE_END)
|
||||
|
||||
/* Find the first (lowest start addr) overlapping range from rb tree */
|
||||
static struct memtype *memtype_rb_lowest_match(struct rb_root *root,
|
||||
|
Referens i nytt ärende
Block a user