lkml.org 
[lkml]   [2017]   [Apr]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 tip/core/rcu 27/39] srcu: Move rcu_node traversal macros to rcu.h
    Date
    This commit moves rcu_for_each_node_breadth_first(),
    rcu_for_each_nonleaf_node_breadth_first(), and
    rcu_for_each_leaf_node() from kernel/rcu/tree.h to
    kernel/rcu/rcu.h so that SRCU can access them.
    This commit is code-movement only.

    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    ---
    kernel/rcu/rcu.h | 35 +++++++++++++++++++++++++++++++++++
    kernel/rcu/tree.h | 35 -----------------------------------
    2 files changed, 35 insertions(+), 35 deletions(-)

    diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h
    index 87326479b39a..5c1798ec32f7 100644
    --- a/kernel/rcu/rcu.h
    +++ b/kernel/rcu/rcu.h
    @@ -224,6 +224,41 @@ static inline void rcu_init_levelspread(int *levelspread, const int *levelcnt)
    }
    }

    +/*
    + * Do a full breadth-first scan of the rcu_node structures for the
    + * specified rcu_state structure.
    + */
    +#define rcu_for_each_node_breadth_first(rsp, rnp) \
    + for ((rnp) = &(rsp)->node[0]; \
    + (rnp) < &(rsp)->node[rcu_num_nodes]; (rnp)++)
    +
    +/*
    + * Do a breadth-first scan of the non-leaf rcu_node structures for the
    + * specified rcu_state structure. Note that if there is a singleton
    + * rcu_node tree with but one rcu_node structure, this loop is a no-op.
    + */
    +#define rcu_for_each_nonleaf_node_breadth_first(rsp, rnp) \
    + for ((rnp) = &(rsp)->node[0]; \
    + (rnp) < (rsp)->level[rcu_num_lvls - 1]; (rnp)++)
    +
    +/*
    + * Scan the leaves of the rcu_node hierarchy for the specified rcu_state
    + * structure. Note that if there is a singleton rcu_node tree with but
    + * one rcu_node structure, this loop -will- visit the rcu_node structure.
    + * It is still a leaf node, even if it is also the root node.
    + */
    +#define rcu_for_each_leaf_node(rsp, rnp) \
    + for ((rnp) = (rsp)->level[rcu_num_lvls - 1]; \
    + (rnp) < &(rsp)->node[rcu_num_nodes]; (rnp)++)
    +
    +/*
    + * Iterate over all possible CPUs in a leaf RCU node.
    + */
    +#define for_each_leaf_node_possible_cpu(rnp, cpu) \
    + for ((cpu) = cpumask_next(rnp->grplo - 1, cpu_possible_mask); \
    + cpu <= rnp->grphi; \
    + cpu = cpumask_next((cpu), cpu_possible_mask))
    +
    #endif /* #if defined(SRCU) || !defined(TINY_RCU) */

    #endif /* __LINUX_RCU_H */
    diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h
    index 1bec3958d44f..a2a45cb629d6 100644
    --- a/kernel/rcu/tree.h
    +++ b/kernel/rcu/tree.h
    @@ -193,41 +193,6 @@ struct rcu_node {
    #define leaf_node_cpu_bit(rnp, cpu) (1UL << ((cpu) - (rnp)->grplo))

    /*
    - * Do a full breadth-first scan of the rcu_node structures for the
    - * specified rcu_state structure.
    - */
    -#define rcu_for_each_node_breadth_first(rsp, rnp) \
    - for ((rnp) = &(rsp)->node[0]; \
    - (rnp) < &(rsp)->node[rcu_num_nodes]; (rnp)++)
    -
    -/*
    - * Do a breadth-first scan of the non-leaf rcu_node structures for the
    - * specified rcu_state structure. Note that if there is a singleton
    - * rcu_node tree with but one rcu_node structure, this loop is a no-op.
    - */
    -#define rcu_for_each_nonleaf_node_breadth_first(rsp, rnp) \
    - for ((rnp) = &(rsp)->node[0]; \
    - (rnp) < (rsp)->level[rcu_num_lvls - 1]; (rnp)++)
    -
    -/*
    - * Scan the leaves of the rcu_node hierarchy for the specified rcu_state
    - * structure. Note that if there is a singleton rcu_node tree with but
    - * one rcu_node structure, this loop -will- visit the rcu_node structure.
    - * It is still a leaf node, even if it is also the root node.
    - */
    -#define rcu_for_each_leaf_node(rsp, rnp) \
    - for ((rnp) = (rsp)->level[rcu_num_lvls - 1]; \
    - (rnp) < &(rsp)->node[rcu_num_nodes]; (rnp)++)
    -
    -/*
    - * Iterate over all possible CPUs in a leaf RCU node.
    - */
    -#define for_each_leaf_node_possible_cpu(rnp, cpu) \
    - for ((cpu) = cpumask_next(rnp->grplo - 1, cpu_possible_mask); \
    - cpu <= rnp->grphi; \
    - cpu = cpumask_next((cpu), cpu_possible_mask))
    -
    -/*
    * Union to allow "aggregate OR" operation on the need for a quiescent
    * state by the normal and expedited grace periods.
    */
    --
    2.5.2
    \
     
     \ /
      Last update: 2017-04-18 01:50    [W:4.162 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site