2007-12-23 03:43:16

by Stefano Brivio

[permalink] [raw]
Subject: [PATCH 3/7] rc80211-pid: simplify and fix shift_adjust

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 <[email protected]>
---
rc80211_pid_algo.c | 34 ++++++++++++++++------------------
1 file changed, 16 insertions(+), 18 deletions(-)

Index: wireless-2.6/net/mac80211/rc80211_pid_algo.c
===================================================================
--- wireless-2.6.orig/net/mac80211/rc80211_pid_algo.c
+++ wireless-2.6/net/mac80211/rc80211_pid_algo.c
@@ -74,29 +74,27 @@ static int rate_control_pid_shift_adjust
{
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,

--
Ciao
Stefano