aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2020-04-15 04:16:25 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2020-04-15 04:16:25 -0700
commita292de0c39927851dd33306b9027121e5219332f (patch)
tree87371ad80a4ac5a55d4bf0a6b715cd3795b9ca9d
parent914ca5c9cf36f01772453c20c4a89afb57989351 (diff)
parente8bbacd1b5f44dd9d66d5a76be74bbbbc11f35bc (diff)
Merge "cnss2: Handle race between register driver and reboot properly"LA.UM.8.12.r1-10400-sm8250.0
-rw-r--r--drivers/net/wireless/cnss2/pci.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c
index b7243a769ab3..8dd5e90bcb81 100644
--- a/drivers/net/wireless/cnss2/pci.c
+++ b/drivers/net/wireless/cnss2/pci.c
@@ -2071,6 +2071,10 @@ register_driver:
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;