• Frederic Weisbecker's avatar
    perf_counter tools: Create new chain_for_each_child() iterator · 14f4654c
    Frederic Weisbecker authored
    Iterating through children of a node in the callchain tree
    shows something that may be quite confusing at a first glance.
    The head is the children field of the parent and the list nodes
    are in the brothers field of the children.
    
    This is because the childs are linked to the parent as a list
    of "brothers" using the "children" list of the parent as a
    head:
    
      ---------------
     | Parent (head) |-------------------------------------
      ---------------                                      |
         |                                                 |
      children                                             |
         |                                                 |
      -----------               -----------                |
     | 1st child |---brother---| 2nd child |---brother-----
      -----------               -----------
    
    This makes the following strange pattern often occuring:
    
     list_for_each_entry(child, &parent->children, brothers) {
            // do something with children
     }
    
    Abstract it to chain_for_each_child() to factorize and simplify
    this pattern.
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Anton Blanchard <anton@samba.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    LKML-Reference: <1246550301-8954-1-git-send-email-fweisbec@gmail.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    14f4654c
callchain.c 5.66 KB