aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/307-mac80211-Deinline-drv_sta_state.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2015-07-22 12:45:03 +0000
committerFelix Fietkau <nbd@openwrt.org>2015-07-22 12:45:03 +0000
commit9384cc59512c6974908289b67c3321d40ee4f19b (patch)
tree2efda9ebe3be4fa220e11d6c8c2b26299a3f00c8 /package/kernel/mac80211/patches/307-mac80211-Deinline-drv_sta_state.patch
parent3b17e2ab6853f78989b7cea4a2cf412938881ac2 (diff)
downloadupstream-9384cc59512c6974908289b67c3321d40ee4f19b.tar.gz
upstream-9384cc59512c6974908289b67c3321d40ee4f19b.tar.bz2
upstream-9384cc59512c6974908289b67c3321d40ee4f19b.zip
mac80211: update to wireless-testing 2015-07-21
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 46436
Diffstat (limited to 'package/kernel/mac80211/patches/307-mac80211-Deinline-drv_sta_state.patch')
-rw-r--r--package/kernel/mac80211/patches/307-mac80211-Deinline-drv_sta_state.patch116
1 files changed, 116 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/307-mac80211-Deinline-drv_sta_state.patch b/package/kernel/mac80211/patches/307-mac80211-Deinline-drv_sta_state.patch
new file mode 100644
index 0000000000..474c4094a6
--- /dev/null
+++ b/package/kernel/mac80211/patches/307-mac80211-Deinline-drv_sta_state.patch
@@ -0,0 +1,116 @@
+From: Denys Vlasenko <dvlasenk@redhat.com>
+Date: Wed, 15 Jul 2015 14:56:05 +0200
+Subject: [PATCH] mac80211: Deinline drv_sta_state
+
+With this .config: http://busybox.net/~vda/kernel_config,
+after deinlining the function size is 3132 bytes and there are
+7 callsites.
+
+Total size reduction: about 20 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: netdev@vger.kernel.org
+CC: linux-kernel@vger.kernel.org
+---
+ create mode 100644 net/mac80211/driver-ops.c
+
+--- a/net/mac80211/Makefile
++++ b/net/mac80211/Makefile
+@@ -3,6 +3,7 @@ obj-$(CPTCFG_MAC80211) += mac80211.o
+ # mac80211 objects
+ mac80211-y := \
+ main.o status.o \
++ driver-ops.o \
+ sta_info.o \
+ wep.o \
+ wpa.o \
+--- /dev/null
++++ b/net/mac80211/driver-ops.c
+@@ -0,0 +1,41 @@
++/*
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <net/mac80211.h>
++#include "ieee80211_i.h"
++#include "trace.h"
++#include "driver-ops.h"
++
++__must_check
++int drv_sta_state(struct ieee80211_local *local,
++ struct ieee80211_sub_if_data *sdata,
++ struct sta_info *sta,
++ enum ieee80211_sta_state old_state,
++ enum ieee80211_sta_state new_state)
++{
++ int ret = 0;
++
++ might_sleep();
++
++ sdata = get_bss_sdata(sdata);
++ if (!check_sdata_in_driver(sdata))
++ return -EIO;
++
++ trace_drv_sta_state(local, sdata, &sta->sta, old_state, new_state);
++ if (local->ops->sta_state) {
++ ret = local->ops->sta_state(&local->hw, &sdata->vif, &sta->sta,
++ old_state, new_state);
++ } else if (old_state == IEEE80211_STA_AUTH &&
++ new_state == IEEE80211_STA_ASSOC) {
++ ret = drv_sta_add(local, sdata, &sta->sta);
++ if (ret == 0)
++ sta->uploaded = true;
++ } else if (old_state == IEEE80211_STA_ASSOC &&
++ new_state == IEEE80211_STA_AUTH) {
++ drv_sta_remove(local, sdata, &sta->sta);
++ }
++ trace_drv_return_int(local, ret);
++ return ret;
++}
+--- a/net/mac80211/driver-ops.h
++++ b/net/mac80211/driver-ops.h
+@@ -573,37 +573,12 @@ static inline void drv_sta_pre_rcu_remov
+ trace_drv_return_void(local);
+ }
+
+-static inline __must_check
++__must_check
+ int drv_sta_state(struct ieee80211_local *local,
+ struct ieee80211_sub_if_data *sdata,
+ struct sta_info *sta,
+ enum ieee80211_sta_state old_state,
+- enum ieee80211_sta_state new_state)
+-{
+- int ret = 0;
+-
+- might_sleep();
+-
+- sdata = get_bss_sdata(sdata);
+- if (!check_sdata_in_driver(sdata))
+- return -EIO;
+-
+- trace_drv_sta_state(local, sdata, &sta->sta, old_state, new_state);
+- if (local->ops->sta_state) {
+- ret = local->ops->sta_state(&local->hw, &sdata->vif, &sta->sta,
+- old_state, new_state);
+- } else if (old_state == IEEE80211_STA_AUTH &&
+- new_state == IEEE80211_STA_ASSOC) {
+- ret = drv_sta_add(local, sdata, &sta->sta);
+- if (ret == 0)
+- sta->uploaded = true;
+- } else if (old_state == IEEE80211_STA_ASSOC &&
+- new_state == IEEE80211_STA_AUTH) {
+- drv_sta_remove(local, sdata, &sta->sta);
+- }
+- trace_drv_return_int(local, ret);
+- return ret;
+-}
++ enum ieee80211_sta_state new_state);
+
+ static inline void drv_sta_rc_update(struct ieee80211_local *local,
+ struct ieee80211_sub_if_data *sdata,