|
|
@@ -560,8 +560,14 @@ static void rcu_print_detail_task_stall_rnp(struct rcu_node *rnp)
|
|
|
}
|
|
|
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)
|
|
|
+ list_for_each_entry_continue(t, &rnp->blkd_tasks, rcu_node_entry) {
|
|
|
+ /*
|
|
|
+ * We could be printing a lot while holding a spinlock.
|
|
|
+ * Avoid triggering hard lockup.
|
|
|
+ */
|
|
|
+ touch_nmi_watchdog();
|
|
|
sched_show_task(t);
|
|
|
+ }
|
|
|
raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
|
|
|
}
|
|
|
|
|
|
@@ -1677,6 +1683,12 @@ static void print_cpu_stall_info(struct rcu_state *rsp, int cpu)
|
|
|
char *ticks_title;
|
|
|
unsigned long ticks_value;
|
|
|
|
|
|
+ /*
|
|
|
+ * We could be printing a lot while holding a spinlock. Avoid
|
|
|
+ * triggering hard lockup.
|
|
|
+ */
|
|
|
+ touch_nmi_watchdog();
|
|
|
+
|
|
|
if (rsp->gpnum == rdp->gpnum) {
|
|
|
ticks_title = "ticks this GP";
|
|
|
ticks_value = rdp->ticks_this_gp;
|