Messages in this thread Patch in this message |  | | Date | Thu, 08 Jun 2006 19:15:50 -0700 | From | Jeremy Fitzhardinge <> | Subject | [PATCH RFC] netpoll: don't spin forever sending to stopped queues |
| |
Matt Mackall wrote: > That's odd. Netpoll holds a reference to the device, of course, but so > does a normal "up" interface. So that shouldn't be the problem. > Another possibility is that outgoing packets from printks in the > driver are causing difficulty. Not sure what can be done about that. > Here's a patch. I haven't tested it beyond compiling it, and I don't know if it is actually correct. In this case, it seems pointless to spin waiting for an even which will never happen. Should netif_poll_disable() cause netpoll_send_skb() (or something) to not even bother trying to send? netif_poll_disable seems mysteriously simple to me.
J
--
Subject: netpoll: don't spin forever sending to stopped queues
When transmitting a skb in netpoll_send_skb(), only retry a limited number of times if the device queue is stopped.
Signed-off-by: Jeremy Fitzhardinge <jeremy@goop.org>
diff -r aac813f54617 net/core/netpoll.c --- a/net/core/netpoll.c Wed Jun 07 14:53:40 2006 -0700 +++ b/net/core/netpoll.c Thu Jun 08 19:00:29 2006 -0700 @@ -280,15 +280,10 @@ static void netpoll_send_skb(struct netp * network drivers do not expect to be called if the queue is * stopped. */ - if (netif_queue_stopped(np->dev)) { - np->dev->xmit_lock_owner = -1; - spin_unlock(&np->dev->xmit_lock); - netpoll_poll(np); - udelay(50); - continue; - } - - status = np->dev->hard_start_xmit(skb, np->dev); + status = NETDEV_TX_BUSY; + if (!netif_queue_stopped(np->dev)) + status = np->dev->hard_start_xmit(skb, np->dev); + np->dev->xmit_lock_owner = -1; spin_unlock(&np->dev->xmit_lock);
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |