--- m/net/core/dev.c +++ n/net/core/dev.c @@ -4990,6 +4990,7 @@ EXPORT_SYMBOL(netif_rx_any_context); static __latent_entropy void net_tx_action(struct softirq_action *h) { struct softnet_data *sd = this_cpu_ptr(&softnet_data); + unsigned long ts = jiffies + 2; if (sd->completion_queue) { struct sk_buff *clist; @@ -5034,6 +5035,11 @@ static __latent_entropy void net_tx_acti head = head->next_sched; + if (time_after(jiffies, ts)) { + __netif_reschedule(q); + continue; + } + /* We need to make sure head->next_sched is read * before clearing __QDISC_STATE_SCHED */