Message ID | 560D5455.8060400@lwfinger.net (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Kalle Valo |
Headers | show |
Hello Larry, On 1 October 2015 at 11:42, Larry Finger <Larry.Finger@lwfinger.net> wrote: > On 10/01/2015 08:17 AM, João Paulo Rechi Vita wrote: >> >> Hello linux-wirelless (cc'ing stable since the original patch had >> cc:stable as well), >> >> I'm experiencing a CPU soft lockup while downloading when rtl8821ae is >> loaded (even when downloading through other adapters) on a vanilla 4.2 >> kernel. The problem did not happen on vanilla 4.1. Bisecting shows the >> first bad commit being "rtlwifi: Remove the clear interrupt routine >> from all drivers" (1277fa2ab2f9a624a4b0177119ca13b5fd65edd0). >> Reverting that commit makes the problem go away. >> >> The system is perfectly stable until I start downloading, when the UI >> becomes unresponsive, sometimes leading to a complete freeze. When the >> system does not completely freezes and I'm able to kill the download, >> everything seems to go back to normal after killing it, and I am able >> to continue to use the computer as long as I do not download anything. >> Most of the time either a soft or a hard lockup is detected, but not >> always, although the freeze always occurs. >> >> This is the kernel log with lockdep enabled (although sometimes the >> problem does not occur with lockdep enabled): >> https://gist.github.com/jprvita/3aa2c0c9a66793e1fad1 >> >> I have the laptop where this happens as a test machine sitting on my >> desk, so I'm available to test any patches or gather more information >> if needed. Please advise on how I can help debugging this further. > > > I cannot duplicate your result, and neither can the Realtek team; however, I > have prepared and attached a patch to temporarily re-add the interrupt clear > routine for rtl8821ae. Please try it and report the results. > With the attached patch the lockup goes away and the system remains stable during downloads. Let me know if there is anything else you would like me to test. Regards, -- João Paulo Rechi Vita http://about.me/jprvita -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From 97ecd2789dc71b158467fc57d0326641a4581f0d Mon Sep 17 00:00:00 2001 From: Larry Finger <Larry.Finger@lwfinger.net> Date: Thu, 1 Oct 2015 10:37:49 -0500 Subject: [PATCH] rtlwifi: rtl8821ae: Trial patch to reinstall interrupt clear routine Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> --- drivers/net/wireless/rtlwifi/rtl8821ae/hw.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c b/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c index b7f18e21..6d2caa8 100644 --- a/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c @@ -2253,11 +2253,27 @@ void rtl8821ae_set_qos(struct ieee80211_hw *hw, int aci) } } +static void rtl8821ae_clear_interrupt(struct ieee80211_hw *hw) +{ + struct rtl_priv *rtlpriv = rtl_priv(hw); + u32 tmp = rtl_read_dword(rtlpriv, REG_HISR); + + rtl_write_dword(rtlpriv, REG_HISR, tmp); + + tmp = rtl_read_dword(rtlpriv, REG_HISRE); + rtl_write_dword(rtlpriv, REG_HISRE, tmp); + + tmp = rtl_read_dword(rtlpriv, REG_HSISR); + rtl_write_dword(rtlpriv, REG_HSISR, tmp); +} + void rtl8821ae_enable_interrupt(struct ieee80211_hw *hw) { struct rtl_priv *rtlpriv = rtl_priv(hw); struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); + rtl8821ae_clear_interrupt(hw);/*clear it here first*/ + rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF); rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF); rtlpci->irq_enabled = true; -- 2.1.4