Andi Kleen wrote:
* netif_stop_queue in hard_start_xmit is not protected against the interrupt by the
spinlock. That's racy, isn't it?
Shouldn't be, if done right. If the interrupt runs a TX completion
cycle, it will run the code
if (work_done && netif_queue_stopped(dev))
netif_wake_queue(dev)
Since ->hard_start_xmit is guaranteed never to be called if the queue is
stopped, you also guaranteed that netif_wake_queue and ->hard_start_xmit
are mutually exclusive.
This of course assumes certain details about the driver implementation,
which may be missing from that driver's TX completion handler :)
Thanks for your, and everybody else's comments. They are being saved.
Jeff