mac80211: Deinline drv_add/remove/change_interface()
authorDenys Vlasenko <dvlasenk@redhat.com>
Fri, 18 Sep 2015 13:19:38 +0000 (15:19 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 29 Sep 2015 13:56:46 +0000 (15:56 +0200)
With this .config: http://busybox.net/~vda/kernel_config_ALLYES_Os,
after deinlining these functions have sizes and callsite counts
as follows:

drv_add_interface: 638 bytes, 5 calls
drv_remove_interface: 611 bytes, 6 calls
drv_change_interface: 658 bytes, 1 call

Total size reduction is about 9 kbytes.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
CC: John Linville <linville@tuxdriver.com>
CC: Michal Kazior <michal.kazior@tieto.com>
CC: Johannes Berg <johannes.berg@intel.com>
CC: linux-wireless@vger.kernel.org
CC: linux-kernel@vger.kernel.org
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/driver-ops.c
net/mac80211/driver-ops.h

index b85f6ff..b284e6e 100644 (file)
@@ -8,6 +8,60 @@
 #include "trace.h"
 #include "driver-ops.h"
 
+int drv_add_interface(struct ieee80211_local *local,
+                     struct ieee80211_sub_if_data *sdata)
+{
+       int ret;
+
+       might_sleep();
+
+       if (WARN_ON(sdata->vif.type == NL80211_IFTYPE_AP_VLAN ||
+                   (sdata->vif.type == NL80211_IFTYPE_MONITOR &&
+                    !ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF) &&
+                    !(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE))))
+               return -EINVAL;
+
+       trace_drv_add_interface(local, sdata);
+       ret = local->ops->add_interface(&local->hw, &sdata->vif);
+       trace_drv_return_int(local, ret);
+
+       if (ret == 0)
+               sdata->flags |= IEEE80211_SDATA_IN_DRIVER;
+
+       return ret;
+}
+
+int drv_change_interface(struct ieee80211_local *local,
+                        struct ieee80211_sub_if_data *sdata,
+                        enum nl80211_iftype type, bool p2p)
+{
+       int ret;
+
+       might_sleep();
+
+       if (!check_sdata_in_driver(sdata))
+               return -EIO;
+
+       trace_drv_change_interface(local, sdata, type, p2p);
+       ret = local->ops->change_interface(&local->hw, &sdata->vif, type, p2p);
+       trace_drv_return_int(local, ret);
+       return ret;
+}
+
+void drv_remove_interface(struct ieee80211_local *local,
+                         struct ieee80211_sub_if_data *sdata)
+{
+       might_sleep();
+
+       if (!check_sdata_in_driver(sdata))
+               return;
+
+       trace_drv_remove_interface(local, sdata);
+       local->ops->remove_interface(&local->hw, &sdata->vif);
+       sdata->flags &= ~IEEE80211_SDATA_IN_DRIVER;
+       trace_drv_return_void(local);
+}
+
 __must_check
 int drv_sta_state(struct ieee80211_local *local,
                  struct ieee80211_sub_if_data *sdata,
index 2937bcb..0baeefd 100644 (file)
@@ -137,59 +137,15 @@ static inline void drv_set_wakeup(struct ieee80211_local *local,
 }
 #endif
 
-static inline int drv_add_interface(struct ieee80211_local *local,
-                                   struct ieee80211_sub_if_data *sdata)
-{
-       int ret;
-
-       might_sleep();
-
-       if (WARN_ON(sdata->vif.type == NL80211_IFTYPE_AP_VLAN ||
-                   (sdata->vif.type == NL80211_IFTYPE_MONITOR &&
-                    !ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF) &&
-                    !(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE))))
-               return -EINVAL;
-
-       trace_drv_add_interface(local, sdata);
-       ret = local->ops->add_interface(&local->hw, &sdata->vif);
-       trace_drv_return_int(local, ret);
-
-       if (ret == 0)
-               sdata->flags |= IEEE80211_SDATA_IN_DRIVER;
-
-       return ret;
-}
-
-static inline int drv_change_interface(struct ieee80211_local *local,
-                                      struct ieee80211_sub_if_data *sdata,
-                                      enum nl80211_iftype type, bool p2p)
-{
-       int ret;
-
-       might_sleep();
-
-       if (!check_sdata_in_driver(sdata))
-               return -EIO;
-
-       trace_drv_change_interface(local, sdata, type, p2p);
-       ret = local->ops->change_interface(&local->hw, &sdata->vif, type, p2p);
-       trace_drv_return_int(local, ret);
-       return ret;
-}
+int drv_add_interface(struct ieee80211_local *local,
+                     struct ieee80211_sub_if_data *sdata);
 
-static inline void drv_remove_interface(struct ieee80211_local *local,
-                                       struct ieee80211_sub_if_data *sdata)
-{
-       might_sleep();
-
-       if (!check_sdata_in_driver(sdata))
-               return;
+int drv_change_interface(struct ieee80211_local *local,
+                        struct ieee80211_sub_if_data *sdata,
+                        enum nl80211_iftype type, bool p2p);
 
-       trace_drv_remove_interface(local, sdata);
-       local->ops->remove_interface(&local->hw, &sdata->vif);
-       sdata->flags &= ~IEEE80211_SDATA_IN_DRIVER;
-       trace_drv_return_void(local);
-}
+void drv_remove_interface(struct ieee80211_local *local,
+                         struct ieee80211_sub_if_data *sdata);
 
 static inline int drv_config(struct ieee80211_local *local, u32 changed)
 {