iwlagn: set the sequence control from the transport layer
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Thu, 22 Sep 2011 22:14:50 +0000 (15:14 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 27 Sep 2011 18:34:06 +0000 (14:34 -0400)
Since all the queue logic has been moved to the transport layer,
the sequence number is set in the transport layer.
While doing that I forgot that the mac header is copied to the
TB of the TX cmd in the upper layer before the call to the transport
layer. So basically we used the sequence number from mac80211...
This was fine for the first assocation but after the second, mac80211
resets its counters while we don't hence a shift that led to terrible
impact on performance.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-agn-tx.c
drivers/net/wireless/iwlwifi/iwl-trans-pcie.c

index 8c0f07f56149bf07ea2208e7dace8ad542baf7ef..12a9808c45e82dcad2f89acda18132fc59411378 100644 (file)
@@ -327,9 +327,6 @@ int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
        memset(dev_cmd, 0, sizeof(*dev_cmd));
        tx_cmd = (struct iwl_tx_cmd *) dev_cmd->payload;
 
-       /* Copy MAC header from skb into command buffer */
-       memcpy(tx_cmd->hdr, hdr, hdr_len);
-
        /* Total # bytes to be transmitted */
        len = (u16)skb->len;
        tx_cmd->len = cpu_to_le16(len);
index b78ac65b277941526018f640681623e8f10d2a26..781f6aa81df952aee1c4adc99f53ffeb70ce2f78 100644 (file)
@@ -1101,6 +1101,9 @@ static int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
                }
        }
 
+       /* Copy MAC header from skb into command buffer */
+       memcpy(tx_cmd->hdr, hdr, hdr_len);
+
        txq = &trans_pcie->txq[txq_id];
        q = &txq->q;