DORMANTno replies

[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;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help