Search Linux Wireless

Re: [WIP] p54: deal with allocation failures in rx path

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Saturday 04 July 2009 18:40:14 Larry Finger wrote:
> I have logged the usb transfers, but not yet analyzed them.
great!

> This time I got a new failure - I hit this warning at
>            net/mac80211/tx.c:1299
>                         retries++;
>                         if (WARN(retries > 10, "tx refused but queue
> active\n"))
>                                 goto drop;
>                         goto retry;
> 

> If I have analyzed this correctly, I hit this section of
> p54_tx_qos_accounting_alloc at drivers/net/wireless/p54/txrx.c:204.
> I'm running the splitup patches.
> 
>         if (unlikely(queue->len > queue->limit &&
> IS_QOS_QUEUE(p54_queue))) {
>                 spin_unlock_irqrestore(&priv->tx_stats_lock, flags);
>                 return -ENOSPC;
>         }
> 
> Any suggestions on debugging this would be appreciated.
---
diff --git a/drivers/net/wireless/p54/txrx.c b/drivers/net/wireless/p54/txrx.c
index ea074a6..69fc70a 100644
--- a/drivers/net/wireless/p54/txrx.c
+++ b/drivers/net/wireless/p54/txrx.c
@@ -25,6 +25,7 @@
 #include "p54.h"
 #include "lmac.h"
 
+#define P54_MM_DEBUG
 #ifdef P54_MM_DEBUG
 static void p54_dump_tx_queue(struct p54_common *priv)
 {
@@ -200,7 +201,18 @@ static int p54_tx_qos_accounting_alloc(struct p54_common *priv,
 
 	spin_lock_irqsave(&priv->tx_stats_lock, flags);
 	if (unlikely(queue->len > queue->limit && IS_QOS_QUEUE(p54_queue))) {
+		u16 ac_queue = p54_queue - P54_QUEUE_DATA;
+		int i;
+
+		printk(KERN_DEBUG "TX queue stats\n");
+		for (i = 0; i < 8; i++)
+			printk(KERN_DEBUG "\ttxq[%d]: used %d [of %d] => %s\n",
+			       i, priv->tx_stats[i].len,
+			       priv->tx_stats[i].limit,
+			       ieee80211_queue_stopped(priv->hw, ac_queue) ?
+			       "stopped" : "running");
 		spin_unlock_irqrestore(&priv->tx_stats_lock, flags);
+		p54_dump_tx_queue(priv);
 		return -ENOSPC;
 	}
 
---
let's hope the queue .len count does not turn negative!

regards,
	Chr
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux