linux/drivers/net/wireless/rt2x00
Stanislaw Gruszka cfd9167af1 rt2x00: do not align payload on modern H/W
RT2800 and newer hardware require padding between header and payload if
header length is not multiple of 4.

For historical reasons we also align payload to to 4 bytes boundary, but
such alignment is not needed on modern H/W.

Patch fixes skb_under_panic problems reported from time to time:

https://bugzilla.kernel.org/show_bug.cgi?id=84911
https://bugzilla.kernel.org/show_bug.cgi?id=72471
http://marc.info/?l=linux-wireless&m=139108549530402&w=2
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1087591

Panic happened because we eat 4 bytes of skb headroom on each
(re)transmission when sending frame without the payload and the header
length not being multiple of 4 (i.e. QoS header has 26 bytes). On such
case because paylad_aling=2 is bigger than header_align=0 we increase
header_align by 4 bytes. To prevent that we could change the check to:

	if (payload_length && payload_align > header_align)
		header_align += 4;

but not aligning payload at all is more effective and alignment is not
really needed by H/W (that has been tested on OpenWrt project for few
years now).

Reported-and-tested-by: Antti S. Lankila <alankila@bel.fi>
Debugged-by: Antti S. Lankila <alankila@bel.fi>
Reported-by: Henrik Asp <solenskiner@gmail.com>
Originally-From: Helmut Schaa <helmut.schaa@googlemail.com>
Cc: stable@vger.kernel.org
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2014-11-11 16:12:44 -05:00
..
Kconfig
Makefile
rt2x00.h
rt2x00config.c
rt2x00crypto.c
rt2x00debug.c
rt2x00debug.h
rt2x00dev.c
rt2x00dump.h
rt2x00firmware.c
rt2x00leds.c
rt2x00leds.h
rt2x00lib.h
rt2x00link.c
rt2x00mac.c
rt2x00mmio.c
rt2x00mmio.h
rt2x00pci.c
rt2x00pci.h
rt2x00queue.c rt2x00: do not align payload on modern H/W 2014-11-11 16:12:44 -05:00
rt2x00queue.h
rt2x00reg.h
rt2x00soc.c
rt2x00soc.h
rt2x00usb.c
rt2x00usb.h
rt61pci.c
rt61pci.h
rt73usb.c
rt73usb.h
rt2400pci.c
rt2400pci.h
rt2500pci.c
rt2500pci.h
rt2500usb.c
rt2500usb.h
rt2800.h
rt2800lib.c
rt2800lib.h
rt2800mmio.c
rt2800mmio.h
rt2800pci.c
rt2800pci.h
rt2800soc.c
rt2800usb.c wireless: rt2x00: add new rt2800usb device 2014-10-30 15:00:22 -04:00
rt2800usb.h