Loading Documentation/RCU/Design/Requirements/Requirements.html +35 −0 Original line number Diff line number Diff line Loading @@ -2391,6 +2391,41 @@ and <tt>RCU_NONIDLE()</tt> on the other while inspecting idle-loop code. Steven Rostedt supplied <tt>_rcuidle</tt> event tracing, which is used quite heavily in the idle loop. However, there are some restrictions on the code placed within <tt>RCU_NONIDLE()</tt>: <ol> <li> Blocking is prohibited. In practice, this is not a serious restriction given that idle tasks are prohibited from blocking to begin with. <li> Although nesting <tt>RCU_NONIDLE()</tt> is permited, they cannot nest indefinitely deeply. However, given that they can be nested on the order of a million deep, even on 32-bit systems, this should not be a serious restriction. This nesting limit would probably be reached long after the compiler OOMed or the stack overflowed. <li> Any code path that enters <tt>RCU_NONIDLE()</tt> must sequence out of that same <tt>RCU_NONIDLE()</tt>. For example, the following is grossly illegal: <blockquote> <pre> 1 RCU_NONIDLE({ 2 do_something(); 3 goto bad_idea; /* BUG!!! */ 4 do_something_else();}); 5 bad_idea: </pre> </blockquote> <p> It is just as illegal to transfer control into the middle of <tt>RCU_NONIDLE()</tt>'s argument. Yes, in theory, you could transfer in as long as you also transferred out, but in practice you could also expect to get sharply worded review comments. </ol> <p> It is similarly socially unacceptable to interrupt an Loading Documentation/RCU/stallwarn.txt +1 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ rcupdate.rcu_task_stall_timeout This boot/sysfs parameter controls the RCU-tasks stall warning interval. A value of zero or less suppresses RCU-tasks stall warnings. A positive value sets the stall-warning interval in jiffies. An RCU-tasks stall warning starts wtih the line: in jiffies. An RCU-tasks stall warning starts with the line: INFO: rcu_tasks detected stalls on tasks: Loading Documentation/RCU/whatisRCU.txt +3 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,9 @@ to start learning about RCU: 2. What is RCU? Part 2: Usage http://lwn.net/Articles/263130/ 3. RCU part 3: the RCU API http://lwn.net/Articles/264090/ 4. The RCU API, 2010 Edition http://lwn.net/Articles/418853/ 2010 Big API Table http://lwn.net/Articles/419086/ 5. The RCU API, 2014 Edition http://lwn.net/Articles/609904/ 2014 Big API Table http://lwn.net/Articles/609973/ What is RCU? Loading Documentation/sysctl/kernel.txt +12 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ show up in /proc/sys/kernel: - panic_on_stackoverflow - panic_on_unrecovered_nmi - panic_on_warn - panic_on_rcu_stall - perf_cpu_time_max_percent - perf_event_paranoid - perf_event_max_stack Loading Loading @@ -618,6 +619,17 @@ a kernel rebuild when attempting to kdump at the location of a WARN(). ============================================================== panic_on_rcu_stall: When set to 1, calls panic() after RCU stall detection messages. This is useful to define the root cause of RCU stalls using a vmcore. 0: do not panic() when RCU stall takes place, default behavior. 1: panic() after printing RCU stall messages. ============================================================== perf_cpu_time_max_percent: Hints to the kernel how much CPU time it should be allowed to Loading include/linux/kernel.h +1 −0 Original line number Diff line number Diff line Loading @@ -451,6 +451,7 @@ extern int panic_on_oops; extern int panic_on_unrecovered_nmi; extern int panic_on_io_nmi; extern int panic_on_warn; extern int sysctl_panic_on_rcu_stall; extern int sysctl_panic_on_stackoverflow; extern bool crash_kexec_post_notifiers; Loading Loading
Documentation/RCU/Design/Requirements/Requirements.html +35 −0 Original line number Diff line number Diff line Loading @@ -2391,6 +2391,41 @@ and <tt>RCU_NONIDLE()</tt> on the other while inspecting idle-loop code. Steven Rostedt supplied <tt>_rcuidle</tt> event tracing, which is used quite heavily in the idle loop. However, there are some restrictions on the code placed within <tt>RCU_NONIDLE()</tt>: <ol> <li> Blocking is prohibited. In practice, this is not a serious restriction given that idle tasks are prohibited from blocking to begin with. <li> Although nesting <tt>RCU_NONIDLE()</tt> is permited, they cannot nest indefinitely deeply. However, given that they can be nested on the order of a million deep, even on 32-bit systems, this should not be a serious restriction. This nesting limit would probably be reached long after the compiler OOMed or the stack overflowed. <li> Any code path that enters <tt>RCU_NONIDLE()</tt> must sequence out of that same <tt>RCU_NONIDLE()</tt>. For example, the following is grossly illegal: <blockquote> <pre> 1 RCU_NONIDLE({ 2 do_something(); 3 goto bad_idea; /* BUG!!! */ 4 do_something_else();}); 5 bad_idea: </pre> </blockquote> <p> It is just as illegal to transfer control into the middle of <tt>RCU_NONIDLE()</tt>'s argument. Yes, in theory, you could transfer in as long as you also transferred out, but in practice you could also expect to get sharply worded review comments. </ol> <p> It is similarly socially unacceptable to interrupt an Loading
Documentation/RCU/stallwarn.txt +1 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ rcupdate.rcu_task_stall_timeout This boot/sysfs parameter controls the RCU-tasks stall warning interval. A value of zero or less suppresses RCU-tasks stall warnings. A positive value sets the stall-warning interval in jiffies. An RCU-tasks stall warning starts wtih the line: in jiffies. An RCU-tasks stall warning starts with the line: INFO: rcu_tasks detected stalls on tasks: Loading
Documentation/RCU/whatisRCU.txt +3 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,9 @@ to start learning about RCU: 2. What is RCU? Part 2: Usage http://lwn.net/Articles/263130/ 3. RCU part 3: the RCU API http://lwn.net/Articles/264090/ 4. The RCU API, 2010 Edition http://lwn.net/Articles/418853/ 2010 Big API Table http://lwn.net/Articles/419086/ 5. The RCU API, 2014 Edition http://lwn.net/Articles/609904/ 2014 Big API Table http://lwn.net/Articles/609973/ What is RCU? Loading
Documentation/sysctl/kernel.txt +12 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ show up in /proc/sys/kernel: - panic_on_stackoverflow - panic_on_unrecovered_nmi - panic_on_warn - panic_on_rcu_stall - perf_cpu_time_max_percent - perf_event_paranoid - perf_event_max_stack Loading Loading @@ -618,6 +619,17 @@ a kernel rebuild when attempting to kdump at the location of a WARN(). ============================================================== panic_on_rcu_stall: When set to 1, calls panic() after RCU stall detection messages. This is useful to define the root cause of RCU stalls using a vmcore. 0: do not panic() when RCU stall takes place, default behavior. 1: panic() after printing RCU stall messages. ============================================================== perf_cpu_time_max_percent: Hints to the kernel how much CPU time it should be allowed to Loading
include/linux/kernel.h +1 −0 Original line number Diff line number Diff line Loading @@ -451,6 +451,7 @@ extern int panic_on_oops; extern int panic_on_unrecovered_nmi; extern int panic_on_io_nmi; extern int panic_on_warn; extern int sysctl_panic_on_rcu_stall; extern int sysctl_panic_on_stackoverflow; extern bool crash_kexec_post_notifiers; Loading