diff options
author | Johannes Berg <johannes.berg@intel.com> | 2013-05-08 21:49:02 +0200 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-05-25 00:02:13 +0200 |
commit | 73810b77def898b43a97638478692922b7f820eb (patch) | |
tree | 810265ca6e32467be67f0c6e0d50f18cfe212889 /net/wireless/core.c | |
parent | 9f419f3851041e0c8170629f0639813dbfc79d5e (diff) | |
download | kernel-common-73810b77def898b43a97638478692922b7f820eb.tar.gz kernel-common-73810b77def898b43a97638478692922b7f820eb.tar.bz2 kernel-common-73810b77def898b43a97638478692922b7f820eb.zip |
cfg80211: use atomic_t for wiphy counter
There's no need to lock, we can just use an atomic_t.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless/core.c')
-rw-r--r-- | net/wireless/core.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/net/wireless/core.c b/net/wireless/core.c index cc49cf11c7a7..9416b8f55f50 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c @@ -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); |