1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include <linux/cache.h>
26#include <linux/spinlock.h>
27#include <linux/threads.h>
28#include <linux/cpumask.h>
29#include <linux/seqlock.h>
30
31
32
33
34
35
36
37
38#define MAX_RCU_LVLS 4
39#define RCU_FANOUT_1 (CONFIG_RCU_FANOUT_LEAF)
40#define RCU_FANOUT_2 (RCU_FANOUT_1 * CONFIG_RCU_FANOUT)
41#define RCU_FANOUT_3 (RCU_FANOUT_2 * CONFIG_RCU_FANOUT)
42#define RCU_FANOUT_4 (RCU_FANOUT_3 * CONFIG_RCU_FANOUT)
43
44#if NR_CPUS <= RCU_FANOUT_1
45# define RCU_NUM_LVLS 1
46# define NUM_RCU_LVL_0 1
47# define NUM_RCU_LVL_1 (NR_CPUS)
48# define NUM_RCU_LVL_2 0
49# define NUM_RCU_LVL_3 0
50# define NUM_RCU_LVL_4 0
51#elif NR_CPUS <= RCU_FANOUT_2
52# define RCU_NUM_LVLS 2
53# define NUM_RCU_LVL_0 1
54# define NUM_RCU_LVL_1 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_1)
55# define NUM_RCU_LVL_2 (NR_CPUS)
56# define NUM_RCU_LVL_3 0
57# define NUM_RCU_LVL_4 0
58#elif NR_CPUS <= RCU_FANOUT_3
59# define RCU_NUM_LVLS 3
60# define NUM_RCU_LVL_0 1
61# define NUM_RCU_LVL_1 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_2)
62# define NUM_RCU_LVL_2 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_1)
63# define NUM_RCU_LVL_3 (NR_CPUS)
64# define NUM_RCU_LVL_4 0
65#elif NR_CPUS <= RCU_FANOUT_4
66# define RCU_NUM_LVLS 4
67# define NUM_RCU_LVL_0 1
68# define NUM_RCU_LVL_1 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_3)
69# define NUM_RCU_LVL_2 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_2)
70# define NUM_RCU_LVL_3 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_1)
71# define NUM_RCU_LVL_4 (NR_CPUS)
72#else
73# error "CONFIG_RCU_FANOUT insufficient for NR_CPUS"
74#endif
75
76#define RCU_SUM (NUM_RCU_LVL_0 + NUM_RCU_LVL_1 + NUM_RCU_LVL_2 + NUM_RCU_LVL_3 + NUM_RCU_LVL_4)
77#define NUM_RCU_NODES (RCU_SUM - NR_CPUS)
78
79extern int rcu_num_lvls;
80extern int rcu_num_nodes;
81
82
83
84
85struct rcu_dynticks {
86 long long dynticks_nesting;
87
88 int dynticks_nmi_nesting;
89 atomic_t dynticks;
90#ifdef CONFIG_RCU_FAST_NO_HZ
91 int dyntick_drain;
92 unsigned long dyntick_holdoff;
93
94 struct timer_list idle_gp_timer;
95
96 unsigned long idle_gp_timer_expires;
97
98 bool idle_first_pass;
99 unsigned long nonlazy_posted;
100
101 unsigned long nonlazy_posted_snap;
102
103 int tick_nohz_enabled_snap;
104#endif
105};
106
107
108#define RCU_KTHREAD_STOPPED 0
109#define RCU_KTHREAD_RUNNING 1
110#define RCU_KTHREAD_WAITING 2
111#define RCU_KTHREAD_OFFCPU 3
112#define RCU_KTHREAD_YIELDING 4
113#define RCU_KTHREAD_MAX 4
114
115
116
117
118struct rcu_node {
119 raw_spinlock_t lock;
120
121 unsigned long gpnum;
122
123
124 unsigned long completed;
125
126
127 unsigned long qsmask;
128
129
130
131
132
133 unsigned long expmask;
134
135
136
137 atomic_t wakemask;
138
139
140 unsigned long qsmaskinit;
141
142 unsigned long grpmask;
143
144 int grplo;
145 int grphi;
146 u8 grpnum;
147 u8 level;
148 struct rcu_node *parent;
149 struct list_head blkd_tasks;
150
151
152
153 struct list_head *gp_tasks;
154
155
156
157 struct list_head *exp_tasks;
158
159
160
161
162
163#ifdef CONFIG_RCU_BOOST
164 struct list_head *boost_tasks;
165
166
167
168
169
170
171
172 unsigned long boost_time;
173
174 struct task_struct *boost_kthread_task;
175
176
177 unsigned int boost_kthread_status;
178
179 unsigned long n_tasks_boosted;
180
181 unsigned long n_exp_boosts;
182
183 unsigned long n_normal_boosts;
184
185 unsigned long n_balk_blkd_tasks;
186
187 unsigned long n_balk_exp_gp_tasks;
188
189 unsigned long n_balk_boost_tasks;
190
191 unsigned long n_balk_notblocked;
192
193 unsigned long n_balk_notyet;
194
195 unsigned long n_balk_nos;
196
197
198#endif
199 struct task_struct *node_kthread_task;
200
201
202
203 unsigned int node_kthread_status;
204
205} ____cacheline_internodealigned_in_smp;
206
207
208
209
210
211#define rcu_for_each_node_breadth_first(rsp, rnp) \
212 for ((rnp) = &(rsp)->node[0]; \
213 (rnp) < &(rsp)->node[rcu_num_nodes]; (rnp)++)
214
215
216
217
218
219
220#define rcu_for_each_nonleaf_node_breadth_first(rsp, rnp) \
221 for ((rnp) = &(rsp)->node[0]; \
222 (rnp) < (rsp)->level[rcu_num_lvls - 1]; (rnp)++)
223
224
225
226
227
228
229
230#define rcu_for_each_leaf_node(rsp, rnp) \
231 for ((rnp) = (rsp)->level[rcu_num_lvls - 1]; \
232 (rnp) < &(rsp)->node[rcu_num_nodes]; (rnp)++)
233
234
235#define RCU_DONE_TAIL 0
236#define RCU_WAIT_TAIL 1
237#define RCU_NEXT_READY_TAIL 2
238#define RCU_NEXT_TAIL 3
239#define RCU_NEXT_SIZE 4
240
241
242struct rcu_data {
243
244 unsigned long completed;
245
246 unsigned long gpnum;
247
248 unsigned long passed_quiesce_gpnum;
249
250 bool passed_quiesce;
251 bool qs_pending;
252 bool beenonline;
253 bool preemptible;
254 struct rcu_node *mynode;
255 unsigned long grpmask;
256#ifdef CONFIG_RCU_CPU_STALL_INFO
257 unsigned long ticks_this_gp;
258
259
260
261#endif
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286 struct rcu_head *nxtlist;
287 struct rcu_head **nxttail[RCU_NEXT_SIZE];
288 long qlen_lazy;
289 long qlen;
290 long qlen_last_fqs_check;
291
292 unsigned long n_cbs_invoked;
293 unsigned long n_cbs_orphaned;
294 unsigned long n_cbs_adopted;
295 unsigned long n_force_qs_snap;
296
297 long blimit;
298
299
300 struct rcu_dynticks *dynticks;
301 int dynticks_snap;
302
303
304 unsigned long dynticks_fqs;
305 unsigned long offline_fqs;
306
307
308 unsigned long n_rcu_pending;
309 unsigned long n_rp_qs_pending;
310 unsigned long n_rp_report_qs;
311 unsigned long n_rp_cb_ready;
312 unsigned long n_rp_cpu_needs_gp;
313 unsigned long n_rp_gp_completed;
314 unsigned long n_rp_gp_started;
315 unsigned long n_rp_need_fqs;
316 unsigned long n_rp_need_nothing;
317
318
319 struct rcu_head barrier_head;
320
321 int cpu;
322 struct rcu_state *rsp;
323};
324
325
326#define RCU_GP_IDLE 0
327#define RCU_GP_INIT 1
328#define RCU_SAVE_DYNTICK 2
329#define RCU_FORCE_QS 3
330#define RCU_SIGNAL_INIT RCU_SAVE_DYNTICK
331
332#define RCU_JIFFIES_TILL_FORCE_QS 3
333
334#ifdef CONFIG_PROVE_RCU
335#define RCU_STALL_DELAY_DELTA (5 * HZ)
336#else
337#define RCU_STALL_DELAY_DELTA 0
338#endif
339#define RCU_STALL_RAT_DELAY 2
340
341
342
343
344#define rcu_wait(cond) \
345do { \
346 for (;;) { \
347 set_current_state(TASK_INTERRUPTIBLE); \
348 if (cond) \
349 break; \
350 schedule(); \
351 } \
352 __set_current_state(TASK_RUNNING); \
353} while (0)
354
355
356
357
358
359
360
361
362
363
364
365struct rcu_state {
366 struct rcu_node node[NUM_RCU_NODES];
367 struct rcu_node *level[RCU_NUM_LVLS];
368 u32 levelcnt[MAX_RCU_LVLS + 1];
369 u8 levelspread[RCU_NUM_LVLS];
370 struct rcu_data __percpu *rda;
371 void (*call)(struct rcu_head *head,
372 void (*func)(struct rcu_head *head));
373
374
375
376 u8 fqs_state ____cacheline_internodealigned_in_smp;
377
378 u8 fqs_active;
379
380 u8 fqs_need_gp;
381
382
383
384
385 u8 boost;
386 unsigned long gpnum;
387 unsigned long completed;
388
389
390
391 raw_spinlock_t onofflock;
392
393 struct rcu_head *orphan_nxtlist;
394
395 struct rcu_head **orphan_nxttail;
396 struct rcu_head *orphan_donelist;
397
398 struct rcu_head **orphan_donetail;
399 long qlen_lazy;
400 long qlen;
401 struct task_struct *rcu_barrier_in_progress;
402
403
404 struct mutex barrier_mutex;
405 atomic_t barrier_cpu_count;
406 struct completion barrier_completion;
407 unsigned long n_barrier_done;
408
409 raw_spinlock_t fqslock;
410
411 unsigned long jiffies_force_qs;
412
413 unsigned long n_force_qs;
414
415 unsigned long n_force_qs_lh;
416
417 unsigned long n_force_qs_ngp;
418
419 unsigned long gp_start;
420
421 unsigned long jiffies_stall;
422
423 unsigned long gp_max;
424
425 char *name;
426 struct list_head flavors;
427};
428
429extern struct list_head rcu_struct_flavors;
430#define for_each_rcu_flavor(rsp) \
431 list_for_each_entry((rsp), &rcu_struct_flavors, flavors)
432
433
434
435#define RCU_OFL_TASKS_NORM_GP 0x1
436
437#define RCU_OFL_TASKS_EXP_GP 0x2
438
439
440
441
442
443extern struct rcu_state rcu_sched_state;
444DECLARE_PER_CPU(struct rcu_data, rcu_sched_data);
445
446extern struct rcu_state rcu_bh_state;
447DECLARE_PER_CPU(struct rcu_data, rcu_bh_data);
448
449#ifdef CONFIG_TREE_PREEMPT_RCU
450extern struct rcu_state rcu_preempt_state;
451DECLARE_PER_CPU(struct rcu_data, rcu_preempt_data);
452#endif
453
454#ifdef CONFIG_RCU_BOOST
455DECLARE_PER_CPU(unsigned int, rcu_cpu_kthread_status);
456DECLARE_PER_CPU(int, rcu_cpu_kthread_cpu);
457DECLARE_PER_CPU(unsigned int, rcu_cpu_kthread_loops);
458DECLARE_PER_CPU(char, rcu_cpu_has_work);
459#endif
460
461#ifndef RCU_TREE_NONCORE
462
463
464static void rcu_bootup_announce(void);
465long rcu_batches_completed(void);
466static void rcu_preempt_note_context_switch(int cpu);
467static int rcu_preempt_blocked_readers_cgp(struct rcu_node *rnp);
468#ifdef CONFIG_HOTPLUG_CPU
469static void rcu_report_unblock_qs_rnp(struct rcu_node *rnp,
470 unsigned long flags);
471static void rcu_stop_cpu_kthread(int cpu);
472#endif
473static void rcu_print_detail_task_stall(struct rcu_state *rsp);
474static int rcu_print_task_stall(struct rcu_node *rnp);
475static void rcu_preempt_check_blocked_tasks(struct rcu_node *rnp);
476#ifdef CONFIG_HOTPLUG_CPU
477static int rcu_preempt_offline_tasks(struct rcu_state *rsp,
478 struct rcu_node *rnp,
479 struct rcu_data *rdp);
480#endif
481static void rcu_preempt_check_callbacks(int cpu);
482void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu));
483#if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_TREE_PREEMPT_RCU)
484static void rcu_report_exp_rnp(struct rcu_state *rsp, struct rcu_node *rnp,
485 bool wake);
486#endif
487static void __init __rcu_init_preempt(void);
488static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags);
489static void rcu_preempt_boost_start_gp(struct rcu_node *rnp);
490static void invoke_rcu_callbacks_kthread(void);
491static bool rcu_is_callbacks_kthread(void);
492#ifdef CONFIG_RCU_BOOST
493static void rcu_preempt_do_callbacks(void);
494static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp,
495 cpumask_var_t cm);
496static int __cpuinit rcu_spawn_one_boost_kthread(struct rcu_state *rsp,
497 struct rcu_node *rnp,
498 int rnp_index);
499static void invoke_rcu_node_kthread(struct rcu_node *rnp);
500static void rcu_yield(void (*f)(unsigned long), unsigned long arg);
501#endif
502static void rcu_cpu_kthread_setrt(int cpu, int to_rt);
503static void __cpuinit rcu_prepare_kthreads(int cpu);
504static void rcu_prepare_for_idle_init(int cpu);
505static void rcu_cleanup_after_idle(int cpu);
506static void rcu_prepare_for_idle(int cpu);
507static void rcu_idle_count_callbacks_posted(void);
508static void print_cpu_stall_info_begin(void);
509static void print_cpu_stall_info(struct rcu_state *rsp, int cpu);
510static void print_cpu_stall_info_end(void);
511static void zero_cpu_stall_ticks(struct rcu_data *rdp);
512static void increment_cpu_stall_ticks(void);
513
514#endif
515