diff options
author | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2020-11-23 10:20:06 +0100 |
---|---|---|
committer | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2020-11-23 10:20:06 +0100 |
commit | dc7298bb367dda18f5c4d0d9a89ccf8a75c17fdd (patch) | |
tree | b8c3dd2115db13cdc5fd24abc68a69353be69ee1 | |
parent | 877c13127a8d91c7b6f423cb6c6209f84e8275ec (diff) | |
download | linux-rt-dc7298bb367dda18f5c4d0d9a89ccf8a75c17fdd.tar.gz |
[ANNOUNCE] v5.10-rc5-rt9v5.10-rc5-rt9-patches
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-rw-r--r-- | patches/localversion.patch | 2 | ||||
-rw-r--r-- | patches/rcu-Don-t-invoke-try_invoke_on_locked_down_task-with.patch | 97 | ||||
-rw-r--r-- | patches/series | 3 |
3 files changed, 1 insertions, 101 deletions
diff --git a/patches/localversion.patch b/patches/localversion.patch index 68c7b973cc48..02952cda4bfa 100644 --- a/patches/localversion.patch +++ b/patches/localversion.patch @@ -10,4 +10,4 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- /dev/null +++ b/localversion-rt @@ -0,0 +1 @@ -+-rt8 ++-rt9 diff --git a/patches/rcu-Don-t-invoke-try_invoke_on_locked_down_task-with.patch b/patches/rcu-Don-t-invoke-try_invoke_on_locked_down_task-with.patch deleted file mode 100644 index 6b74a5d3d357..000000000000 --- a/patches/rcu-Don-t-invoke-try_invoke_on_locked_down_task-with.patch +++ /dev/null @@ -1,97 +0,0 @@ -From: "Paul E. McKenney" <paulmck@kernel.org> -Date: Thu, 24 Sep 2020 15:11:55 -0700 -Subject: [PATCH] rcu: Don't invoke try_invoke_on_locked_down_task() with - irqs disabled - -The try_invoke_on_locked_down_task() function requires that -interrupts be enabled, but it is called with interrupts disabled from -rcu_print_task_stall(), resulting in an "IRQs not enabled as expected" -diagnostic. This commit therefore updates rcu_print_task_stall() -to accumulate a list of the first few tasks while holding the current -leaf rcu_node structure's ->lock, then releases that lock and only then -uses try_invoke_on_locked_down_task() to attempt to obtain per-task -detailed information. Of course, as soon as ->lock is released, the -task might exit, so the get_task_struct() function is used to prevent -the task structure from going away in the meantime. - -Link: https://lore.kernel.org/lkml/000000000000903d5805ab908fc4@google.com/ -Reported-by: syzbot+cb3b69ae80afd6535b0e@syzkaller.appspotmail.com -Reported-by: syzbot+f04854e1c5c9e913cc27@syzkaller.appspotmail.com -Signed-off-by: Paul E. McKenney <paulmck@kernel.org> -Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> ---- - kernel/rcu/tree_stall.h | 22 +++++++++++++++++----- - 1 file changed, 17 insertions(+), 5 deletions(-) - ---- a/kernel/rcu/tree_stall.h -+++ b/kernel/rcu/tree_stall.h -@@ -249,13 +249,16 @@ static bool check_slow_task(struct task_ - - /* - * Scan the current list of tasks blocked within RCU read-side critical -- * sections, printing out the tid of each. -+ * sections, printing out the tid of each of the first few of them. - */ --static int rcu_print_task_stall(struct rcu_node *rnp) -+static int rcu_print_task_stall(struct rcu_node *rnp, unsigned long flags) -+ __releases(rnp->lock) - { -+ int i = 0; - int ndetected = 0; - struct rcu_stall_chk_rdr rscr; - struct task_struct *t; -+ struct task_struct *ts[8]; - - if (!rcu_preempt_blocked_readers_cgp(rnp)) - return 0; -@@ -264,6 +267,14 @@ static int rcu_print_task_stall(struct r - t = list_entry(rnp->gp_tasks->prev, - struct task_struct, rcu_node_entry); - list_for_each_entry_continue(t, &rnp->blkd_tasks, rcu_node_entry) { -+ get_task_struct(t); -+ ts[i++] = t; -+ if (i >= ARRAY_SIZE(ts)) -+ break; -+ } -+ raw_spin_unlock_irqrestore_rcu_node(rnp, flags); -+ for (i--; i; i--) { -+ t = ts[i]; - if (!try_invoke_on_locked_down_task(t, check_slow_task, &rscr)) - pr_cont(" P%d", t->pid); - else -@@ -273,6 +284,7 @@ static int rcu_print_task_stall(struct r - ".q"[rscr.rs.b.need_qs], - ".e"[rscr.rs.b.exp_hint], - ".l"[rscr.on_blkd_list]); -+ put_task_struct(t); - ndetected++; - } - pr_cont("\n"); -@@ -293,8 +305,9 @@ static void rcu_print_detail_task_stall_ - * Because preemptible RCU does not exist, we never have to check for - * tasks blocked within RCU read-side critical sections. - */ --static int rcu_print_task_stall(struct rcu_node *rnp) -+static int rcu_print_task_stall(struct rcu_node *rnp, unsigned long flags) - { -+ raw_spin_unlock_irqrestore_rcu_node(rnp, flags); - return 0; - } - #endif /* #else #ifdef CONFIG_PREEMPT_RCU */ -@@ -472,7 +485,6 @@ static void print_other_cpu_stall(unsign - pr_err("INFO: %s detected stalls on CPUs/tasks:\n", rcu_state.name); - rcu_for_each_leaf_node(rnp) { - raw_spin_lock_irqsave_rcu_node(rnp, flags); -- ndetected += rcu_print_task_stall(rnp); - if (rnp->qsmask != 0) { - for_each_leaf_node_possible_cpu(rnp, cpu) - if (rnp->qsmask & leaf_node_cpu_bit(rnp, cpu)) { -@@ -480,7 +492,7 @@ static void print_other_cpu_stall(unsign - ndetected++; - } - } -- raw_spin_unlock_irqrestore_rcu_node(rnp, flags); -+ ndetected += rcu_print_task_stall(rnp, flags); // Releases rnp->lock. - } - - for_each_possible_cpu(cpu) diff --git a/patches/series b/patches/series index a262bc152abf..b4463711602b 100644 --- a/patches/series +++ b/patches/series @@ -77,9 +77,6 @@ mm-highmem-Take-kmap_high_get-properly-into-account.patch # highmem-Don-t-disable-preemption-on-RT-in-kmap_atomi.patch -# 8a26c219cafe66431da3350da1687a50f635f3c2 -rcu-Don-t-invoke-try_invoke_on_locked_down_task-with.patch - ############################################################ # POSTED ############################################################ |