Message ID | 20180112210837.112628-1-briannorris@chromium.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 7e34c0d2f631a1ecd4a0a6973502fff72343487e |
Delegated to: | Kalle Valo |
Headers | show |
Brian Norris <briannorris@chromium.org> wrote: > This reverts commit b713bbf1471b56b572ce26bd02b81a85c2b007f4. > > The "fix" in question does not actually fix all related problems, and it > also introduces new deadlock possibilities. Since commit b014e96d1abb > ("PCI: Protect pci_error_handlers->reset_notify() usage with > device_lock()"), the race in question is actually resolved (PCIe reset > cannot happen at the same time as remove()). Instead, this "fix" just > introduces a deadlock where mwifiex_pcie_card_reset_work() is waiting on > device_lock, which is held by PCIe device remove(), which is waiting > on...mwifiex_pcie_card_reset_work(). > > The proper thing to do is just to fix the deadlock. Patch for this will > come separately. > > Cc: Signed-off-by: Xinming Hu <huxm@marvell.com> > Signed-off-by: Brian Norris <briannorris@chromium.org> 2 patches applied to wireless-drivers-next.git, thanks. 7e34c0d2f631 Revert "mwifiex: cancel pcie/sdio work in remove/shutdown handler" a64e7a79dd60 mwifiex: resolve reset vs. remove()/shutdown() deadlocks
diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c index 23209c5cab05..f666cb2ea7e0 100644 --- a/drivers/net/wireless/marvell/mwifiex/pcie.c +++ b/drivers/net/wireless/marvell/mwifiex/pcie.c @@ -310,8 +310,6 @@ static void mwifiex_pcie_remove(struct pci_dev *pdev) mwifiex_init_shutdown_fw(priv, MWIFIEX_FUNC_SHUTDOWN); } - cancel_work_sync(&card->work); - mwifiex_remove_card(adapter); } diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.c b/drivers/net/wireless/marvell/mwifiex/sdio.c index 248858723753..a82880132af4 100644 --- a/drivers/net/wireless/marvell/mwifiex/sdio.c +++ b/drivers/net/wireless/marvell/mwifiex/sdio.c @@ -399,8 +399,6 @@ mwifiex_sdio_remove(struct sdio_func *func) mwifiex_init_shutdown_fw(priv, MWIFIEX_FUNC_SHUTDOWN); } - cancel_work_sync(&card->work); - mwifiex_remove_card(adapter); }
This reverts commit b713bbf1471b56b572ce26bd02b81a85c2b007f4. The "fix" in question does not actually fix all related problems, and it also introduces new deadlock possibilities. Since commit b014e96d1abb ("PCI: Protect pci_error_handlers->reset_notify() usage with device_lock()"), the race in question is actually resolved (PCIe reset cannot happen at the same time as remove()). Instead, this "fix" just introduces a deadlock where mwifiex_pcie_card_reset_work() is waiting on device_lock, which is held by PCIe device remove(), which is waiting on...mwifiex_pcie_card_reset_work(). The proper thing to do is just to fix the deadlock. Patch for this will come separately. Cc: Signed-off-by: Xinming Hu <huxm@marvell.com> Signed-off-by: Brian Norris <briannorris@chromium.org> --- drivers/net/wireless/marvell/mwifiex/pcie.c | 2 -- drivers/net/wireless/marvell/mwifiex/sdio.c | 2 -- 2 files changed, 4 deletions(-)