On Sat, 2010-01-16 at 14:36 -0500, Bob Copeland wrote: > While testing the pid rate controller in mac80211_hwsim, I noticed > that once the controller reached 54 Mbit rates, it would fail to > lower the rate when necessary. The debug log shows: > > 1945 186786 pf_sample 50 3534 3577 50 > > My interpretation is that the fixed point scaling of the target > error value (pf) is incorrect: the error value of 50 compared to > a target of 14 case should result in a scaling value of > (14-50) = -36 * 256 or -9216, but instead it is (14 * 256)-50, or > 3534. > > Correct this by doing fixed point scaling after subtraction. > > Cc: stefano.brivio@xxxxxxxxx > Cc: mattias.nissler@xxxxxx > Signed-off-by: Bob Copeland <me@xxxxxxxxxxxxxxx> I took a quick look and found that you're right. pf is an unscaled value, so we should subtract it before scaling. Acked-by: Mattias Nissler <mattias.nissler@xxxxxx> > --- > > Mattias / Stefano, please advise if I missed something. > > net/mac80211/rc80211_pid_algo.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/net/mac80211/rc80211_pid_algo.c b/net/mac80211/rc80211_pid_algo.c > index 699d3ed..29bc4c5 100644 > --- a/net/mac80211/rc80211_pid_algo.c > +++ b/net/mac80211/rc80211_pid_algo.c > @@ -190,7 +190,7 @@ static void rate_control_pid_sample(struct rc_pid_info *pinfo, > rate_control_pid_normalize(pinfo, sband->n_bitrates); > > /* Compute the proportional, integral and derivative errors. */ > - err_prop = (pinfo->target << RC_PID_ARITH_SHIFT) - pf; > + err_prop = (pinfo->target - pf) << RC_PID_ARITH_SHIFT; > > err_avg = spinfo->err_avg_sc >> pinfo->smoothing_shift; > spinfo->err_avg_sc = spinfo->err_avg_sc - err_avg + err_prop;
Attachment:
signature.asc
Description: This is a digitally signed message part