diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2020-04-15 04:16:25 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2020-04-15 04:16:25 -0700 |
commit | a292de0c39927851dd33306b9027121e5219332f (patch) | |
tree | 87371ad80a4ac5a55d4bf0a6b715cd3795b9ca9d | |
parent | 914ca5c9cf36f01772453c20c4a89afb57989351 (diff) | |
parent | e8bbacd1b5f44dd9d66d5a76be74bbbbc11f35bc (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.c | 9 |
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; |