Linux 3.2.102
[pandora-kernel.git] / net / wireless / core.c
index 220f3bd..57fd882 100644 (file)
@@ -329,6 +329,7 @@ struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv)
 
        struct cfg80211_registered_device *rdev;
        int alloc_size;
+       int rv;
 
        WARN_ON(ops->add_key && (!ops->del_key || !ops->set_default_key));
        WARN_ON(ops->auth && (!ops->assoc || !ops->deauth || !ops->disassoc));
@@ -362,7 +363,11 @@ struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv)
        mutex_unlock(&cfg80211_mutex);
 
        /* give it a proper name */
-       dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx);
+       rv = dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx);
+       if (rv < 0) {
+               kfree(rdev);
+               return NULL;
+       }
 
        mutex_init(&rdev->mtx);
        mutex_init(&rdev->devlist_mtx);
@@ -548,8 +553,7 @@ int wiphy_register(struct wiphy *wiphy)
                for (i = 0; i < sband->n_channels; i++) {
                        sband->channels[i].orig_flags =
                                sband->channels[i].flags;
-                       sband->channels[i].orig_mag =
-                               sband->channels[i].max_antenna_gain;
+                       sband->channels[i].orig_mag = INT_MAX;
                        sband->channels[i].orig_mpwr =
                                sband->channels[i].max_power;
                        sband->channels[i].band = band;
@@ -971,6 +975,11 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
                 */
                synchronize_rcu();
                INIT_LIST_HEAD(&wdev->list);
+               /*
+                * Ensure that all events have been processed and
+                * freed.
+                */
+               cfg80211_process_wdev_events(wdev);
                break;
        case NETDEV_PRE_UP:
                if (!(wdev->wiphy->interface_modes & BIT(wdev->iftype)))
@@ -981,8 +990,12 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
                if (ret)
                        return notifier_from_errno(ret);
                break;
+       default:
+               return NOTIFY_DONE;
        }
 
+       wireless_nlevent_flush();
+
        return NOTIFY_DONE;
 }