From 64027e62090ce605511a8b4f61a1e778068a8191 Mon Sep 17 00:00:00 2001 From: Tomas Winkler Date: Mon, 27 Aug 2007 09:50:33 +0800 Subject: [PATCH 28/31] iwlwifi: rate scale quality command fix QL command was released twice once in TX repsons flow and once in TX flow rx_get_rate flow. This creates race condition which was visible with bug in async host command. Signed-off-by: Ron Rindjunsky Signed-off-by: Tomas Winkler Signed-off-by: Zhu Yi --- drivers/net/wireless/iwl-4965-rs.c | 30 +++++------------------------- 1 files changed, 5 insertions(+), 25 deletions(-) diff --git a/drivers/net/wireless/iwl-4965-rs.c b/drivers/net/wireless/iwl-4965-rs.c index 4778ae6..ba08d04 100644 --- a/drivers/net/wireless/iwl-4965-rs.c +++ b/drivers/net/wireless/iwl-4965-rs.c @@ -108,7 +108,6 @@ struct iwl_rate_scale_priv { u32 total_success; u8 action_counter; u32 flush_timer; - u8 commit_lq; u8 antenna; u8 valid_antenna; u8 is_green; @@ -1445,12 +1444,8 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, rs_stay_in_table(lq_data); if (update_lq) { rs_mcs_from_tbl(&mcs_rate, tbl, index, is_green); - rs_fill_link_cmd(lq_data, &mcs_rate, - &(lq_data->lq), sta); - if (!rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC)) - lq_data->commit_lq = 0; - else - lq_data->commit_lq = 1; + rs_fill_link_cmd(lq_data, &mcs_rate, &lq_data->lq, sta); + rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC); } goto out; @@ -1573,11 +1568,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, if (update_lq) { rs_mcs_from_tbl(&mcs_rate, tbl, index, is_green); rs_fill_link_cmd(lq_data, &mcs_rate, &lq_data->lq, sta); - - if (!rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC)) - lq_data->commit_lq = 0; - else - lq_data->commit_lq = 1; + rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC); } rs_stay_in_table(lq_data); @@ -1603,10 +1594,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, tbl->current_rate.rate_n_flags, index); rs_fill_link_cmd(lq_data, &tbl->current_rate, &(lq_data->lq), sta); - if (!rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC)) - lq_data->commit_lq = 0; - else - lq_data->commit_lq = 1; + rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC); } tbl1 = &(lq_data->lq_info[lq_data->active_tbl]); @@ -1702,7 +1690,7 @@ static void rs_initialize_lq(struct iwl_priv *priv, tbl->current_rate.rate_n_flags = mcs_rate.rate_n_flags; rs_get_expected_tpt_table(lq, tbl); rs_fill_link_cmd(lq, &mcs_rate, &(lq->lq), sta); - lq->commit_lq = 1; + rs_send_lq_cmd(priv, &lq->lq, CMD_ASYNC); out: return; } @@ -1774,20 +1762,12 @@ static struct ieee80211_rate *rs_get_rate(void *priv_rate, lq->lq.sta_id = sta_id; lq->lq.rs_table[0].rate_n_flags = 0; lq->ibss_sta_added = 1; - lq->commit_lq = 1; rs_initialize_lq(priv, sta); } if (!lq->ibss_sta_added) goto done; } - - if (lq->commit_lq) { - lq->commit_lq = 0; - if (rs_send_lq_cmd(priv, &lq->lq, CMD_ASYNC)) - lq->commit_lq = 1; - } - done: sta_info_put(sta); if ((i < 0) || (i > IWL_RATE_COUNT)) -- 1.5.2