--- m/net/core/dev.c +++ n/net/core/dev.c @@ -5041,7 +5041,10 @@ static __latent_entropy void net_tx_acti if (!(q->flags & TCQ_F_NOLOCK)) { root_lock = qdisc_lock(q); - spin_lock(root_lock); + if (!spin_trylock(root_lock)) { + __netif_reschedule(q); + continue; + } } else if (unlikely(test_bit(__QDISC_STATE_DEACTIVATED, &q->state))) { /* There is a synchronize_net() between --- m/kernel/rcu/tree_stall.h +++ n/kernel/rcu/tree_stall.h @@ -267,8 +267,10 @@ static int rcu_print_task_stall(struct r struct task_struct *ts[8]; lockdep_assert_irqs_disabled(); - if (!rcu_preempt_blocked_readers_cgp(rnp)) + if (!rcu_preempt_blocked_readers_cgp(rnp)) { + raw_spin_unlock_irqrestore_rcu_node(rnp, flags); return 0; + } pr_err("\tTasks blocked on level-%d rcu_node (CPUs %d-%d):", rnp->level, rnp->grplo, rnp->grphi); t = list_entry(rnp->gp_tasks->prev,