Patch "mac80211: don't use napi_gro_receive() outside NAPI context" has been added to the 4.0-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
mac80211: don't use napi_gro_receive() outside NAPI context
to the 4.0-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
mac80211-don-t-use-napi_gro_receive-outside-napi-context.patch
and it can be found in the queue-4.0 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
22d3a3c829fa9ecdb493d1f1f2838d543f8d86a3Mon Sep 17 00:00:00 2001
From: Johannes Berg <[email protected]>
Date: Tue, 19 May 2015 15:40:21 +0200
Subject: mac80211: don't use napi_gro_receive() outside NAPI context
From: Johannes Berg <[email protected]>
commit 22d3a3c829fa9ecdb493d1f1f2838d543f8d86a3 upstream.
No matter how the driver manages its NAPI context, there's no way sending frames to it from a timer can be correct, since it would corrupt the internal GRO lists.
To avoid that, always use the non-NAPI path when releasing frames from the timer.
--- net/mac80211/ieee80211_i.h | 3 +++ net/mac80211/rx.c | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-)
net/mac80211/ieee80211_i.h +3 -0
@@ -204,6 +204,8 @@ enum ieee80211_packet_rx_flags {* @IEEE80211_RX_CMNTR: received on cooked monitor already * @IEEE80211_RX_BEACON_REPORTED: This frame was already reported * to cfg80211_report_obss_beacon(). +* @IEEE80211_RX_REORDER_TIMER: this frame is released by the +* reorder buffer timeout timer, not the normal RX path * * These flags are used across handling multiple interfaces * for a single frame.
@@ -211,6 +213,7 @@ enum ieee80211_packet_rx_flags {enum ieee80211_rx_flags {IEEE80211_RX_CMNTR =BIT (0 ),IEEE80211_RX_BEACON_REPORTED =BIT (1 ), +IEEE80211_RX_REORDER_TIMER =BIT (2 ), };struct ieee80211_rx_data {
net/mac80211/rx.c +3 -2
@@ -2106,7 +2106,8 @@ ieee80211_deliver_skb(struct ieee80211_r/* deliver to local stack */ skb->protocol =eth_type_trans (skb, dev);memset (skb->cb,0 ,sizeof (skb->cb)); -if (rx->local->napi) +if (!(rx->flags &IEEE80211_RX_REORDER_TIMER ) && + rx->local->napi)napi_gro_receive (rx->local->napi, skb);else netif_receive_skb (skb);
@@ -3215,7 +3216,7 @@ void ieee80211_release_reorder_timeout(s/* This is OK -- must be QoS data frame */ .security_idx = tid, .seqno_idx = tid, - .flags = 0, + .flags = IEEE80211_RX_REORDER_TIMER, };struct tid_ampdu_rx *tid_agg_rx;
Patches currently in stable-queue which might be from [email protected] are
queue-4.0/mac80211-don-t-use-napi_gro_receive-outside-napi-context.patch queue-4.0/mac80211-move-wep-tailroom-size-check.patch