[Cerowrt-devel] Fwd: [PATCH net-next] net_sched: restore "mpu xxx" handling

Dave Taht dave.taht at gmail.com
Wed Jan 12 18:08:10 EST 2022


this has been broken this long??

---------- Forwarded message ---------
From: Kevin Bracey <kevin at bracey.fi>
Date: Fri, Jan 7, 2022 at 4:56 PM
Subject: [PATCH net-next] net_sched: restore "mpu xxx" handling
To: <netdev at vger.kernel.org>
Cc: Kevin Bracey <kevin at bracey.fi>, Eric Dumazet
<edumazet at google.com>, Jiri Pirko <jiri at resnulli.us>, Vimalkumar
<j.vimal at gmail.com>


commit 56b765b79e9a ("htb: improved accuracy at high rates") broke
"overhead X", "linklayer atm" and "mpu X" attributes.

"overhead X" and "linklayer atm" have already been fixed. This restores
the "mpu X" handling, as might be used by DOCSIS or Ethernet shaping:

    tc class add ... htb rate X overhead 4 mpu 64

The code being fixed is used by htb, tbf and act_police. Cake has its
own mpu handling. qdisc_calculate_pkt_len still uses the size table
containing values adjusted for mpu by user space.

Fixes: 56b765b79e9a ("htb: improved accuracy at high rates")
Signed-off-by: Kevin Bracey <kevin at bracey.fi>
Cc: Eric Dumazet <edumazet at google.com>
Cc: Jiri Pirko <jiri at resnulli.us>
Cc: Vimalkumar <j.vimal at gmail.com>
---
 include/net/sch_generic.h | 5 +++++
 net/sched/sch_generic.c   | 1 +
 2 files changed, 6 insertions(+)

diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index c70e6d2b2fdd..fddca0aa73ef 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -1244,6 +1244,7 @@ struct psched_ratecfg {
        u64     rate_bytes_ps; /* bytes per second */
        u32     mult;
        u16     overhead;
+       u16     mpu;
        u8      linklayer;
        u8      shift;
 };
@@ -1253,6 +1254,9 @@ static inline u64 psched_l2t_ns(const struct
psched_ratecfg *r,
 {
        len += r->overhead;

+       if (len < r->mpu)
+               len = r->mpu;
+
        if (unlikely(r->linklayer == TC_LINKLAYER_ATM))
                return ((u64)(DIV_ROUND_UP(len,48)*53) * r->mult) >> r->shift;

@@ -1275,6 +1279,7 @@ static inline void psched_ratecfg_getrate(struct
tc_ratespec *res,
        res->rate = min_t(u64, r->rate_bytes_ps, ~0U);

        res->overhead = r->overhead;
+       res->mpu = r->mpu;
        res->linklayer = (r->linklayer & TC_LINKLAYER_MASK);
 }

diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index 3b0f62095803..5d391fe3137d 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -1474,6 +1474,7 @@ void psched_ratecfg_precompute(struct psched_ratecfg *r,
 {
        memset(r, 0, sizeof(*r));
        r->overhead = conf->overhead;
+       r->mpu = conf->mpu;
        r->rate_bytes_ps = max_t(u64, conf->rate, rate64);
        r->linklayer = (conf->linklayer & TC_LINKLAYER_MASK);
        psched_ratecfg_precompute__(r->rate_bytes_ps, &r->mult, &r->shift);
--
2.25.1



-- 
I tried to build a better future, a few times:
https://wayforward.archive.org/?site=https%3A%2F%2Fwww.icei.org

Dave Täht CEO, TekLibre, LLC


More information about the Cerowrt-devel mailing list