mirror of
https://github.com/torvalds/linux.git
synced 2024-10-31 17:21:49 +00:00
mwifiex: fix system freeze while reloading driver
Unload sequence for mwifiex PCIE driver is as follows: 1. Invoking cleanup module from kernel results into pci_unregister_driver 2. Kernel invokes PCIE remove() handler which disconnects all interfaces. 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: Avinash Patil <patila@marvell.com> Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
1499d9fa54
commit
48f4d91679
@ -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)
|
static int mwifiex_clean_pcie_ring_buf(struct mwifiex_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct pcie_service_card *card = adapter->card;
|
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_pcie_txbd_empty(card, card->txbd_rdptr)) {
|
||||||
if (mwifiex_read_reg(adapter, reg->tx_rdptr, &rdptr)) {
|
|
||||||
dev_err(adapter->dev,
|
|
||||||
"Flush TXBD: failed to read reg->tx_rdptr\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mwifiex_pcie_txbd_empty(card, rdptr)) {
|
|
||||||
card->txbd_flush = 1;
|
card->txbd_flush = 1;
|
||||||
/* write pointer already set at last send
|
/* write pointer already set at last send
|
||||||
* send dnld-rdy intr again, wait for completion.
|
* send dnld-rdy intr again, wait for completion.
|
||||||
|
Loading…
Reference in New Issue
Block a user