[PATCH] (10/12) skge: use lockless transmit
From: Stephen Hemminger <hidden>
Date: 2005-03-03 19:43:04
Support lockless transmit, because there is existing transmit lock. Also small declaration style fix. Signed-off-by: Stephen Hemminger <redacted>
--- skge-2.6.11/drivers/net/skge.c.orig 2005-03-03 10:28:11.000000000 -0800
+++ skge-2.6.11/drivers/net/skge.c 2005-03-03 10:29:41.000000000 -0800@@ -2289,13 +2289,20 @@ struct skge_tx_desc *td; int i; u32 control, len; - u64 map; unsigned long flags; + u64 map; + unsigned long flags; skb = skb_padto(skb, ETH_ZLEN); if (!skb) return NETDEV_TX_OK; - spin_lock_irqsave(&skge->tx_lock, flags); + local_irq_save(flags); + if (!spin_trylock(&skge->tx_lock)) { + /* Collision - tell upper layer to requeue */ + local_irq_restore(flags); + return NETDEV_TX_LOCKED; + } + if (unlikely(skge->tx_avail < skb_shinfo(skb)->nr_frags +1)) { netif_stop_queue(dev); spin_unlock_irqrestore(&skge->tx_lock, flags);
@@ -3089,6 +3096,7 @@ dev->poll_controller = skge_netpoll; #endif dev->irq = hw->pdev->irq; + dev->features = NETIF_F_LLTX; skge = netdev_priv(dev); skge->netdev = dev;