OSDN Git Service

net: ethernet: altera: TSE: do not use tx queue lock in tx completion handler
authorLino Sanfilippo <LinoSanfilippo@gmx.de>
Wed, 30 Nov 2016 22:48:32 +0000 (23:48 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 2 Dec 2016 17:10:25 +0000 (12:10 -0500)
The driver already uses its private lock for synchronization between xmit
and xmit completion handler making the additional use of the xmit_lock
unnecessary.
Furthermore the driver does not set NETIF_F_LLTX resulting in xmit to be
called with the xmit_lock held and then taking the private lock while xmit
completion handler does the reverse, first take the private lock, then the
xmit_lock.
Fix these issues by not taking the xmit_lock in the tx completion handler.

Signed-off-by: Lino Sanfilippo <LinoSanfilippo@gmx.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/altera/altera_tse_main.c

index 2868909..a0eee72 100644 (file)
@@ -463,7 +463,6 @@ static int tse_tx_complete(struct altera_tse_private *priv)
 
        if (unlikely(netif_queue_stopped(priv->dev) &&
                     tse_tx_avail(priv) > TSE_TX_THRESH(priv))) {
-               netif_tx_lock(priv->dev);
                if (netif_queue_stopped(priv->dev) &&
                    tse_tx_avail(priv) > TSE_TX_THRESH(priv)) {
                        if (netif_msg_tx_done(priv))
@@ -471,7 +470,6 @@ static int tse_tx_complete(struct altera_tse_private *priv)
                                           __func__);
                        netif_wake_queue(priv->dev);
                }
-               netif_tx_unlock(priv->dev);
        }
 
        spin_unlock(&priv->tx_lock);