wl1271: set wl->vif only if add_interface succeeded.
authorEliad Peller <eliad@wizery.com>
Thu, 28 Oct 2010 19:46:43 +0000 (21:46 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 15 Nov 2010 18:25:21 +0000 (13:25 -0500)
set wl->vif to the newly created interface only after the firmware booted
successfully. on the way - make the function flow more clear.

Signed-off-by: Eliad Peller <eliad@wizery.com>
Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
drivers/net/wireless/wl12xx/wl1271_main.c

index c54887c806462d6a95fdb661e1cd515e41adc4cb..a3a1ebc578a3699d8f718b8d3878481d128342c5 100644 (file)
@@ -950,18 +950,19 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
        struct wiphy *wiphy = hw->wiphy;
        int retries = WL1271_BOOT_RETRIES;
        int ret = 0;
+       bool booted = false;
 
        wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
                     vif->type, vif->addr);
 
        mutex_lock(&wl->mutex);
        if (wl->vif) {
+               wl1271_debug(DEBUG_MAC80211,
+                            "multiple vifs are not supported yet");
                ret = -EBUSY;
                goto out;
        }
 
-       wl->vif = vif;
-
        switch (vif->type) {
        case NL80211_IFTYPE_STATION:
                wl->bss_type = BSS_TYPE_STA_BSS;
@@ -999,15 +1000,8 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
                if (ret < 0)
                        goto irq_disable;
 
-               wl->state = WL1271_STATE_ON;
-               wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
-
-               /* update hw/fw version info in wiphy struct */
-               wiphy->hw_version = wl->chip.id;
-               strncpy(wiphy->fw_version, wl->chip.fw_ver,
-                       sizeof(wiphy->fw_version));
-
-               goto out;
+               booted = true;
+               break;
 
 irq_disable:
                wl1271_disable_interrupts(wl);
@@ -1025,8 +1019,21 @@ power_off:
                wl1271_power_off(wl);
        }
 
-       wl1271_error("firmware boot failed despite %d retries",
-                    WL1271_BOOT_RETRIES);
+       if (!booted) {
+               wl1271_error("firmware boot failed despite %d retries",
+                            WL1271_BOOT_RETRIES);
+               goto out;
+       }
+
+       wl->vif = vif;
+       wl->state = WL1271_STATE_ON;
+       wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
+
+       /* update hw/fw version info in wiphy struct */
+       wiphy->hw_version = wl->chip.id;
+       strncpy(wiphy->fw_version, wl->chip.fw_ver,
+               sizeof(wiphy->fw_version));
+
 out:
        mutex_unlock(&wl->mutex);