From mboxrd@z Thu Jan 1 00:00:00 1970 From: Date: Mon, 12 Oct 2015 17:26:32 -0000 Subject: No subject Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: ath9k-devel@lists.ath9k.org div>Let me know if something is not clear.

=
I am interested if you reintroduce bug that Sujith already fix in comm= it:
ath9k: Enable HW queue control only for MCC
While as I understand correctly this patch disable hw queues fo= r non-mcc (also clear IEEE80211_HW_QUEUE_CONTROL) and your

+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (ath9k_is_chanctx_enabled())
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0q =3D fi->txq;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0else
+=C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0q =3D info->hw_queue;

= Use again hw_queue for standard non-mcc op= eration.

Please check this, I am sure while d= id only simple check :)
<= br>
BR
Janusz

=C2=A0
Regards,

<= td style=3D"padding:1px 0px;font-family:Arial;font-size:7.5pt;color:rgb(102= ,102,102)">All information in this email is=C2=A0confidential
3D"Fon"
Borja Salazar
Firmw= are team

On Fri, Nov 13, 2015 at 11:33 AM, Borja Sala= zar <borja.salazar at fon.com> wrote:
When channel context is enabled, we could be
stopping/awakening an incorrect queue.

Signed-off-by: Borja Salazar <borja.salazar at fon.com>
---
=C2=A0drivers/net/wireless/ath/ath9k/xmit.c | 22 ++++++++++++----------
=C2=A01 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/a= th/ath9k/xmit.c
index 3e3dac3..9b17a59 100644
--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
@@ -147,7 +147,12 @@ static void ath_txq_skb_done(struct ath_softc *sc, str= uct ath_txq *txq,
=C2=A0{
=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct ieee80211_tx_info *info =3D IEEE80211_SK= B_CB(skb);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct ath_frame_info *fi =3D get_frame_info(sk= b);
-=C2=A0 =C2=A0 =C2=A0 =C2=A0int q =3D fi->txq;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0int q;
+
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (ath9k_is_chanctx_enabled())
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0q =3D fi->txq; +=C2=A0 =C2=A0 =C2=A0 =C2=A0else
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0q =3D info->hw_q= ueue;

=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (q < 0)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return;
@@ -158,10 +163,7 @@ static void ath_txq_skb_done(struct ath_softc *sc, str= uct ath_txq *txq,

=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (txq->stopped &&
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 txq->pending_frames < sc-&g= t;tx.txq_max_pending[q]) {
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (ath9k_is_chanct= x_enabled())
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0ieee80211_wake_queue(sc->hw, info->hw_queue);
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0else
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0ieee80211_wake_queue(sc->hw, q);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ieee80211_wake_queu= e(sc->hw, q);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 txq->stopped =3D= false;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 }
=C2=A0}
@@ -2299,17 +2301,17 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk= _buff *skb,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* info are no longer valid (overwritten b= y the ath_frame_info data.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*/

-=C2=A0 =C2=A0 =C2=A0 =C2=A0q =3D skb_get_queue_mapping(skb);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (ath9k_is_chanctx_enabled())
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0q =3D skb_get_queue= _mapping(skb);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0else
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0q =3D info->hw_q= ueue;

=C2=A0 =C2=A0 =C2=A0 =C2=A0 ath_txq_lock(sc, txq);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (txq =3D=3D sc->tx.txq_map[q]) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 fi->txq =3D q; =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (++txq->pendi= ng_frames > sc->tx.txq_max_pending[q] &&
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 !txq-= >stopped) {
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0if (ath9k_is_chanctx_enabled())
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ieee80211_stop_queue(sc->hw, info-= >hw_queue);
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0else
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ieee80211_stop_queue(sc->hw, q); +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0ieee80211_stop_queue(sc->hw, q);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 txq->stopped =3D true;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
=C2=A0 =C2=A0 =C2=A0 =C2=A0 }
--
2.3.6



--001a11444ce011feae05246a36f0--