From: Greg Kroah-Hartman Date: Tue, 5 Aug 2014 17:51:52 +0000 (-0700) Subject: 3.10-stable patches X-Git-Tag: v3.4.102~14 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3dca1a33a34632e86ed19b5680063df76d66202a;p=thirdparty%2Fkernel%2Fstable-queue.git 3.10-stable patches added patches: net-mvneta-increase-the-64-bit-rx-tx-stats-out-of-the-hot-path.patch revert-mac80211-move-bufferable-mmpdu-check-to-fix-ap-mode-scan.patch staging-vt6655-fix-warning-on-boot-handle_irq_event_percpu.patch --- diff --git a/queue-3.10/net-mvneta-increase-the-64-bit-rx-tx-stats-out-of-the-hot-path.patch b/queue-3.10/net-mvneta-increase-the-64-bit-rx-tx-stats-out-of-the-hot-path.patch new file mode 100644 index 00000000000..d170c0b009e --- /dev/null +++ b/queue-3.10/net-mvneta-increase-the-64-bit-rx-tx-stats-out-of-the-hot-path.patch @@ -0,0 +1,64 @@ +From dc4277dd41a80fd5f29a90412ea04bc3ba54fbf1 Mon Sep 17 00:00:00 2001 +From: willy tarreau +Date: Thu, 16 Jan 2014 08:20:07 +0100 +Subject: net: mvneta: increase the 64-bit rx/tx stats out of the hot path + +From: willy tarreau + +commit dc4277dd41a80fd5f29a90412ea04bc3ba54fbf1 upstream. + +Better count packets and bytes in the stack and on 32 bit then +accumulate them at the end for once. This saves two memory writes +and two memory barriers per packet. The incoming packet rate was +increased by 4.7% on the Openblocks AX3 thanks to this. + +Cc: Thomas Petazzoni +Cc: Gregory CLEMENT +Reviewed-by: Eric Dumazet +Tested-by: Arnaud Ebalard +Signed-off-by: Willy Tarreau +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/ethernet/marvell/mvneta.c | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +--- a/drivers/net/ethernet/marvell/mvneta.c ++++ b/drivers/net/ethernet/marvell/mvneta.c +@@ -1354,6 +1354,8 @@ static int mvneta_rx(struct mvneta_port + { + struct net_device *dev = pp->dev; + int rx_done, rx_filled; ++ u32 rcvd_pkts = 0; ++ u32 rcvd_bytes = 0; + + /* Get number of received packets */ + rx_done = mvneta_rxq_busy_desc_num_get(pp, rxq); +@@ -1391,10 +1393,8 @@ static int mvneta_rx(struct mvneta_port + + rx_bytes = rx_desc->data_size - + (ETH_FCS_LEN + MVNETA_MH_SIZE); +- u64_stats_update_begin(&pp->rx_stats.syncp); +- pp->rx_stats.packets++; +- pp->rx_stats.bytes += rx_bytes; +- u64_stats_update_end(&pp->rx_stats.syncp); ++ rcvd_pkts++; ++ rcvd_bytes += rx_bytes; + + /* Linux processing */ + skb_reserve(skb, MVNETA_MH_SIZE); +@@ -1415,6 +1415,13 @@ static int mvneta_rx(struct mvneta_port + } + } + ++ if (rcvd_pkts) { ++ u64_stats_update_begin(&pp->rx_stats.syncp); ++ pp->rx_stats.packets += rcvd_pkts; ++ pp->rx_stats.bytes += rcvd_bytes; ++ u64_stats_update_end(&pp->rx_stats.syncp); ++ } ++ + /* Update rxq management counters */ + mvneta_rxq_desc_num_update(pp, rxq, rx_done, rx_filled); + diff --git a/queue-3.10/revert-mac80211-move-bufferable-mmpdu-check-to-fix-ap-mode-scan.patch b/queue-3.10/revert-mac80211-move-bufferable-mmpdu-check-to-fix-ap-mode-scan.patch new file mode 100644 index 00000000000..ad2fdddd7ed --- /dev/null +++ b/queue-3.10/revert-mac80211-move-bufferable-mmpdu-check-to-fix-ap-mode-scan.patch @@ -0,0 +1,85 @@ +From 08b9939997df30e42a228e1ecb97f99e9c8ea84e Mon Sep 17 00:00:00 2001 +From: Johannes Berg +Date: Mon, 7 Jul 2014 12:01:11 +0200 +Subject: Revert "mac80211: move "bufferable MMPDU" check to fix AP mode scan" + +From: Johannes Berg + +commit 08b9939997df30e42a228e1ecb97f99e9c8ea84e upstream. + +This reverts commit 277d916fc2e959c3f106904116bb4f7b1148d47a as it was +at least breaking iwlwifi by setting the IEEE80211_TX_CTL_NO_PS_BUFFER +flag in all kinds of interface modes, not only for AP mode where it is +appropriate. + +To avoid reintroducing the original problem, explicitly check for probe +request frames in the multicast buffering code. + +Fixes: 277d916fc2e9 ("mac80211: move "bufferable MMPDU" check to fix AP mode scan") +Signed-off-by: Johannes Berg +Signed-off-by: Greg Kroah-Hartman + + +--- + net/mac80211/tx.c | 27 +++++++++++++-------------- + 1 file changed, 13 insertions(+), 14 deletions(-) + +--- a/net/mac80211/tx.c ++++ b/net/mac80211/tx.c +@@ -398,6 +398,9 @@ ieee80211_tx_h_multicast_ps_buf(struct i + if (ieee80211_has_order(hdr->frame_control)) + return TX_CONTINUE; + ++ if (ieee80211_is_probe_req(hdr->frame_control)) ++ return TX_CONTINUE; ++ + /* no stations in PS mode */ + if (!atomic_read(&ps->num_sta_ps)) + return TX_CONTINUE; +@@ -447,6 +450,7 @@ ieee80211_tx_h_unicast_ps_buf(struct iee + { + struct sta_info *sta = tx->sta; + struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); ++ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; + struct ieee80211_local *local = tx->local; + + if (unlikely(!sta)) +@@ -457,6 +461,15 @@ ieee80211_tx_h_unicast_ps_buf(struct iee + !(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER))) { + int ac = skb_get_queue_mapping(tx->skb); + ++ /* only deauth, disassoc and action are bufferable MMPDUs */ ++ if (ieee80211_is_mgmt(hdr->frame_control) && ++ !ieee80211_is_deauth(hdr->frame_control) && ++ !ieee80211_is_disassoc(hdr->frame_control) && ++ !ieee80211_is_action(hdr->frame_control)) { ++ info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; ++ return TX_CONTINUE; ++ } ++ + ps_dbg(sta->sdata, "STA %pM aid %d: PS buffer for AC %d\n", + sta->sta.addr, sta->sta.aid, ac); + if (tx->local->total_ps_buffered >= TOTAL_MAX_TX_BUFFER) +@@ -514,22 +527,8 @@ ieee80211_tx_h_unicast_ps_buf(struct iee + static ieee80211_tx_result debug_noinline + ieee80211_tx_h_ps_buf(struct ieee80211_tx_data *tx) + { +- struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); +- struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; +- + if (unlikely(tx->flags & IEEE80211_TX_PS_BUFFERED)) + return TX_CONTINUE; +- +- /* only deauth, disassoc and action are bufferable MMPDUs */ +- if (ieee80211_is_mgmt(hdr->frame_control) && +- !ieee80211_is_deauth(hdr->frame_control) && +- !ieee80211_is_disassoc(hdr->frame_control) && +- !ieee80211_is_action(hdr->frame_control)) { +- if (tx->flags & IEEE80211_TX_UNICAST) +- info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; +- return TX_CONTINUE; +- } +- + if (tx->flags & IEEE80211_TX_UNICAST) + return ieee80211_tx_h_unicast_ps_buf(tx); + else diff --git a/queue-3.10/series b/queue-3.10/series index d2b82f6ac46..56df283d49c 100644 --- a/queue-3.10/series +++ b/queue-3.10/series @@ -15,3 +15,6 @@ x86-espfix-fix-broken-header-guard.patch x86-espfix-make-espfix64-a-kconfig-option-fix-uml.patch x86-espfix-make-it-possible-to-disable-16-bit-support.patch x86_64-entry-xen-do-not-invoke-espfix64-on-xen.patch +staging-vt6655-fix-warning-on-boot-handle_irq_event_percpu.patch +revert-mac80211-move-bufferable-mmpdu-check-to-fix-ap-mode-scan.patch +net-mvneta-increase-the-64-bit-rx-tx-stats-out-of-the-hot-path.patch diff --git a/queue-3.10/staging-vt6655-fix-warning-on-boot-handle_irq_event_percpu.patch b/queue-3.10/staging-vt6655-fix-warning-on-boot-handle_irq_event_percpu.patch new file mode 100644 index 00000000000..b9b64ca5c71 --- /dev/null +++ b/queue-3.10/staging-vt6655-fix-warning-on-boot-handle_irq_event_percpu.patch @@ -0,0 +1,52 @@ +From 6cff1f6ad4c615319c1a146b2aa0af1043c5e9f5 Mon Sep 17 00:00:00 2001 +From: Malcolm Priestley +Date: Wed, 23 Jul 2014 21:35:11 +0100 +Subject: staging: vt6655: Fix Warning on boot handle_irq_event_percpu. + +From: Malcolm Priestley + +commit 6cff1f6ad4c615319c1a146b2aa0af1043c5e9f5 upstream. + +WARNING: CPU: 0 PID: 929 at /home/apw/COD/linux/kernel/irq/handle.c:147 handle_irq_event_percpu+0x1d1/0x1e0() +irq 17 handler device_intr+0x0/0xa80 [vt6655_stage] enabled interrupts + +Using spin_lock_irqsave appears to fix this. + +Signed-off-by: Malcolm Priestley +Signed-off-by: Greg Kroah-Hartman + + +--- + drivers/staging/vt6655/device_main.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +--- a/drivers/staging/vt6655/device_main.c ++++ b/drivers/staging/vt6655/device_main.c +@@ -2434,6 +2434,7 @@ static irqreturn_t device_intr(int irq + int handled = 0; + unsigned char byData = 0; + int ii = 0; ++ unsigned long flags; + // unsigned char byRSSI; + + MACvReadISR(pDevice->PortOffset, &pDevice->dwIsr); +@@ -2459,7 +2460,8 @@ static irqreturn_t device_intr(int irq + + handled = 1; + MACvIntDisable(pDevice->PortOffset); +- spin_lock_irq(&pDevice->lock); ++ ++ spin_lock_irqsave(&pDevice->lock, flags); + + //Make sure current page is 0 + VNSvInPortB(pDevice->PortOffset + MAC_REG_PAGE1SEL, &byOrgPageSel); +@@ -2700,7 +2702,8 @@ static irqreturn_t device_intr(int irq + MACvSelectPage1(pDevice->PortOffset); + } + +- spin_unlock_irq(&pDevice->lock); ++ spin_unlock_irqrestore(&pDevice->lock, flags); ++ + MACvIntEnable(pDevice->PortOffset, IMR_MASK_VALUE); + + return IRQ_RETVAL(handled);