mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 16:24:13 +08:00
iwlwifi: pcie: make sure prph_info is set when treating wakeup IRQ
In some rare cases when the HW is in a bad state, we may get this interrupt when prph_info is not set yet. Then we will try to dereference it to check the sleep_notif element, which will cause an oops. Fix that by ignoring the interrupt if prph_info is not set yet. Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Link: https://lore.kernel.org/r/iwlwifi.20211219132536.0537aa562313.I183bb336345b9b3da196ba9e596a6f189fbcbd09@changeid Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
73ca8763eb
commit
459fc0f2c6
@ -2266,7 +2266,12 @@ irqreturn_t iwl_pcie_irq_msix_handler(int irq, void *dev_id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inta_hw & MSIX_HW_INT_CAUSES_REG_WAKEUP) {
|
/*
|
||||||
|
* In some rare cases when the HW is in a bad state, we may
|
||||||
|
* get this interrupt too early, when prph_info is still NULL.
|
||||||
|
* So make sure that it's not NULL to prevent crashing.
|
||||||
|
*/
|
||||||
|
if (inta_hw & MSIX_HW_INT_CAUSES_REG_WAKEUP && trans_pcie->prph_info) {
|
||||||
u32 sleep_notif =
|
u32 sleep_notif =
|
||||||
le32_to_cpu(trans_pcie->prph_info->sleep_notif);
|
le32_to_cpu(trans_pcie->prph_info->sleep_notif);
|
||||||
if (sleep_notif == IWL_D3_SLEEP_STATUS_SUSPEND ||
|
if (sleep_notif == IWL_D3_SLEEP_STATUS_SUSPEND ||
|
||||||
|
Loading…
Reference in New Issue
Block a user