cfg80211: remove some locked wrappers from sme API
authorJohannes Berg <johannes.berg@intel.com>
Wed, 15 May 2013 15:44:01 +0000 (17:44 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 24 May 2013 22:02:22 +0000 (00:02 +0200)
By making all the API functions require wdev locking we
can clean up the API a bit, getting rid of the locking
version of each function. This also decreases the size
of cfg80211 by a small amount.

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

index afcb9ec70adb8c06dade9eec996cfef9ce6fe010..ee422871fe9e7a1b42b7ab571a6b858bc9671171 100644 (file)
@@ -755,8 +755,8 @@ void cfg80211_leave(struct cfg80211_registered_device *rdev,
                wdev->wext.ie_len = 0;
                wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC;
 #endif
-               __cfg80211_disconnect(rdev, dev,
-                                     WLAN_REASON_DEAUTH_LEAVING, true);
+               cfg80211_disconnect(rdev, dev,
+                                   WLAN_REASON_DEAUTH_LEAVING, true);
                wdev_unlock(wdev);
                break;
        case NL80211_IFTYPE_MESH_POINT:
index c8f87dfd50d3d735d224ef8df5bc8e5bb275f602..b4b4a566626b961f49de9500f9b5b42f4badcc17 100644 (file)
@@ -328,18 +328,11 @@ void cfg80211_oper_and_vht_capa(struct ieee80211_vht_cap *vht_capa,
                                const struct ieee80211_vht_cap *vht_capa_mask);
 
 /* SME */
-int __cfg80211_connect(struct cfg80211_registered_device *rdev,
-                      struct net_device *dev,
-                      struct cfg80211_connect_params *connect,
-                      struct cfg80211_cached_keys *connkeys,
-                      const u8 *prev_bssid);
 int cfg80211_connect(struct cfg80211_registered_device *rdev,
                     struct net_device *dev,
                     struct cfg80211_connect_params *connect,
-                    struct cfg80211_cached_keys *connkeys);
-int __cfg80211_disconnect(struct cfg80211_registered_device *rdev,
-                         struct net_device *dev, u16 reason,
-                         bool wextev);
+                    struct cfg80211_cached_keys *connkeys,
+                    const u8 *prev_bssid);
 int cfg80211_disconnect(struct cfg80211_registered_device *rdev,
                        struct net_device *dev, u16 reason,
                        bool wextev);
index 49c2f2f511dc9c53210353d8af6b5817f4d68c8b..a09f36bb957c32977f08d52f4a3785921be1543e 100644 (file)
@@ -6683,7 +6683,9 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
                       sizeof(connect.vht_capa));
        }
 
-       err = cfg80211_connect(rdev, dev, &connect, connkeys);
+       wdev_lock(dev->ieee80211_ptr);
+       err = cfg80211_connect(rdev, dev, &connect, connkeys, NULL);
+       wdev_unlock(dev->ieee80211_ptr);
        if (err)
                kfree(connkeys);
        return err;
@@ -6694,6 +6696,7 @@ static int nl80211_disconnect(struct sk_buff *skb, struct genl_info *info)
        struct cfg80211_registered_device *rdev = info->user_ptr[0];
        struct net_device *dev = info->user_ptr[1];
        u16 reason;
+       int ret;
 
        if (!info->attrs[NL80211_ATTR_REASON_CODE])
                reason = WLAN_REASON_DEAUTH_LEAVING;
@@ -6707,7 +6710,10 @@ static int nl80211_disconnect(struct sk_buff *skb, struct genl_info *info)
            dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT)
                return -EOPNOTSUPP;
 
-       return cfg80211_disconnect(rdev, dev, reason, true);
+       wdev_lock(dev->ieee80211_ptr);
+       ret = cfg80211_disconnect(rdev, dev, reason, true);
+       wdev_unlock(dev->ieee80211_ptr);
+       return ret;
 }
 
 static int nl80211_wiphy_netns(struct sk_buff *skb, struct genl_info *info)
index 31d67add7424eba19c5541a3ee2eb07a0c256b0c..81be95f3be74352aa245c5bcdc64c496db7d5e52 100644 (file)
@@ -760,11 +760,11 @@ void cfg80211_disconnected(struct net_device *dev, u16 reason,
 }
 EXPORT_SYMBOL(cfg80211_disconnected);
 
-int __cfg80211_connect(struct cfg80211_registered_device *rdev,
-                      struct net_device *dev,
-                      struct cfg80211_connect_params *connect,
-                      struct cfg80211_cached_keys *connkeys,
-                      const u8 *prev_bssid)
+int cfg80211_connect(struct cfg80211_registered_device *rdev,
+                    struct net_device *dev,
+                    struct cfg80211_connect_params *connect,
+                    struct cfg80211_cached_keys *connkeys,
+                    const u8 *prev_bssid)
 {
        struct wireless_dev *wdev = dev->ieee80211_ptr;
        struct cfg80211_bss *bss = NULL;
@@ -911,22 +911,8 @@ int __cfg80211_connect(struct cfg80211_registered_device *rdev,
        }
 }
 
-int cfg80211_connect(struct cfg80211_registered_device *rdev,
-                    struct net_device *dev,
-                    struct cfg80211_connect_params *connect,
-                    struct cfg80211_cached_keys *connkeys)
-{
-       int err;
-
-       wdev_lock(dev->ieee80211_ptr);
-       err = __cfg80211_connect(rdev, dev, connect, connkeys, NULL);
-       wdev_unlock(dev->ieee80211_ptr);
-
-       return err;
-}
-
-int __cfg80211_disconnect(struct cfg80211_registered_device *rdev,
-                         struct net_device *dev, u16 reason, bool wextev)
+int cfg80211_disconnect(struct cfg80211_registered_device *rdev,
+                       struct net_device *dev, u16 reason, bool wextev)
 {
        struct wireless_dev *wdev = dev->ieee80211_ptr;
        int err;
@@ -983,19 +969,6 @@ int __cfg80211_disconnect(struct cfg80211_registered_device *rdev,
        return 0;
 }
 
-int cfg80211_disconnect(struct cfg80211_registered_device *rdev,
-                       struct net_device *dev,
-                       u16 reason, bool wextev)
-{
-       int err;
-
-       wdev_lock(dev->ieee80211_ptr);
-       err = __cfg80211_disconnect(rdev, dev, reason, wextev);
-       wdev_unlock(dev->ieee80211_ptr);
-
-       return err;
-}
-
 void cfg80211_sme_disassoc(struct net_device *dev,
                           struct cfg80211_internal_bss *bss)
 {
index 501724257af5621bf737b0e55d13b529e055abb9..74458b7f61eb8bcd00eadd0cd4c24a380c589fb1 100644 (file)
@@ -858,8 +858,10 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
                        break;
                case NL80211_IFTYPE_STATION:
                case NL80211_IFTYPE_P2P_CLIENT:
+                       wdev_lock(dev->ieee80211_ptr);
                        cfg80211_disconnect(rdev, dev,
                                            WLAN_REASON_DEAUTH_LEAVING, true);
+                       wdev_unlock(dev->ieee80211_ptr);
                        break;
                case NL80211_IFTYPE_MESH_POINT:
                        /* mesh should be handled? */
index aeefd6817189407704695eb8efa1b8273bf8a495..a53f8404f45116119525af82d6409defbd2316b8 100644 (file)
@@ -54,8 +54,8 @@ int cfg80211_mgd_wext_connect(struct cfg80211_registered_device *rdev,
        if (wdev->wext.prev_bssid_valid)
                prev_bssid = wdev->wext.prev_bssid;
 
-       err = __cfg80211_connect(rdev, wdev->netdev,
-                                &wdev->wext.connect, ck, prev_bssid);
+       err = cfg80211_connect(rdev, wdev->netdev,
+                              &wdev->wext.connect, ck, prev_bssid);
        if (err)
                kfree(ck);
 
@@ -100,8 +100,8 @@ int cfg80211_mgd_wext_siwfreq(struct net_device *dev,
                /* if SSID set, we'll try right again, avoid event */
                if (wdev->wext.connect.ssid_len)
                        event = false;
-               err = __cfg80211_disconnect(rdev, dev,
-                                           WLAN_REASON_DEAUTH_LEAVING, event);
+               err = cfg80211_disconnect(rdev, dev,
+                                         WLAN_REASON_DEAUTH_LEAVING, event);
                if (err)
                        goto out;
        }
@@ -199,8 +199,8 @@ int cfg80211_mgd_wext_siwessid(struct net_device *dev,
                /* if SSID set now, we'll try to connect, avoid event */
                if (len)
                        event = false;
-               err = __cfg80211_disconnect(rdev, dev,
-                                           WLAN_REASON_DEAUTH_LEAVING, event);
+               err = cfg80211_disconnect(rdev, dev,
+                                         WLAN_REASON_DEAUTH_LEAVING, event);
                if (err)
                        goto out;
        }
@@ -288,8 +288,8 @@ int cfg80211_mgd_wext_siwap(struct net_device *dev,
                    ether_addr_equal(bssid, wdev->wext.connect.bssid))
                        goto out;
 
-               err = __cfg80211_disconnect(rdev, dev,
-                                           WLAN_REASON_DEAUTH_LEAVING, false);
+               err = cfg80211_disconnect(rdev, dev,
+                                         WLAN_REASON_DEAUTH_LEAVING, false);
                if (err)
                        goto out;
        }
@@ -365,8 +365,8 @@ int cfg80211_wext_siwgenie(struct net_device *dev,
        wdev->wext.ie_len = ie_len;
 
        if (wdev->sme_state != CFG80211_SME_IDLE) {
-               err = __cfg80211_disconnect(rdev, dev,
-                                           WLAN_REASON_DEAUTH_LEAVING, false);
+               err = cfg80211_disconnect(rdev, dev,
+                                         WLAN_REASON_DEAUTH_LEAVING, false);
                if (err)
                        goto out;
        }
@@ -402,8 +402,7 @@ int cfg80211_wext_siwmlme(struct net_device *dev,
        switch (mlme->cmd) {
        case IW_MLME_DEAUTH:
        case IW_MLME_DISASSOC:
-               err = __cfg80211_disconnect(rdev, dev, mlme->reason_code,
-                                           true);
+               err = cfg80211_disconnect(rdev, dev, mlme->reason_code, true);
                break;
        default:
                err = -EOPNOTSUPP;