netdev
[Top] [All Lists]

[PATCH] (10/12) skge: use lockless transmit

To: Jeff Garzik <jgarzik@xxxxxxxxx>
Subject: [PATCH] (10/12) skge: use lockless transmit
From: Stephen Hemminger <shemminger@xxxxxxxx>
Date: Thu, 3 Mar 2005 11:43:04 -0800
Cc: netdev@xxxxxxxxxxx
Organization: Open Source Development Lab
Sender: netdev-bounce@xxxxxxxxxxx
Support lockless transmit, because there is existing transmit
lock. Also small declaration style fix.

Signed-off-by: Stephen Hemminger <shemminger@xxxxxxxx>

--- 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;

<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] (10/12) skge: use lockless transmit, Stephen Hemminger <=