Re: infinite spin in RT when booting with DHCP on
From: Steven Rostedt <rostedt@goodmis.org>
Date: 2012-02-02 18:21:40
On Thu, 2012-02-02 at 12:33 -0500, Steven Rostedt wrote:
NETDEV_TX_BUSY is part of NET_TX_MASK thus the packet is requeued (the skb->next = nskb) in dev_hard_start_xmit(). And the NETDEV_TX_BUSY is passed back to sch_derect_xmit() which calls dev_requeue_skb() which then calls __netif_schedule(q) which will call __netif_reschedule(q) which will then do raise_softirq_irqoff(NET_TX_SOFTIRQ). Thus, as soon as ksoftirq exits this routine, it will restart the process over again. As the fec driver never finished with its negotiations, the process starts over again and we never move forward.
I'm thinking this bug exists in mainline too. If you set the ksoftirqd threads to a real-time task on mainline, and then enable this driver, you may also get it to starve. Right now, the softirq will detect the requeueing, and push it off to the ksoftirqd thread. But in mainline, that runs as a normal process, and it will let the worker thread finish the negotiations. But if that was a RT task, it might not. -- Steve