--- x/drivers/net/wireless/marvell/libertas/firmware.c +++ y/drivers/net/wireless/marvell/libertas/firmware.c @@ -111,9 +111,20 @@ next: do_load_firmware(priv, iter->helper, helper_firmware_cb); } +static bool lbs_check_fw_loaded(struct lbs_private *priv) +{ + unsigned long flags; + bool rc; + + spin_lock_irqsave(&priv->driver_lock, flags); + rc = priv->fw_callback == NULL; + spin_unlock_irqrestore(&priv->driver_lock, flags); + return rc; +} + void lbs_wait_for_firmware_load(struct lbs_private *priv) { - wait_event(priv->fw_waitq, priv->fw_callback == NULL); + wait_event(priv->fw_waitq, true == lbs_check_fw_loaded(priv)); } /**