Skip to contentSkip to conversation

ipw2200: Fix NETDEV_TX_BUSY erroneous returned

PATCH In review Zhu Yi 3 participants 3 messages Jan 4, 2006

Subsystems (3)
lore
Share & tools
lore

Zhu Yi

author
#0 lore raw

PATCH 1/1 ipw2200: Fix NETDEV_TX_BUSY erroneous returned

This patch fixes the warning below warning for the ipw2200 driver.

NETDEV_TX_BUSY returned; driver should report queue full via ieee_device->is_queue_full.

--

drivers/net/wireless/ipw2200.c +0 -0
diff -urp linux.orig/drivers/net/wireless/ipw2200.c linux/drivers/net/wireless/ipw2200.c

+0800
@@ -9649,11 +9649,6 @@ static inline int ipw_tx_skb(struct ipw_
u16 remaining_bytes;
int fc;

- /* If there isn't room in the queue, we return busy and let the
- * network stack requeue the packet for us */
- if (ipw_queue_space(q) < q->high_mark)
- return NETDEV_TX_BUSY;
-
switch (priv->ieee->iw_mode) {
case IW_MODE_ADHOC:
hdr_len = IEEE80211_3ADDR_LEN;
@@ -9871,7 +9866,7 @@ static int ipw_net_hard_start_xmit(struc

fail_unlock:
spin_unlock_irqrestore(&priv->lock, flags);
- return 1;
+ return -1;
}

static struct net_device_stats *ipw_net_get_stats(struct net_device *dev)

#1 lore raw
Quoted 27 lines · On Wed, 4 Jan 2006 12:09:54 +0800 Zhu Yi <[email protected]> wrote:

This patch fixes the warning below warning for the ipw2200 driver.

NETDEV_TX_BUSY returned; driver should report queue full via ieee_device->is_queue_full.

--

diff -urp linux.orig/drivers/net/wireless/ipw2200.c linux/drivers/net/wireless/ipw2200.c

drivers/net/wireless/ipw2200.c +1 -5
+0800
@@ -9649,11 +9649,6 @@ static inline int ipw_tx_skb(struct ipw_
 	u16 remaining_bytes;
 	int fc;
 
-	/* If there isn't room in the queue, we return busy and let the
-	 * network stack requeue the packet for us */
-	if (ipw_queue_space(q) < q->high_mark)
-		return NETDEV_TX_BUSY;
-
 	switch (priv->ieee->iw_mode) {
 	case IW_MODE_ADHOC:
 		hdr_len = IEEE80211_3ADDR_LEN;

drivers/net/wireless/ipw2200.c static int ipw_net_hard_start_xmit(struc · line 9869

Quoted 5 lines
drivers/net/wireless/ipw2200.c +1 -1
@@ -9871,7 +9866,7 @@ static int ipw_net_hard_start_xmit(struc
 
       fail_unlock:
 	spin_unlock_irqrestore(&priv->lock, flags);
-	return 1;
+	return -1;

That's not right... -1 is NETDEV_TX_LOCKED, which is not what you want. Also, please use NETDEV_TX_ values for return values from transmit routine.

You should post this to [email protected] and [email protected] for discussion there.

Signature · 2 lines
Stephen Hemminger <[email protected]>
OSDL http://developer.osdl.org/~shemminger
#2 lore raw
In reply to Zhu Yi

Zhu Yi <[email protected]> :

Quoted 5 lines

This patch fixes the warning below warning for the ipw2200 driver.

NETDEV_TX_BUSY returned; driver should report queue full via ieee_device->is_queue_full.

Beyond what was said by Stephen Hemminger, the driver reports a NETDEV_TX_BUSY when !STATUS_ASSOCIATED: neither this patch nor mine fix it.

Btw the patch that I posted earlier forgets to protect against every undue wake-up through:

ipw_rx
-> ipw_rx_notification
-> priv->link_up (work_queue)

      -> ipw_bg_link_up
         -> ipw_link_up

It will need some extra care to correctly play the netif_{stop/wake}_queue dance.

--
Ueimor