diff options
Diffstat (limited to 'kernel/rcutree.h')
-rw-r--r-- | kernel/rcutree.h | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/kernel/rcutree.h b/kernel/rcutree.h index fddff92d6676..cdd1be0a4072 100644 --- a/kernel/rcutree.h +++ b/kernel/rcutree.h | |||
@@ -239,6 +239,12 @@ struct rcu_data { | |||
239 | bool preemptible; /* Preemptible RCU? */ | 239 | bool preemptible; /* Preemptible RCU? */ |
240 | struct rcu_node *mynode; /* This CPU's leaf of hierarchy */ | 240 | struct rcu_node *mynode; /* This CPU's leaf of hierarchy */ |
241 | unsigned long grpmask; /* Mask to apply to leaf qsmask. */ | 241 | unsigned long grpmask; /* Mask to apply to leaf qsmask. */ |
242 | #ifdef CONFIG_RCU_CPU_STALL_INFO | ||
243 | unsigned long ticks_this_gp; /* The number of scheduling-clock */ | ||
244 | /* ticks this CPU has handled */ | ||
245 | /* during and after the last grace */ | ||
246 | /* period it is aware of. */ | ||
247 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_INFO */ | ||
242 | 248 | ||
243 | /* 2) batch handling */ | 249 | /* 2) batch handling */ |
244 | /* | 250 | /* |
@@ -265,7 +271,8 @@ struct rcu_data { | |||
265 | */ | 271 | */ |
266 | struct rcu_head *nxtlist; | 272 | struct rcu_head *nxtlist; |
267 | struct rcu_head **nxttail[RCU_NEXT_SIZE]; | 273 | struct rcu_head **nxttail[RCU_NEXT_SIZE]; |
268 | long qlen; /* # of queued callbacks */ | 274 | long qlen_lazy; /* # of lazy queued callbacks */ |
275 | long qlen; /* # of queued callbacks, incl lazy */ | ||
269 | long qlen_last_fqs_check; | 276 | long qlen_last_fqs_check; |
270 | /* qlen at last check for QS forcing */ | 277 | /* qlen at last check for QS forcing */ |
271 | unsigned long n_cbs_invoked; /* count of RCU cbs invoked. */ | 278 | unsigned long n_cbs_invoked; /* count of RCU cbs invoked. */ |
@@ -282,7 +289,6 @@ struct rcu_data { | |||
282 | /* 4) reasons this CPU needed to be kicked by force_quiescent_state */ | 289 | /* 4) reasons this CPU needed to be kicked by force_quiescent_state */ |
283 | unsigned long dynticks_fqs; /* Kicked due to dynticks idle. */ | 290 | unsigned long dynticks_fqs; /* Kicked due to dynticks idle. */ |
284 | unsigned long offline_fqs; /* Kicked due to being offline. */ | 291 | unsigned long offline_fqs; /* Kicked due to being offline. */ |
285 | unsigned long resched_ipi; /* Sent a resched IPI. */ | ||
286 | 292 | ||
287 | /* 5) __rcu_pending() statistics. */ | 293 | /* 5) __rcu_pending() statistics. */ |
288 | unsigned long n_rcu_pending; /* rcu_pending() calls since boot. */ | 294 | unsigned long n_rcu_pending; /* rcu_pending() calls since boot. */ |
@@ -313,12 +319,6 @@ struct rcu_data { | |||
313 | #else | 319 | #else |
314 | #define RCU_STALL_DELAY_DELTA 0 | 320 | #define RCU_STALL_DELAY_DELTA 0 |
315 | #endif | 321 | #endif |
316 | |||
317 | #define RCU_SECONDS_TILL_STALL_CHECK (CONFIG_RCU_CPU_STALL_TIMEOUT * HZ + \ | ||
318 | RCU_STALL_DELAY_DELTA) | ||
319 | /* for rsp->jiffies_stall */ | ||
320 | #define RCU_SECONDS_TILL_STALL_RECHECK (3 * RCU_SECONDS_TILL_STALL_CHECK + 30) | ||
321 | /* for rsp->jiffies_stall */ | ||
322 | #define RCU_STALL_RAT_DELAY 2 /* Allow other CPUs time */ | 322 | #define RCU_STALL_RAT_DELAY 2 /* Allow other CPUs time */ |
323 | /* to take at least one */ | 323 | /* to take at least one */ |
324 | /* scheduling clock irq */ | 324 | /* scheduling clock irq */ |
@@ -438,8 +438,8 @@ static void rcu_preempt_check_blocked_tasks(struct rcu_node *rnp); | |||
438 | static int rcu_preempt_offline_tasks(struct rcu_state *rsp, | 438 | static int rcu_preempt_offline_tasks(struct rcu_state *rsp, |
439 | struct rcu_node *rnp, | 439 | struct rcu_node *rnp, |
440 | struct rcu_data *rdp); | 440 | struct rcu_data *rdp); |
441 | static void rcu_preempt_offline_cpu(int cpu); | ||
442 | #endif /* #ifdef CONFIG_HOTPLUG_CPU */ | 441 | #endif /* #ifdef CONFIG_HOTPLUG_CPU */ |
442 | static void rcu_preempt_cleanup_dead_cpu(int cpu); | ||
443 | static void rcu_preempt_check_callbacks(int cpu); | 443 | static void rcu_preempt_check_callbacks(int cpu); |
444 | static void rcu_preempt_process_callbacks(void); | 444 | static void rcu_preempt_process_callbacks(void); |
445 | void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu)); | 445 | void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu)); |
@@ -448,9 +448,9 @@ static void rcu_report_exp_rnp(struct rcu_state *rsp, struct rcu_node *rnp, | |||
448 | bool wake); | 448 | bool wake); |
449 | #endif /* #if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_TREE_PREEMPT_RCU) */ | 449 | #endif /* #if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_TREE_PREEMPT_RCU) */ |
450 | static int rcu_preempt_pending(int cpu); | 450 | static int rcu_preempt_pending(int cpu); |
451 | static int rcu_preempt_needs_cpu(int cpu); | 451 | static int rcu_preempt_cpu_has_callbacks(int cpu); |
452 | static void __cpuinit rcu_preempt_init_percpu_data(int cpu); | 452 | static void __cpuinit rcu_preempt_init_percpu_data(int cpu); |
453 | static void rcu_preempt_send_cbs_to_online(void); | 453 | static void rcu_preempt_cleanup_dying_cpu(void); |
454 | static void __init __rcu_init_preempt(void); | 454 | static void __init __rcu_init_preempt(void); |
455 | static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags); | 455 | static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags); |
456 | static void rcu_preempt_boost_start_gp(struct rcu_node *rnp); | 456 | static void rcu_preempt_boost_start_gp(struct rcu_node *rnp); |
@@ -471,5 +471,10 @@ static void __cpuinit rcu_prepare_kthreads(int cpu); | |||
471 | static void rcu_prepare_for_idle_init(int cpu); | 471 | static void rcu_prepare_for_idle_init(int cpu); |
472 | static void rcu_cleanup_after_idle(int cpu); | 472 | static void rcu_cleanup_after_idle(int cpu); |
473 | static void rcu_prepare_for_idle(int cpu); | 473 | static void rcu_prepare_for_idle(int cpu); |
474 | static void print_cpu_stall_info_begin(void); | ||
475 | static void print_cpu_stall_info(struct rcu_state *rsp, int cpu); | ||
476 | static void print_cpu_stall_info_end(void); | ||
477 | static void zero_cpu_stall_ticks(struct rcu_data *rdp); | ||
478 | static void increment_cpu_stall_ticks(void); | ||
474 | 479 | ||
475 | #endif /* #ifndef RCU_TREE_NONCORE */ | 480 | #endif /* #ifndef RCU_TREE_NONCORE */ |