mac80211: fix mesh fail_avg check
authorManoharan, Rajkumar <rmanohar@qca.qualcomm.com>
Wed, 15 Feb 2017 20:46:50 +0000 (12:46 -0800)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 6 Mar 2017 08:21:46 +0000 (09:21 +0100)
Mesh failure average never be more than 100. Only in case of
fixed path, average will be more than threshold limit (95%).
With recent EWMA changes it may go upto 99 as it is scaled to
100. It make sense to return maximum metric when average is
greater than threshold limit.

Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/mesh_hwmp.c

index d07ee3ca07ee97c91318139b12c5c2a3b662cc1b..4005edd71fe86db5415bf0bb9803dac7248ae77a 100644 (file)
@@ -16,6 +16,7 @@
 #define TEST_FRAME_LEN 8192
 #define MAX_METRIC     0xffffffff
 #define ARITH_SHIFT    8
+#define LINK_FAIL_THRESH 95
 
 #define MAX_PREQ_QUEUE_LEN     64
 
@@ -311,7 +312,8 @@ void ieee80211s_update_metric(struct ieee80211_local *local,
         * feed failure as 100 and success as 0
         */
        ewma_mesh_fail_avg_add(&sta->mesh->fail_avg, failed * 100);
-       if (ewma_mesh_fail_avg_read(&sta->mesh->fail_avg) > 95)
+       if (ewma_mesh_fail_avg_read(&sta->mesh->fail_avg) >
+                       LINK_FAIL_THRESH)
                mesh_plink_broken(sta);
 }
 
@@ -339,7 +341,7 @@ static u32 airtime_link_metric_get(struct ieee80211_local *local,
        if (rate) {
                err = 0;
        } else {
-               if (fail_avg >= 100)
+               if (fail_avg > LINK_FAIL_THRESH)
                        return MAX_METRIC;
 
                sta_set_rate_info_tx(sta, &sta->tx_stats.last_rate, &rinfo);