From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Henrik Asp <solenskiner@gmail.com>,
Stanislaw Gruszka <sgruszka@redhat.com>,
"John W. Linville" <linville@tuxdriver.com>
Subject: [PATCH 3.14 60/73] rt2x00: do not align payload on modern H/W
Date: Fri, 5 Dec 2014 14:45:06 -0800 [thread overview]
Message-ID: <20141205224435.725058113@linuxfoundation.org> (raw)
In-Reply-To: <20141205224433.921659956@linuxfoundation.org>
3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stanislaw Gruszka <sgruszka@redhat.com>
commit cfd9167af14eb4ec21517a32911d460083ee3d59 upstream.
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>
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/wireless/rt2x00/rt2x00queue.c | 50 +++++++-----------------------
1 file changed, 12 insertions(+), 38 deletions(-)
--- a/drivers/net/wireless/rt2x00/rt2x00queue.c
+++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
@@ -158,55 +158,29 @@ void rt2x00queue_align_frame(struct sk_b
skb_trim(skb, frame_length);
}
-void rt2x00queue_insert_l2pad(struct sk_buff *skb, unsigned int header_length)
+/*
+ * H/W needs L2 padding between the header and the paylod if header size
+ * is not 4 bytes aligned.
+ */
+void rt2x00queue_insert_l2pad(struct sk_buff *skb, unsigned int hdr_len)
{
- unsigned int payload_length = skb->len - header_length;
- unsigned int header_align = ALIGN_SIZE(skb, 0);
- unsigned int payload_align = ALIGN_SIZE(skb, header_length);
- unsigned int l2pad = payload_length ? L2PAD_SIZE(header_length) : 0;
-
- /*
- * Adjust the header alignment if the payload needs to be moved more
- * than the header.
- */
- if (payload_align > header_align)
- header_align += 4;
+ unsigned int l2pad = (skb->len > hdr_len) ? L2PAD_SIZE(hdr_len) : 0;
- /* There is nothing to do if no alignment is needed */
- if (!header_align)
+ if (!l2pad)
return;
- /* Reserve the amount of space needed in front of the frame */
- skb_push(skb, header_align);
-
- /*
- * Move the header.
- */
- memmove(skb->data, skb->data + header_align, header_length);
-
- /* Move the payload, if present and if required */
- if (payload_length && payload_align)
- memmove(skb->data + header_length + l2pad,
- skb->data + header_length + l2pad + payload_align,
- payload_length);
-
- /* Trim the skb to the correct size */
- skb_trim(skb, header_length + l2pad + payload_length);
+ skb_push(skb, l2pad);
+ memmove(skb->data, skb->data + l2pad, hdr_len);
}
-void rt2x00queue_remove_l2pad(struct sk_buff *skb, unsigned int header_length)
+void rt2x00queue_remove_l2pad(struct sk_buff *skb, unsigned int hdr_len)
{
- /*
- * L2 padding is only present if the skb contains more than just the
- * IEEE 802.11 header.
- */
- unsigned int l2pad = (skb->len > header_length) ?
- L2PAD_SIZE(header_length) : 0;
+ unsigned int l2pad = (skb->len > hdr_len) ? L2PAD_SIZE(hdr_len) : 0;
if (!l2pad)
return;
- memmove(skb->data + l2pad, skb->data, header_length);
+ memmove(skb->data + l2pad, skb->data, hdr_len);
skb_pull(skb, l2pad);
}
next prev parent reply other threads:[~2014-12-05 22:56 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-05 22:44 [PATCH 3.14 00/73] 3.14.26-stable review Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 01/73] MIPS: oprofile: Fix backtrace on 64-bit kernel Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 02/73] MIPS: Loongson: Make platform serial setup always built-in Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 03/73] x86_64, traps: Fix the espfix64 #DF fixup and rewrite it in C Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 04/73] x86_64, traps: Stop using IST for #SS Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 05/73] x86_64, traps: Rework bad_iret Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 06/73] x86: Require exact match for noxsave command line option Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 07/73] x86, mm: Set NX across entire PMD at boot Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 08/73] x86, kaslr: Handle Gold linker for finding bss/brk Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 09/73] uprobes, x86: Fix _TIF_UPROBE vs _TIF_NOTIFY_RESUME Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 10/73] sparc64: Fix constraints on swab helpers Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 11/73] inetdevice: fixed signed integer overflow Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 12/73] ipv4: Fix incorrect error code when adding an unreachable route Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 13/73] ieee802154: fix error handling in ieee802154fake_probe() Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 15/73] bonding: fix curr_active_slave/carrier with loadbalance arp monitoring Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 16/73] pptp: fix stack info leak in pptp_getname() Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 17/73] ipx: fix locking regression in ipx_sendmsg and ipx_recvmsg Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 18/73] PCI: Support 64-bit bridge windows if we have 64-bit dma_addr_t Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 19/73] PCI/MSI: Add device flag indicating that 64-bit MSIs dont work Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 20/73] clockevent: sun4i: Fix race condition in the probe code Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 21/73] IB/isert: Adjust CQ size to HW limits Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 22/73] ib_isert: Add max_send_sge=2 minimum for control PDU responses Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 23/73] ASoC: rsnd: remove unsupported PAUSE flag Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 24/73] ASoC: fsi: " Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 25/73] ASoC: sgtl5000: Fix SMALL_POP bit definition Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 26/73] ASoC: wm_adsp: Avoid attempt to free buffers that might still be in use Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 27/73] ASoC: dpcm: Fix race between FE/BE updates and trigger Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 28/73] ath9k: Fix RTC_DERIVED_CLK usage Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 29/73] of/base: Fix PowerPC address parsing hack Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 30/73] powerpc/pseries: Honor the generic "no_64bit_msi" flag Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 31/73] powerpc/pseries: Fix endiannes issue in RTAS call from xmon Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 32/73] iio: Fix IIO_EVENT_CODE_EXTRACT_DIR bit mask Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 33/73] staging: r8188eu: Add new device ID for DLink GO-USB-N150 Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 34/73] USB: ssu100: fix overrun-error reporting Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 35/73] USB: keyspan: " Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 36/73] USB: keyspan: fix tty line-status reporting Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 37/73] USB: serial: cp210x: add IDs for CEL MeshConnect USB Stick Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 38/73] usb: serial: ftdi_sio: add PIDs for Matrix Orbital products Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 39/73] usb-quirks: Add reset-resume quirk for MS Wireless Laser Mouse 6000 Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 40/73] USB: xhci: dont start a halted endpoint before its new dequeue is set Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 41/73] usb: xhci: rework root port wake bits if controller isnt allowed to wakeup Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 42/73] can: esd_usb2: fix memory leak on disconnect Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 43/73] ALSA: usb-audio: Add ctrl message delay quirk for Marantz/Denon devices Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 45/73] of/irq: Drop obsolete interrupts vs interrupts-extended text Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 46/73] ARM: 8216/1: xscale: correct auxiliary register in suspend/resume Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 47/73] ARM: 8222/1: mvebu: enable strex backoff delay Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 48/73] ARM: 8226/1: cacheflush: get rid of restarting block Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 49/73] Input: synaptics - adjust min/max on Thinkpad E540 Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 50/73] Input: xpad - use proper endpoint type Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 51/73] srp-target: Retry when QP creation fails with ENOMEM Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 52/73] target: Dont call TFO->write_pending if data_length == 0 Greg Kroah-Hartman
2014-12-05 22:44 ` [PATCH 3.14 53/73] iser-target: Handle DEVICE_REMOVAL event on network portal listener correctly Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 54/73] Target/iser: Fix a wrong dereference in case discovery session is over iser Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 55/73] iser-target: Disable TX completion interrupt coalescing Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 56/73] spi: dw: Fix dynamic speed change Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 57/73] vhost-scsi: Take configfs group dependency during VHOST_SCSI_SET_ENDPOINT Greg Kroah-Hartman
2014-12-05 22:45 ` Greg Kroah-Hartman [this message]
2014-12-05 22:45 ` [PATCH 3.14 61/73] nfsd: correctly define v4.2 support attributes Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 62/73] nfsd: Fix slot wake up race in the nfsv4.1 callback code Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 63/73] nfsd: dont halt scanning the DRC LRU list when theres an RC_INPROG entry Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 64/73] net/ping: handle protocol mismatching scenario Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 65/73] bnx2fc: do not add shared skbs to the fcoe_rx_list Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 66/73] drm/radeon: fix endian swapping in vbios fetch for tdp table Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 67/73] gpu/radeon: Set flag to indicate broken 64-bit MSI Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 68/73] bitops: Fix shift overflow in GENMASK macros Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 69/73] locks: eliminate BUG() call when theres an unexpected lock on file close Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 70/73] powerpc/powernv: Honor the generic "no_64bit_msi" flag Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 71/73] batman: fix a bogus warning from batadv_is_on_batman_iface() Greg Kroah-Hartman
2014-12-05 22:45 ` [PATCH 3.14 72/73] x86: kvm: use alternatives for VMCALL vs. VMMCALL if kernel text is read-only Greg Kroah-Hartman
2014-12-06 3:30 ` [PATCH 3.14 00/73] 3.14.26-stable review Guenter Roeck
2014-12-06 21:36 ` Shuah Khan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141205224435.725058113@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=sgruszka@redhat.com \
--cc=solenskiner@gmail.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.