From 9c4f11d2dd38a95607947a3df64fb8c04088eab5 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Fri, 9 Dec 2005 11:35:08 -0800 Subject: [PATCH] --- yaml --- r: 15801 b: refs/heads/master c: 8c463ef7928d7a42bb9ca410df9b294dc01c1850 h: refs/heads/master i: 15799: 3c32464571550b3b2e4eb62e7ad74b568b4492e1 v: v3 --- [refs] | 2 +- trunk/drivers/net/sky2.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index d8296a6bc5fa..8d4774bb25b7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8cc048e338ad4034255f3ff72ef1f631963e1263 +refs/heads/master: 8c463ef7928d7a42bb9ca410df9b294dc01c1850 diff --git a/trunk/drivers/net/sky2.c b/trunk/drivers/net/sky2.c index e1733aa17790..54947ae99482 100644 --- a/trunk/drivers/net/sky2.c +++ b/trunk/drivers/net/sky2.c @@ -1081,11 +1081,16 @@ static int sky2_xmit_frame(struct sk_buff *skb, struct net_device *dev) return NETDEV_TX_LOCKED; if (unlikely(tx_avail(sky2) < tx_le_req(skb))) { - netif_stop_queue(dev); + /* There is a known but harmless race with lockless tx + * and netif_stop_queue. + */ + if (!netif_queue_stopped(dev)) { + netif_stop_queue(dev); + printk(KERN_WARNING PFX "%s: ring full when queue awake!\n", + dev->name); + } spin_unlock(&sky2->tx_lock); - printk(KERN_WARNING PFX "%s: ring full when queue awake!\n", - dev->name); return NETDEV_TX_BUSY; }