aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/quantenna/qtnfmac/pcie
diff options
context:
space:
mode:
authorIgor Mitsyanko <igor.mitsyanko.os@quantenna.com>2018-09-24 15:15:13 -0700
committerKalle Valo <kvalo@codeaurora.org>2018-10-01 18:40:30 +0300
commit86ca238cf1e99794be77d299639d6e2a1dfd67a6 (patch)
treec78b4c37a56a50e38a55eccdefd6925cbdc06aaf /drivers/net/wireless/quantenna/qtnfmac/pcie
parentqtnfmac_pcie: extract platform-independent PCIe code (diff)
downloadlinux-dev-86ca238cf1e99794be77d299639d6e2a1dfd67a6.tar.xz
linux-dev-86ca238cf1e99794be77d299639d6e2a1dfd67a6.zip
qtnfmac: wait for FW load work to finish at PCIe remove
Waiting for "completion" to be set in FW load thread can not be used in case PCIe remove is called before FW load work was scheduled. Just wait for work completion instead to avoid problems. Signed-off-by: Igor Mitsyanko <igor.mitsyanko.os@quantenna.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/quantenna/qtnfmac/pcie')
-rw-r--r--drivers/net/wireless/quantenna/qtnfmac/pcie/pcie.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/drivers/net/wireless/quantenna/qtnfmac/pcie/pcie.c b/drivers/net/wireless/quantenna/qtnfmac/pcie/pcie.c
index f83951cd0636..d1637f2354a6 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/pcie/pcie.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/pcie/pcie.c
@@ -130,7 +130,6 @@ void qtnf_pcie_fw_boot_done(struct qtnf_bus *bus, bool boot_success,
bus->fw_state = QTNF_FW_STATE_DETACHED;
}
- complete(&bus->firmware_init_complete);
put_device(&pdev->dev);
}
@@ -304,7 +303,6 @@ int qtnf_pcie_probe(struct pci_dev *pdev, size_t priv_size,
pcie_priv->pdev = pdev;
pcie_priv->tx_stopped = 0;
- init_completion(&bus->firmware_init_complete);
mutex_init(&bus->bus_lock);
spin_lock_init(&pcie_priv->tx_lock);
spin_lock_init(&pcie_priv->tx_reclaim_lock);
@@ -376,7 +374,7 @@ static void qtnf_pcie_free_shm_ipc(struct qtnf_pcie_bus_priv *priv)
void qtnf_pcie_remove(struct qtnf_bus *bus, struct qtnf_pcie_bus_priv *priv)
{
- wait_for_completion(&bus->firmware_init_complete);
+ cancel_work_sync(&bus->fw_work);
if (bus->fw_state == QTNF_FW_STATE_ACTIVE ||
bus->fw_state == QTNF_FW_STATE_EP_DEAD)