Fix up libata MAINTAINERS entry
[platform/kernel/linux-rpi.git] / net / sched / sch_cake.c
1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2
3 /* COMMON Applications Kept Enhanced (CAKE) discipline
4  *
5  * Copyright (C) 2014-2018 Jonathan Morton <chromatix99@gmail.com>
6  * Copyright (C) 2015-2018 Toke Høiland-Jørgensen <toke@toke.dk>
7  * Copyright (C) 2014-2018 Dave Täht <dave.taht@gmail.com>
8  * Copyright (C) 2015-2018 Sebastian Moeller <moeller0@gmx.de>
9  * (C) 2015-2018 Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk>
10  * Copyright (C) 2017-2018 Ryan Mounce <ryan@mounce.com.au>
11  *
12  * The CAKE Principles:
13  *                 (or, how to have your cake and eat it too)
14  *
15  * This is a combination of several shaping, AQM and FQ techniques into one
16  * easy-to-use package:
17  *
18  * - An overall bandwidth shaper, to move the bottleneck away from dumb CPE
19  *   equipment and bloated MACs.  This operates in deficit mode (as in sch_fq),
20  *   eliminating the need for any sort of burst parameter (eg. token bucket
21  *   depth).  Burst support is limited to that necessary to overcome scheduling
22  *   latency.
23  *
24  * - A Diffserv-aware priority queue, giving more priority to certain classes,
25  *   up to a specified fraction of bandwidth.  Above that bandwidth threshold,
26  *   the priority is reduced to avoid starving other tins.
27  *
28  * - Each priority tin has a separate Flow Queue system, to isolate traffic
29  *   flows from each other.  This prevents a burst on one flow from increasing
30  *   the delay to another.  Flows are distributed to queues using a
31  *   set-associative hash function.
32  *
33  * - Each queue is actively managed by Cobalt, which is a combination of the
34  *   Codel and Blue AQM algorithms.  This serves flows fairly, and signals
35  *   congestion early via ECN (if available) and/or packet drops, to keep
36  *   latency low.  The codel parameters are auto-tuned based on the bandwidth
37  *   setting, as is necessary at low bandwidths.
38  *
39  * The configuration parameters are kept deliberately simple for ease of use.
40  * Everything has sane defaults.  Complete generality of configuration is *not*
41  * a goal.
42  *
43  * The priority queue operates according to a weighted DRR scheme, combined with
44  * a bandwidth tracker which reuses the shaper logic to detect which side of the
45  * bandwidth sharing threshold the tin is operating.  This determines whether a
46  * priority-based weight (high) or a bandwidth-based weight (low) is used for
47  * that tin in the current pass.
48  *
49  * This qdisc was inspired by Eric Dumazet's fq_codel code, which he kindly
50  * granted us permission to leverage.
51  */
52
53 #include <linux/module.h>
54 #include <linux/types.h>
55 #include <linux/kernel.h>
56 #include <linux/jiffies.h>
57 #include <linux/string.h>
58 #include <linux/in.h>
59 #include <linux/errno.h>
60 #include <linux/init.h>
61 #include <linux/skbuff.h>
62 #include <linux/jhash.h>
63 #include <linux/slab.h>
64 #include <linux/vmalloc.h>
65 #include <linux/reciprocal_div.h>
66 #include <net/netlink.h>
67 #include <linux/version.h>
68 #include <linux/if_vlan.h>
69 #include <net/pkt_sched.h>
70 #include <net/pkt_cls.h>
71 #include <net/tcp.h>
72 #include <net/flow_dissector.h>
73
74 #if IS_ENABLED(CONFIG_NF_CONNTRACK)
75 #include <net/netfilter/nf_conntrack_core.h>
76 #endif
77
78 #define CAKE_SET_WAYS (8)
79 #define CAKE_MAX_TINS (8)
80 #define CAKE_QUEUES (1024)
81 #define CAKE_FLOW_MASK 63
82 #define CAKE_FLOW_NAT_FLAG 64
83
84 /* struct cobalt_params - contains codel and blue parameters
85  * @interval:   codel initial drop rate
86  * @target:     maximum persistent sojourn time & blue update rate
87  * @mtu_time:   serialisation delay of maximum-size packet
88  * @p_inc:      increment of blue drop probability (0.32 fxp)
89  * @p_dec:      decrement of blue drop probability (0.32 fxp)
90  */
91 struct cobalt_params {
92         u64     interval;
93         u64     target;
94         u64     mtu_time;
95         u32     p_inc;
96         u32     p_dec;
97 };
98
99 /* struct cobalt_vars - contains codel and blue variables
100  * @count:              codel dropping frequency
101  * @rec_inv_sqrt:       reciprocal value of sqrt(count) >> 1
102  * @drop_next:          time to drop next packet, or when we dropped last
103  * @blue_timer:         Blue time to next drop
104  * @p_drop:             BLUE drop probability (0.32 fxp)
105  * @dropping:           set if in dropping state
106  * @ecn_marked:         set if marked
107  */
108 struct cobalt_vars {
109         u32     count;
110         u32     rec_inv_sqrt;
111         ktime_t drop_next;
112         ktime_t blue_timer;
113         u32     p_drop;
114         bool    dropping;
115         bool    ecn_marked;
116 };
117
118 enum {
119         CAKE_SET_NONE = 0,
120         CAKE_SET_SPARSE,
121         CAKE_SET_SPARSE_WAIT, /* counted in SPARSE, actually in BULK */
122         CAKE_SET_BULK,
123         CAKE_SET_DECAYING
124 };
125
126 struct cake_flow {
127         /* this stuff is all needed per-flow at dequeue time */
128         struct sk_buff    *head;
129         struct sk_buff    *tail;
130         struct list_head  flowchain;
131         s32               deficit;
132         u32               dropped;
133         struct cobalt_vars cvars;
134         u16               srchost; /* index into cake_host table */
135         u16               dsthost;
136         u8                set;
137 }; /* please try to keep this structure <= 64 bytes */
138
139 struct cake_host {
140         u32 srchost_tag;
141         u32 dsthost_tag;
142         u16 srchost_refcnt;
143         u16 dsthost_refcnt;
144 };
145
146 struct cake_heap_entry {
147         u16 t:3, b:10;
148 };
149
150 struct cake_tin_data {
151         struct cake_flow flows[CAKE_QUEUES];
152         u32     backlogs[CAKE_QUEUES];
153         u32     tags[CAKE_QUEUES]; /* for set association */
154         u16     overflow_idx[CAKE_QUEUES];
155         struct cake_host hosts[CAKE_QUEUES]; /* for triple isolation */
156         u16     flow_quantum;
157
158         struct cobalt_params cparams;
159         u32     drop_overlimit;
160         u16     bulk_flow_count;
161         u16     sparse_flow_count;
162         u16     decaying_flow_count;
163         u16     unresponsive_flow_count;
164
165         u32     max_skblen;
166
167         struct list_head new_flows;
168         struct list_head old_flows;
169         struct list_head decaying_flows;
170
171         /* time_next = time_this + ((len * rate_ns) >> rate_shft) */
172         ktime_t time_next_packet;
173         u64     tin_rate_ns;
174         u64     tin_rate_bps;
175         u16     tin_rate_shft;
176
177         u16     tin_quantum_prio;
178         u16     tin_quantum_band;
179         s32     tin_deficit;
180         u32     tin_backlog;
181         u32     tin_dropped;
182         u32     tin_ecn_mark;
183
184         u32     packets;
185         u64     bytes;
186
187         u32     ack_drops;
188
189         /* moving averages */
190         u64 avge_delay;
191         u64 peak_delay;
192         u64 base_delay;
193
194         /* hash function stats */
195         u32     way_directs;
196         u32     way_hits;
197         u32     way_misses;
198         u32     way_collisions;
199 }; /* number of tins is small, so size of this struct doesn't matter much */
200
201 struct cake_sched_data {
202         struct tcf_proto __rcu *filter_list; /* optional external classifier */
203         struct tcf_block *block;
204         struct cake_tin_data *tins;
205
206         struct cake_heap_entry overflow_heap[CAKE_QUEUES * CAKE_MAX_TINS];
207         u16             overflow_timeout;
208
209         u16             tin_cnt;
210         u8              tin_mode;
211         u8              flow_mode;
212         u8              ack_filter;
213         u8              atm_mode;
214
215         /* time_next = time_this + ((len * rate_ns) >> rate_shft) */
216         u16             rate_shft;
217         ktime_t         time_next_packet;
218         ktime_t         failsafe_next_packet;
219         u64             rate_ns;
220         u64             rate_bps;
221         u16             rate_flags;
222         s16             rate_overhead;
223         u16             rate_mpu;
224         u64             interval;
225         u64             target;
226
227         /* resource tracking */
228         u32             buffer_used;
229         u32             buffer_max_used;
230         u32             buffer_limit;
231         u32             buffer_config_limit;
232
233         /* indices for dequeue */
234         u16             cur_tin;
235         u16             cur_flow;
236
237         struct qdisc_watchdog watchdog;
238         const u8        *tin_index;
239         const u8        *tin_order;
240
241         /* bandwidth capacity estimate */
242         ktime_t         last_packet_time;
243         ktime_t         avg_window_begin;
244         u64             avg_packet_interval;
245         u64             avg_window_bytes;
246         u64             avg_peak_bandwidth;
247         ktime_t         last_reconfig_time;
248
249         /* packet length stats */
250         u32             avg_netoff;
251         u16             max_netlen;
252         u16             max_adjlen;
253         u16             min_netlen;
254         u16             min_adjlen;
255 };
256
257 enum {
258         CAKE_FLAG_OVERHEAD         = BIT(0),
259         CAKE_FLAG_AUTORATE_INGRESS = BIT(1),
260         CAKE_FLAG_INGRESS          = BIT(2),
261         CAKE_FLAG_WASH             = BIT(3),
262         CAKE_FLAG_SPLIT_GSO        = BIT(4)
263 };
264
265 /* COBALT operates the Codel and BLUE algorithms in parallel, in order to
266  * obtain the best features of each.  Codel is excellent on flows which
267  * respond to congestion signals in a TCP-like way.  BLUE is more effective on
268  * unresponsive flows.
269  */
270
271 struct cobalt_skb_cb {
272         ktime_t enqueue_time;
273         u32     adjusted_len;
274 };
275
276 static u64 us_to_ns(u64 us)
277 {
278         return us * NSEC_PER_USEC;
279 }
280
281 static struct cobalt_skb_cb *get_cobalt_cb(const struct sk_buff *skb)
282 {
283         qdisc_cb_private_validate(skb, sizeof(struct cobalt_skb_cb));
284         return (struct cobalt_skb_cb *)qdisc_skb_cb(skb)->data;
285 }
286
287 static ktime_t cobalt_get_enqueue_time(const struct sk_buff *skb)
288 {
289         return get_cobalt_cb(skb)->enqueue_time;
290 }
291
292 static void cobalt_set_enqueue_time(struct sk_buff *skb,
293                                     ktime_t now)
294 {
295         get_cobalt_cb(skb)->enqueue_time = now;
296 }
297
298 static u16 quantum_div[CAKE_QUEUES + 1] = {0};
299
300 /* Diffserv lookup tables */
301
302 static const u8 precedence[] = {
303         0, 0, 0, 0, 0, 0, 0, 0,
304         1, 1, 1, 1, 1, 1, 1, 1,
305         2, 2, 2, 2, 2, 2, 2, 2,
306         3, 3, 3, 3, 3, 3, 3, 3,
307         4, 4, 4, 4, 4, 4, 4, 4,
308         5, 5, 5, 5, 5, 5, 5, 5,
309         6, 6, 6, 6, 6, 6, 6, 6,
310         7, 7, 7, 7, 7, 7, 7, 7,
311 };
312
313 static const u8 diffserv8[] = {
314         2, 5, 1, 2, 4, 2, 2, 2,
315         0, 2, 1, 2, 1, 2, 1, 2,
316         5, 2, 4, 2, 4, 2, 4, 2,
317         3, 2, 3, 2, 3, 2, 3, 2,
318         6, 2, 3, 2, 3, 2, 3, 2,
319         6, 2, 2, 2, 6, 2, 6, 2,
320         7, 2, 2, 2, 2, 2, 2, 2,
321         7, 2, 2, 2, 2, 2, 2, 2,
322 };
323
324 static const u8 diffserv4[] = {
325         0, 2, 0, 0, 2, 0, 0, 0,
326         1, 0, 0, 0, 0, 0, 0, 0,
327         2, 0, 2, 0, 2, 0, 2, 0,
328         2, 0, 2, 0, 2, 0, 2, 0,
329         3, 0, 2, 0, 2, 0, 2, 0,
330         3, 0, 0, 0, 3, 0, 3, 0,
331         3, 0, 0, 0, 0, 0, 0, 0,
332         3, 0, 0, 0, 0, 0, 0, 0,
333 };
334
335 static const u8 diffserv3[] = {
336         0, 0, 0, 0, 2, 0, 0, 0,
337         1, 0, 0, 0, 0, 0, 0, 0,
338         0, 0, 0, 0, 0, 0, 0, 0,
339         0, 0, 0, 0, 0, 0, 0, 0,
340         0, 0, 0, 0, 0, 0, 0, 0,
341         0, 0, 0, 0, 2, 0, 2, 0,
342         2, 0, 0, 0, 0, 0, 0, 0,
343         2, 0, 0, 0, 0, 0, 0, 0,
344 };
345
346 static const u8 besteffort[] = {
347         0, 0, 0, 0, 0, 0, 0, 0,
348         0, 0, 0, 0, 0, 0, 0, 0,
349         0, 0, 0, 0, 0, 0, 0, 0,
350         0, 0, 0, 0, 0, 0, 0, 0,
351         0, 0, 0, 0, 0, 0, 0, 0,
352         0, 0, 0, 0, 0, 0, 0, 0,
353         0, 0, 0, 0, 0, 0, 0, 0,
354         0, 0, 0, 0, 0, 0, 0, 0,
355 };
356
357 /* tin priority order for stats dumping */
358
359 static const u8 normal_order[] = {0, 1, 2, 3, 4, 5, 6, 7};
360 static const u8 bulk_order[] = {1, 0, 2, 3};
361
362 #define REC_INV_SQRT_CACHE (16)
363 static u32 cobalt_rec_inv_sqrt_cache[REC_INV_SQRT_CACHE] = {0};
364
365 /* http://en.wikipedia.org/wiki/Methods_of_computing_square_roots
366  * new_invsqrt = (invsqrt / 2) * (3 - count * invsqrt^2)
367  *
368  * Here, invsqrt is a fixed point number (< 1.0), 32bit mantissa, aka Q0.32
369  */
370
371 static void cobalt_newton_step(struct cobalt_vars *vars)
372 {
373         u32 invsqrt, invsqrt2;
374         u64 val;
375
376         invsqrt = vars->rec_inv_sqrt;
377         invsqrt2 = ((u64)invsqrt * invsqrt) >> 32;
378         val = (3LL << 32) - ((u64)vars->count * invsqrt2);
379
380         val >>= 2; /* avoid overflow in following multiply */
381         val = (val * invsqrt) >> (32 - 2 + 1);
382
383         vars->rec_inv_sqrt = val;
384 }
385
386 static void cobalt_invsqrt(struct cobalt_vars *vars)
387 {
388         if (vars->count < REC_INV_SQRT_CACHE)
389                 vars->rec_inv_sqrt = cobalt_rec_inv_sqrt_cache[vars->count];
390         else
391                 cobalt_newton_step(vars);
392 }
393
394 /* There is a big difference in timing between the accurate values placed in
395  * the cache and the approximations given by a single Newton step for small
396  * count values, particularly when stepping from count 1 to 2 or vice versa.
397  * Above 16, a single Newton step gives sufficient accuracy in either
398  * direction, given the precision stored.
399  *
400  * The magnitude of the error when stepping up to count 2 is such as to give
401  * the value that *should* have been produced at count 4.
402  */
403
404 static void cobalt_cache_init(void)
405 {
406         struct cobalt_vars v;
407
408         memset(&v, 0, sizeof(v));
409         v.rec_inv_sqrt = ~0U;
410         cobalt_rec_inv_sqrt_cache[0] = v.rec_inv_sqrt;
411
412         for (v.count = 1; v.count < REC_INV_SQRT_CACHE; v.count++) {
413                 cobalt_newton_step(&v);
414                 cobalt_newton_step(&v);
415                 cobalt_newton_step(&v);
416                 cobalt_newton_step(&v);
417
418                 cobalt_rec_inv_sqrt_cache[v.count] = v.rec_inv_sqrt;
419         }
420 }
421
422 static void cobalt_vars_init(struct cobalt_vars *vars)
423 {
424         memset(vars, 0, sizeof(*vars));
425
426         if (!cobalt_rec_inv_sqrt_cache[0]) {
427                 cobalt_cache_init();
428                 cobalt_rec_inv_sqrt_cache[0] = ~0;
429         }
430 }
431
432 /* CoDel control_law is t + interval/sqrt(count)
433  * We maintain in rec_inv_sqrt the reciprocal value of sqrt(count) to avoid
434  * both sqrt() and divide operation.
435  */
436 static ktime_t cobalt_control(ktime_t t,
437                               u64 interval,
438                               u32 rec_inv_sqrt)
439 {
440         return ktime_add_ns(t, reciprocal_scale(interval,
441                                                 rec_inv_sqrt));
442 }
443
444 /* Call this when a packet had to be dropped due to queue overflow.  Returns
445  * true if the BLUE state was quiescent before but active after this call.
446  */
447 static bool cobalt_queue_full(struct cobalt_vars *vars,
448                               struct cobalt_params *p,
449                               ktime_t now)
450 {
451         bool up = false;
452
453         if (ktime_to_ns(ktime_sub(now, vars->blue_timer)) > p->target) {
454                 up = !vars->p_drop;
455                 vars->p_drop += p->p_inc;
456                 if (vars->p_drop < p->p_inc)
457                         vars->p_drop = ~0;
458                 vars->blue_timer = now;
459         }
460         vars->dropping = true;
461         vars->drop_next = now;
462         if (!vars->count)
463                 vars->count = 1;
464
465         return up;
466 }
467
468 /* Call this when the queue was serviced but turned out to be empty.  Returns
469  * true if the BLUE state was active before but quiescent after this call.
470  */
471 static bool cobalt_queue_empty(struct cobalt_vars *vars,
472                                struct cobalt_params *p,
473                                ktime_t now)
474 {
475         bool down = false;
476
477         if (vars->p_drop &&
478             ktime_to_ns(ktime_sub(now, vars->blue_timer)) > p->target) {
479                 if (vars->p_drop < p->p_dec)
480                         vars->p_drop = 0;
481                 else
482                         vars->p_drop -= p->p_dec;
483                 vars->blue_timer = now;
484                 down = !vars->p_drop;
485         }
486         vars->dropping = false;
487
488         if (vars->count && ktime_to_ns(ktime_sub(now, vars->drop_next)) >= 0) {
489                 vars->count--;
490                 cobalt_invsqrt(vars);
491                 vars->drop_next = cobalt_control(vars->drop_next,
492                                                  p->interval,
493                                                  vars->rec_inv_sqrt);
494         }
495
496         return down;
497 }
498
499 /* Call this with a freshly dequeued packet for possible congestion marking.
500  * Returns true as an instruction to drop the packet, false for delivery.
501  */
502 static bool cobalt_should_drop(struct cobalt_vars *vars,
503                                struct cobalt_params *p,
504                                ktime_t now,
505                                struct sk_buff *skb,
506                                u32 bulk_flows)
507 {
508         bool next_due, over_target, drop = false;
509         ktime_t schedule;
510         u64 sojourn;
511
512 /* The 'schedule' variable records, in its sign, whether 'now' is before or
513  * after 'drop_next'.  This allows 'drop_next' to be updated before the next
514  * scheduling decision is actually branched, without destroying that
515  * information.  Similarly, the first 'schedule' value calculated is preserved
516  * in the boolean 'next_due'.
517  *
518  * As for 'drop_next', we take advantage of the fact that 'interval' is both
519  * the delay between first exceeding 'target' and the first signalling event,
520  * *and* the scaling factor for the signalling frequency.  It's therefore very
521  * natural to use a single mechanism for both purposes, and eliminates a
522  * significant amount of reference Codel's spaghetti code.  To help with this,
523  * both the '0' and '1' entries in the invsqrt cache are 0xFFFFFFFF, as close
524  * as possible to 1.0 in fixed-point.
525  */
526
527         sojourn = ktime_to_ns(ktime_sub(now, cobalt_get_enqueue_time(skb)));
528         schedule = ktime_sub(now, vars->drop_next);
529         over_target = sojourn > p->target &&
530                       sojourn > p->mtu_time * bulk_flows * 2 &&
531                       sojourn > p->mtu_time * 4;
532         next_due = vars->count && ktime_to_ns(schedule) >= 0;
533
534         vars->ecn_marked = false;
535
536         if (over_target) {
537                 if (!vars->dropping) {
538                         vars->dropping = true;
539                         vars->drop_next = cobalt_control(now,
540                                                          p->interval,
541                                                          vars->rec_inv_sqrt);
542                 }
543                 if (!vars->count)
544                         vars->count = 1;
545         } else if (vars->dropping) {
546                 vars->dropping = false;
547         }
548
549         if (next_due && vars->dropping) {
550                 /* Use ECN mark if possible, otherwise drop */
551                 drop = !(vars->ecn_marked = INET_ECN_set_ce(skb));
552
553                 vars->count++;
554                 if (!vars->count)
555                         vars->count--;
556                 cobalt_invsqrt(vars);
557                 vars->drop_next = cobalt_control(vars->drop_next,
558                                                  p->interval,
559                                                  vars->rec_inv_sqrt);
560                 schedule = ktime_sub(now, vars->drop_next);
561         } else {
562                 while (next_due) {
563                         vars->count--;
564                         cobalt_invsqrt(vars);
565                         vars->drop_next = cobalt_control(vars->drop_next,
566                                                          p->interval,
567                                                          vars->rec_inv_sqrt);
568                         schedule = ktime_sub(now, vars->drop_next);
569                         next_due = vars->count && ktime_to_ns(schedule) >= 0;
570                 }
571         }
572
573         /* Simple BLUE implementation.  Lack of ECN is deliberate. */
574         if (vars->p_drop)
575                 drop |= (prandom_u32() < vars->p_drop);
576
577         /* Overload the drop_next field as an activity timeout */
578         if (!vars->count)
579                 vars->drop_next = ktime_add_ns(now, p->interval);
580         else if (ktime_to_ns(schedule) > 0 && !drop)
581                 vars->drop_next = now;
582
583         return drop;
584 }
585
586 static void cake_update_flowkeys(struct flow_keys *keys,
587                                  const struct sk_buff *skb)
588 {
589 #if IS_ENABLED(CONFIG_NF_CONNTRACK)
590         struct nf_conntrack_tuple tuple = {};
591         bool rev = !skb->_nfct;
592
593         if (tc_skb_protocol(skb) != htons(ETH_P_IP))
594                 return;
595
596         if (!nf_ct_get_tuple_skb(&tuple, skb))
597                 return;
598
599         keys->addrs.v4addrs.src = rev ? tuple.dst.u3.ip : tuple.src.u3.ip;
600         keys->addrs.v4addrs.dst = rev ? tuple.src.u3.ip : tuple.dst.u3.ip;
601
602         if (keys->ports.ports) {
603                 keys->ports.src = rev ? tuple.dst.u.all : tuple.src.u.all;
604                 keys->ports.dst = rev ? tuple.src.u.all : tuple.dst.u.all;
605         }
606 #endif
607 }
608
609 /* Cake has several subtle multiple bit settings. In these cases you
610  *  would be matching triple isolate mode as well.
611  */
612
613 static bool cake_dsrc(int flow_mode)
614 {
615         return (flow_mode & CAKE_FLOW_DUAL_SRC) == CAKE_FLOW_DUAL_SRC;
616 }
617
618 static bool cake_ddst(int flow_mode)
619 {
620         return (flow_mode & CAKE_FLOW_DUAL_DST) == CAKE_FLOW_DUAL_DST;
621 }
622
623 static u32 cake_hash(struct cake_tin_data *q, const struct sk_buff *skb,
624                      int flow_mode)
625 {
626         u32 flow_hash = 0, srchost_hash, dsthost_hash;
627         u16 reduced_hash, srchost_idx, dsthost_idx;
628         struct flow_keys keys, host_keys;
629
630         if (unlikely(flow_mode == CAKE_FLOW_NONE))
631                 return 0;
632
633         skb_flow_dissect_flow_keys(skb, &keys,
634                                    FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL);
635
636         if (flow_mode & CAKE_FLOW_NAT_FLAG)
637                 cake_update_flowkeys(&keys, skb);
638
639         /* flow_hash_from_keys() sorts the addresses by value, so we have
640          * to preserve their order in a separate data structure to treat
641          * src and dst host addresses as independently selectable.
642          */
643         host_keys = keys;
644         host_keys.ports.ports     = 0;
645         host_keys.basic.ip_proto  = 0;
646         host_keys.keyid.keyid     = 0;
647         host_keys.tags.flow_label = 0;
648
649         switch (host_keys.control.addr_type) {
650         case FLOW_DISSECTOR_KEY_IPV4_ADDRS:
651                 host_keys.addrs.v4addrs.src = 0;
652                 dsthost_hash = flow_hash_from_keys(&host_keys);
653                 host_keys.addrs.v4addrs.src = keys.addrs.v4addrs.src;
654                 host_keys.addrs.v4addrs.dst = 0;
655                 srchost_hash = flow_hash_from_keys(&host_keys);
656                 break;
657
658         case FLOW_DISSECTOR_KEY_IPV6_ADDRS:
659                 memset(&host_keys.addrs.v6addrs.src, 0,
660                        sizeof(host_keys.addrs.v6addrs.src));
661                 dsthost_hash = flow_hash_from_keys(&host_keys);
662                 host_keys.addrs.v6addrs.src = keys.addrs.v6addrs.src;
663                 memset(&host_keys.addrs.v6addrs.dst, 0,
664                        sizeof(host_keys.addrs.v6addrs.dst));
665                 srchost_hash = flow_hash_from_keys(&host_keys);
666                 break;
667
668         default:
669                 dsthost_hash = 0;
670                 srchost_hash = 0;
671         }
672
673         /* This *must* be after the above switch, since as a
674          * side-effect it sorts the src and dst addresses.
675          */
676         if (flow_mode & CAKE_FLOW_FLOWS)
677                 flow_hash = flow_hash_from_keys(&keys);
678
679         if (!(flow_mode & CAKE_FLOW_FLOWS)) {
680                 if (flow_mode & CAKE_FLOW_SRC_IP)
681                         flow_hash ^= srchost_hash;
682
683                 if (flow_mode & CAKE_FLOW_DST_IP)
684                         flow_hash ^= dsthost_hash;
685         }
686
687         reduced_hash = flow_hash % CAKE_QUEUES;
688
689         /* set-associative hashing */
690         /* fast path if no hash collision (direct lookup succeeds) */
691         if (likely(q->tags[reduced_hash] == flow_hash &&
692                    q->flows[reduced_hash].set)) {
693                 q->way_directs++;
694         } else {
695                 u32 inner_hash = reduced_hash % CAKE_SET_WAYS;
696                 u32 outer_hash = reduced_hash - inner_hash;
697                 bool allocate_src = false;
698                 bool allocate_dst = false;
699                 u32 i, k;
700
701                 /* check if any active queue in the set is reserved for
702                  * this flow.
703                  */
704                 for (i = 0, k = inner_hash; i < CAKE_SET_WAYS;
705                      i++, k = (k + 1) % CAKE_SET_WAYS) {
706                         if (q->tags[outer_hash + k] == flow_hash) {
707                                 if (i)
708                                         q->way_hits++;
709
710                                 if (!q->flows[outer_hash + k].set) {
711                                         /* need to increment host refcnts */
712                                         allocate_src = cake_dsrc(flow_mode);
713                                         allocate_dst = cake_ddst(flow_mode);
714                                 }
715
716                                 goto found;
717                         }
718                 }
719
720                 /* no queue is reserved for this flow, look for an
721                  * empty one.
722                  */
723                 for (i = 0; i < CAKE_SET_WAYS;
724                          i++, k = (k + 1) % CAKE_SET_WAYS) {
725                         if (!q->flows[outer_hash + k].set) {
726                                 q->way_misses++;
727                                 allocate_src = cake_dsrc(flow_mode);
728                                 allocate_dst = cake_ddst(flow_mode);
729                                 goto found;
730                         }
731                 }
732
733                 /* With no empty queues, default to the original
734                  * queue, accept the collision, update the host tags.
735                  */
736                 q->way_collisions++;
737                 q->hosts[q->flows[reduced_hash].srchost].srchost_refcnt--;
738                 q->hosts[q->flows[reduced_hash].dsthost].dsthost_refcnt--;
739                 allocate_src = cake_dsrc(flow_mode);
740                 allocate_dst = cake_ddst(flow_mode);
741 found:
742                 /* reserve queue for future packets in same flow */
743                 reduced_hash = outer_hash + k;
744                 q->tags[reduced_hash] = flow_hash;
745
746                 if (allocate_src) {
747                         srchost_idx = srchost_hash % CAKE_QUEUES;
748                         inner_hash = srchost_idx % CAKE_SET_WAYS;
749                         outer_hash = srchost_idx - inner_hash;
750                         for (i = 0, k = inner_hash; i < CAKE_SET_WAYS;
751                                 i++, k = (k + 1) % CAKE_SET_WAYS) {
752                                 if (q->hosts[outer_hash + k].srchost_tag ==
753                                     srchost_hash)
754                                         goto found_src;
755                         }
756                         for (i = 0; i < CAKE_SET_WAYS;
757                                 i++, k = (k + 1) % CAKE_SET_WAYS) {
758                                 if (!q->hosts[outer_hash + k].srchost_refcnt)
759                                         break;
760                         }
761                         q->hosts[outer_hash + k].srchost_tag = srchost_hash;
762 found_src:
763                         srchost_idx = outer_hash + k;
764                         q->hosts[srchost_idx].srchost_refcnt++;
765                         q->flows[reduced_hash].srchost = srchost_idx;
766                 }
767
768                 if (allocate_dst) {
769                         dsthost_idx = dsthost_hash % CAKE_QUEUES;
770                         inner_hash = dsthost_idx % CAKE_SET_WAYS;
771                         outer_hash = dsthost_idx - inner_hash;
772                         for (i = 0, k = inner_hash; i < CAKE_SET_WAYS;
773                              i++, k = (k + 1) % CAKE_SET_WAYS) {
774                                 if (q->hosts[outer_hash + k].dsthost_tag ==
775                                     dsthost_hash)
776                                         goto found_dst;
777                         }
778                         for (i = 0; i < CAKE_SET_WAYS;
779                              i++, k = (k + 1) % CAKE_SET_WAYS) {
780                                 if (!q->hosts[outer_hash + k].dsthost_refcnt)
781                                         break;
782                         }
783                         q->hosts[outer_hash + k].dsthost_tag = dsthost_hash;
784 found_dst:
785                         dsthost_idx = outer_hash + k;
786                         q->hosts[dsthost_idx].dsthost_refcnt++;
787                         q->flows[reduced_hash].dsthost = dsthost_idx;
788                 }
789         }
790
791         return reduced_hash;
792 }
793
794 /* helper functions : might be changed when/if skb use a standard list_head */
795 /* remove one skb from head of slot queue */
796
797 static struct sk_buff *dequeue_head(struct cake_flow *flow)
798 {
799         struct sk_buff *skb = flow->head;
800
801         if (skb) {
802                 flow->head = skb->next;
803                 skb->next = NULL;
804         }
805
806         return skb;
807 }
808
809 /* add skb to flow queue (tail add) */
810
811 static void flow_queue_add(struct cake_flow *flow, struct sk_buff *skb)
812 {
813         if (!flow->head)
814                 flow->head = skb;
815         else
816                 flow->tail->next = skb;
817         flow->tail = skb;
818         skb->next = NULL;
819 }
820
821 static struct iphdr *cake_get_iphdr(const struct sk_buff *skb,
822                                     struct ipv6hdr *buf)
823 {
824         unsigned int offset = skb_network_offset(skb);
825         struct iphdr *iph;
826
827         iph = skb_header_pointer(skb, offset, sizeof(struct iphdr), buf);
828
829         if (!iph)
830                 return NULL;
831
832         if (iph->version == 4 && iph->protocol == IPPROTO_IPV6)
833                 return skb_header_pointer(skb, offset + iph->ihl * 4,
834                                           sizeof(struct ipv6hdr), buf);
835
836         else if (iph->version == 4)
837                 return iph;
838
839         else if (iph->version == 6)
840                 return skb_header_pointer(skb, offset, sizeof(struct ipv6hdr),
841                                           buf);
842
843         return NULL;
844 }
845
846 static struct tcphdr *cake_get_tcphdr(const struct sk_buff *skb,
847                                       void *buf, unsigned int bufsize)
848 {
849         unsigned int offset = skb_network_offset(skb);
850         const struct ipv6hdr *ipv6h;
851         const struct tcphdr *tcph;
852         const struct iphdr *iph;
853         struct ipv6hdr _ipv6h;
854         struct tcphdr _tcph;
855
856         ipv6h = skb_header_pointer(skb, offset, sizeof(_ipv6h), &_ipv6h);
857
858         if (!ipv6h)
859                 return NULL;
860
861         if (ipv6h->version == 4) {
862                 iph = (struct iphdr *)ipv6h;
863                 offset += iph->ihl * 4;
864
865                 /* special-case 6in4 tunnelling, as that is a common way to get
866                  * v6 connectivity in the home
867                  */
868                 if (iph->protocol == IPPROTO_IPV6) {
869                         ipv6h = skb_header_pointer(skb, offset,
870                                                    sizeof(_ipv6h), &_ipv6h);
871
872                         if (!ipv6h || ipv6h->nexthdr != IPPROTO_TCP)
873                                 return NULL;
874
875                         offset += sizeof(struct ipv6hdr);
876
877                 } else if (iph->protocol != IPPROTO_TCP) {
878                         return NULL;
879                 }
880
881         } else if (ipv6h->version == 6) {
882                 if (ipv6h->nexthdr != IPPROTO_TCP)
883                         return NULL;
884
885                 offset += sizeof(struct ipv6hdr);
886         } else {
887                 return NULL;
888         }
889
890         tcph = skb_header_pointer(skb, offset, sizeof(_tcph), &_tcph);
891         if (!tcph)
892                 return NULL;
893
894         return skb_header_pointer(skb, offset,
895                                   min(__tcp_hdrlen(tcph), bufsize), buf);
896 }
897
898 static const void *cake_get_tcpopt(const struct tcphdr *tcph,
899                                    int code, int *oplen)
900 {
901         /* inspired by tcp_parse_options in tcp_input.c */
902         int length = __tcp_hdrlen(tcph) - sizeof(struct tcphdr);
903         const u8 *ptr = (const u8 *)(tcph + 1);
904
905         while (length > 0) {
906                 int opcode = *ptr++;
907                 int opsize;
908
909                 if (opcode == TCPOPT_EOL)
910                         break;
911                 if (opcode == TCPOPT_NOP) {
912                         length--;
913                         continue;
914                 }
915                 opsize = *ptr++;
916                 if (opsize < 2 || opsize > length)
917                         break;
918
919                 if (opcode == code) {
920                         *oplen = opsize;
921                         return ptr;
922                 }
923
924                 ptr += opsize - 2;
925                 length -= opsize;
926         }
927
928         return NULL;
929 }
930
931 /* Compare two SACK sequences. A sequence is considered greater if it SACKs more
932  * bytes than the other. In the case where both sequences ACKs bytes that the
933  * other doesn't, A is considered greater. DSACKs in A also makes A be
934  * considered greater.
935  *
936  * @return -1, 0 or 1 as normal compare functions
937  */
938 static int cake_tcph_sack_compare(const struct tcphdr *tcph_a,
939                                   const struct tcphdr *tcph_b)
940 {
941         const struct tcp_sack_block_wire *sack_a, *sack_b;
942         u32 ack_seq_a = ntohl(tcph_a->ack_seq);
943         u32 bytes_a = 0, bytes_b = 0;
944         int oplen_a, oplen_b;
945         bool first = true;
946
947         sack_a = cake_get_tcpopt(tcph_a, TCPOPT_SACK, &oplen_a);
948         sack_b = cake_get_tcpopt(tcph_b, TCPOPT_SACK, &oplen_b);
949
950         /* pointers point to option contents */
951         oplen_a -= TCPOLEN_SACK_BASE;
952         oplen_b -= TCPOLEN_SACK_BASE;
953
954         if (sack_a && oplen_a >= sizeof(*sack_a) &&
955             (!sack_b || oplen_b < sizeof(*sack_b)))
956                 return -1;
957         else if (sack_b && oplen_b >= sizeof(*sack_b) &&
958                  (!sack_a || oplen_a < sizeof(*sack_a)))
959                 return 1;
960         else if ((!sack_a || oplen_a < sizeof(*sack_a)) &&
961                  (!sack_b || oplen_b < sizeof(*sack_b)))
962                 return 0;
963
964         while (oplen_a >= sizeof(*sack_a)) {
965                 const struct tcp_sack_block_wire *sack_tmp = sack_b;
966                 u32 start_a = get_unaligned_be32(&sack_a->start_seq);
967                 u32 end_a = get_unaligned_be32(&sack_a->end_seq);
968                 int oplen_tmp = oplen_b;
969                 bool found = false;
970
971                 /* DSACK; always considered greater to prevent dropping */
972                 if (before(start_a, ack_seq_a))
973                         return -1;
974
975                 bytes_a += end_a - start_a;
976
977                 while (oplen_tmp >= sizeof(*sack_tmp)) {
978                         u32 start_b = get_unaligned_be32(&sack_tmp->start_seq);
979                         u32 end_b = get_unaligned_be32(&sack_tmp->end_seq);
980
981                         /* first time through we count the total size */
982                         if (first)
983                                 bytes_b += end_b - start_b;
984
985                         if (!after(start_b, start_a) && !before(end_b, end_a)) {
986                                 found = true;
987                                 if (!first)
988                                         break;
989                         }
990                         oplen_tmp -= sizeof(*sack_tmp);
991                         sack_tmp++;
992                 }
993
994                 if (!found)
995                         return -1;
996
997                 oplen_a -= sizeof(*sack_a);
998                 sack_a++;
999                 first = false;
1000         }
1001
1002         /* If we made it this far, all ranges SACKed by A are covered by B, so
1003          * either the SACKs are equal, or B SACKs more bytes.
1004          */
1005         return bytes_b > bytes_a ? 1 : 0;
1006 }
1007
1008 static void cake_tcph_get_tstamp(const struct tcphdr *tcph,
1009                                  u32 *tsval, u32 *tsecr)
1010 {
1011         const u8 *ptr;
1012         int opsize;
1013
1014         ptr = cake_get_tcpopt(tcph, TCPOPT_TIMESTAMP, &opsize);
1015
1016         if (ptr && opsize == TCPOLEN_TIMESTAMP) {
1017                 *tsval = get_unaligned_be32(ptr);
1018                 *tsecr = get_unaligned_be32(ptr + 4);
1019         }
1020 }
1021
1022 static bool cake_tcph_may_drop(const struct tcphdr *tcph,
1023                                u32 tstamp_new, u32 tsecr_new)
1024 {
1025         /* inspired by tcp_parse_options in tcp_input.c */
1026         int length = __tcp_hdrlen(tcph) - sizeof(struct tcphdr);
1027         const u8 *ptr = (const u8 *)(tcph + 1);
1028         u32 tstamp, tsecr;
1029
1030         /* 3 reserved flags must be unset to avoid future breakage
1031          * ACK must be set
1032          * ECE/CWR are handled separately
1033          * All other flags URG/PSH/RST/SYN/FIN must be unset
1034          * 0x0FFF0000 = all TCP flags (confirm ACK=1, others zero)
1035          * 0x00C00000 = CWR/ECE (handled separately)
1036          * 0x0F3F0000 = 0x0FFF0000 & ~0x00C00000
1037          */
1038         if (((tcp_flag_word(tcph) &
1039               cpu_to_be32(0x0F3F0000)) != TCP_FLAG_ACK))
1040                 return false;
1041
1042         while (length > 0) {
1043                 int opcode = *ptr++;
1044                 int opsize;
1045
1046                 if (opcode == TCPOPT_EOL)
1047                         break;
1048                 if (opcode == TCPOPT_NOP) {
1049                         length--;
1050                         continue;
1051                 }
1052                 opsize = *ptr++;
1053                 if (opsize < 2 || opsize > length)
1054                         break;
1055
1056                 switch (opcode) {
1057                 case TCPOPT_MD5SIG: /* doesn't influence state */
1058                         break;
1059
1060                 case TCPOPT_SACK: /* stricter checking performed later */
1061                         if (opsize % 8 != 2)
1062                                 return false;
1063                         break;
1064
1065                 case TCPOPT_TIMESTAMP:
1066                         /* only drop timestamps lower than new */
1067                         if (opsize != TCPOLEN_TIMESTAMP)
1068                                 return false;
1069                         tstamp = get_unaligned_be32(ptr);
1070                         tsecr = get_unaligned_be32(ptr + 4);
1071                         if (after(tstamp, tstamp_new) ||
1072                             after(tsecr, tsecr_new))
1073                                 return false;
1074                         break;
1075
1076                 case TCPOPT_MSS:  /* these should only be set on SYN */
1077                 case TCPOPT_WINDOW:
1078                 case TCPOPT_SACK_PERM:
1079                 case TCPOPT_FASTOPEN:
1080                 case TCPOPT_EXP:
1081                 default: /* don't drop if any unknown options are present */
1082                         return false;
1083                 }
1084
1085                 ptr += opsize - 2;
1086                 length -= opsize;
1087         }
1088
1089         return true;
1090 }
1091
1092 static struct sk_buff *cake_ack_filter(struct cake_sched_data *q,
1093                                        struct cake_flow *flow)
1094 {
1095         bool aggressive = q->ack_filter == CAKE_ACK_AGGRESSIVE;
1096         struct sk_buff *elig_ack = NULL, *elig_ack_prev = NULL;
1097         struct sk_buff *skb_check, *skb_prev = NULL;
1098         const struct ipv6hdr *ipv6h, *ipv6h_check;
1099         unsigned char _tcph[64], _tcph_check[64];
1100         const struct tcphdr *tcph, *tcph_check;
1101         const struct iphdr *iph, *iph_check;
1102         struct ipv6hdr _iph, _iph_check;
1103         const struct sk_buff *skb;
1104         int seglen, num_found = 0;
1105         u32 tstamp = 0, tsecr = 0;
1106         __be32 elig_flags = 0;
1107         int sack_comp;
1108
1109         /* no other possible ACKs to filter */
1110         if (flow->head == flow->tail)
1111                 return NULL;
1112
1113         skb = flow->tail;
1114         tcph = cake_get_tcphdr(skb, _tcph, sizeof(_tcph));
1115         iph = cake_get_iphdr(skb, &_iph);
1116         if (!tcph)
1117                 return NULL;
1118
1119         cake_tcph_get_tstamp(tcph, &tstamp, &tsecr);
1120
1121         /* the 'triggering' packet need only have the ACK flag set.
1122          * also check that SYN is not set, as there won't be any previous ACKs.
1123          */
1124         if ((tcp_flag_word(tcph) &
1125              (TCP_FLAG_ACK | TCP_FLAG_SYN)) != TCP_FLAG_ACK)
1126                 return NULL;
1127
1128         /* the 'triggering' ACK is at the tail of the queue, we have already
1129          * returned if it is the only packet in the flow. loop through the rest
1130          * of the queue looking for pure ACKs with the same 5-tuple as the
1131          * triggering one.
1132          */
1133         for (skb_check = flow->head;
1134              skb_check && skb_check != skb;
1135              skb_prev = skb_check, skb_check = skb_check->next) {
1136                 iph_check = cake_get_iphdr(skb_check, &_iph_check);
1137                 tcph_check = cake_get_tcphdr(skb_check, &_tcph_check,
1138                                              sizeof(_tcph_check));
1139
1140                 /* only TCP packets with matching 5-tuple are eligible, and only
1141                  * drop safe headers
1142                  */
1143                 if (!tcph_check || iph->version != iph_check->version ||
1144                     tcph_check->source != tcph->source ||
1145                     tcph_check->dest != tcph->dest)
1146                         continue;
1147
1148                 if (iph_check->version == 4) {
1149                         if (iph_check->saddr != iph->saddr ||
1150                             iph_check->daddr != iph->daddr)
1151                                 continue;
1152
1153                         seglen = ntohs(iph_check->tot_len) -
1154                                        (4 * iph_check->ihl);
1155                 } else if (iph_check->version == 6) {
1156                         ipv6h = (struct ipv6hdr *)iph;
1157                         ipv6h_check = (struct ipv6hdr *)iph_check;
1158
1159                         if (ipv6_addr_cmp(&ipv6h_check->saddr, &ipv6h->saddr) ||
1160                             ipv6_addr_cmp(&ipv6h_check->daddr, &ipv6h->daddr))
1161                                 continue;
1162
1163                         seglen = ntohs(ipv6h_check->payload_len);
1164                 } else {
1165                         WARN_ON(1);  /* shouldn't happen */
1166                         continue;
1167                 }
1168
1169                 /* If the ECE/CWR flags changed from the previous eligible
1170                  * packet in the same flow, we should no longer be dropping that
1171                  * previous packet as this would lose information.
1172                  */
1173                 if (elig_ack && (tcp_flag_word(tcph_check) &
1174                                  (TCP_FLAG_ECE | TCP_FLAG_CWR)) != elig_flags) {
1175                         elig_ack = NULL;
1176                         elig_ack_prev = NULL;
1177                         num_found--;
1178                 }
1179
1180                 /* Check TCP options and flags, don't drop ACKs with segment
1181                  * data, and don't drop ACKs with a higher cumulative ACK
1182                  * counter than the triggering packet. Check ACK seqno here to
1183                  * avoid parsing SACK options of packets we are going to exclude
1184                  * anyway.
1185                  */
1186                 if (!cake_tcph_may_drop(tcph_check, tstamp, tsecr) ||
1187                     (seglen - __tcp_hdrlen(tcph_check)) != 0 ||
1188                     after(ntohl(tcph_check->ack_seq), ntohl(tcph->ack_seq)))
1189                         continue;
1190
1191                 /* Check SACK options. The triggering packet must SACK more data
1192                  * than the ACK under consideration, or SACK the same range but
1193                  * have a larger cumulative ACK counter. The latter is a
1194                  * pathological case, but is contained in the following check
1195                  * anyway, just to be safe.
1196                  */
1197                 sack_comp = cake_tcph_sack_compare(tcph_check, tcph);
1198
1199                 if (sack_comp < 0 ||
1200                     (ntohl(tcph_check->ack_seq) == ntohl(tcph->ack_seq) &&
1201                      sack_comp == 0))
1202                         continue;
1203
1204                 /* At this point we have found an eligible pure ACK to drop; if
1205                  * we are in aggressive mode, we are done. Otherwise, keep
1206                  * searching unless this is the second eligible ACK we
1207                  * found.
1208                  *
1209                  * Since we want to drop ACK closest to the head of the queue,
1210                  * save the first eligible ACK we find, even if we need to loop
1211                  * again.
1212                  */
1213                 if (!elig_ack) {
1214                         elig_ack = skb_check;
1215                         elig_ack_prev = skb_prev;
1216                         elig_flags = (tcp_flag_word(tcph_check)
1217                                       & (TCP_FLAG_ECE | TCP_FLAG_CWR));
1218                 }
1219
1220                 if (num_found++ > 0)
1221                         goto found;
1222         }
1223
1224         /* We made it through the queue without finding two eligible ACKs . If
1225          * we found a single eligible ACK we can drop it in aggressive mode if
1226          * we can guarantee that this does not interfere with ECN flag
1227          * information. We ensure this by dropping it only if the enqueued
1228          * packet is consecutive with the eligible ACK, and their flags match.
1229          */
1230         if (elig_ack && aggressive && elig_ack->next == skb &&
1231             (elig_flags == (tcp_flag_word(tcph) &
1232                             (TCP_FLAG_ECE | TCP_FLAG_CWR))))
1233                 goto found;
1234
1235         return NULL;
1236
1237 found:
1238         if (elig_ack_prev)
1239                 elig_ack_prev->next = elig_ack->next;
1240         else
1241                 flow->head = elig_ack->next;
1242
1243         elig_ack->next = NULL;
1244
1245         return elig_ack;
1246 }
1247
1248 static u64 cake_ewma(u64 avg, u64 sample, u32 shift)
1249 {
1250         avg -= avg >> shift;
1251         avg += sample >> shift;
1252         return avg;
1253 }
1254
1255 static u32 cake_calc_overhead(struct cake_sched_data *q, u32 len, u32 off)
1256 {
1257         if (q->rate_flags & CAKE_FLAG_OVERHEAD)
1258                 len -= off;
1259
1260         if (q->max_netlen < len)
1261                 q->max_netlen = len;
1262         if (q->min_netlen > len)
1263                 q->min_netlen = len;
1264
1265         len += q->rate_overhead;
1266
1267         if (len < q->rate_mpu)
1268                 len = q->rate_mpu;
1269
1270         if (q->atm_mode == CAKE_ATM_ATM) {
1271                 len += 47;
1272                 len /= 48;
1273                 len *= 53;
1274         } else if (q->atm_mode == CAKE_ATM_PTM) {
1275                 /* Add one byte per 64 bytes or part thereof.
1276                  * This is conservative and easier to calculate than the
1277                  * precise value.
1278                  */
1279                 len += (len + 63) / 64;
1280         }
1281
1282         if (q->max_adjlen < len)
1283                 q->max_adjlen = len;
1284         if (q->min_adjlen > len)
1285                 q->min_adjlen = len;
1286
1287         return len;
1288 }
1289
1290 static u32 cake_overhead(struct cake_sched_data *q, const struct sk_buff *skb)
1291 {
1292         const struct skb_shared_info *shinfo = skb_shinfo(skb);
1293         unsigned int hdr_len, last_len = 0;
1294         u32 off = skb_network_offset(skb);
1295         u32 len = qdisc_pkt_len(skb);
1296         u16 segs = 1;
1297
1298         q->avg_netoff = cake_ewma(q->avg_netoff, off << 16, 8);
1299
1300         if (!shinfo->gso_size)
1301                 return cake_calc_overhead(q, len, off);
1302
1303         /* borrowed from qdisc_pkt_len_init() */
1304         hdr_len = skb_transport_header(skb) - skb_mac_header(skb);
1305
1306         /* + transport layer */
1307         if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 |
1308                                                 SKB_GSO_TCPV6))) {
1309                 const struct tcphdr *th;
1310                 struct tcphdr _tcphdr;
1311
1312                 th = skb_header_pointer(skb, skb_transport_offset(skb),
1313                                         sizeof(_tcphdr), &_tcphdr);
1314                 if (likely(th))
1315                         hdr_len += __tcp_hdrlen(th);
1316         } else {
1317                 struct udphdr _udphdr;
1318
1319                 if (skb_header_pointer(skb, skb_transport_offset(skb),
1320                                        sizeof(_udphdr), &_udphdr))
1321                         hdr_len += sizeof(struct udphdr);
1322         }
1323
1324         if (unlikely(shinfo->gso_type & SKB_GSO_DODGY))
1325                 segs = DIV_ROUND_UP(skb->len - hdr_len,
1326                                     shinfo->gso_size);
1327         else
1328                 segs = shinfo->gso_segs;
1329
1330         len = shinfo->gso_size + hdr_len;
1331         last_len = skb->len - shinfo->gso_size * (segs - 1);
1332
1333         return (cake_calc_overhead(q, len, off) * (segs - 1) +
1334                 cake_calc_overhead(q, last_len, off));
1335 }
1336
1337 static void cake_heap_swap(struct cake_sched_data *q, u16 i, u16 j)
1338 {
1339         struct cake_heap_entry ii = q->overflow_heap[i];
1340         struct cake_heap_entry jj = q->overflow_heap[j];
1341
1342         q->overflow_heap[i] = jj;
1343         q->overflow_heap[j] = ii;
1344
1345         q->tins[ii.t].overflow_idx[ii.b] = j;
1346         q->tins[jj.t].overflow_idx[jj.b] = i;
1347 }
1348
1349 static u32 cake_heap_get_backlog(const struct cake_sched_data *q, u16 i)
1350 {
1351         struct cake_heap_entry ii = q->overflow_heap[i];
1352
1353         return q->tins[ii.t].backlogs[ii.b];
1354 }
1355
1356 static void cake_heapify(struct cake_sched_data *q, u16 i)
1357 {
1358         static const u32 a = CAKE_MAX_TINS * CAKE_QUEUES;
1359         u32 mb = cake_heap_get_backlog(q, i);
1360         u32 m = i;
1361
1362         while (m < a) {
1363                 u32 l = m + m + 1;
1364                 u32 r = l + 1;
1365
1366                 if (l < a) {
1367                         u32 lb = cake_heap_get_backlog(q, l);
1368
1369                         if (lb > mb) {
1370                                 m  = l;
1371                                 mb = lb;
1372                         }
1373                 }
1374
1375                 if (r < a) {
1376                         u32 rb = cake_heap_get_backlog(q, r);
1377
1378                         if (rb > mb) {
1379                                 m  = r;
1380                                 mb = rb;
1381                         }
1382                 }
1383
1384                 if (m != i) {
1385                         cake_heap_swap(q, i, m);
1386                         i = m;
1387                 } else {
1388                         break;
1389                 }
1390         }
1391 }
1392
1393 static void cake_heapify_up(struct cake_sched_data *q, u16 i)
1394 {
1395         while (i > 0 && i < CAKE_MAX_TINS * CAKE_QUEUES) {
1396                 u16 p = (i - 1) >> 1;
1397                 u32 ib = cake_heap_get_backlog(q, i);
1398                 u32 pb = cake_heap_get_backlog(q, p);
1399
1400                 if (ib > pb) {
1401                         cake_heap_swap(q, i, p);
1402                         i = p;
1403                 } else {
1404                         break;
1405                 }
1406         }
1407 }
1408
1409 static int cake_advance_shaper(struct cake_sched_data *q,
1410                                struct cake_tin_data *b,
1411                                struct sk_buff *skb,
1412                                ktime_t now, bool drop)
1413 {
1414         u32 len = get_cobalt_cb(skb)->adjusted_len;
1415
1416         /* charge packet bandwidth to this tin
1417          * and to the global shaper.
1418          */
1419         if (q->rate_ns) {
1420                 u64 tin_dur = (len * b->tin_rate_ns) >> b->tin_rate_shft;
1421                 u64 global_dur = (len * q->rate_ns) >> q->rate_shft;
1422                 u64 failsafe_dur = global_dur + (global_dur >> 1);
1423
1424                 if (ktime_before(b->time_next_packet, now))
1425                         b->time_next_packet = ktime_add_ns(b->time_next_packet,
1426                                                            tin_dur);
1427
1428                 else if (ktime_before(b->time_next_packet,
1429                                       ktime_add_ns(now, tin_dur)))
1430                         b->time_next_packet = ktime_add_ns(now, tin_dur);
1431
1432                 q->time_next_packet = ktime_add_ns(q->time_next_packet,
1433                                                    global_dur);
1434                 if (!drop)
1435                         q->failsafe_next_packet = \
1436                                 ktime_add_ns(q->failsafe_next_packet,
1437                                              failsafe_dur);
1438         }
1439         return len;
1440 }
1441
1442 static unsigned int cake_drop(struct Qdisc *sch, struct sk_buff **to_free)
1443 {
1444         struct cake_sched_data *q = qdisc_priv(sch);
1445         ktime_t now = ktime_get();
1446         u32 idx = 0, tin = 0, len;
1447         struct cake_heap_entry qq;
1448         struct cake_tin_data *b;
1449         struct cake_flow *flow;
1450         struct sk_buff *skb;
1451
1452         if (!q->overflow_timeout) {
1453                 int i;
1454                 /* Build fresh max-heap */
1455                 for (i = CAKE_MAX_TINS * CAKE_QUEUES / 2; i >= 0; i--)
1456                         cake_heapify(q, i);
1457         }
1458         q->overflow_timeout = 65535;
1459
1460         /* select longest queue for pruning */
1461         qq  = q->overflow_heap[0];
1462         tin = qq.t;
1463         idx = qq.b;
1464
1465         b = &q->tins[tin];
1466         flow = &b->flows[idx];
1467         skb = dequeue_head(flow);
1468         if (unlikely(!skb)) {
1469                 /* heap has gone wrong, rebuild it next time */
1470                 q->overflow_timeout = 0;
1471                 return idx + (tin << 16);
1472         }
1473
1474         if (cobalt_queue_full(&flow->cvars, &b->cparams, now))
1475                 b->unresponsive_flow_count++;
1476
1477         len = qdisc_pkt_len(skb);
1478         q->buffer_used      -= skb->truesize;
1479         b->backlogs[idx]    -= len;
1480         b->tin_backlog      -= len;
1481         sch->qstats.backlog -= len;
1482         qdisc_tree_reduce_backlog(sch, 1, len);
1483
1484         flow->dropped++;
1485         b->tin_dropped++;
1486         sch->qstats.drops++;
1487
1488         if (q->rate_flags & CAKE_FLAG_INGRESS)
1489                 cake_advance_shaper(q, b, skb, now, true);
1490
1491         __qdisc_drop(skb, to_free);
1492         sch->q.qlen--;
1493
1494         cake_heapify(q, 0);
1495
1496         return idx + (tin << 16);
1497 }
1498
1499 static void cake_wash_diffserv(struct sk_buff *skb)
1500 {
1501         switch (skb->protocol) {
1502         case htons(ETH_P_IP):
1503                 ipv4_change_dsfield(ip_hdr(skb), INET_ECN_MASK, 0);
1504                 break;
1505         case htons(ETH_P_IPV6):
1506                 ipv6_change_dsfield(ipv6_hdr(skb), INET_ECN_MASK, 0);
1507                 break;
1508         default:
1509                 break;
1510         }
1511 }
1512
1513 static u8 cake_handle_diffserv(struct sk_buff *skb, u16 wash)
1514 {
1515         u8 dscp;
1516
1517         switch (skb->protocol) {
1518         case htons(ETH_P_IP):
1519                 dscp = ipv4_get_dsfield(ip_hdr(skb)) >> 2;
1520                 if (wash && dscp)
1521                         ipv4_change_dsfield(ip_hdr(skb), INET_ECN_MASK, 0);
1522                 return dscp;
1523
1524         case htons(ETH_P_IPV6):
1525                 dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> 2;
1526                 if (wash && dscp)
1527                         ipv6_change_dsfield(ipv6_hdr(skb), INET_ECN_MASK, 0);
1528                 return dscp;
1529
1530         case htons(ETH_P_ARP):
1531                 return 0x38;  /* CS7 - Net Control */
1532
1533         default:
1534                 /* If there is no Diffserv field, treat as best-effort */
1535                 return 0;
1536         }
1537 }
1538
1539 static struct cake_tin_data *cake_select_tin(struct Qdisc *sch,
1540                                              struct sk_buff *skb)
1541 {
1542         struct cake_sched_data *q = qdisc_priv(sch);
1543         u32 tin;
1544
1545         if (TC_H_MAJ(skb->priority) == sch->handle &&
1546             TC_H_MIN(skb->priority) > 0 &&
1547             TC_H_MIN(skb->priority) <= q->tin_cnt) {
1548                 tin = q->tin_order[TC_H_MIN(skb->priority) - 1];
1549
1550                 if (q->rate_flags & CAKE_FLAG_WASH)
1551                         cake_wash_diffserv(skb);
1552         } else if (q->tin_mode != CAKE_DIFFSERV_BESTEFFORT) {
1553                 /* extract the Diffserv Precedence field, if it exists */
1554                 /* and clear DSCP bits if washing */
1555                 tin = q->tin_index[cake_handle_diffserv(skb,
1556                                 q->rate_flags & CAKE_FLAG_WASH)];
1557                 if (unlikely(tin >= q->tin_cnt))
1558                         tin = 0;
1559         } else {
1560                 tin = 0;
1561                 if (q->rate_flags & CAKE_FLAG_WASH)
1562                         cake_wash_diffserv(skb);
1563         }
1564
1565         return &q->tins[tin];
1566 }
1567
1568 static u32 cake_classify(struct Qdisc *sch, struct cake_tin_data **t,
1569                          struct sk_buff *skb, int flow_mode, int *qerr)
1570 {
1571         struct cake_sched_data *q = qdisc_priv(sch);
1572         struct tcf_proto *filter;
1573         struct tcf_result res;
1574         u32 flow = 0;
1575         int result;
1576
1577         filter = rcu_dereference_bh(q->filter_list);
1578         if (!filter)
1579                 goto hash;
1580
1581         *qerr = NET_XMIT_SUCCESS | __NET_XMIT_BYPASS;
1582         result = tcf_classify(skb, filter, &res, false);
1583
1584         if (result >= 0) {
1585 #ifdef CONFIG_NET_CLS_ACT
1586                 switch (result) {
1587                 case TC_ACT_STOLEN:
1588                 case TC_ACT_QUEUED:
1589                 case TC_ACT_TRAP:
1590                         *qerr = NET_XMIT_SUCCESS | __NET_XMIT_STOLEN;
1591                         /* fall through */
1592                 case TC_ACT_SHOT:
1593                         return 0;
1594                 }
1595 #endif
1596                 if (TC_H_MIN(res.classid) <= CAKE_QUEUES)
1597                         flow = TC_H_MIN(res.classid);
1598         }
1599 hash:
1600         *t = cake_select_tin(sch, skb);
1601         return flow ?: cake_hash(*t, skb, flow_mode) + 1;
1602 }
1603
1604 static void cake_reconfigure(struct Qdisc *sch);
1605
1606 static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
1607                         struct sk_buff **to_free)
1608 {
1609         struct cake_sched_data *q = qdisc_priv(sch);
1610         int len = qdisc_pkt_len(skb);
1611         int uninitialized_var(ret);
1612         struct sk_buff *ack = NULL;
1613         ktime_t now = ktime_get();
1614         struct cake_tin_data *b;
1615         struct cake_flow *flow;
1616         u32 idx;
1617
1618         /* choose flow to insert into */
1619         idx = cake_classify(sch, &b, skb, q->flow_mode, &ret);
1620         if (idx == 0) {
1621                 if (ret & __NET_XMIT_BYPASS)
1622                         qdisc_qstats_drop(sch);
1623                 __qdisc_drop(skb, to_free);
1624                 return ret;
1625         }
1626         idx--;
1627         flow = &b->flows[idx];
1628
1629         /* ensure shaper state isn't stale */
1630         if (!b->tin_backlog) {
1631                 if (ktime_before(b->time_next_packet, now))
1632                         b->time_next_packet = now;
1633
1634                 if (!sch->q.qlen) {
1635                         if (ktime_before(q->time_next_packet, now)) {
1636                                 q->failsafe_next_packet = now;
1637                                 q->time_next_packet = now;
1638                         } else if (ktime_after(q->time_next_packet, now) &&
1639                                    ktime_after(q->failsafe_next_packet, now)) {
1640                                 u64 next = \
1641                                         min(ktime_to_ns(q->time_next_packet),
1642                                             ktime_to_ns(
1643                                                    q->failsafe_next_packet));
1644                                 sch->qstats.overlimits++;
1645                                 qdisc_watchdog_schedule_ns(&q->watchdog, next);
1646                         }
1647                 }
1648         }
1649
1650         if (unlikely(len > b->max_skblen))
1651                 b->max_skblen = len;
1652
1653         if (skb_is_gso(skb) && q->rate_flags & CAKE_FLAG_SPLIT_GSO) {
1654                 struct sk_buff *segs, *nskb;
1655                 netdev_features_t features = netif_skb_features(skb);
1656                 unsigned int slen = 0;
1657
1658                 segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK);
1659                 if (IS_ERR_OR_NULL(segs))
1660                         return qdisc_drop(skb, sch, to_free);
1661
1662                 while (segs) {
1663                         nskb = segs->next;
1664                         segs->next = NULL;
1665                         qdisc_skb_cb(segs)->pkt_len = segs->len;
1666                         cobalt_set_enqueue_time(segs, now);
1667                         get_cobalt_cb(segs)->adjusted_len = cake_overhead(q,
1668                                                                           segs);
1669                         flow_queue_add(flow, segs);
1670
1671                         sch->q.qlen++;
1672                         slen += segs->len;
1673                         q->buffer_used += segs->truesize;
1674                         b->packets++;
1675                         segs = nskb;
1676                 }
1677
1678                 /* stats */
1679                 b->bytes            += slen;
1680                 b->backlogs[idx]    += slen;
1681                 b->tin_backlog      += slen;
1682                 sch->qstats.backlog += slen;
1683                 q->avg_window_bytes += slen;
1684
1685                 qdisc_tree_reduce_backlog(sch, 1, len);
1686                 consume_skb(skb);
1687         } else {
1688                 /* not splitting */
1689                 cobalt_set_enqueue_time(skb, now);
1690                 get_cobalt_cb(skb)->adjusted_len = cake_overhead(q, skb);
1691                 flow_queue_add(flow, skb);
1692
1693                 if (q->ack_filter)
1694                         ack = cake_ack_filter(q, flow);
1695
1696                 if (ack) {
1697                         b->ack_drops++;
1698                         sch->qstats.drops++;
1699                         b->bytes += qdisc_pkt_len(ack);
1700                         len -= qdisc_pkt_len(ack);
1701                         q->buffer_used += skb->truesize - ack->truesize;
1702                         if (q->rate_flags & CAKE_FLAG_INGRESS)
1703                                 cake_advance_shaper(q, b, ack, now, true);
1704
1705                         qdisc_tree_reduce_backlog(sch, 1, qdisc_pkt_len(ack));
1706                         consume_skb(ack);
1707                 } else {
1708                         sch->q.qlen++;
1709                         q->buffer_used      += skb->truesize;
1710                 }
1711
1712                 /* stats */
1713                 b->packets++;
1714                 b->bytes            += len;
1715                 b->backlogs[idx]    += len;
1716                 b->tin_backlog      += len;
1717                 sch->qstats.backlog += len;
1718                 q->avg_window_bytes += len;
1719         }
1720
1721         if (q->overflow_timeout)
1722                 cake_heapify_up(q, b->overflow_idx[idx]);
1723
1724         /* incoming bandwidth capacity estimate */
1725         if (q->rate_flags & CAKE_FLAG_AUTORATE_INGRESS) {
1726                 u64 packet_interval = \
1727                         ktime_to_ns(ktime_sub(now, q->last_packet_time));
1728
1729                 if (packet_interval > NSEC_PER_SEC)
1730                         packet_interval = NSEC_PER_SEC;
1731
1732                 /* filter out short-term bursts, eg. wifi aggregation */
1733                 q->avg_packet_interval = \
1734                         cake_ewma(q->avg_packet_interval,
1735                                   packet_interval,
1736                                   (packet_interval > q->avg_packet_interval ?
1737                                           2 : 8));
1738
1739                 q->last_packet_time = now;
1740
1741                 if (packet_interval > q->avg_packet_interval) {
1742                         u64 window_interval = \
1743                                 ktime_to_ns(ktime_sub(now,
1744                                                       q->avg_window_begin));
1745                         u64 b = q->avg_window_bytes * (u64)NSEC_PER_SEC;
1746
1747                         do_div(b, window_interval);
1748                         q->avg_peak_bandwidth =
1749                                 cake_ewma(q->avg_peak_bandwidth, b,
1750                                           b > q->avg_peak_bandwidth ? 2 : 8);
1751                         q->avg_window_bytes = 0;
1752                         q->avg_window_begin = now;
1753
1754                         if (ktime_after(now,
1755                                         ktime_add_ms(q->last_reconfig_time,
1756                                                      250))) {
1757                                 q->rate_bps = (q->avg_peak_bandwidth * 15) >> 4;
1758                                 cake_reconfigure(sch);
1759                         }
1760                 }
1761         } else {
1762                 q->avg_window_bytes = 0;
1763                 q->last_packet_time = now;
1764         }
1765
1766         /* flowchain */
1767         if (!flow->set || flow->set == CAKE_SET_DECAYING) {
1768                 struct cake_host *srchost = &b->hosts[flow->srchost];
1769                 struct cake_host *dsthost = &b->hosts[flow->dsthost];
1770                 u16 host_load = 1;
1771
1772                 if (!flow->set) {
1773                         list_add_tail(&flow->flowchain, &b->new_flows);
1774                 } else {
1775                         b->decaying_flow_count--;
1776                         list_move_tail(&flow->flowchain, &b->new_flows);
1777                 }
1778                 flow->set = CAKE_SET_SPARSE;
1779                 b->sparse_flow_count++;
1780
1781                 if (cake_dsrc(q->flow_mode))
1782                         host_load = max(host_load, srchost->srchost_refcnt);
1783
1784                 if (cake_ddst(q->flow_mode))
1785                         host_load = max(host_load, dsthost->dsthost_refcnt);
1786
1787                 flow->deficit = (b->flow_quantum *
1788                                  quantum_div[host_load]) >> 16;
1789         } else if (flow->set == CAKE_SET_SPARSE_WAIT) {
1790                 /* this flow was empty, accounted as a sparse flow, but actually
1791                  * in the bulk rotation.
1792                  */
1793                 flow->set = CAKE_SET_BULK;
1794                 b->sparse_flow_count--;
1795                 b->bulk_flow_count++;
1796         }
1797
1798         if (q->buffer_used > q->buffer_max_used)
1799                 q->buffer_max_used = q->buffer_used;
1800
1801         if (q->buffer_used > q->buffer_limit) {
1802                 u32 dropped = 0;
1803
1804                 while (q->buffer_used > q->buffer_limit) {
1805                         dropped++;
1806                         cake_drop(sch, to_free);
1807                 }
1808                 b->drop_overlimit += dropped;
1809         }
1810         return NET_XMIT_SUCCESS;
1811 }
1812
1813 static struct sk_buff *cake_dequeue_one(struct Qdisc *sch)
1814 {
1815         struct cake_sched_data *q = qdisc_priv(sch);
1816         struct cake_tin_data *b = &q->tins[q->cur_tin];
1817         struct cake_flow *flow = &b->flows[q->cur_flow];
1818         struct sk_buff *skb = NULL;
1819         u32 len;
1820
1821         if (flow->head) {
1822                 skb = dequeue_head(flow);
1823                 len = qdisc_pkt_len(skb);
1824                 b->backlogs[q->cur_flow] -= len;
1825                 b->tin_backlog           -= len;
1826                 sch->qstats.backlog      -= len;
1827                 q->buffer_used           -= skb->truesize;
1828                 sch->q.qlen--;
1829
1830                 if (q->overflow_timeout)
1831                         cake_heapify(q, b->overflow_idx[q->cur_flow]);
1832         }
1833         return skb;
1834 }
1835
1836 /* Discard leftover packets from a tin no longer in use. */
1837 static void cake_clear_tin(struct Qdisc *sch, u16 tin)
1838 {
1839         struct cake_sched_data *q = qdisc_priv(sch);
1840         struct sk_buff *skb;
1841
1842         q->cur_tin = tin;
1843         for (q->cur_flow = 0; q->cur_flow < CAKE_QUEUES; q->cur_flow++)
1844                 while (!!(skb = cake_dequeue_one(sch)))
1845                         kfree_skb(skb);
1846 }
1847
1848 static struct sk_buff *cake_dequeue(struct Qdisc *sch)
1849 {
1850         struct cake_sched_data *q = qdisc_priv(sch);
1851         struct cake_tin_data *b = &q->tins[q->cur_tin];
1852         struct cake_host *srchost, *dsthost;
1853         ktime_t now = ktime_get();
1854         struct cake_flow *flow;
1855         struct list_head *head;
1856         bool first_flow = true;
1857         struct sk_buff *skb;
1858         u16 host_load;
1859         u64 delay;
1860         u32 len;
1861
1862 begin:
1863         if (!sch->q.qlen)
1864                 return NULL;
1865
1866         /* global hard shaper */
1867         if (ktime_after(q->time_next_packet, now) &&
1868             ktime_after(q->failsafe_next_packet, now)) {
1869                 u64 next = min(ktime_to_ns(q->time_next_packet),
1870                                ktime_to_ns(q->failsafe_next_packet));
1871
1872                 sch->qstats.overlimits++;
1873                 qdisc_watchdog_schedule_ns(&q->watchdog, next);
1874                 return NULL;
1875         }
1876
1877         /* Choose a class to work on. */
1878         if (!q->rate_ns) {
1879                 /* In unlimited mode, can't rely on shaper timings, just balance
1880                  * with DRR
1881                  */
1882                 bool wrapped = false, empty = true;
1883
1884                 while (b->tin_deficit < 0 ||
1885                        !(b->sparse_flow_count + b->bulk_flow_count)) {
1886                         if (b->tin_deficit <= 0)
1887                                 b->tin_deficit += b->tin_quantum_band;
1888                         if (b->sparse_flow_count + b->bulk_flow_count)
1889                                 empty = false;
1890
1891                         q->cur_tin++;
1892                         b++;
1893                         if (q->cur_tin >= q->tin_cnt) {
1894                                 q->cur_tin = 0;
1895                                 b = q->tins;
1896
1897                                 if (wrapped) {
1898                                         /* It's possible for q->qlen to be
1899                                          * nonzero when we actually have no
1900                                          * packets anywhere.
1901                                          */
1902                                         if (empty)
1903                                                 return NULL;
1904                                 } else {
1905                                         wrapped = true;
1906                                 }
1907                         }
1908                 }
1909         } else {
1910                 /* In shaped mode, choose:
1911                  * - Highest-priority tin with queue and meeting schedule, or
1912                  * - The earliest-scheduled tin with queue.
1913                  */
1914                 ktime_t best_time = KTIME_MAX;
1915                 int tin, best_tin = 0;
1916
1917                 for (tin = 0; tin < q->tin_cnt; tin++) {
1918                         b = q->tins + tin;
1919                         if ((b->sparse_flow_count + b->bulk_flow_count) > 0) {
1920                                 ktime_t time_to_pkt = \
1921                                         ktime_sub(b->time_next_packet, now);
1922
1923                                 if (ktime_to_ns(time_to_pkt) <= 0 ||
1924                                     ktime_compare(time_to_pkt,
1925                                                   best_time) <= 0) {
1926                                         best_time = time_to_pkt;
1927                                         best_tin = tin;
1928                                 }
1929                         }
1930                 }
1931
1932                 q->cur_tin = best_tin;
1933                 b = q->tins + best_tin;
1934
1935                 /* No point in going further if no packets to deliver. */
1936                 if (unlikely(!(b->sparse_flow_count + b->bulk_flow_count)))
1937                         return NULL;
1938         }
1939
1940 retry:
1941         /* service this class */
1942         head = &b->decaying_flows;
1943         if (!first_flow || list_empty(head)) {
1944                 head = &b->new_flows;
1945                 if (list_empty(head)) {
1946                         head = &b->old_flows;
1947                         if (unlikely(list_empty(head))) {
1948                                 head = &b->decaying_flows;
1949                                 if (unlikely(list_empty(head)))
1950                                         goto begin;
1951                         }
1952                 }
1953         }
1954         flow = list_first_entry(head, struct cake_flow, flowchain);
1955         q->cur_flow = flow - b->flows;
1956         first_flow = false;
1957
1958         /* triple isolation (modified DRR++) */
1959         srchost = &b->hosts[flow->srchost];
1960         dsthost = &b->hosts[flow->dsthost];
1961         host_load = 1;
1962
1963         if (cake_dsrc(q->flow_mode))
1964                 host_load = max(host_load, srchost->srchost_refcnt);
1965
1966         if (cake_ddst(q->flow_mode))
1967                 host_load = max(host_load, dsthost->dsthost_refcnt);
1968
1969         WARN_ON(host_load > CAKE_QUEUES);
1970
1971         /* flow isolation (DRR++) */
1972         if (flow->deficit <= 0) {
1973                 /* The shifted prandom_u32() is a way to apply dithering to
1974                  * avoid accumulating roundoff errors
1975                  */
1976                 flow->deficit += (b->flow_quantum * quantum_div[host_load] +
1977                                   (prandom_u32() >> 16)) >> 16;
1978                 list_move_tail(&flow->flowchain, &b->old_flows);
1979
1980                 /* Keep all flows with deficits out of the sparse and decaying
1981                  * rotations.  No non-empty flow can go into the decaying
1982                  * rotation, so they can't get deficits
1983                  */
1984                 if (flow->set == CAKE_SET_SPARSE) {
1985                         if (flow->head) {
1986                                 b->sparse_flow_count--;
1987                                 b->bulk_flow_count++;
1988                                 flow->set = CAKE_SET_BULK;
1989                         } else {
1990                                 /* we've moved it to the bulk rotation for
1991                                  * correct deficit accounting but we still want
1992                                  * to count it as a sparse flow, not a bulk one.
1993                                  */
1994                                 flow->set = CAKE_SET_SPARSE_WAIT;
1995                         }
1996                 }
1997                 goto retry;
1998         }
1999
2000         /* Retrieve a packet via the AQM */
2001         while (1) {
2002                 skb = cake_dequeue_one(sch);
2003                 if (!skb) {
2004                         /* this queue was actually empty */
2005                         if (cobalt_queue_empty(&flow->cvars, &b->cparams, now))
2006                                 b->unresponsive_flow_count--;
2007
2008                         if (flow->cvars.p_drop || flow->cvars.count ||
2009                             ktime_before(now, flow->cvars.drop_next)) {
2010                                 /* keep in the flowchain until the state has
2011                                  * decayed to rest
2012                                  */
2013                                 list_move_tail(&flow->flowchain,
2014                                                &b->decaying_flows);
2015                                 if (flow->set == CAKE_SET_BULK) {
2016                                         b->bulk_flow_count--;
2017                                         b->decaying_flow_count++;
2018                                 } else if (flow->set == CAKE_SET_SPARSE ||
2019                                            flow->set == CAKE_SET_SPARSE_WAIT) {
2020                                         b->sparse_flow_count--;
2021                                         b->decaying_flow_count++;
2022                                 }
2023                                 flow->set = CAKE_SET_DECAYING;
2024                         } else {
2025                                 /* remove empty queue from the flowchain */
2026                                 list_del_init(&flow->flowchain);
2027                                 if (flow->set == CAKE_SET_SPARSE ||
2028                                     flow->set == CAKE_SET_SPARSE_WAIT)
2029                                         b->sparse_flow_count--;
2030                                 else if (flow->set == CAKE_SET_BULK)
2031                                         b->bulk_flow_count--;
2032                                 else
2033                                         b->decaying_flow_count--;
2034
2035                                 flow->set = CAKE_SET_NONE;
2036                                 srchost->srchost_refcnt--;
2037                                 dsthost->dsthost_refcnt--;
2038                         }
2039                         goto begin;
2040                 }
2041
2042                 /* Last packet in queue may be marked, shouldn't be dropped */
2043                 if (!cobalt_should_drop(&flow->cvars, &b->cparams, now, skb,
2044                                         (b->bulk_flow_count *
2045                                          !!(q->rate_flags &
2046                                             CAKE_FLAG_INGRESS))) ||
2047                     !flow->head)
2048                         break;
2049
2050                 /* drop this packet, get another one */
2051                 if (q->rate_flags & CAKE_FLAG_INGRESS) {
2052                         len = cake_advance_shaper(q, b, skb,
2053                                                   now, true);
2054                         flow->deficit -= len;
2055                         b->tin_deficit -= len;
2056                 }
2057                 flow->dropped++;
2058                 b->tin_dropped++;
2059                 qdisc_tree_reduce_backlog(sch, 1, qdisc_pkt_len(skb));
2060                 qdisc_qstats_drop(sch);
2061                 kfree_skb(skb);
2062                 if (q->rate_flags & CAKE_FLAG_INGRESS)
2063                         goto retry;
2064         }
2065
2066         b->tin_ecn_mark += !!flow->cvars.ecn_marked;
2067         qdisc_bstats_update(sch, skb);
2068
2069         /* collect delay stats */
2070         delay = ktime_to_ns(ktime_sub(now, cobalt_get_enqueue_time(skb)));
2071         b->avge_delay = cake_ewma(b->avge_delay, delay, 8);
2072         b->peak_delay = cake_ewma(b->peak_delay, delay,
2073                                   delay > b->peak_delay ? 2 : 8);
2074         b->base_delay = cake_ewma(b->base_delay, delay,
2075                                   delay < b->base_delay ? 2 : 8);
2076
2077         len = cake_advance_shaper(q, b, skb, now, false);
2078         flow->deficit -= len;
2079         b->tin_deficit -= len;
2080
2081         if (ktime_after(q->time_next_packet, now) && sch->q.qlen) {
2082                 u64 next = min(ktime_to_ns(q->time_next_packet),
2083                                ktime_to_ns(q->failsafe_next_packet));
2084
2085                 qdisc_watchdog_schedule_ns(&q->watchdog, next);
2086         } else if (!sch->q.qlen) {
2087                 int i;
2088
2089                 for (i = 0; i < q->tin_cnt; i++) {
2090                         if (q->tins[i].decaying_flow_count) {
2091                                 ktime_t next = \
2092                                         ktime_add_ns(now,
2093                                                      q->tins[i].cparams.target);
2094
2095                                 qdisc_watchdog_schedule_ns(&q->watchdog,
2096                                                            ktime_to_ns(next));
2097                                 break;
2098                         }
2099                 }
2100         }
2101
2102         if (q->overflow_timeout)
2103                 q->overflow_timeout--;
2104
2105         return skb;
2106 }
2107
2108 static void cake_reset(struct Qdisc *sch)
2109 {
2110         u32 c;
2111
2112         for (c = 0; c < CAKE_MAX_TINS; c++)
2113                 cake_clear_tin(sch, c);
2114 }
2115
2116 static const struct nla_policy cake_policy[TCA_CAKE_MAX + 1] = {
2117         [TCA_CAKE_BASE_RATE64]   = { .type = NLA_U64 },
2118         [TCA_CAKE_DIFFSERV_MODE] = { .type = NLA_U32 },
2119         [TCA_CAKE_ATM]           = { .type = NLA_U32 },
2120         [TCA_CAKE_FLOW_MODE]     = { .type = NLA_U32 },
2121         [TCA_CAKE_OVERHEAD]      = { .type = NLA_S32 },
2122         [TCA_CAKE_RTT]           = { .type = NLA_U32 },
2123         [TCA_CAKE_TARGET]        = { .type = NLA_U32 },
2124         [TCA_CAKE_AUTORATE]      = { .type = NLA_U32 },
2125         [TCA_CAKE_MEMORY]        = { .type = NLA_U32 },
2126         [TCA_CAKE_NAT]           = { .type = NLA_U32 },
2127         [TCA_CAKE_RAW]           = { .type = NLA_U32 },
2128         [TCA_CAKE_WASH]          = { .type = NLA_U32 },
2129         [TCA_CAKE_MPU]           = { .type = NLA_U32 },
2130         [TCA_CAKE_INGRESS]       = { .type = NLA_U32 },
2131         [TCA_CAKE_ACK_FILTER]    = { .type = NLA_U32 },
2132 };
2133
2134 static void cake_set_rate(struct cake_tin_data *b, u64 rate, u32 mtu,
2135                           u64 target_ns, u64 rtt_est_ns)
2136 {
2137         /* convert byte-rate into time-per-byte
2138          * so it will always unwedge in reasonable time.
2139          */
2140         static const u64 MIN_RATE = 64;
2141         u32 byte_target = mtu;
2142         u64 byte_target_ns;
2143         u8  rate_shft = 0;
2144         u64 rate_ns = 0;
2145
2146         b->flow_quantum = 1514;
2147         if (rate) {
2148                 b->flow_quantum = max(min(rate >> 12, 1514ULL), 300ULL);
2149                 rate_shft = 34;
2150                 rate_ns = ((u64)NSEC_PER_SEC) << rate_shft;
2151                 rate_ns = div64_u64(rate_ns, max(MIN_RATE, rate));
2152                 while (!!(rate_ns >> 34)) {
2153                         rate_ns >>= 1;
2154                         rate_shft--;
2155                 }
2156         } /* else unlimited, ie. zero delay */
2157
2158         b->tin_rate_bps  = rate;
2159         b->tin_rate_ns   = rate_ns;
2160         b->tin_rate_shft = rate_shft;
2161
2162         byte_target_ns = (byte_target * rate_ns) >> rate_shft;
2163
2164         b->cparams.target = max((byte_target_ns * 3) / 2, target_ns);
2165         b->cparams.interval = max(rtt_est_ns +
2166                                      b->cparams.target - target_ns,
2167                                      b->cparams.target * 2);
2168         b->cparams.mtu_time = byte_target_ns;
2169         b->cparams.p_inc = 1 << 24; /* 1/256 */
2170         b->cparams.p_dec = 1 << 20; /* 1/4096 */
2171 }
2172
2173 static int cake_config_besteffort(struct Qdisc *sch)
2174 {
2175         struct cake_sched_data *q = qdisc_priv(sch);
2176         struct cake_tin_data *b = &q->tins[0];
2177         u32 mtu = psched_mtu(qdisc_dev(sch));
2178         u64 rate = q->rate_bps;
2179
2180         q->tin_cnt = 1;
2181
2182         q->tin_index = besteffort;
2183         q->tin_order = normal_order;
2184
2185         cake_set_rate(b, rate, mtu,
2186                       us_to_ns(q->target), us_to_ns(q->interval));
2187         b->tin_quantum_band = 65535;
2188         b->tin_quantum_prio = 65535;
2189
2190         return 0;
2191 }
2192
2193 static int cake_config_precedence(struct Qdisc *sch)
2194 {
2195         /* convert high-level (user visible) parameters into internal format */
2196         struct cake_sched_data *q = qdisc_priv(sch);
2197         u32 mtu = psched_mtu(qdisc_dev(sch));
2198         u64 rate = q->rate_bps;
2199         u32 quantum1 = 256;
2200         u32 quantum2 = 256;
2201         u32 i;
2202
2203         q->tin_cnt = 8;
2204         q->tin_index = precedence;
2205         q->tin_order = normal_order;
2206
2207         for (i = 0; i < q->tin_cnt; i++) {
2208                 struct cake_tin_data *b = &q->tins[i];
2209
2210                 cake_set_rate(b, rate, mtu, us_to_ns(q->target),
2211                               us_to_ns(q->interval));
2212
2213                 b->tin_quantum_prio = max_t(u16, 1U, quantum1);
2214                 b->tin_quantum_band = max_t(u16, 1U, quantum2);
2215
2216                 /* calculate next class's parameters */
2217                 rate  *= 7;
2218                 rate >>= 3;
2219
2220                 quantum1  *= 3;
2221                 quantum1 >>= 1;
2222
2223                 quantum2  *= 7;
2224                 quantum2 >>= 3;
2225         }
2226
2227         return 0;
2228 }
2229
2230 /*      List of known Diffserv codepoints:
2231  *
2232  *      Least Effort (CS1)
2233  *      Best Effort (CS0)
2234  *      Max Reliability & LLT "Lo" (TOS1)
2235  *      Max Throughput (TOS2)
2236  *      Min Delay (TOS4)
2237  *      LLT "La" (TOS5)
2238  *      Assured Forwarding 1 (AF1x) - x3
2239  *      Assured Forwarding 2 (AF2x) - x3
2240  *      Assured Forwarding 3 (AF3x) - x3
2241  *      Assured Forwarding 4 (AF4x) - x3
2242  *      Precedence Class 2 (CS2)
2243  *      Precedence Class 3 (CS3)
2244  *      Precedence Class 4 (CS4)
2245  *      Precedence Class 5 (CS5)
2246  *      Precedence Class 6 (CS6)
2247  *      Precedence Class 7 (CS7)
2248  *      Voice Admit (VA)
2249  *      Expedited Forwarding (EF)
2250
2251  *      Total 25 codepoints.
2252  */
2253
2254 /*      List of traffic classes in RFC 4594:
2255  *              (roughly descending order of contended priority)
2256  *              (roughly ascending order of uncontended throughput)
2257  *
2258  *      Network Control (CS6,CS7)      - routing traffic
2259  *      Telephony (EF,VA)         - aka. VoIP streams
2260  *      Signalling (CS5)               - VoIP setup
2261  *      Multimedia Conferencing (AF4x) - aka. video calls
2262  *      Realtime Interactive (CS4)     - eg. games
2263  *      Multimedia Streaming (AF3x)    - eg. YouTube, NetFlix, Twitch
2264  *      Broadcast Video (CS3)
2265  *      Low Latency Data (AF2x,TOS4)      - eg. database
2266  *      Ops, Admin, Management (CS2,TOS1) - eg. ssh
2267  *      Standard Service (CS0 & unrecognised codepoints)
2268  *      High Throughput Data (AF1x,TOS2)  - eg. web traffic
2269  *      Low Priority Data (CS1)           - eg. BitTorrent
2270
2271  *      Total 12 traffic classes.
2272  */
2273
2274 static int cake_config_diffserv8(struct Qdisc *sch)
2275 {
2276 /*      Pruned list of traffic classes for typical applications:
2277  *
2278  *              Network Control          (CS6, CS7)
2279  *              Minimum Latency          (EF, VA, CS5, CS4)
2280  *              Interactive Shell        (CS2, TOS1)
2281  *              Low Latency Transactions (AF2x, TOS4)
2282  *              Video Streaming          (AF4x, AF3x, CS3)
2283  *              Bog Standard             (CS0 etc.)
2284  *              High Throughput          (AF1x, TOS2)
2285  *              Background Traffic       (CS1)
2286  *
2287  *              Total 8 traffic classes.
2288  */
2289
2290         struct cake_sched_data *q = qdisc_priv(sch);
2291         u32 mtu = psched_mtu(qdisc_dev(sch));
2292         u64 rate = q->rate_bps;
2293         u32 quantum1 = 256;
2294         u32 quantum2 = 256;
2295         u32 i;
2296
2297         q->tin_cnt = 8;
2298
2299         /* codepoint to class mapping */
2300         q->tin_index = diffserv8;
2301         q->tin_order = normal_order;
2302
2303         /* class characteristics */
2304         for (i = 0; i < q->tin_cnt; i++) {
2305                 struct cake_tin_data *b = &q->tins[i];
2306
2307                 cake_set_rate(b, rate, mtu, us_to_ns(q->target),
2308                               us_to_ns(q->interval));
2309
2310                 b->tin_quantum_prio = max_t(u16, 1U, quantum1);
2311                 b->tin_quantum_band = max_t(u16, 1U, quantum2);
2312
2313                 /* calculate next class's parameters */
2314                 rate  *= 7;
2315                 rate >>= 3;
2316
2317                 quantum1  *= 3;
2318                 quantum1 >>= 1;
2319
2320                 quantum2  *= 7;
2321                 quantum2 >>= 3;
2322         }
2323
2324         return 0;
2325 }
2326
2327 static int cake_config_diffserv4(struct Qdisc *sch)
2328 {
2329 /*  Further pruned list of traffic classes for four-class system:
2330  *
2331  *          Latency Sensitive  (CS7, CS6, EF, VA, CS5, CS4)
2332  *          Streaming Media    (AF4x, AF3x, CS3, AF2x, TOS4, CS2, TOS1)
2333  *          Best Effort        (CS0, AF1x, TOS2, and those not specified)
2334  *          Background Traffic (CS1)
2335  *
2336  *              Total 4 traffic classes.
2337  */
2338
2339         struct cake_sched_data *q = qdisc_priv(sch);
2340         u32 mtu = psched_mtu(qdisc_dev(sch));
2341         u64 rate = q->rate_bps;
2342         u32 quantum = 1024;
2343
2344         q->tin_cnt = 4;
2345
2346         /* codepoint to class mapping */
2347         q->tin_index = diffserv4;
2348         q->tin_order = bulk_order;
2349
2350         /* class characteristics */
2351         cake_set_rate(&q->tins[0], rate, mtu,
2352                       us_to_ns(q->target), us_to_ns(q->interval));
2353         cake_set_rate(&q->tins[1], rate >> 4, mtu,
2354                       us_to_ns(q->target), us_to_ns(q->interval));
2355         cake_set_rate(&q->tins[2], rate >> 1, mtu,
2356                       us_to_ns(q->target), us_to_ns(q->interval));
2357         cake_set_rate(&q->tins[3], rate >> 2, mtu,
2358                       us_to_ns(q->target), us_to_ns(q->interval));
2359
2360         /* priority weights */
2361         q->tins[0].tin_quantum_prio = quantum;
2362         q->tins[1].tin_quantum_prio = quantum >> 4;
2363         q->tins[2].tin_quantum_prio = quantum << 2;
2364         q->tins[3].tin_quantum_prio = quantum << 4;
2365
2366         /* bandwidth-sharing weights */
2367         q->tins[0].tin_quantum_band = quantum;
2368         q->tins[1].tin_quantum_band = quantum >> 4;
2369         q->tins[2].tin_quantum_band = quantum >> 1;
2370         q->tins[3].tin_quantum_band = quantum >> 2;
2371
2372         return 0;
2373 }
2374
2375 static int cake_config_diffserv3(struct Qdisc *sch)
2376 {
2377 /*  Simplified Diffserv structure with 3 tins.
2378  *              Low Priority            (CS1)
2379  *              Best Effort
2380  *              Latency Sensitive       (TOS4, VA, EF, CS6, CS7)
2381  */
2382         struct cake_sched_data *q = qdisc_priv(sch);
2383         u32 mtu = psched_mtu(qdisc_dev(sch));
2384         u64 rate = q->rate_bps;
2385         u32 quantum = 1024;
2386
2387         q->tin_cnt = 3;
2388
2389         /* codepoint to class mapping */
2390         q->tin_index = diffserv3;
2391         q->tin_order = bulk_order;
2392
2393         /* class characteristics */
2394         cake_set_rate(&q->tins[0], rate, mtu,
2395                       us_to_ns(q->target), us_to_ns(q->interval));
2396         cake_set_rate(&q->tins[1], rate >> 4, mtu,
2397                       us_to_ns(q->target), us_to_ns(q->interval));
2398         cake_set_rate(&q->tins[2], rate >> 2, mtu,
2399                       us_to_ns(q->target), us_to_ns(q->interval));
2400
2401         /* priority weights */
2402         q->tins[0].tin_quantum_prio = quantum;
2403         q->tins[1].tin_quantum_prio = quantum >> 4;
2404         q->tins[2].tin_quantum_prio = quantum << 4;
2405
2406         /* bandwidth-sharing weights */
2407         q->tins[0].tin_quantum_band = quantum;
2408         q->tins[1].tin_quantum_band = quantum >> 4;
2409         q->tins[2].tin_quantum_band = quantum >> 2;
2410
2411         return 0;
2412 }
2413
2414 static void cake_reconfigure(struct Qdisc *sch)
2415 {
2416         struct cake_sched_data *q = qdisc_priv(sch);
2417         int c, ft;
2418
2419         switch (q->tin_mode) {
2420         case CAKE_DIFFSERV_BESTEFFORT:
2421                 ft = cake_config_besteffort(sch);
2422                 break;
2423
2424         case CAKE_DIFFSERV_PRECEDENCE:
2425                 ft = cake_config_precedence(sch);
2426                 break;
2427
2428         case CAKE_DIFFSERV_DIFFSERV8:
2429                 ft = cake_config_diffserv8(sch);
2430                 break;
2431
2432         case CAKE_DIFFSERV_DIFFSERV4:
2433                 ft = cake_config_diffserv4(sch);
2434                 break;
2435
2436         case CAKE_DIFFSERV_DIFFSERV3:
2437         default:
2438                 ft = cake_config_diffserv3(sch);
2439                 break;
2440         }
2441
2442         for (c = q->tin_cnt; c < CAKE_MAX_TINS; c++) {
2443                 cake_clear_tin(sch, c);
2444                 q->tins[c].cparams.mtu_time = q->tins[ft].cparams.mtu_time;
2445         }
2446
2447         q->rate_ns   = q->tins[ft].tin_rate_ns;
2448         q->rate_shft = q->tins[ft].tin_rate_shft;
2449
2450         if (q->buffer_config_limit) {
2451                 q->buffer_limit = q->buffer_config_limit;
2452         } else if (q->rate_bps) {
2453                 u64 t = q->rate_bps * q->interval;
2454
2455                 do_div(t, USEC_PER_SEC / 4);
2456                 q->buffer_limit = max_t(u32, t, 4U << 20);
2457         } else {
2458                 q->buffer_limit = ~0;
2459         }
2460
2461         sch->flags &= ~TCQ_F_CAN_BYPASS;
2462
2463         q->buffer_limit = min(q->buffer_limit,
2464                               max(sch->limit * psched_mtu(qdisc_dev(sch)),
2465                                   q->buffer_config_limit));
2466 }
2467
2468 static int cake_change(struct Qdisc *sch, struct nlattr *opt,
2469                        struct netlink_ext_ack *extack)
2470 {
2471         struct cake_sched_data *q = qdisc_priv(sch);
2472         struct nlattr *tb[TCA_CAKE_MAX + 1];
2473         int err;
2474
2475         if (!opt)
2476                 return -EINVAL;
2477
2478         err = nla_parse_nested(tb, TCA_CAKE_MAX, opt, cake_policy, extack);
2479         if (err < 0)
2480                 return err;
2481
2482         if (tb[TCA_CAKE_NAT]) {
2483 #if IS_ENABLED(CONFIG_NF_CONNTRACK)
2484                 q->flow_mode &= ~CAKE_FLOW_NAT_FLAG;
2485                 q->flow_mode |= CAKE_FLOW_NAT_FLAG *
2486                         !!nla_get_u32(tb[TCA_CAKE_NAT]);
2487 #else
2488                 NL_SET_ERR_MSG_ATTR(extack, tb[TCA_CAKE_NAT],
2489                                     "No conntrack support in kernel");
2490                 return -EOPNOTSUPP;
2491 #endif
2492         }
2493
2494         if (tb[TCA_CAKE_BASE_RATE64])
2495                 q->rate_bps = nla_get_u64(tb[TCA_CAKE_BASE_RATE64]);
2496
2497         if (tb[TCA_CAKE_DIFFSERV_MODE])
2498                 q->tin_mode = nla_get_u32(tb[TCA_CAKE_DIFFSERV_MODE]);
2499
2500         if (tb[TCA_CAKE_WASH]) {
2501                 if (!!nla_get_u32(tb[TCA_CAKE_WASH]))
2502                         q->rate_flags |= CAKE_FLAG_WASH;
2503                 else
2504                         q->rate_flags &= ~CAKE_FLAG_WASH;
2505         }
2506
2507         if (tb[TCA_CAKE_FLOW_MODE])
2508                 q->flow_mode = ((q->flow_mode & CAKE_FLOW_NAT_FLAG) |
2509                                 (nla_get_u32(tb[TCA_CAKE_FLOW_MODE]) &
2510                                         CAKE_FLOW_MASK));
2511
2512         if (tb[TCA_CAKE_ATM])
2513                 q->atm_mode = nla_get_u32(tb[TCA_CAKE_ATM]);
2514
2515         if (tb[TCA_CAKE_OVERHEAD]) {
2516                 q->rate_overhead = nla_get_s32(tb[TCA_CAKE_OVERHEAD]);
2517                 q->rate_flags |= CAKE_FLAG_OVERHEAD;
2518
2519                 q->max_netlen = 0;
2520                 q->max_adjlen = 0;
2521                 q->min_netlen = ~0;
2522                 q->min_adjlen = ~0;
2523         }
2524
2525         if (tb[TCA_CAKE_RAW]) {
2526                 q->rate_flags &= ~CAKE_FLAG_OVERHEAD;
2527
2528                 q->max_netlen = 0;
2529                 q->max_adjlen = 0;
2530                 q->min_netlen = ~0;
2531                 q->min_adjlen = ~0;
2532         }
2533
2534         if (tb[TCA_CAKE_MPU])
2535                 q->rate_mpu = nla_get_u32(tb[TCA_CAKE_MPU]);
2536
2537         if (tb[TCA_CAKE_RTT]) {
2538                 q->interval = nla_get_u32(tb[TCA_CAKE_RTT]);
2539
2540                 if (!q->interval)
2541                         q->interval = 1;
2542         }
2543
2544         if (tb[TCA_CAKE_TARGET]) {
2545                 q->target = nla_get_u32(tb[TCA_CAKE_TARGET]);
2546
2547                 if (!q->target)
2548                         q->target = 1;
2549         }
2550
2551         if (tb[TCA_CAKE_AUTORATE]) {
2552                 if (!!nla_get_u32(tb[TCA_CAKE_AUTORATE]))
2553                         q->rate_flags |= CAKE_FLAG_AUTORATE_INGRESS;
2554                 else
2555                         q->rate_flags &= ~CAKE_FLAG_AUTORATE_INGRESS;
2556         }
2557
2558         if (tb[TCA_CAKE_INGRESS]) {
2559                 if (!!nla_get_u32(tb[TCA_CAKE_INGRESS]))
2560                         q->rate_flags |= CAKE_FLAG_INGRESS;
2561                 else
2562                         q->rate_flags &= ~CAKE_FLAG_INGRESS;
2563         }
2564
2565         if (tb[TCA_CAKE_ACK_FILTER])
2566                 q->ack_filter = nla_get_u32(tb[TCA_CAKE_ACK_FILTER]);
2567
2568         if (tb[TCA_CAKE_MEMORY])
2569                 q->buffer_config_limit = nla_get_u32(tb[TCA_CAKE_MEMORY]);
2570
2571         if (tb[TCA_CAKE_SPLIT_GSO]) {
2572                 if (!!nla_get_u32(tb[TCA_CAKE_SPLIT_GSO]))
2573                         q->rate_flags |= CAKE_FLAG_SPLIT_GSO;
2574                 else
2575                         q->rate_flags &= ~CAKE_FLAG_SPLIT_GSO;
2576         }
2577
2578         if (q->tins) {
2579                 sch_tree_lock(sch);
2580                 cake_reconfigure(sch);
2581                 sch_tree_unlock(sch);
2582         }
2583
2584         return 0;
2585 }
2586
2587 static void cake_destroy(struct Qdisc *sch)
2588 {
2589         struct cake_sched_data *q = qdisc_priv(sch);
2590
2591         qdisc_watchdog_cancel(&q->watchdog);
2592         tcf_block_put(q->block);
2593         kvfree(q->tins);
2594 }
2595
2596 static int cake_init(struct Qdisc *sch, struct nlattr *opt,
2597                      struct netlink_ext_ack *extack)
2598 {
2599         struct cake_sched_data *q = qdisc_priv(sch);
2600         int i, j, err;
2601
2602         sch->limit = 10240;
2603         q->tin_mode = CAKE_DIFFSERV_DIFFSERV3;
2604         q->flow_mode  = CAKE_FLOW_TRIPLE;
2605
2606         q->rate_bps = 0; /* unlimited by default */
2607
2608         q->interval = 100000; /* 100ms default */
2609         q->target   =   5000; /* 5ms: codel RFC argues
2610                                * for 5 to 10% of interval
2611                                */
2612         q->rate_flags |= CAKE_FLAG_SPLIT_GSO;
2613         q->cur_tin = 0;
2614         q->cur_flow  = 0;
2615
2616         qdisc_watchdog_init(&q->watchdog, sch);
2617
2618         if (opt) {
2619                 int err = cake_change(sch, opt, extack);
2620
2621                 if (err)
2622                         return err;
2623         }
2624
2625         err = tcf_block_get(&q->block, &q->filter_list, sch, extack);
2626         if (err)
2627                 return err;
2628
2629         quantum_div[0] = ~0;
2630         for (i = 1; i <= CAKE_QUEUES; i++)
2631                 quantum_div[i] = 65535 / i;
2632
2633         q->tins = kvzalloc(CAKE_MAX_TINS * sizeof(struct cake_tin_data),
2634                            GFP_KERNEL);
2635         if (!q->tins)
2636                 goto nomem;
2637
2638         for (i = 0; i < CAKE_MAX_TINS; i++) {
2639                 struct cake_tin_data *b = q->tins + i;
2640
2641                 INIT_LIST_HEAD(&b->new_flows);
2642                 INIT_LIST_HEAD(&b->old_flows);
2643                 INIT_LIST_HEAD(&b->decaying_flows);
2644                 b->sparse_flow_count = 0;
2645                 b->bulk_flow_count = 0;
2646                 b->decaying_flow_count = 0;
2647
2648                 for (j = 0; j < CAKE_QUEUES; j++) {
2649                         struct cake_flow *flow = b->flows + j;
2650                         u32 k = j * CAKE_MAX_TINS + i;
2651
2652                         INIT_LIST_HEAD(&flow->flowchain);
2653                         cobalt_vars_init(&flow->cvars);
2654
2655                         q->overflow_heap[k].t = i;
2656                         q->overflow_heap[k].b = j;
2657                         b->overflow_idx[j] = k;
2658                 }
2659         }
2660
2661         cake_reconfigure(sch);
2662         q->avg_peak_bandwidth = q->rate_bps;
2663         q->min_netlen = ~0;
2664         q->min_adjlen = ~0;
2665         return 0;
2666
2667 nomem:
2668         cake_destroy(sch);
2669         return -ENOMEM;
2670 }
2671
2672 static int cake_dump(struct Qdisc *sch, struct sk_buff *skb)
2673 {
2674         struct cake_sched_data *q = qdisc_priv(sch);
2675         struct nlattr *opts;
2676
2677         opts = nla_nest_start(skb, TCA_OPTIONS);
2678         if (!opts)
2679                 goto nla_put_failure;
2680
2681         if (nla_put_u64_64bit(skb, TCA_CAKE_BASE_RATE64, q->rate_bps,
2682                               TCA_CAKE_PAD))
2683                 goto nla_put_failure;
2684
2685         if (nla_put_u32(skb, TCA_CAKE_FLOW_MODE,
2686                         q->flow_mode & CAKE_FLOW_MASK))
2687                 goto nla_put_failure;
2688
2689         if (nla_put_u32(skb, TCA_CAKE_RTT, q->interval))
2690                 goto nla_put_failure;
2691
2692         if (nla_put_u32(skb, TCA_CAKE_TARGET, q->target))
2693                 goto nla_put_failure;
2694
2695         if (nla_put_u32(skb, TCA_CAKE_MEMORY, q->buffer_config_limit))
2696                 goto nla_put_failure;
2697
2698         if (nla_put_u32(skb, TCA_CAKE_AUTORATE,
2699                         !!(q->rate_flags & CAKE_FLAG_AUTORATE_INGRESS)))
2700                 goto nla_put_failure;
2701
2702         if (nla_put_u32(skb, TCA_CAKE_INGRESS,
2703                         !!(q->rate_flags & CAKE_FLAG_INGRESS)))
2704                 goto nla_put_failure;
2705
2706         if (nla_put_u32(skb, TCA_CAKE_ACK_FILTER, q->ack_filter))
2707                 goto nla_put_failure;
2708
2709         if (nla_put_u32(skb, TCA_CAKE_NAT,
2710                         !!(q->flow_mode & CAKE_FLOW_NAT_FLAG)))
2711                 goto nla_put_failure;
2712
2713         if (nla_put_u32(skb, TCA_CAKE_DIFFSERV_MODE, q->tin_mode))
2714                 goto nla_put_failure;
2715
2716         if (nla_put_u32(skb, TCA_CAKE_WASH,
2717                         !!(q->rate_flags & CAKE_FLAG_WASH)))
2718                 goto nla_put_failure;
2719
2720         if (nla_put_u32(skb, TCA_CAKE_OVERHEAD, q->rate_overhead))
2721                 goto nla_put_failure;
2722
2723         if (!(q->rate_flags & CAKE_FLAG_OVERHEAD))
2724                 if (nla_put_u32(skb, TCA_CAKE_RAW, 0))
2725                         goto nla_put_failure;
2726
2727         if (nla_put_u32(skb, TCA_CAKE_ATM, q->atm_mode))
2728                 goto nla_put_failure;
2729
2730         if (nla_put_u32(skb, TCA_CAKE_MPU, q->rate_mpu))
2731                 goto nla_put_failure;
2732
2733         if (nla_put_u32(skb, TCA_CAKE_SPLIT_GSO,
2734                         !!(q->rate_flags & CAKE_FLAG_SPLIT_GSO)))
2735                 goto nla_put_failure;
2736
2737         return nla_nest_end(skb, opts);
2738
2739 nla_put_failure:
2740         return -1;
2741 }
2742
2743 static int cake_dump_stats(struct Qdisc *sch, struct gnet_dump *d)
2744 {
2745         struct nlattr *stats = nla_nest_start(d->skb, TCA_STATS_APP);
2746         struct cake_sched_data *q = qdisc_priv(sch);
2747         struct nlattr *tstats, *ts;
2748         int i;
2749
2750         if (!stats)
2751                 return -1;
2752
2753 #define PUT_STAT_U32(attr, data) do {                                  \
2754                 if (nla_put_u32(d->skb, TCA_CAKE_STATS_ ## attr, data)) \
2755                         goto nla_put_failure;                          \
2756         } while (0)
2757 #define PUT_STAT_U64(attr, data) do {                                  \
2758                 if (nla_put_u64_64bit(d->skb, TCA_CAKE_STATS_ ## attr, \
2759                                         data, TCA_CAKE_STATS_PAD)) \
2760                         goto nla_put_failure;                          \
2761         } while (0)
2762
2763         PUT_STAT_U64(CAPACITY_ESTIMATE64, q->avg_peak_bandwidth);
2764         PUT_STAT_U32(MEMORY_LIMIT, q->buffer_limit);
2765         PUT_STAT_U32(MEMORY_USED, q->buffer_max_used);
2766         PUT_STAT_U32(AVG_NETOFF, ((q->avg_netoff + 0x8000) >> 16));
2767         PUT_STAT_U32(MAX_NETLEN, q->max_netlen);
2768         PUT_STAT_U32(MAX_ADJLEN, q->max_adjlen);
2769         PUT_STAT_U32(MIN_NETLEN, q->min_netlen);
2770         PUT_STAT_U32(MIN_ADJLEN, q->min_adjlen);
2771
2772 #undef PUT_STAT_U32
2773 #undef PUT_STAT_U64
2774
2775         tstats = nla_nest_start(d->skb, TCA_CAKE_STATS_TIN_STATS);
2776         if (!tstats)
2777                 goto nla_put_failure;
2778
2779 #define PUT_TSTAT_U32(attr, data) do {                                  \
2780                 if (nla_put_u32(d->skb, TCA_CAKE_TIN_STATS_ ## attr, data)) \
2781                         goto nla_put_failure;                           \
2782         } while (0)
2783 #define PUT_TSTAT_U64(attr, data) do {                                  \
2784                 if (nla_put_u64_64bit(d->skb, TCA_CAKE_TIN_STATS_ ## attr, \
2785                                         data, TCA_CAKE_TIN_STATS_PAD))  \
2786                         goto nla_put_failure;                           \
2787         } while (0)
2788
2789         for (i = 0; i < q->tin_cnt; i++) {
2790                 struct cake_tin_data *b = &q->tins[q->tin_order[i]];
2791
2792                 ts = nla_nest_start(d->skb, i + 1);
2793                 if (!ts)
2794                         goto nla_put_failure;
2795
2796                 PUT_TSTAT_U64(THRESHOLD_RATE64, b->tin_rate_bps);
2797                 PUT_TSTAT_U64(SENT_BYTES64, b->bytes);
2798                 PUT_TSTAT_U32(BACKLOG_BYTES, b->tin_backlog);
2799
2800                 PUT_TSTAT_U32(TARGET_US,
2801                               ktime_to_us(ns_to_ktime(b->cparams.target)));
2802                 PUT_TSTAT_U32(INTERVAL_US,
2803                               ktime_to_us(ns_to_ktime(b->cparams.interval)));
2804
2805                 PUT_TSTAT_U32(SENT_PACKETS, b->packets);
2806                 PUT_TSTAT_U32(DROPPED_PACKETS, b->tin_dropped);
2807                 PUT_TSTAT_U32(ECN_MARKED_PACKETS, b->tin_ecn_mark);
2808                 PUT_TSTAT_U32(ACKS_DROPPED_PACKETS, b->ack_drops);
2809
2810                 PUT_TSTAT_U32(PEAK_DELAY_US,
2811                               ktime_to_us(ns_to_ktime(b->peak_delay)));
2812                 PUT_TSTAT_U32(AVG_DELAY_US,
2813                               ktime_to_us(ns_to_ktime(b->avge_delay)));
2814                 PUT_TSTAT_U32(BASE_DELAY_US,
2815                               ktime_to_us(ns_to_ktime(b->base_delay)));
2816
2817                 PUT_TSTAT_U32(WAY_INDIRECT_HITS, b->way_hits);
2818                 PUT_TSTAT_U32(WAY_MISSES, b->way_misses);
2819                 PUT_TSTAT_U32(WAY_COLLISIONS, b->way_collisions);
2820
2821                 PUT_TSTAT_U32(SPARSE_FLOWS, b->sparse_flow_count +
2822                                             b->decaying_flow_count);
2823                 PUT_TSTAT_U32(BULK_FLOWS, b->bulk_flow_count);
2824                 PUT_TSTAT_U32(UNRESPONSIVE_FLOWS, b->unresponsive_flow_count);
2825                 PUT_TSTAT_U32(MAX_SKBLEN, b->max_skblen);
2826
2827                 PUT_TSTAT_U32(FLOW_QUANTUM, b->flow_quantum);
2828                 nla_nest_end(d->skb, ts);
2829         }
2830
2831 #undef PUT_TSTAT_U32
2832 #undef PUT_TSTAT_U64
2833
2834         nla_nest_end(d->skb, tstats);
2835         return nla_nest_end(d->skb, stats);
2836
2837 nla_put_failure:
2838         nla_nest_cancel(d->skb, stats);
2839         return -1;
2840 }
2841
2842 static struct Qdisc *cake_leaf(struct Qdisc *sch, unsigned long arg)
2843 {
2844         return NULL;
2845 }
2846
2847 static unsigned long cake_find(struct Qdisc *sch, u32 classid)
2848 {
2849         return 0;
2850 }
2851
2852 static unsigned long cake_bind(struct Qdisc *sch, unsigned long parent,
2853                                u32 classid)
2854 {
2855         return 0;
2856 }
2857
2858 static void cake_unbind(struct Qdisc *q, unsigned long cl)
2859 {
2860 }
2861
2862 static struct tcf_block *cake_tcf_block(struct Qdisc *sch, unsigned long cl,
2863                                         struct netlink_ext_ack *extack)
2864 {
2865         struct cake_sched_data *q = qdisc_priv(sch);
2866
2867         if (cl)
2868                 return NULL;
2869         return q->block;
2870 }
2871
2872 static int cake_dump_class(struct Qdisc *sch, unsigned long cl,
2873                            struct sk_buff *skb, struct tcmsg *tcm)
2874 {
2875         tcm->tcm_handle |= TC_H_MIN(cl);
2876         return 0;
2877 }
2878
2879 static int cake_dump_class_stats(struct Qdisc *sch, unsigned long cl,
2880                                  struct gnet_dump *d)
2881 {
2882         struct cake_sched_data *q = qdisc_priv(sch);
2883         const struct cake_flow *flow = NULL;
2884         struct gnet_stats_queue qs = { 0 };
2885         struct nlattr *stats;
2886         u32 idx = cl - 1;
2887
2888         if (idx < CAKE_QUEUES * q->tin_cnt) {
2889                 const struct cake_tin_data *b = \
2890                         &q->tins[q->tin_order[idx / CAKE_QUEUES]];
2891                 const struct sk_buff *skb;
2892
2893                 flow = &b->flows[idx % CAKE_QUEUES];
2894
2895                 if (flow->head) {
2896                         sch_tree_lock(sch);
2897                         skb = flow->head;
2898                         while (skb) {
2899                                 qs.qlen++;
2900                                 skb = skb->next;
2901                         }
2902                         sch_tree_unlock(sch);
2903                 }
2904                 qs.backlog = b->backlogs[idx % CAKE_QUEUES];
2905                 qs.drops = flow->dropped;
2906         }
2907         if (gnet_stats_copy_queue(d, NULL, &qs, qs.qlen) < 0)
2908                 return -1;
2909         if (flow) {
2910                 ktime_t now = ktime_get();
2911
2912                 stats = nla_nest_start(d->skb, TCA_STATS_APP);
2913                 if (!stats)
2914                         return -1;
2915
2916 #define PUT_STAT_U32(attr, data) do {                                  \
2917                 if (nla_put_u32(d->skb, TCA_CAKE_STATS_ ## attr, data)) \
2918                         goto nla_put_failure;                          \
2919         } while (0)
2920 #define PUT_STAT_S32(attr, data) do {                                  \
2921                 if (nla_put_s32(d->skb, TCA_CAKE_STATS_ ## attr, data)) \
2922                         goto nla_put_failure;                          \
2923         } while (0)
2924
2925                 PUT_STAT_S32(DEFICIT, flow->deficit);
2926                 PUT_STAT_U32(DROPPING, flow->cvars.dropping);
2927                 PUT_STAT_U32(COBALT_COUNT, flow->cvars.count);
2928                 PUT_STAT_U32(P_DROP, flow->cvars.p_drop);
2929                 if (flow->cvars.p_drop) {
2930                         PUT_STAT_S32(BLUE_TIMER_US,
2931                                      ktime_to_us(
2932                                              ktime_sub(now,
2933                                                      flow->cvars.blue_timer)));
2934                 }
2935                 if (flow->cvars.dropping) {
2936                         PUT_STAT_S32(DROP_NEXT_US,
2937                                      ktime_to_us(
2938                                              ktime_sub(now,
2939                                                        flow->cvars.drop_next)));
2940                 }
2941
2942                 if (nla_nest_end(d->skb, stats) < 0)
2943                         return -1;
2944         }
2945
2946         return 0;
2947
2948 nla_put_failure:
2949         nla_nest_cancel(d->skb, stats);
2950         return -1;
2951 }
2952
2953 static void cake_walk(struct Qdisc *sch, struct qdisc_walker *arg)
2954 {
2955         struct cake_sched_data *q = qdisc_priv(sch);
2956         unsigned int i, j;
2957
2958         if (arg->stop)
2959                 return;
2960
2961         for (i = 0; i < q->tin_cnt; i++) {
2962                 struct cake_tin_data *b = &q->tins[q->tin_order[i]];
2963
2964                 for (j = 0; j < CAKE_QUEUES; j++) {
2965                         if (list_empty(&b->flows[j].flowchain) ||
2966                             arg->count < arg->skip) {
2967                                 arg->count++;
2968                                 continue;
2969                         }
2970                         if (arg->fn(sch, i * CAKE_QUEUES + j + 1, arg) < 0) {
2971                                 arg->stop = 1;
2972                                 break;
2973                         }
2974                         arg->count++;
2975                 }
2976         }
2977 }
2978
2979 static const struct Qdisc_class_ops cake_class_ops = {
2980         .leaf           =       cake_leaf,
2981         .find           =       cake_find,
2982         .tcf_block      =       cake_tcf_block,
2983         .bind_tcf       =       cake_bind,
2984         .unbind_tcf     =       cake_unbind,
2985         .dump           =       cake_dump_class,
2986         .dump_stats     =       cake_dump_class_stats,
2987         .walk           =       cake_walk,
2988 };
2989
2990 static struct Qdisc_ops cake_qdisc_ops __read_mostly = {
2991         .cl_ops         =       &cake_class_ops,
2992         .id             =       "cake",
2993         .priv_size      =       sizeof(struct cake_sched_data),
2994         .enqueue        =       cake_enqueue,
2995         .dequeue        =       cake_dequeue,
2996         .peek           =       qdisc_peek_dequeued,
2997         .init           =       cake_init,
2998         .reset          =       cake_reset,
2999         .destroy        =       cake_destroy,
3000         .change         =       cake_change,
3001         .dump           =       cake_dump,
3002         .dump_stats     =       cake_dump_stats,
3003         .owner          =       THIS_MODULE,
3004 };
3005
3006 static int __init cake_module_init(void)
3007 {
3008         return register_qdisc(&cake_qdisc_ops);
3009 }
3010
3011 static void __exit cake_module_exit(void)
3012 {
3013         unregister_qdisc(&cake_qdisc_ops);
3014 }
3015
3016 module_init(cake_module_init)
3017 module_exit(cake_module_exit)
3018 MODULE_AUTHOR("Jonathan Morton");
3019 MODULE_LICENSE("Dual BSD/GPL");
3020 MODULE_DESCRIPTION("The CAKE shaper.");