blob: 326d2cd17768c5e5b885f1cb83f3b4d820a5dfdc [file] [log] [blame]
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index c52c2eba7c73..0fd99798c274 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -6588,6 +6588,8 @@ pick_next_task(struct rq *rq, struct task_struct *prev, struct rq_flags *rf)
*
* WARNING: must be called with preemption disabled!
*/
+static int rcu_tort_ds;
+
static void __sched notrace __schedule(unsigned int sched_mode)
{
struct task_struct *prev, *next;
@@ -6638,6 +6640,10 @@ static void __sched notrace __schedule(unsigned int sched_mode)
* that we form a control dependency vs deactivate_task() below.
*/
prev_state = READ_ONCE(prev->__state);
+ // Dump stack for uninterruptible every 10 stacks.
+ if (prev_state & TASK_UNINTERRUPTIBLE && ((rcu_tort_ds++ % 10) == 0)) {
+ trace_dump_stack(0);
+ }
if (!(sched_mode & SM_MASK_PREEMPT) && prev_state) {
if (signal_pending_state(prev_state, prev)) {
WRITE_ONCE(prev->__state, TASK_RUNNING);