diff mbox series

[1/1] sched: panic, when call schedule with preemption disable

Message ID 1574323985-24193-1-git-send-email-yt.chang@mediatek.com (mailing list archive)
State New, archived
Headers show
Series [1/1] sched: panic, when call schedule with preemption disable | expand

Commit Message

YT Chang Nov. 21, 2019, 8:13 a.m. UTC
When preemption is disable, call schedule() is incorrect behavior.
Suggest to panic directly rather than depend on panic_on_warn.

Signed-off-by: YT Chang <yt.chang@mediatek.com>
---
 kernel/sched/core.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Comments

Peter Zijlstra Nov. 21, 2019, 12:30 p.m. UTC | #1
On Thu, Nov 21, 2019 at 04:13:05PM +0800, YT Chang wrote:
> When preemption is disable, call schedule() is incorrect behavior.
> Suggest to panic directly rather than depend on panic_on_warn.

Why!?
YT Chang Nov. 26, 2019, 1:11 p.m. UTC | #2
On Thu, 2019-11-21 at 13:30 +0100, Peter Zijlstra wrote:
> On Thu, Nov 21, 2019 at 04:13:05PM +0800, YT Chang wrote:
> > When preemption is disable, call schedule() is incorrect behavior.
> > Suggest to panic directly rather than depend on panic_on_warn.
> 
> Why!?


1. Panic directly will easily find the root cause. 

   Call scheduling in atomic affects not only performance but also
system stability. 
    ex: 
      Call scheduling in IRQ will result in IRQ enable after schedule() 

2. A lot of warnings depend on panic_on_warn. It is not practical to
set panic_on_warn=1.
diff mbox series

Patch

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 7880f4f..214e8d8 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -3861,9 +3861,8 @@  static noinline void __schedule_bug(struct task_struct *prev)
 		print_ip_sym(preempt_disable_ip);
 		pr_cont("\n");
 	}
-	if (panic_on_warn)
-		panic("scheduling while atomic\n");
 
+	panic("scheduling while atomic\n");
 	dump_stack();
 	add_taint(TAINT_WARN, LOCKDEP_STILL_OK);
 }