rcu: Fix missing task information during rcu-preempt stall
PATCH 1/1 rcu: Fix missing task information during rcu-preempt stall
The first item list_for_each_entry_continue(alist) iterates over is alist->next, rather than alist itself. Consequently, rcu_print_detail_task_stall_rnp() skips the task referenced by gp_tasks.
Use gp_tasks->prev as the argument to list_for_each_entry_continue() instead.
Signed-off-by Patrick Daly <[email protected]>
--- kernel/rcu/tree_plugin.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
kernel/rcu/tree_plugin.h +2 -2
@@ -459,7 +459,7 @@ static void rcu_print_detail_task_stall_rnp(struct rcu_node *rnp)raw_spin_unlock_irqrestore (&rnp->lock, flags);return ; } - t =list_entry (rnp->gp_tasks, + 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)sched_show_task (t);
@@ -524,7 +524,7 @@ static int rcu_print_task_stall(struct rcu_node *rnp)if (!rcu_preempt_blocked_readers_cgp (rnp))return 0 ;rcu_print_task_stall_begin (rnp); - t =list_entry (rnp->gp_tasks, + 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) {printk (KERN_CONT " P%d" , t->pid);
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Quoted 6 lines · Patrick Daly
The first item
list_for_each_entry_continue(alist)iterates over isalist->next, rather than alist itself. Consequently,rcu_print_detail_task_stall_rnp()skips the task referenced bygp_tasks.Use
gp_tasks->prevas the argument tolist_for_each_entry_continue()instead.
Good catch, thank you!
Queued for v4.2.
Thanx, Paul
Quoted 31 lines
Signed-off-by Patrick Daly <[email protected]>--- kernel/rcu/tree_plugin.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)kernel/rcu/tree_plugin.h +2
-2@@ -459,7 +459,7 @@ static void rcu_print_detail_task_stall_rnp(struct rcu_node *rnp)raw_spin_unlock_irqrestore (&rnp->lock, flags);return ; } - t =list_entry (rnp->gp_tasks, + 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)sched_show_task (t);@@ -524,7 +524,7 @@ static int rcu_print_task_stall(struct rcu_node *rnp)if (!rcu_preempt_blocked_readers_cgp (rnp))return 0 ;rcu_print_task_stall_begin (rnp); - t =list_entry (rnp->gp_tasks, + 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) {printk (KERN_CONT " P%d" , t->pid);Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project