mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-26 19:36:41 +00:00
mwifiex: fix power state out of sync problem
It's been observed that driver's power state goes out of sync with firmware in some corner cases. When this happens, driver tries to download the data to firmware assuming it's awake which causes Tx data timeout. Main thread will process interrupt as soon as interrupt handler fills 'int_status' variable. This patch fixes the race issue by updating 'int_status' at the end of mwifiex_interrupt_status(). Signed-off-by: Shengzhen Li <szli@marvell.com> Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
99074fc1e6
commit
dc896b15fe
@ -2116,11 +2116,6 @@ static void mwifiex_interrupt_status(struct mwifiex_adapter *adapter,
|
||||
}
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&adapter->int_lock, flags);
|
||||
adapter->int_status |= pcie_ireg;
|
||||
spin_unlock_irqrestore(&adapter->int_lock, flags);
|
||||
mwifiex_dbg(adapter, INTR, "ireg: 0x%08x\n", pcie_ireg);
|
||||
|
||||
if (!adapter->pps_uapsd_mode &&
|
||||
adapter->ps_state == PS_STATE_SLEEP &&
|
||||
mwifiex_pcie_ok_to_access_hw(adapter)) {
|
||||
@ -2132,6 +2127,11 @@ static void mwifiex_interrupt_status(struct mwifiex_adapter *adapter,
|
||||
adapter->pm_wakeup_fw_try = false;
|
||||
del_timer(&adapter->wakeup_timer);
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&adapter->int_lock, flags);
|
||||
adapter->int_status |= pcie_ireg;
|
||||
spin_unlock_irqrestore(&adapter->int_lock, flags);
|
||||
mwifiex_dbg(adapter, INTR, "ireg: 0x%08x\n", pcie_ireg);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user