Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86ca238c authored by Igor Mitsyanko's avatar Igor Mitsyanko Committed by Kalle Valo
Browse files

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: default avatarIgor Mitsyanko <igor.mitsyanko.os@quantenna.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent addc7540
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -62,7 +62,6 @@ struct qtnf_bus {
	struct qtnf_hw_info hw_info;
	struct napi_struct mux_napi;
	struct net_device mux_dev;
	struct completion firmware_init_complete;
	struct workqueue_struct *workqueue;
	struct work_struct fw_work;
	struct work_struct event_work;
+1 −3
Original line number Diff line number Diff line
@@ -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)