aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree.h
diff options
context:
space:
mode:
authorPaul E. McKenney <paul.mckenney@linaro.org>2010-11-30 00:56:39 -0500
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2011-05-06 02:16:54 -0400
commit12f5f524cafef3ab689929b118f2dfb8bf2be321 (patch)
tree639473556b6edf9b79e0a18d5ba58f80eea76519 /kernel/rcutree.h
parente59fb3120becfb36b22ddb8bd27d065d3cdca499 (diff)
rcu: merge TREE_PREEPT_RCU blocked_tasks[] lists
Combine the current TREE_PREEMPT_RCU ->blocked_tasks[] lists in the rcu_node structure into a single ->blkd_tasks list with ->gp_tasks and ->exp_tasks tail pointers. This is in preparation for RCU priority boosting, which will add a third dimension to the combinatorial explosion in the ->blocked_tasks[] case, but simply a third pointer in the new ->blkd_tasks case. Also update documentation to reflect blocked_tasks[] merge Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Diffstat (limited to 'kernel/rcutree.h')
-rw-r--r--kernel/rcutree.h21
1 files changed, 15 insertions, 6 deletions
diff --git a/kernel/rcutree.h b/kernel/rcutree.h
index bd891def3303..5a439c180e69 100644
--- a/kernel/rcutree.h
+++ b/kernel/rcutree.h
@@ -107,7 +107,7 @@ struct rcu_node {
107 /* an rcu_data structure, otherwise, each */ 107 /* an rcu_data structure, otherwise, each */
108 /* bit corresponds to a child rcu_node */ 108 /* bit corresponds to a child rcu_node */
109 /* structure. */ 109 /* structure. */
110 unsigned long expmask; /* Groups that have ->blocked_tasks[] */ 110 unsigned long expmask; /* Groups that have ->blkd_tasks */
111 /* elements that need to drain to allow the */ 111 /* elements that need to drain to allow the */
112 /* current expedited grace period to */ 112 /* current expedited grace period to */
113 /* complete (only for TREE_PREEMPT_RCU). */ 113 /* complete (only for TREE_PREEMPT_RCU). */
@@ -120,11 +120,20 @@ struct rcu_node {
120 u8 grpnum; /* CPU/group number for next level up. */ 120 u8 grpnum; /* CPU/group number for next level up. */
121 u8 level; /* root is at level 0. */ 121 u8 level; /* root is at level 0. */
122 struct rcu_node *parent; 122 struct rcu_node *parent;
123 struct list_head blocked_tasks[4]; 123 struct list_head blkd_tasks;
124 /* Tasks blocked in RCU read-side critsect. */ 124 /* Tasks blocked in RCU read-side critical */
125 /* Grace period number (->gpnum) x blocked */ 125 /* section. Tasks are placed at the head */
126 /* by tasks on the (x & 0x1) element of the */ 126 /* of this list and age towards the tail. */
127 /* blocked_tasks[] array. */ 127 struct list_head *gp_tasks;
128 /* Pointer to the first task blocking the */
129 /* current grace period, or NULL if there */
130 /* is no such task. */
131 struct list_head *exp_tasks;
132 /* Pointer to the first task blocking the */
133 /* current expedited grace period, or NULL */
134 /* if there is no such task. If there */
135 /* is no current expedited grace period, */
136 /* then there can cannot be any such task. */
128} ____cacheline_internodealigned_in_smp; 137} ____cacheline_internodealigned_in_smp;
129 138
130/* 139/*