rc80211-pid: simplify and fix shift_adjust
authorStefano Brivio <stefano.brivio@polimi.it>
Sun, 23 Dec 2007 03:41:19 +0000 (04:41 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Jan 2008 23:00:52 +0000 (15:00 -0800)
Simplify and fix rate_control_pid_shift_adjust(). A bug prevented correct
mapping of sorted rates, and readability was seriously flawed.

Signed-off-by: Stefano Brivio <stefano.brivio@polimi.it>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/mac80211/rc80211_pid_algo.c

index b84e514..3e26280 100644 (file)
@@ -74,29 +74,27 @@ static int rate_control_pid_shift_adjust(struct rc_pid_rateinfo *r,
 {
        int i, j, k, tmp;
 
-       if (cur + adj < 0)
-               return 0;
-       if (cur + adj >= l)
-               return l - 1;
+       j = r[cur].rev_index;
+       i = j + adj;
 
-       i = r[cur + adj].rev_index;
+       if (i < 0)
+               return r[0].index;
+       if (i >= l - 1)
+               return r[l - 1].index;
 
-       j = r[cur].rev_index;
+       tmp = i;
 
        if (adj < 0) {
-                       tmp = i;
-                       for (k = j; k >= i; k--)
-                               if (r[k].diff <= r[j].diff)
-                                       tmp = k;
-                       return r[tmp].index;
-       } else if (adj > 0) {
-                       tmp = i;
-                       for (k = i + 1; k + i < l; k++)
-                               if (r[k].diff <= r[i].diff)
-                                       tmp = k;
-                       return r[tmp].index;
+               for (k = j; k >= i; k--)
+                       if (r[k].diff <= r[j].diff)
+                               tmp = k;
+       } else {
+               for (k = i + 1; k + i < l; k++)
+                       if (r[k].diff <= r[i].diff)
+                               tmp = k;
        }
-       return cur + adj;
+
+       return r[tmp].index;
 }
 
 static void rate_control_pid_adjust_rate(struct ieee80211_local *local,