arch/sh/kernel/dwarf.c: use rbtree postorder iteration helper instead of solution...
authorCody P Schafer <cody@linux.vnet.ibm.com>
Thu, 23 Jan 2014 23:56:14 +0000 (15:56 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 24 Jan 2014 00:37:03 +0000 (16:37 -0800)
Use rbtree_postorder_for_each_entry_safe() to destroy the rbtree instead
of using repeated rb_erase() calls

Signed-off-by: Cody P Schafer <cody@linux.vnet.ibm.com>
Cc: Michel Lespinasse <walken@google.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Paul Mundt <lethal@linux-sh.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/sh/kernel/dwarf.c

index 49c09c7d5b77ce76b3351bf2174251756c7b9b41..67a049e75ec12f60cf7f1d1934d94122eb2f2617 100644 (file)
@@ -995,29 +995,19 @@ static struct unwinder dwarf_unwinder = {
 
 static void dwarf_unwinder_cleanup(void)
 {
-       struct rb_node **fde_rb_node = &fde_root.rb_node;
-       struct rb_node **cie_rb_node = &cie_root.rb_node;
+       struct dwarf_fde *fde, *next_fde;
+       struct dwarf_cie *cie, *next_cie;
 
        /*
         * Deallocate all the memory allocated for the DWARF unwinder.
         * Traverse all the FDE/CIE lists and remove and free all the
         * memory associated with those data structures.
         */
-       while (*fde_rb_node) {
-               struct dwarf_fde *fde;
-
-               fde = rb_entry(*fde_rb_node, struct dwarf_fde, node);
-               rb_erase(*fde_rb_node, &fde_root);
+       rbtree_postorder_for_each_entry_safe(fde, next_fde, &fde_root, node)
                kfree(fde);
-       }
 
-       while (*cie_rb_node) {
-               struct dwarf_cie *cie;
-
-               cie = rb_entry(*cie_rb_node, struct dwarf_cie, node);
-               rb_erase(*cie_rb_node, &cie_root);
+       rbtree_postorder_for_each_entry_safe(cie, next_cie, &cie_root, node)
                kfree(cie);
-       }
 
        kmem_cache_destroy(dwarf_reg_cachep);
        kmem_cache_destroy(dwarf_frame_cachep);