This patch fixes an apparent bug in the running weighted average calculation
used in the RED algorithm.

Going by the described formula:
           qavg = qavg*(1-W) + backlog*W
        => qavg = qavg + (backlog - qavg) * W

... with W converted to a pre-calculated shift, this then becomes:
        qavg = qavg + (backlog - qavg) >> logW

... giving the modified expression introduced by this patch.

Signed-off-by: John Dowdal <jdow...@ti.com>
---
 include/net/red.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/net/red.h b/include/net/red.h
index ef46058..05960a4 100644
--- a/include/net/red.h
+++ b/include/net/red.h
@@ -287,7 +287,7 @@ static inline unsigned long 
red_calc_qavg_no_idle_time(const struct red_parms *p
         *
         * --ANK (980924)
         */
-       return v->qavg + (backlog - (v->qavg >> p->Wlog));
+       return v->qavg + (backlog - v->qavg) >> p->Wlog;
 }
 
 static inline unsigned long red_calc_qavg(const struct red_parms *p,
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to