From 204a8b33d7b5418ee0d1088d35fc9663e4d6c2a5 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 9 May 2014 07:33:06 +0200 Subject: [PATCH] 3.4-stable patches 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 --- ...e-to-sleep-even-when-break_time-is-0.patch | 48 +++++++++ ...l8192cu-fix-too-long-disable-of-irqs.patch | 60 +++++++++++ ...l8192se-fix-too-long-disable-of-irqs.patch | 101 ++++++++++++++++++ queue-3.4/series | 3 + 4 files changed, 212 insertions(+) create mode 100644 queue-3.4/locks-allow-__break_lease-to-sleep-even-when-break_time-is-0.patch create mode 100644 queue-3.4/rtlwifi-rtl8192cu-fix-too-long-disable-of-irqs.patch create mode 100644 queue-3.4/rtlwifi-rtl8192se-fix-too-long-disable-of-irqs.patch 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 index 00000000000..78d76825255 --- /dev/null +++ b/queue-3.4/locks-allow-__break_lease-to-sleep-even-when-break_time-is-0.patch @@ -0,0 +1,48 @@ +From 4991a628a789dc5954e98e79476d9808812292ec Mon Sep 17 00:00:00 2001 +From: Jeff Layton +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 + +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 +Reported-by: Terry Barnaby +Signed-off-by: Jeff Layton +Signed-off-by: J. Bruce Fields +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..82c89b5e6ac --- /dev/null +++ b/queue-3.4/rtlwifi-rtl8192cu-fix-too-long-disable-of-irqs.patch @@ -0,0 +1,60 @@ +From a53268be0cb9763f11da4f6fe3fb924cbe3a7d4a Mon Sep 17 00:00:00 2001 +From: Larry Finger +Date: Tue, 4 Mar 2014 16:53:50 -0600 +Subject: rtlwifi: rtl8192cu: Fix too long disable of IRQs + +From: Larry Finger + +commit a53268be0cb9763f11da4f6fe3fb924cbe3a7d4a upstream. + +In commit f78bccd79ba3cd9d9664981b501d57bdb81ab8a4 entitled "rtlwifi: +rtl8192ce: Fix too long disable of IRQs", Olivier Langlois + fixed a problem caused by an extra long disabling +of interrupts. This patch makes the same fix for rtl8192cu. + +Signed-off-by: Larry Finger +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..f379d2daa04 --- /dev/null +++ b/queue-3.4/rtlwifi-rtl8192se-fix-too-long-disable-of-irqs.patch @@ -0,0 +1,101 @@ +From 2610decdd0b3808ba20471a999835cfee5275f98 Mon Sep 17 00:00:00 2001 +From: Larry Finger +Date: Tue, 4 Mar 2014 16:53:51 -0600 +Subject: rtlwifi: rtl8192se: Fix too long disable of IRQs + +From: Larry Finger + +commit 2610decdd0b3808ba20471a999835cfee5275f98 upstream. + +In commit f78bccd79ba3cd9d9664981b501d57bdb81ab8a4 entitled "rtlwifi: +rtl8192ce: Fix too long disable of IRQs", Olivier Langlois + fixed a problem caused by an extra long disabling +of interrupts. This patch makes the same fix for rtl8192se. + +Signed-off-by: Larry Finger +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + 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; + } + diff --git a/queue-3.4/series b/queue-3.4/series index cb1bd6b0cba..759edd69a26 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -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 -- 2.47.3