Lines Matching refs:sch
82 static unsigned int fq_codel_classify(struct sk_buff *skb, struct Qdisc *sch, in fq_codel_classify() argument
85 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_classify()
90 if (TC_H_MAJ(skb->priority) == sch->handle && in fq_codel_classify()
143 static unsigned int fq_codel_drop(struct Qdisc *sch, unsigned int max_packets, in fq_codel_drop() argument
146 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_drop()
183 sch->qstats.drops += i; in fq_codel_drop()
184 sch->qstats.backlog -= len; in fq_codel_drop()
185 sch->q.qlen -= i; in fq_codel_drop()
189 static int fq_codel_enqueue(struct sk_buff *skb, struct Qdisc *sch, in fq_codel_enqueue() argument
192 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_enqueue()
199 idx = fq_codel_classify(skb, sch, &ret); in fq_codel_enqueue()
202 qdisc_qstats_drop(sch); in fq_codel_enqueue()
212 qdisc_qstats_backlog_inc(sch, skb); in fq_codel_enqueue()
223 if (++sch->q.qlen <= sch->limit && !memory_limited) in fq_codel_enqueue()
226 prev_backlog = sch->qstats.backlog; in fq_codel_enqueue()
227 prev_qlen = sch->q.qlen; in fq_codel_enqueue()
236 ret = fq_codel_drop(sch, q->drop_batch_size, to_free); in fq_codel_enqueue()
238 prev_qlen -= sch->q.qlen; in fq_codel_enqueue()
239 prev_backlog -= sch->qstats.backlog; in fq_codel_enqueue()
249 qdisc_tree_reduce_backlog(sch, prev_qlen - 1, in fq_codel_enqueue()
253 qdisc_tree_reduce_backlog(sch, prev_qlen, prev_backlog); in fq_codel_enqueue()
263 struct Qdisc *sch = ctx; in dequeue_func() local
264 struct fq_codel_sched_data *q = qdisc_priv(sch); in dequeue_func()
273 sch->q.qlen--; in dequeue_func()
274 sch->qstats.backlog -= qdisc_pkt_len(skb); in dequeue_func()
281 struct Qdisc *sch = ctx; in drop_func() local
284 qdisc_qstats_drop(sch); in drop_func()
287 static struct sk_buff *fq_codel_dequeue(struct Qdisc *sch) in fq_codel_dequeue() argument
289 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_dequeue()
313 skb = codel_dequeue(sch, &sch->qstats.backlog, &q->cparams, in fq_codel_dequeue()
328 qdisc_bstats_update(sch, skb); in fq_codel_dequeue()
333 if (q->cstats.drop_count && sch->q.qlen) { in fq_codel_dequeue()
334 qdisc_tree_reduce_backlog(sch, q->cstats.drop_count, in fq_codel_dequeue()
348 static void fq_codel_reset(struct Qdisc *sch) in fq_codel_reset() argument
350 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_reset()
363 sch->q.qlen = 0; in fq_codel_reset()
364 sch->qstats.backlog = 0; in fq_codel_reset()
380 static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt, in fq_codel_change() argument
383 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_change()
402 sch_tree_lock(sch); in fq_codel_change()
423 sch->limit = nla_get_u32(tb[TCA_FQ_CODEL_LIMIT]); in fq_codel_change()
437 while (sch->q.qlen > sch->limit || in fq_codel_change()
439 struct sk_buff *skb = fq_codel_dequeue(sch); in fq_codel_change()
445 qdisc_tree_reduce_backlog(sch, q->cstats.drop_count, q->cstats.drop_len); in fq_codel_change()
449 sch_tree_unlock(sch); in fq_codel_change()
453 static void fq_codel_destroy(struct Qdisc *sch) in fq_codel_destroy() argument
455 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_destroy()
462 static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt, in fq_codel_init() argument
465 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_init()
469 sch->limit = 10*1024; in fq_codel_init()
473 q->quantum = psched_mtu(qdisc_dev(sch)); in fq_codel_init()
479 q->cparams.mtu = psched_mtu(qdisc_dev(sch)); in fq_codel_init()
482 err = fq_codel_change(sch, opt, extack); in fq_codel_init()
487 err = tcf_block_get(&q->block, &q->filter_list, sch, extack); in fq_codel_init()
511 if (sch->limit >= 1) in fq_codel_init()
512 sch->flags |= TCQ_F_CAN_BYPASS; in fq_codel_init()
514 sch->flags &= ~TCQ_F_CAN_BYPASS; in fq_codel_init()
525 static int fq_codel_dump(struct Qdisc *sch, struct sk_buff *skb) in fq_codel_dump() argument
527 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_dump()
537 sch->limit) || in fq_codel_dump()
563 static int fq_codel_dump_stats(struct Qdisc *sch, struct gnet_dump *d) in fq_codel_dump_stats() argument
565 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_dump_stats()
579 sch_tree_lock(sch); in fq_codel_dump_stats()
585 sch_tree_unlock(sch); in fq_codel_dump_stats()
590 static struct Qdisc *fq_codel_leaf(struct Qdisc *sch, unsigned long arg) in fq_codel_leaf() argument
595 static unsigned long fq_codel_find(struct Qdisc *sch, u32 classid) in fq_codel_find() argument
600 static unsigned long fq_codel_bind(struct Qdisc *sch, unsigned long parent, in fq_codel_bind() argument
604 sch->flags &= ~TCQ_F_CAN_BYPASS; in fq_codel_bind()
612 static struct tcf_block *fq_codel_tcf_block(struct Qdisc *sch, unsigned long cl, in fq_codel_tcf_block() argument
615 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_tcf_block()
622 static int fq_codel_dump_class(struct Qdisc *sch, unsigned long cl, in fq_codel_dump_class() argument
629 static int fq_codel_dump_class_stats(struct Qdisc *sch, unsigned long cl, in fq_codel_dump_class_stats() argument
632 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_dump_class_stats()
658 sch_tree_lock(sch); in fq_codel_dump_class_stats()
664 sch_tree_unlock(sch); in fq_codel_dump_class_stats()
676 static void fq_codel_walk(struct Qdisc *sch, struct qdisc_walker *arg) in fq_codel_walk() argument
678 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_walk()
690 if (arg->fn(sch, i + 1, arg) < 0) { in fq_codel_walk()