mac80211: fix sign error in pid controller
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 <me@bobcopeland.com> Acked-by: Stefano Brivio <stefano.brivio@polimi.it> Acked-by: Mattias Nissler <mattias.nissler@gmx.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
bb5d2db570
commit
e850f68b8f
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue