Commit 48f4d916 authored by Avinash Patil's avatar Avinash Patil Committed by John W. Linville

mwifiex: fix system freeze while reloading driver

Unload sequence for mwifiex PCIE driver is as follows:
1. Invoking cleanup module from kernel results into
2. Kernel invokes PCIE remove() handler which disconnects all
3. One step during disconnect is to clean PCIE TX rings.
   During this we read txbd_rdptr from FW.

While loading driver next time, we see pci_enable_device()
results into system freeze. This may have happened because we
accessed PCI device after unregistering from bus driver.
Removing this ioread() operation resolves this bug.
Signed-off-by: default avatarAvinash Patil <>
Signed-off-by: default avatarBing Zhao <>
Signed-off-by: default avatarJohn W. Linville <>
parent 1499d9fa
......@@ -908,17 +908,8 @@ static int mwifiex_pcie_delete_sleep_cookie_buf(struct mwifiex_adapter *adapter)
static int mwifiex_clean_pcie_ring_buf(struct mwifiex_adapter *adapter)
struct pcie_service_card *card = adapter->card;
const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
u32 rdptr;
/* Read the TX ring read pointer set by firmware */
if (mwifiex_read_reg(adapter, reg->tx_rdptr, &rdptr)) {
"Flush TXBD: failed to read reg->tx_rdptr\n");
return -1;
if (!mwifiex_pcie_txbd_empty(card, rdptr)) {
if (!mwifiex_pcie_txbd_empty(card, card->txbd_rdptr)) {
card->txbd_flush = 1;
/* write pointer already set at last send
* send dnld-rdy intr again, wait for completion.
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