iwlwifi: mvm: rs: don't zero tx stats after idle
authorEyal Shapira <eyal@wizery.com>
Fri, 15 Aug 2014 22:30:30 +0000 (01:30 +0300)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Sun, 14 Sep 2014 09:56:38 +0000 (12:56 +0300)
Move the tx stats to the persistent area of lq_sta to
avoid them being zeroed out every time rs reinitializes
which happens after tx idle for 5 secs for example.
The automatic zeroing out made them difficult to use.

Signed-off-by: Eyal Shapira <eyalx.shapira@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/iwlwifi/mvm/rs.c
drivers/net/wireless/iwlwifi/mvm/rs.h

index 94c5299e823a4cb838b94ab360b0d4dba5b964b6..f77dfe4df0749eba807218af9bb9e67bb0ed735d 100644 (file)
@@ -672,8 +672,10 @@ static int rs_collect_tx_data(struct iwl_lq_sta *lq_sta,
                return -EINVAL;
 
        if (tbl->column != RS_COLUMN_INVALID) {
-               lq_sta->tx_stats[tbl->column][scale_index].total += attempts;
-               lq_sta->tx_stats[tbl->column][scale_index].success += successes;
+               struct lq_sta_pers *pers = &lq_sta->pers;
+
+               pers->tx_stats[tbl->column][scale_index].total += attempts;
+               pers->tx_stats[tbl->column][scale_index].success += successes;
        }
 
        /* Select window for current tx bit rate */
@@ -3171,7 +3173,7 @@ static ssize_t rs_sta_dbgfs_drv_tx_stats_read(struct file *file,
                                 "%s,", column_name[col]);
 
                for (rate = 0; rate < IWL_RATE_COUNT; rate++) {
-                       stats = &(lq_sta->tx_stats[col][rate]);
+                       stats = &(lq_sta->pers.tx_stats[col][rate]);
                        pos += scnprintf(pos, endpos - pos,
                                         "%llu/%llu,",
                                         stats->success,
@@ -3190,7 +3192,7 @@ static ssize_t rs_sta_dbgfs_drv_tx_stats_write(struct file *file,
                                               size_t count, loff_t *ppos)
 {
        struct iwl_lq_sta *lq_sta = file->private_data;
-       memset(lq_sta->tx_stats, 0, sizeof(lq_sta->tx_stats));
+       memset(lq_sta->pers.tx_stats, 0, sizeof(lq_sta->pers.tx_stats));
 
        return count;
 }
index 98bb9b7d69be888cfe765b55250ec1b5e5142e2e..95c4b960fd7135c50c66aa20cb577a9e248ce0da 100644 (file)
@@ -333,8 +333,6 @@ struct iwl_lq_sta {
        bool ldpc;              /* LDPC Rx is supported by the STA */
        enum ieee80211_band band;
 
-       struct rs_rate_stats tx_stats[RS_COLUMN_COUNT][IWL_RATE_COUNT];
-
        /* The following are bitmaps of rates; IWL_RATE_6M_MASK, etc. */
        unsigned long active_legacy_rate;
        unsigned long active_siso_rate;
@@ -362,11 +360,14 @@ struct iwl_lq_sta {
        int tpc_reduce;
 
        /* persistent fields - initialized only once - keep last! */
-       struct {
+       struct lq_sta_pers {
 #ifdef CONFIG_MAC80211_DEBUGFS
                u32 dbg_fixed_rate;
                u8 dbg_fixed_txp_reduction;
 #endif
+               u8 chains;
+               s8 chain_signal[IEEE80211_MAX_CHAINS];
+               struct rs_rate_stats tx_stats[RS_COLUMN_COUNT][IWL_RATE_COUNT];
                struct iwl_mvm *drv;
        } pers;
 };