Development issues regarding the cerowrt test router project
 help / color / mirror / Atom feed
* [Cerowrt-devel] Fwd: [bug #422] ath9k queue hang
@ 2014-04-15  4:06 Dave Taht
  2014-04-15 18:46 ` Felix Fietkau
  0 siblings, 1 reply; 2+ messages in thread
From: Dave Taht @ 2014-04-15  4:06 UTC (permalink / raw)
  To: cerowrt-devel, cerowrt

regrettably I am too wiped to look this over further right now, but the patchset
seems very promising.

I will review on a fresh brain in the morning. Other eyeballs desired
- this will have to get patched on top of 3.14 and then backported to
the 3.10 backport....

---------- Forwarded message ----------
From: Ben Greear <greearb@candelatech.com>
Date: Mon, Apr 14, 2014 at 8:49 PM
Subject: Re: [ath9k-devel] ath9k queue hang
To: Dave Taht <dave.taht@gmail.com>, "ath9k-devel@lists.ath9k.org"
<ath9k-devel@venema.h4ckr.net>


On 04/14/2014 07:16 PM, Dave Taht wrote:
>
> We have been trying to replicate a bug in seeing wifi connections hanging
> in strange ways after tons of data is transferred... for several months now.
>
> The symptoms varied, anything from multicast failing to background or best
> effort traffic failing - from local access working with remote access
> not working...
>
> Last week, we finally got a situation where we had enough debugging on to see
> something that matches the symptoms we saw, in that one of the wifi queues
> would hang and leave the overlying qdisc full of packets that didn't drain.


Sounds familiar...I had a relatively clean patch in the 3.9 days, but had some
issues merging along the way and haven't bothered to rebase it, so patch is
not as clean as it used to be:

http://dmz2.candelatech.com/git/?p=linux-3.14.dev.y/.git;a=commitdiff;h=a34e34f46fbffc627dfc2d93c508f580fbaf29e2;hp=cce0d841338348c69ae6f7ef1b2bc8a6abea3fc4
http://dmz2.candelatech.com/git/?p=linux-3.14.dev.y/.git;a=commitdiff;h=3ecefa9c9f7eed21002dad7a6540d6d250297466;hp=134543c6fec7e28bf91272ce995b550b1bf73c62

I posted the patch to the mailing lists some time back..maybe a year or two ago.

If I recall, we could reproduce our problem fairly reliably by
stepping an attenuator
in 10 db steps while under load.

I'd be curious to know if you try it out and it works for you...

Thanks,
Ben

--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc  http://www.candelatech.com



-- 
Dave Täht

NSFW: https://w2.eff.org/Censorship/Internet_censorship_bills/russell_0296_indecent.article

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [Cerowrt-devel] Fwd: [bug #422] ath9k queue hang
  2014-04-15  4:06 [Cerowrt-devel] Fwd: [bug #422] ath9k queue hang Dave Taht
@ 2014-04-15 18:46 ` Felix Fietkau
  0 siblings, 0 replies; 2+ messages in thread
From: Felix Fietkau @ 2014-04-15 18:46 UTC (permalink / raw)
  To: Dave Taht, cerowrt-devel, cerowrt

On 2014-04-15 06:06, Dave Taht wrote:
> regrettably I am too wiped to look this over further right now, but the patchset
> seems very promising.
> 
> I will review on a fresh brain in the morning. Other eyeballs desired
> - this will have to get patched on top of 3.14 and then backported to
> the 3.10 backport....
The patch is a rather crude workaround which unfortunately will not
help with narrowing down the cause. Also, doing a chip reset because a
software queue is stuck is overkill.

Please test if this patch helps. The tid->paused flag is no longer
necessary since my rework of the tx path.
---
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
@@ -254,7 +254,6 @@ struct ath_atx_tid {
 
 	s8 bar_index;
 	bool sched;
-	bool paused;
 	bool active;
 };
 
--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
@@ -107,9 +107,6 @@ static void ath_tx_queue_tid(struct ath_
 {
 	struct ath_atx_ac *ac = tid->ac;
 
-	if (tid->paused)
-		return;
-
 	if (tid->sched)
 		return;
 
@@ -1407,7 +1404,6 @@ int ath_tx_aggr_start(struct ath_softc *
 	ath_tx_tid_change_state(sc, txtid);
 
 	txtid->active = true;
-	txtid->paused = true;
 	*ssn = txtid->seq_start = txtid->seq_next;
 	txtid->bar_index = -1;
 
@@ -1427,7 +1423,6 @@ void ath_tx_aggr_stop(struct ath_softc *
 
 	ath_txq_lock(sc, txq);
 	txtid->active = false;
-	txtid->paused = false;
 	ath_tx_flush_tid(sc, txtid);
 	ath_tx_tid_change_state(sc, txtid);
 	ath_txq_unlock_complete(sc, txq);
@@ -1487,7 +1482,7 @@ void ath_tx_aggr_wakeup(struct ath_softc
 		ath_txq_lock(sc, txq);
 		ac->clear_ps_filter = true;
 
-		if (!tid->paused && ath_tid_has_buffered(tid)) {
+		if (ath_tid_has_buffered(tid)) {
 			ath_tx_queue_tid(txq, tid);
 			ath_txq_schedule(sc, txq);
 		}
@@ -1510,7 +1505,6 @@ void ath_tx_aggr_resume(struct ath_softc
 	ath_txq_lock(sc, txq);
 
 	tid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor;
-	tid->paused = false;
 
 	if (ath_tid_has_buffered(tid)) {
 		ath_tx_queue_tid(txq, tid);
@@ -1544,8 +1538,6 @@ void ath9k_release_buffered_frames(struc
 			continue;
 
 		tid = ATH_AN_2_TID(an, i);
-		if (tid->paused)
-			continue;
 
 		ath_txq_lock(sc, tid->ac->txq);
 		while (nframes > 0) {
@@ -1844,9 +1836,6 @@ void ath_txq_schedule(struct ath_softc *
 			list_del(&tid->list);
 			tid->sched = false;
 
-			if (tid->paused)
-				continue;
-
 			if (ath_tx_sched_aggr(sc, txq, tid, &stop))
 				sent = true;
 
@@ -2698,7 +2687,6 @@ void ath_tx_node_init(struct ath_softc *
 		tid->baw_size  = WME_MAX_BA;
 		tid->baw_head  = tid->baw_tail = 0;
 		tid->sched     = false;
-		tid->paused    = false;
 		tid->active	   = false;
 		__skb_queue_head_init(&tid->buf_q);
 		__skb_queue_head_init(&tid->retry_q);


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-04-15 18:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-15  4:06 [Cerowrt-devel] Fwd: [bug #422] ath9k queue hang Dave Taht
2014-04-15 18:46 ` Felix Fietkau

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox