RE: [Ilw] drivers/net/wireless/iwlwifi/dvm/tx.c:456 iwlagn_tx_skb+0x6c5/0x883()

Grumbach, Emmanuel
2013-10-15T19:11:41Z

[-- Attachment #1: Type: text/plain, Size: 989 bytes --]

> > Please apply this:
> > diff --git a/drivers/net/wireless/iwlwifi/dvm/tx.c
> b/drivers/net/wireless/iwlwifi/dvm/tx.c
> > index d131f85..5968f19 100644
> > --- a/drivers/net/wireless/iwlwifi/dvm/tx.c
> > +++ b/drivers/net/wireless/iwlwifi/dvm/tx.c
> > @@ -457,8 +457,8 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
> > WARN_ON_ONCE(is_agg &&
> > priv->queue_to_mac80211[txq_id] != info->hw_queue);
> >
> > - IWL_DEBUG_TX(priv, "TX to [%d|%d] Q:%d - seq: 0x%x\n", sta_id, tid,
> > - txq_id, seq_number);
> > + IWL_DEBUG_TX(priv, "TX to [%d|%d] Q:%d info Q %d - seq: 0x%x\n",
> sta_id, tid,
> > + txq_id, info->hw_queue, seq_number);
> >
> > if (iwl_trans_tx(priv->trans, skb, dev_cmd, txq_id))
> > goto drop_unlock_sta;
>
> > and send the output back to me
>
> > Thanks.
>

Can you please apply the patch attached (and remove the previous change)?
Thanks.

[-- Attachment #2: 0001-iwlwifi-dvm-don-t-override-mac80211-s-queue-setting.patch --]
[-- Type: application/octet-stream, Size: 1902 bytes --]

From fdda79b24213483034cd9a173bd1b078309cb4b9 Mon Sep 17 00:00:00 2001
From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Date: Tue, 15 Oct 2013 22:04:54 +0300
Subject: [PATCH] iwlwifi: dvm: don't override mac80211's queue setting

Since we set IEEE80211_HW_QUEUE_CONTROL, we can let
mac80211 do the queue assignement and don't need to
override its decisions.
This is true for offchannel packets, packets to be sent
after DTIM, but not for AMPDUs since we have a special
queue for them. So for AMPDU, we still override
info->hw_queue by the AMPDU queue.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
drivers/net/wireless/iwlwifi/dvm/tx.c | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/dvm/tx.c b/drivers/net/wireless/iwlwifi/dvm/tx.c
index d131f85..86196a5 100644
--- a/drivers/net/wireless/iwlwifi/dvm/tx.c
+++ b/drivers/net/wireless/iwlwifi/dvm/tx.c
@@ -433,27 +433,19 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
/* Copy MAC header from skb into command buffer */
memcpy(tx_cmd->hdr, hdr, hdr_len);

+ txq_id = info->hw_queue;
+
if (is_agg)
txq_id = priv->tid_data[sta_id][tid].agg.txq_id;
else if (info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM) {
/*
- * Send this frame after DTIM -- there's a special queue
- * reserved for this for contexts that support AP mode.
- */
- txq_id = ctx->mcast_queue;
-
- /*
* The microcode will clear the more data
* bit in the last frame it transmits.
*/
hdr->frame_control |=
cpu_to_le16(IEEE80211_FCTL_MOREDATA);
- } else if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN)
- txq_id = IWL_AUX_QUEUE;
- else
- txq_id = ctx->ac_to_queue[skb_get_queue_mapping(skb)];
+ }

- WARN_ON_ONCE(!is_agg && txq_id != info->hw_queue);
WARN_ON_ONCE(is_agg &&
priv->queue_to_mac80211[txq_id] != info->hw_queue);

--
1.8.1.msysgit.1