Thread (28 messages) 28 messages, 7 authors, 2012-02-08

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

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help