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

Commit a13ab959 authored by Yue Ma's avatar Yue Ma Committed by Gerrit - the friendly Code Review server
Browse files

cnss2: Handle race between register driver and reboot properly



Register driver should be skipped if reboot is already in progress.
Also firmware boot timer should be stopped if register driver work
has been scheduled but gets killed later to avoid timing out because
of the reboot.

Change-Id: Iae4de860329a82416bfa58967095a4de7b509813
Signed-off-by: default avatarYue Ma <yuem@codeaurora.org>
parent b8e1fe0e
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -2071,6 +2071,10 @@ int cnss_wlan_register_driver(struct cnss_wlan_driver *driver_ops)
				     CNSS_DRIVER_EVENT_REGISTER_DRIVER,
				     CNSS_EVENT_SYNC_UNINTERRUPTIBLE,
				     driver_ops);
	if (ret == -EINTR) {
		cnss_pr_dbg("Register driver work is killed\n");
		del_timer(&plat_priv->fw_boot_timer);
	}

	return ret;
}
@@ -2126,6 +2130,11 @@ int cnss_pci_register_driver_hdlr(struct cnss_pci_data *pci_priv,
	int ret = 0;
	struct cnss_plat_data *plat_priv = pci_priv->plat_priv;

	if (test_bit(CNSS_IN_REBOOT, &plat_priv->driver_state)) {
		cnss_pr_dbg("Reboot or shutdown is in progress, ignore register driver\n");
		return -EINVAL;
	}

	set_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state);
	pci_priv->driver_ops = data;