[patch 040/101] sky2: transmit timeout deadlock

2007-03-07 Thread Greg KH
From: Stephen Hemminger <[EMAIL PROTECTED]>

The code in transmit timeout incorrectly assumed that netif_tx_lock
was not set.

Signed-off-by: Stephen Hemminger <[EMAIL PROTECTED]>
Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>

---
 drivers/net/sky2.c |6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

--- linux-2.6.20.1.orig/drivers/net/sky2.c
+++ linux-2.6.20.1/drivers/net/sky2.c
@@ -1796,6 +1796,7 @@ out:
 
 /* Transmit timeout is only called if we are running, carries is up
  * and tx queue is full (stopped).
+ * Called with netif_tx_lock held.
  */
 static void sky2_tx_timeout(struct net_device *dev)
 {
@@ -1821,17 +1822,14 @@ static void sky2_tx_timeout(struct net_d
sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
} else if (report != sky2->tx_cons) {
printk(KERN_INFO PFX "status report lost?\n");
-
-   netif_tx_lock_bh(dev);
sky2_tx_complete(sky2, report);
-   netif_tx_unlock_bh(dev);
} else {
printk(KERN_INFO PFX "hardware hung? flushing\n");
 
sky2_write32(hw, Q_ADDR(txq, Q_CSR), BMU_STOP);
sky2_write32(hw, Y2_QADDR(txq, PREF_UNIT_CTRL), 
PREF_UNIT_RST_SET);
 
-   sky2_tx_clean(dev);
+   sky2_tx_complete(sky2, sky2->tx_prod);
 
sky2_qset(hw, txq);
sky2_prefetch_init(hw, txq, sky2->tx_le_map, TX_RING_SIZE - 1);

--
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[patch 040/101] sky2: transmit timeout deadlock

2007-03-07 Thread Greg KH
From: Stephen Hemminger [EMAIL PROTECTED]

The code in transmit timeout incorrectly assumed that netif_tx_lock
was not set.

Signed-off-by: Stephen Hemminger [EMAIL PROTECTED]
Signed-off-by: Greg Kroah-Hartman [EMAIL PROTECTED]

---
 drivers/net/sky2.c |6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

--- linux-2.6.20.1.orig/drivers/net/sky2.c
+++ linux-2.6.20.1/drivers/net/sky2.c
@@ -1796,6 +1796,7 @@ out:
 
 /* Transmit timeout is only called if we are running, carries is up
  * and tx queue is full (stopped).
+ * Called with netif_tx_lock held.
  */
 static void sky2_tx_timeout(struct net_device *dev)
 {
@@ -1821,17 +1822,14 @@ static void sky2_tx_timeout(struct net_d
sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
} else if (report != sky2-tx_cons) {
printk(KERN_INFO PFX status report lost?\n);
-
-   netif_tx_lock_bh(dev);
sky2_tx_complete(sky2, report);
-   netif_tx_unlock_bh(dev);
} else {
printk(KERN_INFO PFX hardware hung? flushing\n);
 
sky2_write32(hw, Q_ADDR(txq, Q_CSR), BMU_STOP);
sky2_write32(hw, Y2_QADDR(txq, PREF_UNIT_CTRL), 
PREF_UNIT_RST_SET);
 
-   sky2_tx_clean(dev);
+   sky2_tx_complete(sky2, sky2-tx_prod);
 
sky2_qset(hw, txq);
sky2_prefetch_init(hw, txq, sky2-tx_le_map, TX_RING_SIZE - 1);

--
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/