Lines Matching refs:sch

77 static unsigned int fq_codel_classify(struct sk_buff *skb, struct Qdisc *sch,  in fq_codel_classify()  argument
80 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_classify()
85 if (TC_H_MAJ(skb->priority) == sch->handle && in fq_codel_classify()
136 static unsigned int fq_codel_drop(struct Qdisc *sch) in fq_codel_drop() argument
138 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_drop()
158 sch->q.qlen--; in fq_codel_drop()
159 qdisc_qstats_drop(sch); in fq_codel_drop()
160 qdisc_qstats_backlog_dec(sch, skb); in fq_codel_drop()
166 static unsigned int fq_codel_qdisc_drop(struct Qdisc *sch) in fq_codel_qdisc_drop() argument
170 prev_backlog = sch->qstats.backlog; in fq_codel_qdisc_drop()
171 fq_codel_drop(sch); in fq_codel_qdisc_drop()
172 return prev_backlog - sch->qstats.backlog; in fq_codel_qdisc_drop()
175 static int fq_codel_enqueue(struct sk_buff *skb, struct Qdisc *sch) in fq_codel_enqueue() argument
177 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_enqueue()
182 idx = fq_codel_classify(skb, sch, &ret); in fq_codel_enqueue()
185 qdisc_qstats_drop(sch); in fq_codel_enqueue()
195 qdisc_qstats_backlog_inc(sch, skb); in fq_codel_enqueue()
203 if (++sch->q.qlen <= sch->limit) in fq_codel_enqueue()
206 prev_backlog = sch->qstats.backlog; in fq_codel_enqueue()
211 if (fq_codel_drop(sch) == idx) in fq_codel_enqueue()
215 qdisc_tree_reduce_backlog(sch, 1, prev_backlog - sch->qstats.backlog); in fq_codel_enqueue()
223 static struct sk_buff *dequeue(struct codel_vars *vars, struct Qdisc *sch) in dequeue() argument
225 struct fq_codel_sched_data *q = qdisc_priv(sch); in dequeue()
233 sch->q.qlen--; in dequeue()
238 static struct sk_buff *fq_codel_dequeue(struct Qdisc *sch) in fq_codel_dequeue() argument
240 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_dequeue()
264 prev_backlog = sch->qstats.backlog; in fq_codel_dequeue()
266 skb = codel_dequeue(sch, &q->cparams, &flow->cvars, &q->cstats, in fq_codel_dequeue()
280 qdisc_bstats_update(sch, skb); in fq_codel_dequeue()
285 if (q->cstats.drop_count && sch->q.qlen) { in fq_codel_dequeue()
286 qdisc_tree_reduce_backlog(sch, q->cstats.drop_count, in fq_codel_dequeue()
294 static void fq_codel_reset(struct Qdisc *sch) in fq_codel_reset() argument
296 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_reset()
307 qdisc_qstats_backlog_dec(sch, skb); in fq_codel_reset()
315 sch->q.qlen = 0; in fq_codel_reset()
328 static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt) in fq_codel_change() argument
330 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_change()
348 sch_tree_lock(sch); in fq_codel_change()
369 sch->limit = nla_get_u32(tb[TCA_FQ_CODEL_LIMIT]); in fq_codel_change()
377 while (sch->q.qlen > sch->limit) { in fq_codel_change()
378 struct sk_buff *skb = fq_codel_dequeue(sch); in fq_codel_change()
384 qdisc_tree_reduce_backlog(sch, q->cstats.drop_count, q->cstats.drop_len); in fq_codel_change()
388 sch_tree_unlock(sch); in fq_codel_change()
406 static void fq_codel_destroy(struct Qdisc *sch) in fq_codel_destroy() argument
408 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_destroy()
415 static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt) in fq_codel_init() argument
417 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_init()
420 sch->limit = 10*1024; in fq_codel_init()
422 q->quantum = psched_mtu(qdisc_dev(sch)); in fq_codel_init()
426 codel_params_init(&q->cparams, sch); in fq_codel_init()
431 int err = fq_codel_change(sch, opt); in fq_codel_init()
453 if (sch->limit >= 1) in fq_codel_init()
454 sch->flags |= TCQ_F_CAN_BYPASS; in fq_codel_init()
456 sch->flags &= ~TCQ_F_CAN_BYPASS; in fq_codel_init()
460 static int fq_codel_dump(struct Qdisc *sch, struct sk_buff *skb) in fq_codel_dump() argument
462 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_dump()
472 sch->limit) || in fq_codel_dump()
494 static int fq_codel_dump_stats(struct Qdisc *sch, struct gnet_dump *d) in fq_codel_dump_stats() argument
496 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_dump_stats()
517 static struct Qdisc *fq_codel_leaf(struct Qdisc *sch, unsigned long arg) in fq_codel_leaf() argument
522 static unsigned long fq_codel_get(struct Qdisc *sch, u32 classid) in fq_codel_get() argument
527 static unsigned long fq_codel_bind(struct Qdisc *sch, unsigned long parent, in fq_codel_bind() argument
531 sch->flags &= ~TCQ_F_CAN_BYPASS; in fq_codel_bind()
539 static struct tcf_proto __rcu **fq_codel_find_tcf(struct Qdisc *sch, in fq_codel_find_tcf() argument
542 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_find_tcf()
549 static int fq_codel_dump_class(struct Qdisc *sch, unsigned long cl, in fq_codel_dump_class() argument
556 static int fq_codel_dump_class_stats(struct Qdisc *sch, unsigned long cl, in fq_codel_dump_class_stats() argument
559 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_dump_class_stats()
598 static void fq_codel_walk(struct Qdisc *sch, struct qdisc_walker *arg) in fq_codel_walk() argument
600 struct fq_codel_sched_data *q = qdisc_priv(sch); in fq_codel_walk()
612 if (arg->fn(sch, i + 1, arg) < 0) { in fq_codel_walk()