123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- From: Denys Vlasenko <dvlasenk@redhat.com>
- Date: Wed, 15 Jul 2015 14:56:06 +0200
- Subject: [PATCH] mac80211: Deinline rate_control_rate_init,
- rate_control_rate_update
- With this .config: http://busybox.net/~vda/kernel_config,
- after deinlining these functions have sizes and callsite counts
- as follows:
- rate_control_rate_init: 554 bytes, 8 calls
- rate_control_rate_update: 1596 bytes, 5 calls
- Total size reduction: about 11 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
- ---
- --- a/net/mac80211/rate.c
- +++ b/net/mac80211/rate.c
- @@ -29,6 +29,65 @@ module_param(ieee80211_default_rc_algo,
- MODULE_PARM_DESC(ieee80211_default_rc_algo,
- "Default rate control algorithm for mac80211 to use");
-
- +void rate_control_rate_init(struct sta_info *sta)
- +{
- + struct ieee80211_local *local = sta->sdata->local;
- + struct rate_control_ref *ref = sta->rate_ctrl;
- + struct ieee80211_sta *ista = &sta->sta;
- + void *priv_sta = sta->rate_ctrl_priv;
- + struct ieee80211_supported_band *sband;
- + struct ieee80211_chanctx_conf *chanctx_conf;
- +
- + ieee80211_sta_set_rx_nss(sta);
- +
- + if (!ref)
- + return;
- +
- + rcu_read_lock();
- +
- + chanctx_conf = rcu_dereference(sta->sdata->vif.chanctx_conf);
- + if (WARN_ON(!chanctx_conf)) {
- + rcu_read_unlock();
- + return;
- + }
- +
- + sband = local->hw.wiphy->bands[chanctx_conf->def.chan->band];
- +
- + spin_lock_bh(&sta->rate_ctrl_lock);
- + ref->ops->rate_init(ref->priv, sband, &chanctx_conf->def, ista,
- + priv_sta);
- + spin_unlock_bh(&sta->rate_ctrl_lock);
- + rcu_read_unlock();
- + set_sta_flag(sta, WLAN_STA_RATE_CONTROL);
- +}
- +
- +void rate_control_rate_update(struct ieee80211_local *local,
- + struct ieee80211_supported_band *sband,
- + struct sta_info *sta, u32 changed)
- +{
- + struct rate_control_ref *ref = local->rate_ctrl;
- + struct ieee80211_sta *ista = &sta->sta;
- + void *priv_sta = sta->rate_ctrl_priv;
- + struct ieee80211_chanctx_conf *chanctx_conf;
- +
- + if (ref && ref->ops->rate_update) {
- + rcu_read_lock();
- +
- + chanctx_conf = rcu_dereference(sta->sdata->vif.chanctx_conf);
- + if (WARN_ON(!chanctx_conf)) {
- + rcu_read_unlock();
- + return;
- + }
- +
- + spin_lock_bh(&sta->rate_ctrl_lock);
- + ref->ops->rate_update(ref->priv, sband, &chanctx_conf->def,
- + ista, priv_sta, changed);
- + spin_unlock_bh(&sta->rate_ctrl_lock);
- + rcu_read_unlock();
- + }
- + drv_sta_rc_update(local, sta->sdata, &sta->sta, changed);
- +}
- +
- int ieee80211_rate_control_register(const struct rate_control_ops *ops)
- {
- struct rate_control_alg *alg;
- --- a/net/mac80211/rate.h
- +++ b/net/mac80211/rate.h
- @@ -71,64 +71,10 @@ rate_control_tx_status_noskb(struct ieee
- spin_unlock_bh(&sta->rate_ctrl_lock);
- }
-
- -static inline void rate_control_rate_init(struct sta_info *sta)
- -{
- - struct ieee80211_local *local = sta->sdata->local;
- - struct rate_control_ref *ref = sta->rate_ctrl;
- - struct ieee80211_sta *ista = &sta->sta;
- - void *priv_sta = sta->rate_ctrl_priv;
- - struct ieee80211_supported_band *sband;
- - struct ieee80211_chanctx_conf *chanctx_conf;
- -
- - ieee80211_sta_set_rx_nss(sta);
- -
- - if (!ref)
- - return;
- -
- - rcu_read_lock();
- -
- - chanctx_conf = rcu_dereference(sta->sdata->vif.chanctx_conf);
- - if (WARN_ON(!chanctx_conf)) {
- - rcu_read_unlock();
- - return;
- - }
- -
- - sband = local->hw.wiphy->bands[chanctx_conf->def.chan->band];
- -
- - spin_lock_bh(&sta->rate_ctrl_lock);
- - ref->ops->rate_init(ref->priv, sband, &chanctx_conf->def, ista,
- - priv_sta);
- - spin_unlock_bh(&sta->rate_ctrl_lock);
- - rcu_read_unlock();
- - set_sta_flag(sta, WLAN_STA_RATE_CONTROL);
- -}
- -
- -static inline void rate_control_rate_update(struct ieee80211_local *local,
- +void rate_control_rate_init(struct sta_info *sta);
- +void rate_control_rate_update(struct ieee80211_local *local,
- struct ieee80211_supported_band *sband,
- - struct sta_info *sta, u32 changed)
- -{
- - struct rate_control_ref *ref = local->rate_ctrl;
- - struct ieee80211_sta *ista = &sta->sta;
- - void *priv_sta = sta->rate_ctrl_priv;
- - struct ieee80211_chanctx_conf *chanctx_conf;
- -
- - if (ref && ref->ops->rate_update) {
- - rcu_read_lock();
- -
- - chanctx_conf = rcu_dereference(sta->sdata->vif.chanctx_conf);
- - if (WARN_ON(!chanctx_conf)) {
- - rcu_read_unlock();
- - return;
- - }
- -
- - spin_lock_bh(&sta->rate_ctrl_lock);
- - ref->ops->rate_update(ref->priv, sband, &chanctx_conf->def,
- - ista, priv_sta, changed);
- - spin_unlock_bh(&sta->rate_ctrl_lock);
- - rcu_read_unlock();
- - }
- - drv_sta_rc_update(local, sta->sdata, &sta->sta, changed);
- -}
- + struct sta_info *sta, u32 changed);
-
- static inline void *rate_control_alloc_sta(struct rate_control_ref *ref,
- struct sta_info *sta, gfp_t gfp)
|