Lines Matching refs:sch

164 static unsigned int sfq_classify(struct sk_buff *skb, struct Qdisc *sch,  in sfq_classify()  argument
167 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_classify()
172 if (TC_H_MAJ(skb->priority) == sch->handle && in sfq_classify()
292 static unsigned int sfq_drop(struct Qdisc *sch) in sfq_drop() argument
294 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_drop()
309 sch->q.qlen--; in sfq_drop()
310 qdisc_qstats_drop(sch); in sfq_drop()
311 qdisc_qstats_backlog_dec(sch, skb); in sfq_drop()
346 sfq_enqueue(struct sk_buff *skb, struct Qdisc *sch) in sfq_enqueue() argument
348 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_enqueue()
356 hash = sfq_classify(skb, sch, &ret); in sfq_enqueue()
359 qdisc_qstats_drop(sch); in sfq_enqueue()
370 return qdisc_drop(skb, sch); in sfq_enqueue()
389 qdisc_qstats_overlimit(sch); in sfq_enqueue()
406 qdisc_qstats_overlimit(sch); in sfq_enqueue()
427 return qdisc_drop(skb, sch); in sfq_enqueue()
432 sch->qstats.backlog -= delta; in sfq_enqueue()
434 qdisc_drop(head, sch); in sfq_enqueue()
441 qdisc_qstats_backlog_inc(sch, skb); in sfq_enqueue()
460 if (++sch->q.qlen <= q->limit) in sfq_enqueue()
464 dropped = sfq_drop(sch); in sfq_enqueue()
472 qdisc_tree_reduce_backlog(sch, 1, dropped); in sfq_enqueue()
477 sfq_dequeue(struct Qdisc *sch) in sfq_dequeue() argument
479 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_dequeue()
498 qdisc_bstats_update(sch, skb); in sfq_dequeue()
499 sch->q.qlen--; in sfq_dequeue()
500 qdisc_qstats_backlog_dec(sch, skb); in sfq_dequeue()
518 sfq_reset(struct Qdisc *sch) in sfq_reset() argument
522 while ((skb = sfq_dequeue(sch)) != NULL) in sfq_reset()
532 static void sfq_rehash(struct Qdisc *sch) in sfq_rehash() argument
534 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_rehash()
568 qdisc_qstats_backlog_dec(sch, skb); in sfq_rehash()
598 sch->q.qlen -= dropped; in sfq_rehash()
599 qdisc_tree_reduce_backlog(sch, dropped, drop_len); in sfq_rehash()
604 struct Qdisc *sch = (struct Qdisc *)arg; in sfq_perturbation() local
605 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_perturbation()
606 spinlock_t *root_lock = qdisc_lock(qdisc_root_sleeping(sch)); in sfq_perturbation()
611 sfq_rehash(sch); in sfq_perturbation()
618 static int sfq_change(struct Qdisc *sch, struct nlattr *opt) in sfq_change() argument
620 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_change()
638 sch_tree_lock(sch); in sfq_change()
670 qlen = sch->q.qlen; in sfq_change()
671 while (sch->q.qlen > q->limit) in sfq_change()
672 dropped += sfq_drop(sch); in sfq_change()
673 qdisc_tree_reduce_backlog(sch, qlen - sch->q.qlen, dropped); in sfq_change()
680 sch_tree_unlock(sch); in sfq_change()
699 static void sfq_destroy(struct Qdisc *sch) in sfq_destroy() argument
701 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_destroy()
711 static int sfq_init(struct Qdisc *sch, struct nlattr *opt) in sfq_init() argument
713 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_init()
717 q->perturb_timer.data = (unsigned long)sch; in sfq_init()
731 q->quantum = psched_mtu(qdisc_dev(sch)); in sfq_init()
737 int err = sfq_change(sch, opt); in sfq_init()
745 sfq_destroy(sch); in sfq_init()
756 sch->flags |= TCQ_F_CAN_BYPASS; in sfq_init()
758 sch->flags &= ~TCQ_F_CAN_BYPASS; in sfq_init()
762 static int sfq_dump(struct Qdisc *sch, struct sk_buff *skb) in sfq_dump() argument
764 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_dump()
799 static struct Qdisc *sfq_leaf(struct Qdisc *sch, unsigned long arg) in sfq_leaf() argument
804 static unsigned long sfq_get(struct Qdisc *sch, u32 classid) in sfq_get() argument
809 static unsigned long sfq_bind(struct Qdisc *sch, unsigned long parent, in sfq_bind() argument
813 sch->flags &= ~TCQ_F_CAN_BYPASS; in sfq_bind()
821 static struct tcf_proto __rcu **sfq_find_tcf(struct Qdisc *sch, in sfq_find_tcf() argument
824 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_find_tcf()
831 static int sfq_dump_class(struct Qdisc *sch, unsigned long cl, in sfq_dump_class() argument
838 static int sfq_dump_class_stats(struct Qdisc *sch, unsigned long cl, in sfq_dump_class_stats() argument
841 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_dump_class_stats()
858 static void sfq_walk(struct Qdisc *sch, struct qdisc_walker *arg) in sfq_walk() argument
860 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_walk()
872 if (arg->fn(sch, i + 1, arg) < 0) { in sfq_walk()