On Fri, Jun 03, 2016 at 05:10:18PM -0300, Daniel Bristot de Oliveira wrote: | Currently, a schedule while atomic error prints the stack trace to the | kernel log and the system continue running. | | Although it is possible to collect the kernel log messages and analyze | it, often more information are needed. Furthermore, keep the system | running is not always the best choice. For example, when the preempt | count underflows the system will not stop to complain about scheduling | while atomic, so the kernel log can wrap around overwriting the first | stack trace, tuning the analysis even more challenging. | | This patch uses the kernel.panic_on_warn sysctl to help out on these | more complex situations. | | When kernel.panic_on_warn is set to 1, the kernel will panic() in the | schedule while atomic detection. | | The default value of the sysctl is 0, maintaining the current behavior. | | Cc: Ingo Molnar <[email protected]> | Cc: Peter Zijlstra <[email protected]> | Cc: Christian Borntraeger <[email protected]> | Cc: "Luis Claudio R. Goncalves" <[email protected]> | Signed-off-by: Daniel Bristot de Oliveira <[email protected]> | --- | kernel/sched/core.c | 3 +++ | 1 file changed, 3 insertions(+) | | diff --git a/kernel/sched/core.c b/kernel/sched/core.c | index 7f2cae4..7d07ed9 100644 | --- a/kernel/sched/core.c | +++ b/kernel/sched/core.c | @@ -3146,6 +3146,9 @@ static noinline void __schedule_bug(struct task_struct *prev) | pr_cont("\n"); | } | #endif | + if (panic_on_warn) | + panic("scheduling while atomic\n"); | + | dump_stack(); | add_taint(TAINT_WARN, LOCKDEP_STILL_OK); | } | -- | 2.5.5
Reviewed-by: Luis Claudio R. Goncalves <[email protected]>

