lkml.org 
[lkml]   [2015]   [Sep]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6/6] mac80211: Deinline drv_switch_vif_chanctx()
    Date
    With this .config: http://busybox.net/~vda/kernel_config_ALLYES_Os,
    after deinlining the function size is 821 bytes and there are
    2 callsites, reducing code size by about 800 bytes.

    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
    ---
    net/mac80211/driver-ops.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++
    net/mac80211/driver-ops.h | 51 ++-------------------------------------------
    2 files changed, 55 insertions(+), 49 deletions(-)

    diff --git a/net/mac80211/driver-ops.c b/net/mac80211/driver-ops.c
    index 3e144b9..e4d68d7 100644
    --- a/net/mac80211/driver-ops.c
    +++ b/net/mac80211/driver-ops.c
    @@ -209,3 +209,56 @@ int drv_ampdu_action(struct ieee80211_local *local,

    return ret;
    }
    +
    +int
    +drv_switch_vif_chanctx(struct ieee80211_local *local,
    + struct ieee80211_vif_chanctx_switch *vifs,
    + int n_vifs,
    + enum ieee80211_chanctx_switch_mode mode)
    +{
    + int ret = 0;
    + int i;
    +
    + if (!local->ops->switch_vif_chanctx)
    + return -EOPNOTSUPP;
    +
    + for (i = 0; i < n_vifs; i++) {
    + struct ieee80211_chanctx *new_ctx =
    + container_of(vifs[i].new_ctx,
    + struct ieee80211_chanctx,
    + conf);
    + struct ieee80211_chanctx *old_ctx =
    + container_of(vifs[i].old_ctx,
    + struct ieee80211_chanctx,
    + conf);
    +
    + WARN_ON_ONCE(!old_ctx->driver_present);
    + WARN_ON_ONCE((mode == CHANCTX_SWMODE_SWAP_CONTEXTS &&
    + new_ctx->driver_present) ||
    + (mode == CHANCTX_SWMODE_REASSIGN_VIF &&
    + !new_ctx->driver_present));
    + }
    +
    + trace_drv_switch_vif_chanctx(local, vifs, n_vifs, mode);
    + ret = local->ops->switch_vif_chanctx(&local->hw,
    + vifs, n_vifs, mode);
    + trace_drv_return_int(local, ret);
    +
    + if (!ret && mode == CHANCTX_SWMODE_SWAP_CONTEXTS) {
    + for (i = 0; i < n_vifs; i++) {
    + struct ieee80211_chanctx *new_ctx =
    + container_of(vifs[i].new_ctx,
    + struct ieee80211_chanctx,
    + conf);
    + struct ieee80211_chanctx *old_ctx =
    + container_of(vifs[i].old_ctx,
    + struct ieee80211_chanctx,
    + conf);
    +
    + new_ctx->driver_present = true;
    + old_ctx->driver_present = false;
    + }
    + }
    +
    + return ret;
    +}
    diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h
    index 518c574..79f8234 100644
    --- a/net/mac80211/driver-ops.h
    +++ b/net/mac80211/driver-ops.h
    @@ -930,58 +930,11 @@ static inline void drv_unassign_vif_chanctx(struct ieee80211_local *local,
    trace_drv_return_void(local);
    }

    -static inline int
    +int
    drv_switch_vif_chanctx(struct ieee80211_local *local,
    struct ieee80211_vif_chanctx_switch *vifs,
    int n_vifs,
    - enum ieee80211_chanctx_switch_mode mode)
    -{
    - int ret = 0;
    - int i;
    -
    - if (!local->ops->switch_vif_chanctx)
    - return -EOPNOTSUPP;
    -
    - for (i = 0; i < n_vifs; i++) {
    - struct ieee80211_chanctx *new_ctx =
    - container_of(vifs[i].new_ctx,
    - struct ieee80211_chanctx,
    - conf);
    - struct ieee80211_chanctx *old_ctx =
    - container_of(vifs[i].old_ctx,
    - struct ieee80211_chanctx,
    - conf);
    -
    - WARN_ON_ONCE(!old_ctx->driver_present);
    - WARN_ON_ONCE((mode == CHANCTX_SWMODE_SWAP_CONTEXTS &&
    - new_ctx->driver_present) ||
    - (mode == CHANCTX_SWMODE_REASSIGN_VIF &&
    - !new_ctx->driver_present));
    - }
    -
    - trace_drv_switch_vif_chanctx(local, vifs, n_vifs, mode);
    - ret = local->ops->switch_vif_chanctx(&local->hw,
    - vifs, n_vifs, mode);
    - trace_drv_return_int(local, ret);
    -
    - if (!ret && mode == CHANCTX_SWMODE_SWAP_CONTEXTS) {
    - for (i = 0; i < n_vifs; i++) {
    - struct ieee80211_chanctx *new_ctx =
    - container_of(vifs[i].new_ctx,
    - struct ieee80211_chanctx,
    - conf);
    - struct ieee80211_chanctx *old_ctx =
    - container_of(vifs[i].old_ctx,
    - struct ieee80211_chanctx,
    - conf);
    -
    - new_ctx->driver_present = true;
    - old_ctx->driver_present = false;
    - }
    - }
    -
    - return ret;
    -}
    + enum ieee80211_chanctx_switch_mode mode);

    static inline int drv_start_ap(struct ieee80211_local *local,
    struct ieee80211_sub_if_data *sdata)
    --
    1.8.1.4


    \
     
     \ /
      Last update: 2015-09-18 15:41    [W:3.292 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site