]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 9 May 2014 05:33:06 +0000 (07:33 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 9 May 2014 05:33:06 +0000 (07:33 +0200)
added patches:
locks-allow-__break_lease-to-sleep-even-when-break_time-is-0.patch
rtlwifi-rtl8192cu-fix-too-long-disable-of-irqs.patch
rtlwifi-rtl8192se-fix-too-long-disable-of-irqs.patch

queue-3.4/locks-allow-__break_lease-to-sleep-even-when-break_time-is-0.patch [new file with mode: 0644]
queue-3.4/rtlwifi-rtl8192cu-fix-too-long-disable-of-irqs.patch [new file with mode: 0644]
queue-3.4/rtlwifi-rtl8192se-fix-too-long-disable-of-irqs.patch [new file with mode: 0644]
queue-3.4/series

diff --git a/queue-3.4/locks-allow-__break_lease-to-sleep-even-when-break_time-is-0.patch b/queue-3.4/locks-allow-__break_lease-to-sleep-even-when-break_time-is-0.patch
new file mode 100644 (file)
index 0000000..78d7682
--- /dev/null
@@ -0,0 +1,48 @@
+From 4991a628a789dc5954e98e79476d9808812292ec Mon Sep 17 00:00:00 2001
+From: Jeff Layton <jlayton@redhat.com>
+Date: Tue, 15 Apr 2014 08:44:12 -0400
+Subject: locks: allow __break_lease to sleep even when break_time is 0
+
+From: Jeff Layton <jlayton@redhat.com>
+
+commit 4991a628a789dc5954e98e79476d9808812292ec upstream.
+
+A fl->fl_break_time of 0 has a special meaning to the lease break code
+that basically means "never break the lease". knfsd uses this to ensure
+that leases don't disappear out from under it.
+
+Unfortunately, the code in __break_lease can end up passing this value
+to wait_event_interruptible as a timeout, which prevents it from going
+to sleep at all. This causes __break_lease to spin in a tight loop and
+causes soft lockups.
+
+Fix this by ensuring that we pass a minimum value of 1 as a timeout
+instead.
+
+Cc: J. Bruce Fields <bfields@fieldses.org>
+Reported-by: Terry Barnaby <terry1@beam.ltd.uk>
+Signed-off-by: Jeff Layton <jlayton@redhat.com>
+Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/locks.c |    7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+--- a/fs/locks.c
++++ b/fs/locks.c
+@@ -1253,11 +1253,10 @@ int __break_lease(struct inode *inode, u
+ restart:
+       break_time = flock->fl_break_time;
+-      if (break_time != 0) {
++      if (break_time != 0)
+               break_time -= jiffies;
+-              if (break_time == 0)
+-                      break_time++;
+-      }
++      if (break_time == 0)
++              break_time++;
+       locks_insert_block(flock, new_fl);
+       unlock_flocks();
+       error = wait_event_interruptible_timeout(new_fl->fl_wait,
diff --git a/queue-3.4/rtlwifi-rtl8192cu-fix-too-long-disable-of-irqs.patch b/queue-3.4/rtlwifi-rtl8192cu-fix-too-long-disable-of-irqs.patch
new file mode 100644 (file)
index 0000000..82c89b5
--- /dev/null
@@ -0,0 +1,60 @@
+From a53268be0cb9763f11da4f6fe3fb924cbe3a7d4a Mon Sep 17 00:00:00 2001
+From: Larry Finger <Larry.Finger@lwfinger.net>
+Date: Tue, 4 Mar 2014 16:53:50 -0600
+Subject: rtlwifi: rtl8192cu: Fix too long disable of IRQs
+
+From: Larry Finger <Larry.Finger@lwfinger.net>
+
+commit a53268be0cb9763f11da4f6fe3fb924cbe3a7d4a upstream.
+
+In commit f78bccd79ba3cd9d9664981b501d57bdb81ab8a4 entitled "rtlwifi:
+rtl8192ce: Fix too long disable of IRQs", Olivier Langlois
+<olivier@trillion01.com> fixed a problem caused by an extra long disabling
+of interrupts. This patch makes the same fix for rtl8192cu.
+
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/rtlwifi/rtl8192cu/hw.c |   15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c
++++ b/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c
+@@ -985,6 +985,17 @@ int rtl92cu_hw_init(struct ieee80211_hw
+       struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
+       int err = 0;
+       static bool iqk_initialized;
++      unsigned long flags;
++
++      /* As this function can take a very long time (up to 350 ms)
++       * and can be called with irqs disabled, reenable the irqs
++       * to let the other devices continue being serviced.
++       *
++       * It is safe doing so since our own interrupts will only be enabled
++       * in a subsequent step.
++       */
++      local_save_flags(flags);
++      local_irq_enable();
+       rtlhal->hw_type = HARDWARE_TYPE_RTL8192CU;
+       err = _rtl92cu_init_mac(hw);
+@@ -997,7 +1008,7 @@ int rtl92cu_hw_init(struct ieee80211_hw
+               RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
+                        "Failed to download FW. Init HW without FW now..\n");
+               err = 1;
+-              return err;
++              goto exit;
+       }
+       rtlhal->last_hmeboxnum = 0; /* h2c */
+       _rtl92cu_phy_param_tab_init(hw);
+@@ -1034,6 +1045,8 @@ int rtl92cu_hw_init(struct ieee80211_hw
+       _InitPABias(hw);
+       _update_mac_setting(hw);
+       rtl92c_dm_init(hw);
++exit:
++      local_irq_restore(flags);
+       return err;
+ }
diff --git a/queue-3.4/rtlwifi-rtl8192se-fix-too-long-disable-of-irqs.patch b/queue-3.4/rtlwifi-rtl8192se-fix-too-long-disable-of-irqs.patch
new file mode 100644 (file)
index 0000000..f379d2d
--- /dev/null
@@ -0,0 +1,101 @@
+From 2610decdd0b3808ba20471a999835cfee5275f98 Mon Sep 17 00:00:00 2001
+From: Larry Finger <Larry.Finger@lwfinger.net>
+Date: Tue, 4 Mar 2014 16:53:51 -0600
+Subject: rtlwifi: rtl8192se: Fix too long disable of IRQs
+
+From: Larry Finger <Larry.Finger@lwfinger.net>
+
+commit 2610decdd0b3808ba20471a999835cfee5275f98 upstream.
+
+In commit f78bccd79ba3cd9d9664981b501d57bdb81ab8a4 entitled "rtlwifi:
+rtl8192ce: Fix too long disable of IRQs", Olivier Langlois
+<olivier@trillion01.com> fixed a problem caused by an extra long disabling
+of interrupts. This patch makes the same fix for rtl8192se.
+
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/rtlwifi/rtl8192se/hw.c |   27 +++++++++++++++++++++------
+ 1 file changed, 21 insertions(+), 6 deletions(-)
+
+--- a/drivers/net/wireless/rtlwifi/rtl8192se/hw.c
++++ b/drivers/net/wireless/rtlwifi/rtl8192se/hw.c
+@@ -922,7 +922,7 @@ int rtl92se_hw_init(struct ieee80211_hw
+       struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
+       u8 tmp_byte = 0;
+-
++      unsigned long flags;
+       bool rtstatus = true;
+       u8 tmp_u1b;
+       int err = false;
+@@ -934,6 +934,16 @@ int rtl92se_hw_init(struct ieee80211_hw
+       rtlpci->being_init_adapter = true;
++      /* As this function can take a very long time (up to 350 ms)
++       * and can be called with irqs disabled, reenable the irqs
++       * to let the other devices continue being serviced.
++       *
++       * It is safe doing so since our own interrupts will only be enabled
++       * in a subsequent step.
++       */
++      local_save_flags(flags);
++      local_irq_enable();
++
+       rtlpriv->intf_ops->disable_aspm(hw);
+       /* 1. MAC Initialize */
+@@ -951,7 +961,8 @@ int rtl92se_hw_init(struct ieee80211_hw
+               RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
+                        "Failed to download FW. Init HW without FW now... "
+                        "Please copy FW into /lib/firmware/rtlwifi\n");
+-              return 1;
++              err = 1;
++              goto exit;
+       }
+       /* After FW download, we have to reset MAC register */
+@@ -964,7 +975,8 @@ int rtl92se_hw_init(struct ieee80211_hw
+       /* 3. Initialize MAC/PHY Config by MACPHY_reg.txt */
+       if (!rtl92s_phy_mac_config(hw)) {
+               RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "MAC Config failed\n");
+-              return rtstatus;
++              err = rtstatus;
++              goto exit;
+       }
+       /* Make sure BB/RF write OK. We should prevent enter IPS. radio off. */
+@@ -974,7 +986,8 @@ int rtl92se_hw_init(struct ieee80211_hw
+       /* 4. Initialize BB After MAC Config PHY_reg.txt, AGC_Tab.txt */
+       if (!rtl92s_phy_bb_config(hw)) {
+               RT_TRACE(rtlpriv, COMP_INIT, DBG_EMERG, "BB Config failed\n");
+-              return rtstatus;
++              err = rtstatus;
++              goto exit;
+       }
+       /* 5. Initiailze RF RAIO_A.txt RF RAIO_B.txt */
+@@ -1010,7 +1023,8 @@ int rtl92se_hw_init(struct ieee80211_hw
+       if (!rtl92s_phy_rf_config(hw)) {
+               RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "RF Config failed\n");
+-              return rtstatus;
++              err = rtstatus;
++              goto exit;
+       }
+       /* After read predefined TXT, we must set BB/MAC/RF
+@@ -1084,8 +1098,9 @@ int rtl92se_hw_init(struct ieee80211_hw
+       rtlpriv->cfg->ops->led_control(hw, LED_CTL_POWER_ON);
+       rtl92s_dm_init(hw);
++exit:
++      local_irq_restore(flags);
+       rtlpci->being_init_adapter = false;
+-
+       return err;
+ }
index cb1bd6b0cba63dd9b42c57dc715ec6ddf729f128..759edd69a261c72d529800f9103dbde5cdce26b2 100644 (file)
@@ -11,3 +11,6 @@ mach64-use-unaligned-access.patch
 mach64-fix-cursor-when-character-width-is-not-a-multiple-of-8-pixels.patch
 b43-fix-machine-check-error-due-to-improper-access-of-b43_mmio_psm_phy_hdr.patch
 libata-ahci-accommodate-tag-ordered-controllers.patch
+locks-allow-__break_lease-to-sleep-even-when-break_time-is-0.patch
+rtlwifi-rtl8192cu-fix-too-long-disable-of-irqs.patch
+rtlwifi-rtl8192se-fix-too-long-disable-of-irqs.patch