Skip to content

Commit

Permalink
mac80211: fix sign error in pid controller
Browse files Browse the repository at this point in the history
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.

Signed-off-by: Bob Copeland <[email protected]>
Acked-by: Stefano Brivio <[email protected]>
Acked-by: Mattias Nissler <[email protected]>
Signed-off-by: John W. Linville <[email protected]>
  • Loading branch information
bcopeland authored and linvjw committed Jan 18, 2010
1 parent bb5d2db commit e850f68
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion net/mac80211/rc80211_pid_algo.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit e850f68

Please sign in to comment.