--- /dev/null
+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,
--- /dev/null
+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;
+ }
+
--- /dev/null
+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;
+ }
+
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