[PATCH] skge: get rid of warning on race
authorStephen Hemminger <shemminger@osdl.org>
Tue, 6 Dec 2005 23:01:49 +0000 (15:01 -0800)
committerJeff Garzik <jgarzik@pobox.com>
Tue, 13 Dec 2005 04:33:03 +0000 (23:33 -0500)
Get rid of warning in case of race with ring full and lockless
tx on the skge driver. It is possible to be in the transmit
routine with no available slots and already stopped.

Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
drivers/net/skge.c

index 716467879b9c5e24b254219fc6916d09888dfa05..8b6e2a11e28d58a893c24761e18d3d9ac112c7cf 100644 (file)
@@ -2280,11 +2280,13 @@ static int skge_xmit_frame(struct sk_buff *skb, struct net_device *dev)
        }
 
        if (unlikely(skge->tx_avail < skb_shinfo(skb)->nr_frags +1)) {
-               netif_stop_queue(dev);
-               spin_unlock_irqrestore(&skge->tx_lock, flags);
+               if (!netif_stopped(dev)) {
+                       netif_stop_queue(dev);
 
-               printk(KERN_WARNING PFX "%s: ring full when queue awake!\n",
-                      dev->name);
+                       printk(KERN_WARNING PFX "%s: ring full when queue awake!\n",
+                              dev->name);
+               }
+               spin_unlock_irqrestore(&skge->tx_lock, flags);
                return NETDEV_TX_BUSY;
        }