cfg80211: use atomic_t for wiphy counter
authorJohannes Berg <johannes.berg@intel.com>
Wed, 8 May 2013 19:49:02 +0000 (21:49 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 24 May 2013 22:02:13 +0000 (00:02 +0200)
There's no need to lock, we can just use an atomic_t.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/core.c

index cc49cf11c7a7b5d75907e4f42d531ff1b100d099..9416b8f55f50edf1b6939bbe837a95019550f71e 100644 (file)
@@ -289,7 +289,7 @@ static void cfg80211_event_work(struct work_struct *work)
 
 struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv)
 {
-       static int wiphy_counter;
+       static atomic_t wiphy_counter = ATOMIC_INIT(0);
 
        struct cfg80211_registered_device *rdev;
        int alloc_size;
@@ -311,20 +311,15 @@ struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv)
 
        rdev->ops = ops;
 
-       mutex_lock(&cfg80211_mutex);
-
-       rdev->wiphy_idx = wiphy_counter++;
+       rdev->wiphy_idx = atomic_inc_return(&wiphy_counter);
 
        if (unlikely(rdev->wiphy_idx < 0)) {
-               wiphy_counter--;
-               mutex_unlock(&cfg80211_mutex);
                /* ugh, wrapped! */
+               atomic_dec(&wiphy_counter);
                kfree(rdev);
                return NULL;
        }
 
-       mutex_unlock(&cfg80211_mutex);
-
        /* give it a proper name */
        dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx);