Lines Matching refs:sch
185 static unsigned int sfq_classify(struct sk_buff *skb, struct Qdisc *sch, in sfq_classify() argument
188 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_classify()
193 if (TC_H_MAJ(skb->priority) == sch->handle && in sfq_classify()
315 static unsigned int sfq_drop(struct Qdisc *sch) in sfq_drop() argument
317 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_drop()
333 sch->q.qlen--; in sfq_drop()
334 qdisc_qstats_drop(sch); in sfq_drop()
335 qdisc_qstats_backlog_dec(sch, skb); in sfq_drop()
369 sfq_enqueue(struct sk_buff *skb, struct Qdisc *sch) in sfq_enqueue() argument
371 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_enqueue()
379 hash = sfq_classify(skb, sch, &ret); in sfq_enqueue()
382 qdisc_qstats_drop(sch); in sfq_enqueue()
393 return qdisc_drop(skb, sch); in sfq_enqueue()
412 qdisc_qstats_overlimit(sch); in sfq_enqueue()
429 qdisc_qstats_overlimit(sch); in sfq_enqueue()
450 return qdisc_drop(skb, sch); in sfq_enqueue()
455 sch->qstats.backlog -= delta; in sfq_enqueue()
457 qdisc_drop(head, sch); in sfq_enqueue()
464 qdisc_qstats_backlog_inc(sch, skb); in sfq_enqueue()
483 if (++sch->q.qlen <= q->limit) in sfq_enqueue()
487 sfq_drop(sch); in sfq_enqueue()
495 qdisc_tree_decrease_qlen(sch, 1); in sfq_enqueue()
500 sfq_dequeue(struct Qdisc *sch) in sfq_dequeue() argument
502 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_dequeue()
521 qdisc_bstats_update(sch, skb); in sfq_dequeue()
522 sch->q.qlen--; in sfq_dequeue()
523 qdisc_qstats_backlog_dec(sch, skb); in sfq_dequeue()
541 sfq_reset(struct Qdisc *sch) in sfq_reset() argument
545 while ((skb = sfq_dequeue(sch)) != NULL) in sfq_reset()
555 static void sfq_rehash(struct Qdisc *sch) in sfq_rehash() argument
557 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_rehash()
590 qdisc_qstats_backlog_dec(sch, skb); in sfq_rehash()
619 sch->q.qlen -= dropped; in sfq_rehash()
620 qdisc_tree_decrease_qlen(sch, dropped); in sfq_rehash()
625 struct Qdisc *sch = (struct Qdisc *)arg; in sfq_perturbation() local
626 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_perturbation()
627 spinlock_t *root_lock = qdisc_lock(qdisc_root_sleeping(sch)); in sfq_perturbation()
632 sfq_rehash(sch); in sfq_perturbation()
639 static int sfq_change(struct Qdisc *sch, struct nlattr *opt) in sfq_change() argument
641 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_change()
659 sch_tree_lock(sch); in sfq_change()
691 qlen = sch->q.qlen; in sfq_change()
692 while (sch->q.qlen > q->limit) in sfq_change()
693 sfq_drop(sch); in sfq_change()
694 qdisc_tree_decrease_qlen(sch, qlen - sch->q.qlen); in sfq_change()
701 sch_tree_unlock(sch); in sfq_change()
720 static void sfq_destroy(struct Qdisc *sch) in sfq_destroy() argument
722 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_destroy()
732 static int sfq_init(struct Qdisc *sch, struct nlattr *opt) in sfq_init() argument
734 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_init()
738 q->perturb_timer.data = (unsigned long)sch; in sfq_init()
752 q->quantum = psched_mtu(qdisc_dev(sch)); in sfq_init()
758 int err = sfq_change(sch, opt); in sfq_init()
766 sfq_destroy(sch); in sfq_init()
777 sch->flags |= TCQ_F_CAN_BYPASS; in sfq_init()
779 sch->flags &= ~TCQ_F_CAN_BYPASS; in sfq_init()
783 static int sfq_dump(struct Qdisc *sch, struct sk_buff *skb) in sfq_dump() argument
785 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_dump()
820 static struct Qdisc *sfq_leaf(struct Qdisc *sch, unsigned long arg) in sfq_leaf() argument
825 static unsigned long sfq_get(struct Qdisc *sch, u32 classid) in sfq_get() argument
830 static unsigned long sfq_bind(struct Qdisc *sch, unsigned long parent, in sfq_bind() argument
834 sch->flags &= ~TCQ_F_CAN_BYPASS; in sfq_bind()
842 static struct tcf_proto __rcu **sfq_find_tcf(struct Qdisc *sch, in sfq_find_tcf() argument
845 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_find_tcf()
852 static int sfq_dump_class(struct Qdisc *sch, unsigned long cl, in sfq_dump_class() argument
859 static int sfq_dump_class_stats(struct Qdisc *sch, unsigned long cl, in sfq_dump_class_stats() argument
862 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_dump_class_stats()
879 static void sfq_walk(struct Qdisc *sch, struct qdisc_walker *arg) in sfq_walk() argument
881 struct sfq_sched_data *q = qdisc_priv(sch); in sfq_walk()
893 if (arg->fn(sch, i + 1, arg) < 0) { in sfq_walk()