Message ID | 20190811184613.20463-3-urezki@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | some cleanups related to RB_DECLARE_CALLBACKS_MAX | expand |
On Sun, Aug 11, 2019 at 11:46 AM Uladzislau Rezki (Sony) <urezki@gmail.com> wrote: > RB_DECLARE_CALLBACKS_MAX defines its own callback to update the > augmented subtree information after a node is modified. It makes > sense to use it instead of our own propagate implementation. > > Apart of that, in case of using generated callback we can eliminate > compute_subtree_max_size() function and get rid of duplication. > > Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com> Reviewed-by: Michel Lespinasse <walken@google.com> Love it. Thanks a lot for the cleanup!
On Sun, Aug 11, 2019 at 05:39:23PM -0700, Michel Lespinasse wrote: > On Sun, Aug 11, 2019 at 11:46 AM Uladzislau Rezki (Sony) > <urezki@gmail.com> wrote: > > RB_DECLARE_CALLBACKS_MAX defines its own callback to update the > > augmented subtree information after a node is modified. It makes > > sense to use it instead of our own propagate implementation. > > > > Apart of that, in case of using generated callback we can eliminate > > compute_subtree_max_size() function and get rid of duplication. > > > > Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com> > > Reviewed-by: Michel Lespinasse <walken@google.com> > > Love it. Thanks a lot for the cleanup! Thank you for review! -- Vlad Rezki
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index b8101030f79e..e03444598ae1 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -385,17 +385,6 @@ get_subtree_max_size(struct rb_node *node) return va ? va->subtree_max_size : 0; } -/* - * Gets called when remove the node and rotate. - */ -static __always_inline unsigned long -compute_subtree_max_size(struct vmap_area *va) -{ - return max3(va_size(va), - get_subtree_max_size(va->rb_node.rb_left), - get_subtree_max_size(va->rb_node.rb_right)); -} - RB_DECLARE_CALLBACKS_MAX(static, free_vmap_area_rb_augment_cb, struct vmap_area, rb_node, unsigned long, subtree_max_size, va_size) @@ -623,25 +612,7 @@ augment_tree_propagate_check(struct rb_node *n) static __always_inline void augment_tree_propagate_from(struct vmap_area *va) { - struct rb_node *node = &va->rb_node; - unsigned long new_va_sub_max_size; - - while (node) { - va = rb_entry(node, struct vmap_area, rb_node); - new_va_sub_max_size = compute_subtree_max_size(va); - - /* - * If the newly calculated maximum available size of the - * subtree is equal to the current one, then it means that - * the tree is propagated correctly. So we have to stop at - * this point to save cycles. - */ - if (va->subtree_max_size == new_va_sub_max_size) - break; - - va->subtree_max_size = new_va_sub_max_size; - node = rb_parent(&va->rb_node); - } + free_vmap_area_rb_augment_cb_propagate(&va->rb_node, NULL); #if DEBUG_AUGMENT_PROPAGATE_CHECK augment_tree_propagate_check(free_vmap_area_root.rb_node);
RB_DECLARE_CALLBACKS_MAX defines its own callback to update the augmented subtree information after a node is modified. It makes sense to use it instead of our own propagate implementation. Apart of that, in case of using generated callback we can eliminate compute_subtree_max_size() function and get rid of duplication. Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com> --- mm/vmalloc.c | 31 +------------------------------ 1 file changed, 1 insertion(+), 30 deletions(-)