Commit bfc1010c authored by Larry Finger's avatar Larry Finger Committed by John W. Linville

rtlwifi: rtl8723ae: Fix too long disable of IRQs

In commit f78bccd7 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 rtl8723ae.
Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Cc: Stable <stable@vger.kernel.org>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 6b639271
...@@ -881,14 +881,25 @@ int rtl8723ae_hw_init(struct ieee80211_hw *hw) ...@@ -881,14 +881,25 @@ int rtl8723ae_hw_init(struct ieee80211_hw *hw)
bool rtstatus = true; bool rtstatus = true;
int err; int err;
u8 tmp_u1b; u8 tmp_u1b;
unsigned long flags;
rtlpriv->rtlhal.being_init_adapter = true; rtlpriv->rtlhal.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); rtlpriv->intf_ops->disable_aspm(hw);
rtstatus = _rtl8712e_init_mac(hw); rtstatus = _rtl8712e_init_mac(hw);
if (rtstatus != true) { if (rtstatus != true) {
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Init MAC failed\n"); RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Init MAC failed\n");
err = 1; err = 1;
return err; goto exit;
} }
err = rtl8723_download_fw(hw, false); err = rtl8723_download_fw(hw, false);
...@@ -896,8 +907,7 @@ int rtl8723ae_hw_init(struct ieee80211_hw *hw) ...@@ -896,8 +907,7 @@ int rtl8723ae_hw_init(struct ieee80211_hw *hw)
RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
"Failed to download FW. Init HW without FW now..\n"); "Failed to download FW. Init HW without FW now..\n");
err = 1; err = 1;
rtlhal->fw_ready = false; goto exit;
return err;
} else { } else {
rtlhal->fw_ready = true; rtlhal->fw_ready = true;
} }
...@@ -972,6 +982,8 @@ int rtl8723ae_hw_init(struct ieee80211_hw *hw) ...@@ -972,6 +982,8 @@ int rtl8723ae_hw_init(struct ieee80211_hw *hw)
RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "under 1.5V\n"); RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "under 1.5V\n");
} }
rtl8723ae_dm_init(hw); rtl8723ae_dm_init(hw);
exit:
local_irq_restore(flags);
rtlpriv->rtlhal.being_init_adapter = false; rtlpriv->rtlhal.being_init_adapter = false;
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment