These simple sanity check avoids extra complexity in error paths when
moving to asynchronous firmware loading (which means the device may fail to
init some time after its creation).
Signed-off-by: Daniel Drake <[email protected]>
---
drivers/net/wireless/libertas/main.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
index fa09585..7eaf992 100644
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
@@ -1033,7 +1033,9 @@ void lbs_remove_card(struct lbs_private *priv)
lbs_deb_enter(LBS_DEB_MAIN);
lbs_remove_mesh(priv);
- lbs_scan_deinit(priv);
+
+ if (priv->wiphy_registered)
+ lbs_scan_deinit(priv);
/* worker thread destruction blocks on the in-flight command which
* should have been cleared already in lbs_stop_card().
@@ -1128,6 +1130,11 @@ void lbs_stop_card(struct lbs_private *priv)
goto out;
dev = priv->dev;
+ /* If the netdev isn't registered, it means that lbs_start_card() was
+ * never called so we have nothing to do here. */
+ if (dev->reg_state != NETREG_REGISTERED)
+ goto out;
+
netif_stop_queue(dev);
netif_carrier_off(dev);
--
1.7.7.6
On Tue, 2012-04-03 at 17:01 +0100, Daniel Drake wrote:
> These simple sanity check avoids extra complexity in error paths when
> moving to asynchronous firmware loading (which means the device may fail to
> init some time after its creation).
Looks fine to me.
Dan
> Signed-off-by: Daniel Drake <[email protected]>
> ---
> drivers/net/wireless/libertas/main.c | 9 ++++++++-
> 1 files changed, 8 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
> index fa09585..7eaf992 100644
> --- a/drivers/net/wireless/libertas/main.c
> +++ b/drivers/net/wireless/libertas/main.c
> @@ -1033,7 +1033,9 @@ void lbs_remove_card(struct lbs_private *priv)
> lbs_deb_enter(LBS_DEB_MAIN);
>
> lbs_remove_mesh(priv);
> - lbs_scan_deinit(priv);
> +
> + if (priv->wiphy_registered)
> + lbs_scan_deinit(priv);
>
> /* worker thread destruction blocks on the in-flight command which
> * should have been cleared already in lbs_stop_card().
> @@ -1128,6 +1130,11 @@ void lbs_stop_card(struct lbs_private *priv)
> goto out;
> dev = priv->dev;
>
> + /* If the netdev isn't registered, it means that lbs_start_card() was
> + * never called so we have nothing to do here. */
> + if (dev->reg_state != NETREG_REGISTERED)
> + goto out;
> +
> netif_stop_queue(dev);
> netif_carrier_off(dev);
>