diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-05-18 14:51:25 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-05-18 15:11:22 -0400 |
commit | 0e034f5c4bc408c943f9c4a06244415d75d7108c (patch) | |
tree | d9d0737b204687dcb8783441cda75e7c6d991a91 | |
parent | 9e17632c0a146891c90a4353a160cfcf71f34b8f (diff) |
iwlwifi: fix mis-merge that breaks the driver
My laptop that uses the intel 7680 iwlwifi module would no longer
connects to the network. It would fail with a "Microcode SW error
detected." and spew out register state over and over again without ever
connecting to the network.
The cause is mis-merge in commit 909b27f70643, where David seems to have
lost some of the changes to iwl_mvm_set_tx_cmd() from commit
5c08b0f5026f ("iwlwifi: mvm: don't override the rate with the AMSDU
len").
The reason seems to be a conflict with commit d8fe484470dd ("iwlwifi:
mvm: add support for new TX CMD API"), which touched a line adjacent to
the changes in 909b27f70643.
David missed the fact that "info->driver_data[0]" had become
"skb_info->driver_data[0]". Then he removed the skb_info because it was
unused.
This just re-updates iwl_mvm_set_tx_cmd() with the lost two lines.
Reported-and-tested-by: Linus Torvalds <torvalds@linux-foundation.org>
Reported-by: Reinoud Koornstra <reinoudkoornstra@gmail.com>
Cc: Luciano Coelho <luciano.coelho@intel.com>
Cc: Kalle Valo <kvalo@codeaurora.org>
Cc: David Miller <davem@davemloft.net>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c index 880210917a6f..c53aa0f220e0 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c | |||
@@ -211,6 +211,7 @@ void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb, | |||
211 | struct iwl_tx_cmd *tx_cmd, | 211 | struct iwl_tx_cmd *tx_cmd, |
212 | struct ieee80211_tx_info *info, u8 sta_id) | 212 | struct ieee80211_tx_info *info, u8 sta_id) |
213 | { | 213 | { |
214 | struct ieee80211_tx_info *skb_info = IEEE80211_SKB_CB(skb); | ||
214 | struct ieee80211_hdr *hdr = (void *)skb->data; | 215 | struct ieee80211_hdr *hdr = (void *)skb->data; |
215 | __le16 fc = hdr->frame_control; | 216 | __le16 fc = hdr->frame_control; |
216 | u32 tx_flags = le32_to_cpu(tx_cmd->tx_flags); | 217 | u32 tx_flags = le32_to_cpu(tx_cmd->tx_flags); |
@@ -294,7 +295,7 @@ void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb, | |||
294 | tx_cmd->tx_flags = cpu_to_le32(tx_flags); | 295 | tx_cmd->tx_flags = cpu_to_le32(tx_flags); |
295 | /* Total # bytes to be transmitted */ | 296 | /* Total # bytes to be transmitted */ |
296 | tx_cmd->len = cpu_to_le16((u16)skb->len + | 297 | tx_cmd->len = cpu_to_le16((u16)skb->len + |
297 | (uintptr_t)info->driver_data[0]); | 298 | (uintptr_t)skb_info->driver_data[0]); |
298 | tx_cmd->life_time = cpu_to_le32(TX_CMD_LIFE_TIME_INFINITE); | 299 | tx_cmd->life_time = cpu_to_le32(TX_CMD_LIFE_TIME_INFINITE); |
299 | tx_cmd->sta_id = sta_id; | 300 | tx_cmd->sta_id = sta_id; |
300 | 301 | ||