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 -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html