]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 5 Aug 2014 17:51:52 +0000 (10:51 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 5 Aug 2014 17:51:52 +0000 (10:51 -0700)
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

queue-3.10/net-mvneta-increase-the-64-bit-rx-tx-stats-out-of-the-hot-path.patch [new file with mode: 0644]
queue-3.10/revert-mac80211-move-bufferable-mmpdu-check-to-fix-ap-mode-scan.patch [new file with mode: 0644]
queue-3.10/series
queue-3.10/staging-vt6655-fix-warning-on-boot-handle_irq_event_percpu.patch [new file with mode: 0644]

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 (file)
index 0000000..d170c0b
--- /dev/null
@@ -0,0 +1,64 @@
+From dc4277dd41a80fd5f29a90412ea04bc3ba54fbf1 Mon Sep 17 00:00:00 2001
+From: willy tarreau <w@1wt.eu>
+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 <w@1wt.eu>
+
+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 <thomas.petazzoni@free-electrons.com>
+Cc: Gregory CLEMENT <gregory.clement@free-electrons.com>
+Reviewed-by: Eric Dumazet <edumazet@google.com>
+Tested-by: Arnaud Ebalard <arno@natisbad.org>
+Signed-off-by: Willy Tarreau <w@1wt.eu>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..ad2fddd
--- /dev/null
@@ -0,0 +1,85 @@
+From 08b9939997df30e42a228e1ecb97f99e9c8ea84e Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Mon, 7 Jul 2014 12:01:11 +0200
+Subject: Revert "mac80211: move "bufferable MMPDU" check to fix AP mode scan"
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+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 <johannes.berg@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+
+---
+ 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
index d2b82f6ac4606471d24704dac273bd53376cad7e..56df283d49cae5096dfbc707410b30f7b89ddcac 100644 (file)
@@ -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 (file)
index 0000000..b9b64ca
--- /dev/null
@@ -0,0 +1,52 @@
+From 6cff1f6ad4c615319c1a146b2aa0af1043c5e9f5 Mon Sep 17 00:00:00 2001
+From: Malcolm Priestley <tvboxspy@gmail.com>
+Date: Wed, 23 Jul 2014 21:35:11 +0100
+Subject: staging: vt6655: Fix Warning on boot handle_irq_event_percpu.
+
+From: Malcolm Priestley <tvboxspy@gmail.com>
+
+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 <tvboxspy@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+
+---
+ 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);