File tree Expand file tree Collapse file tree 6 files changed +35
-6
lines changed
Documentation/admin-guide Expand file tree Collapse file tree 6 files changed +35
-6
lines changed Original file line number Diff line number Diff line change 4195
4195
rcupdate.rcu_cpu_stall_suppress= [KNL]
4196
4196
Suppress RCU CPU stall warning messages.
4197
4197
4198
+ rcupdate.rcu_cpu_stall_suppress_at_boot= [KNL]
4199
+ Suppress RCU CPU stall warning messages and
4200
+ rcutorture writer stall warnings that occur
4201
+ during early boot, that is, during the time
4202
+ before the init task is spawned.
4203
+
4198
4204
rcupdate.rcu_cpu_stall_timeout= [KNL]
4199
4205
Set timeout for RCU CPU stall warning messages.
4200
4206
Original file line number Diff line number Diff line change @@ -198,13 +198,25 @@ static inline void debug_rcu_head_unqueue(struct rcu_head *head)
198
198
}
199
199
#endif /* #else !CONFIG_DEBUG_OBJECTS_RCU_HEAD */
200
200
201
+ extern int rcu_cpu_stall_suppress_at_boot ;
202
+
203
+ static inline bool rcu_stall_is_suppressed_at_boot (void )
204
+ {
205
+ return rcu_cpu_stall_suppress_at_boot && !rcu_inkernel_boot_has_ended ();
206
+ }
207
+
201
208
#ifdef CONFIG_RCU_STALL_COMMON
202
209
203
210
extern int rcu_cpu_stall_ftrace_dump ;
204
211
extern int rcu_cpu_stall_suppress ;
205
212
extern int rcu_cpu_stall_timeout ;
206
213
int rcu_jiffies_till_stall_check (void );
207
214
215
+ static inline bool rcu_stall_is_suppressed (void )
216
+ {
217
+ return rcu_stall_is_suppressed_at_boot () || rcu_cpu_stall_suppress ;
218
+ }
219
+
208
220
#define rcu_ftrace_dump_stall_suppress () \
209
221
do { \
210
222
if (!rcu_cpu_stall_suppress) \
@@ -218,6 +230,11 @@ do { \
218
230
} while (0)
219
231
220
232
#else /* #endif #ifdef CONFIG_RCU_STALL_COMMON */
233
+
234
+ static inline bool rcu_stall_is_suppressed (void )
235
+ {
236
+ return rcu_stall_is_suppressed_at_boot ();
237
+ }
221
238
#define rcu_ftrace_dump_stall_suppress ()
222
239
#define rcu_ftrace_dump_stall_unsuppress ()
223
240
#endif /* #ifdef CONFIG_RCU_STALL_COMMON */
Original file line number Diff line number Diff line change @@ -1479,7 +1479,7 @@ rcu_torture_stats_print(void)
1479
1479
if (cur_ops -> stats )
1480
1480
cur_ops -> stats ();
1481
1481
if (rtcv_snap == rcu_torture_current_version &&
1482
- rcu_torture_current != NULL ) {
1482
+ rcu_torture_current != NULL && ! rcu_stall_is_suppressed () ) {
1483
1483
int __maybe_unused flags = 0 ;
1484
1484
unsigned long __maybe_unused gp_seq = 0 ;
1485
1485
Original file line number Diff line number Diff line change @@ -518,7 +518,7 @@ static void synchronize_rcu_expedited_wait(void)
518
518
for (;;) {
519
519
if (synchronize_rcu_expedited_wait_once (jiffies_stall ))
520
520
return ;
521
- if (rcu_cpu_stall_suppress )
521
+ if (rcu_stall_is_suppressed () )
522
522
continue ;
523
523
panic_on_rcu_stall ();
524
524
pr_err ("INFO: %s detected expedited stalls on CPUs/tasks: {" ,
Original file line number Diff line number Diff line change @@ -383,7 +383,7 @@ static void print_other_cpu_stall(unsigned long gp_seq)
383
383
384
384
/* Kick and suppress, if so configured. */
385
385
rcu_stall_kick_kthreads ();
386
- if (rcu_cpu_stall_suppress )
386
+ if (rcu_stall_is_suppressed () )
387
387
return ;
388
388
389
389
/*
@@ -452,7 +452,7 @@ static void print_cpu_stall(void)
452
452
453
453
/* Kick and suppress, if so configured. */
454
454
rcu_stall_kick_kthreads ();
455
- if (rcu_cpu_stall_suppress )
455
+ if (rcu_stall_is_suppressed () )
456
456
return ;
457
457
458
458
/*
@@ -504,7 +504,7 @@ static void check_cpu_stall(struct rcu_data *rdp)
504
504
unsigned long js ;
505
505
struct rcu_node * rnp ;
506
506
507
- if ((rcu_cpu_stall_suppress && !rcu_kick_kthreads ) ||
507
+ if ((rcu_stall_is_suppressed () && !rcu_kick_kthreads ) ||
508
508
!rcu_gp_in_progress ())
509
509
return ;
510
510
rcu_stall_kick_kthreads ();
Original file line number Diff line number Diff line change @@ -476,13 +476,19 @@ EXPORT_SYMBOL_GPL(rcutorture_sched_setaffinity);
476
476
#ifdef CONFIG_RCU_STALL_COMMON
477
477
int rcu_cpu_stall_ftrace_dump __read_mostly ;
478
478
module_param (rcu_cpu_stall_ftrace_dump , int , 0644 );
479
- int rcu_cpu_stall_suppress __read_mostly ; /* 1 = suppress stall warnings. */
479
+ int rcu_cpu_stall_suppress __read_mostly ; // !0 = suppress stall warnings.
480
480
EXPORT_SYMBOL_GPL (rcu_cpu_stall_suppress );
481
481
module_param (rcu_cpu_stall_suppress , int , 0644 );
482
482
int rcu_cpu_stall_timeout __read_mostly = CONFIG_RCU_CPU_STALL_TIMEOUT ;
483
483
module_param (rcu_cpu_stall_timeout , int , 0644 );
484
484
#endif /* #ifdef CONFIG_RCU_STALL_COMMON */
485
485
486
+ // Suppress boot-time RCU CPU stall warnings and rcutorture writer stall
487
+ // warnings. Also used by rcutorture even if stall warnings are excluded.
488
+ int rcu_cpu_stall_suppress_at_boot __read_mostly ; // !0 = suppress boot stalls.
489
+ EXPORT_SYMBOL_GPL (rcu_cpu_stall_suppress_at_boot );
490
+ module_param (rcu_cpu_stall_suppress_at_boot , int , 0444 );
491
+
486
492
#ifdef CONFIG_TASKS_RCU
487
493
488
494
/*
You can’t perform that action at this time.
0 commit comments