提交 59d9cb07 编写于 作者: K Kalle Valo 提交者: John W. Linville

mac80211: remove payload alignment warning

The payload alignment warning enabled by MAC80211_DEBUG_PACKET_ALIGNMENT is
difficult. To fix it, a firmware change is needed but in most cases that's
very difficult. So the benefit from the warning is low and most probably
it just creates more confusion for people who just enable all warnings
(like it did for me).

Remove the unaligned IP payload warning and the kconfig option. But
leave the unaligned packet warning, it will be enabled with
MAC80211_VERBOSE_DEBUG.
Signed-off-by: NKalle Valo <kalle.valo@nokia.com>
Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 4a40ccf8
...@@ -96,18 +96,6 @@ menuconfig MAC80211_DEBUG_MENU ...@@ -96,18 +96,6 @@ menuconfig MAC80211_DEBUG_MENU
---help--- ---help---
This option collects various mac80211 debug settings. This option collects various mac80211 debug settings.
config MAC80211_DEBUG_PACKET_ALIGNMENT
bool "Enable packet alignment debugging"
depends on MAC80211_DEBUG_MENU
---help---
This option is recommended for driver authors and strongly
discouraged for everybody else, it will trigger a warning
when a driver hands mac80211 a buffer that is aligned in
a way that will cause problems with the IP stack on some
architectures.
Say N unless you're writing a mac80211 based driver.
config MAC80211_NOINLINE config MAC80211_NOINLINE
bool "Do not inline TX/RX handlers" bool "Do not inline TX/RX handlers"
depends on MAC80211_DEBUG_MENU depends on MAC80211_DEBUG_MENU
......
...@@ -361,7 +361,9 @@ static void ieee80211_parse_qos(struct ieee80211_rx_data *rx) ...@@ -361,7 +361,9 @@ static void ieee80211_parse_qos(struct ieee80211_rx_data *rx)
* boundary. In the case of regular frames, this simply means aligning the * boundary. In the case of regular frames, this simply means aligning the
* payload to a four-byte boundary (because either the IP header is directly * payload to a four-byte boundary (because either the IP header is directly
* contained, or IV/RFC1042 headers that have a length divisible by four are * contained, or IV/RFC1042 headers that have a length divisible by four are
* in front of it). * in front of it). If the payload data is not properly aligned and the
* architecture doesn't support efficient unaligned operations, mac80211
* will align the data.
* *
* With A-MSDU frames, however, the payload data address must yield two modulo * With A-MSDU frames, however, the payload data address must yield two modulo
* four because there are 14-byte 802.3 headers within the A-MSDU frames that * four because there are 14-byte 802.3 headers within the A-MSDU frames that
...@@ -375,25 +377,10 @@ static void ieee80211_parse_qos(struct ieee80211_rx_data *rx) ...@@ -375,25 +377,10 @@ static void ieee80211_parse_qos(struct ieee80211_rx_data *rx)
*/ */
static void ieee80211_verify_alignment(struct ieee80211_rx_data *rx) static void ieee80211_verify_alignment(struct ieee80211_rx_data *rx)
{ {
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; #ifdef CONFIG_MAC80211_VERBOSE_DEBUG
int hdrlen; WARN_ONCE((unsigned long)rx->skb->data & 1,
"unaligned packet at 0x%p\n", rx->skb->data);
#ifndef CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT
return;
#endif #endif
if (WARN_ONCE((unsigned long)rx->skb->data & 1,
"unaligned packet at 0x%p\n", rx->skb->data))
return;
if (!ieee80211_is_data_present(hdr->frame_control))
return;
hdrlen = ieee80211_hdrlen(hdr->frame_control);
if (rx->flags & IEEE80211_RX_AMSDU)
hdrlen += ETH_HLEN;
WARN_ONCE(((unsigned long)(rx->skb->data + hdrlen)) & 3,
"unaligned IP payload at 0x%p\n", rx->skb->data + hdrlen);
} }
...@@ -1510,7 +1497,7 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx) ...@@ -1510,7 +1497,7 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
if (skb) { if (skb) {
int align __maybe_unused; int align __maybe_unused;
#if defined(CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT) || !defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
/* /*
* 'align' will only take the values 0 or 2 here * 'align' will only take the values 0 or 2 here
* since all frames are required to be aligned * since all frames are required to be aligned
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册