iwlegacy and iwlwifi code opencodes atomic bit allocation/traversing by using loops. Switch it to use dedicated functions. Signed-off-by: Yury Norov <yury.norov@xxxxxxxxx> --- .../net/wireless/intel/iwlegacy/4965-mac.c | 7 ++----- drivers/net/wireless/intel/iwlegacy/common.c | 8 ++------ drivers/net/wireless/intel/iwlwifi/dvm/sta.c | 8 ++------ drivers/net/wireless/intel/iwlwifi/dvm/tx.c | 19 ++++++++----------- 4 files changed, 14 insertions(+), 28 deletions(-) diff --git a/drivers/net/wireless/intel/iwlegacy/4965-mac.c b/drivers/net/wireless/intel/iwlegacy/4965-mac.c index 69276266ce6f..8fb738c95cb4 100644 --- a/drivers/net/wireless/intel/iwlegacy/4965-mac.c +++ b/drivers/net/wireless/intel/iwlegacy/4965-mac.c @@ -2089,12 +2089,9 @@ il4965_txq_ctx_stop(struct il_priv *il) static int il4965_txq_ctx_activate_free(struct il_priv *il) { - int txq_id; + int txq_id = find_and_set_bit(&il->txq_ctx_active_msk, il->hw_params.max_txq_num); - for (txq_id = 0; txq_id < il->hw_params.max_txq_num; txq_id++) - if (!test_and_set_bit(txq_id, &il->txq_ctx_active_msk)) - return txq_id; - return -1; + return txq_id < il->hw_params.max_txq_num ? txq_id : -1; } /* diff --git a/drivers/net/wireless/intel/iwlegacy/common.c b/drivers/net/wireless/intel/iwlegacy/common.c index 054fef680aba..c6353e17be50 100644 --- a/drivers/net/wireless/intel/iwlegacy/common.c +++ b/drivers/net/wireless/intel/iwlegacy/common.c @@ -2303,13 +2303,9 @@ EXPORT_SYMBOL(il_restore_stations); int il_get_free_ucode_key_idx(struct il_priv *il) { - int i; - - for (i = 0; i < il->sta_key_max_num; i++) - if (!test_and_set_bit(i, &il->ucode_key_table)) - return i; + int i = find_and_set_bit(&il->ucode_key_table, il->sta_key_max_num); - return WEP_INVALID_OFFSET; + return i < il->sta_key_max_num ? i : WEP_INVALID_OFFSET; } EXPORT_SYMBOL(il_get_free_ucode_key_idx); diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c b/drivers/net/wireless/intel/iwlwifi/dvm/sta.c index 8b01ab986cb1..21e663d2bc44 100644 --- a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c +++ b/drivers/net/wireless/intel/iwlwifi/dvm/sta.c @@ -719,13 +719,9 @@ void iwl_restore_stations(struct iwl_priv *priv, struct iwl_rxon_context *ctx) int iwl_get_free_ucode_key_offset(struct iwl_priv *priv) { - int i; - - for (i = 0; i < priv->sta_key_max_num; i++) - if (!test_and_set_bit(i, &priv->ucode_key_table)) - return i; + int i = find_and_set_bit(&priv->ucode_key_table, priv->sta_key_max_num); - return WEP_INVALID_OFFSET; + return i < priv->sta_key_max_num ? i : WEP_INVALID_OFFSET; } void iwl_dealloc_bcast_stations(struct iwl_priv *priv) diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/tx.c b/drivers/net/wireless/intel/iwlwifi/dvm/tx.c index 111ed1873006..1b3dc99b968c 100644 --- a/drivers/net/wireless/intel/iwlwifi/dvm/tx.c +++ b/drivers/net/wireless/intel/iwlwifi/dvm/tx.c @@ -460,17 +460,14 @@ int iwlagn_tx_skb(struct iwl_priv *priv, static int iwlagn_alloc_agg_txq(struct iwl_priv *priv, int mq) { - int q; - - for (q = IWLAGN_FIRST_AMPDU_QUEUE; - q < priv->trans->trans_cfg->base_params->num_of_queues; q++) { - if (!test_and_set_bit(q, priv->agg_q_alloc)) { - priv->queue_to_mac80211[q] = mq; - return q; - } - } - - return -ENOSPC; + int q = find_and_set_next_bit(priv->agg_q_alloc, + priv->trans->trans_cfg->base_params->num_of_queues, + IWLAGN_FIRST_AMPDU_QUEUE); + if (q >= priv->trans->trans_cfg->base_params->num_of_queues) + return -ENOSPC; + + priv->queue_to_mac80211[q] = mq; + return q; } static void iwlagn_dealloc_agg_txq(struct iwl_priv *priv, int q) -- 2.39.2