One more patch... -- Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
From: John W. Linville <hidden>
Date: 2008-01-08 22:50:03
Also in:
linux-wireless
Subsystem:
networking drivers (wireless), the rest · Maintainers:
Johannes Berg, Linus Torvalds
On Tue, Jan 08, 2008 at 05:23:05PM -0500, John W. Linville wrote:
Jeff, Another round of patches intended for 2.6.25...the biggest factions are rt2x00 and b43 updates, as well as some Viro-isms... :-) Please let me know if there are any problems! John P.S. Copying Dave in case he is handling these requests...FWIW, it will definitely depend on the patches already in netdev-2.6#upstream...
I left out a patch. I have pushed it on top of the previous request.
Let me know if there are problems!
Thanks,
John
---
The following changes since commit f94de7b013f78ad8bbe1064c108dd55141efb177:
Miguel Botón (1):
iwlwifi: fix compilation warning in 'iwl-4965.c'
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Michael Buesch (1):
zd1211rw: fix alignment for QOS and WDS frames
drivers/net/wireless/zd1211rw/zd_mac.c | 17 ++++++++++++++++-
1 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 14fb727..7b86930 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c@@ -623,6 +623,8 @@ int zd_mac_rx(struct ieee80211_hw *hw, const u8 *buffer, unsigned int length) const struct rx_status *status; struct sk_buff *skb; int bad_frame = 0; + u16 fc; + bool is_qos, is_4addr, need_padding; if (length < ZD_PLCP_HEADER_SIZE + 10 /* IEEE80211_1ADDR_LEN */ + FCS_LEN + sizeof(struct rx_status))
@@ -674,9 +676,22 @@ int zd_mac_rx(struct ieee80211_hw *hw, const u8 *buffer, unsigned int length) && !mac->pass_ctrl) return 0; - skb = dev_alloc_skb(length); + fc = le16_to_cpu(*((__le16 *) buffer)); + + is_qos = ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) && + ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_QOS_DATA); + is_4addr = (fc & (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) == + (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS); + need_padding = is_qos ^ is_4addr; + + skb = dev_alloc_skb(length + (need_padding ? 2 : 0)); if (skb == NULL) return -ENOMEM; + if (need_padding) { + /* Make sure the the payload data is 4 byte aligned. */ + skb_reserve(skb, 2); + } + memcpy(skb_put(skb, length), buffer, length); ieee80211_rx_irqsafe(hw, skb, &stats);
--
John W. Linville
linville@tuxdriver.com