Thanks. Unfortunately no debug print hits at the spot. Now looking at the code closely, I see a few bad things: - _rtl_pci_interrupt() always returns IRQ_HANDLED even for a shared irq. - msi_support flag is set multiple times in rtl8821ae/sw.c, a few of them are either superfluous or wrong. int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw) { .... rtlpci->msi_support = rtlpriv->cfg->mod_params->msi_support; .... rtlpci->msi_support = rtlpriv->cfg->mod_params->msi_support; rtlpci->msi_support = rtlpriv->cfg->mod_params->int_clear; if (rtlpriv->cfg->mod_params->disable_watchdog) pr_info("watchdog disabled\n"); rtlpriv->psc.reg_fwctrl_lps = 3; rtlpriv->psc.reg_max_lps_awakeintvl = 5; rtlpci->msi_support = rtlpriv->cfg->mod_params->msi_support; ..... Larry, what's the purpose of tweaking his for int_clear?