Lines Matching refs:sch
82 static int ets_quantum_parse(struct Qdisc *sch, const struct nlattr *attr, in ets_quantum_parse() argument
95 ets_class_from_arg(struct Qdisc *sch, unsigned long arg) in ets_class_from_arg() argument
97 struct ets_sched *q = qdisc_priv(sch); in ets_class_from_arg()
104 static u32 ets_class_id(struct Qdisc *sch, const struct ets_class *cl) in ets_class_id() argument
106 struct ets_sched *q = qdisc_priv(sch); in ets_class_id()
109 return TC_H_MAKE(sch->handle, band + 1); in ets_class_id()
112 static void ets_offload_change(struct Qdisc *sch) in ets_offload_change() argument
114 struct net_device *dev = qdisc_dev(sch); in ets_offload_change()
115 struct ets_sched *q = qdisc_priv(sch); in ets_offload_change()
129 qopt.handle = sch->handle; in ets_offload_change()
130 qopt.parent = sch->parent; in ets_offload_change()
132 qopt.replace_params.qstats = &sch->qstats; in ets_offload_change()
153 static void ets_offload_destroy(struct Qdisc *sch) in ets_offload_destroy() argument
155 struct net_device *dev = qdisc_dev(sch); in ets_offload_destroy()
162 qopt.handle = sch->handle; in ets_offload_destroy()
163 qopt.parent = sch->parent; in ets_offload_destroy()
167 static void ets_offload_graft(struct Qdisc *sch, struct Qdisc *new, in ets_offload_graft() argument
171 struct net_device *dev = qdisc_dev(sch); in ets_offload_graft()
175 qopt.handle = sch->handle; in ets_offload_graft()
176 qopt.parent = sch->parent; in ets_offload_graft()
180 qdisc_offload_graft_helper(dev, sch, new, old, TC_SETUP_QDISC_ETS, in ets_offload_graft()
184 static int ets_offload_dump(struct Qdisc *sch) in ets_offload_dump() argument
189 qopt.handle = sch->handle; in ets_offload_dump()
190 qopt.parent = sch->parent; in ets_offload_dump()
191 qopt.stats.bstats = &sch->bstats; in ets_offload_dump()
192 qopt.stats.qstats = &sch->qstats; in ets_offload_dump()
194 return qdisc_offload_dump_helper(sch, TC_SETUP_QDISC_ETS, &qopt); in ets_offload_dump()
204 static int ets_class_change(struct Qdisc *sch, u32 classid, u32 parentid, in ets_class_change() argument
208 struct ets_class *cl = ets_class_from_arg(sch, *arg); in ets_class_change()
209 struct ets_sched *q = qdisc_priv(sch); in ets_class_change()
241 err = ets_quantum_parse(sch, tb[TCA_ETS_QUANTA_BAND], &quantum, in ets_class_change()
246 sch_tree_lock(sch); in ets_class_change()
248 sch_tree_unlock(sch); in ets_class_change()
250 ets_offload_change(sch); in ets_class_change()
254 static int ets_class_graft(struct Qdisc *sch, unsigned long arg, in ets_class_graft() argument
258 struct ets_class *cl = ets_class_from_arg(sch, arg); in ets_class_graft()
261 new = qdisc_create_dflt(sch->dev_queue, &pfifo_qdisc_ops, in ets_class_graft()
262 ets_class_id(sch, cl), NULL); in ets_class_graft()
269 *old = qdisc_replace(sch, new, &cl->qdisc); in ets_class_graft()
270 ets_offload_graft(sch, new, *old, arg, extack); in ets_class_graft()
274 static struct Qdisc *ets_class_leaf(struct Qdisc *sch, unsigned long arg) in ets_class_leaf() argument
276 struct ets_class *cl = ets_class_from_arg(sch, arg); in ets_class_leaf()
281 static unsigned long ets_class_find(struct Qdisc *sch, u32 classid) in ets_class_find() argument
284 struct ets_sched *q = qdisc_priv(sch); in ets_class_find()
291 static void ets_class_qlen_notify(struct Qdisc *sch, unsigned long arg) in ets_class_qlen_notify() argument
293 struct ets_class *cl = ets_class_from_arg(sch, arg); in ets_class_qlen_notify()
294 struct ets_sched *q = qdisc_priv(sch); in ets_class_qlen_notify()
300 if (!ets_class_is_strict(q, cl) && sch->q.qlen) in ets_class_qlen_notify()
304 static int ets_class_dump(struct Qdisc *sch, unsigned long arg, in ets_class_dump() argument
307 struct ets_class *cl = ets_class_from_arg(sch, arg); in ets_class_dump()
308 struct ets_sched *q = qdisc_priv(sch); in ets_class_dump()
312 tcm->tcm_handle = ets_class_id(sch, cl); in ets_class_dump()
329 static int ets_class_dump_stats(struct Qdisc *sch, unsigned long arg, in ets_class_dump_stats() argument
332 struct ets_class *cl = ets_class_from_arg(sch, arg); in ets_class_dump_stats()
342 static void ets_qdisc_walk(struct Qdisc *sch, struct qdisc_walker *arg) in ets_qdisc_walk() argument
344 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_walk()
351 if (!tc_qdisc_stats_dump(sch, i + 1, arg)) in ets_qdisc_walk()
357 ets_qdisc_tcf_block(struct Qdisc *sch, unsigned long cl, in ets_qdisc_tcf_block() argument
360 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_tcf_block()
370 static unsigned long ets_qdisc_bind_tcf(struct Qdisc *sch, unsigned long parent, in ets_qdisc_bind_tcf() argument
373 return ets_class_find(sch, classid); in ets_qdisc_bind_tcf()
376 static void ets_qdisc_unbind_tcf(struct Qdisc *sch, unsigned long arg) in ets_qdisc_unbind_tcf() argument
380 static struct ets_class *ets_classify(struct sk_buff *skb, struct Qdisc *sch, in ets_classify() argument
383 struct ets_sched *q = qdisc_priv(sch); in ets_classify()
390 if (TC_H_MAJ(skb->priority) != sch->handle) { in ets_classify()
417 static int ets_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch, in ets_qdisc_enqueue() argument
421 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_enqueue()
425 cl = ets_classify(skb, sch, &err); in ets_qdisc_enqueue()
428 qdisc_qstats_drop(sch); in ets_qdisc_enqueue()
437 qdisc_qstats_drop(sch); in ets_qdisc_enqueue()
447 sch->qstats.backlog += len; in ets_qdisc_enqueue()
448 sch->q.qlen++; in ets_qdisc_enqueue()
453 ets_qdisc_dequeue_skb(struct Qdisc *sch, struct sk_buff *skb) in ets_qdisc_dequeue_skb() argument
455 qdisc_bstats_update(sch, skb); in ets_qdisc_dequeue_skb()
456 qdisc_qstats_backlog_dec(sch, skb); in ets_qdisc_dequeue_skb()
457 sch->q.qlen--; in ets_qdisc_dequeue_skb()
461 static struct sk_buff *ets_qdisc_dequeue(struct Qdisc *sch) in ets_qdisc_dequeue() argument
463 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_dequeue()
474 return ets_qdisc_dequeue_skb(sch, skb); in ets_qdisc_dequeue()
495 return ets_qdisc_dequeue_skb(sch, skb); in ets_qdisc_dequeue()
544 static int ets_qdisc_quanta_parse(struct Qdisc *sch, struct nlattr *quanta_attr, in ets_qdisc_quanta_parse() argument
567 err = ets_quantum_parse(sch, attr, &quanta[band++], in ets_qdisc_quanta_parse()
581 static int ets_qdisc_change(struct Qdisc *sch, struct nlattr *opt, in ets_qdisc_change() argument
586 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_change()
627 err = ets_qdisc_quanta_parse(sch, tb[TCA_ETS_QUANTA], in ets_qdisc_change()
637 quanta[i] = psched_mtu(qdisc_dev(sch)); in ets_qdisc_change()
642 queues[i] = qdisc_create_dflt(sch->dev_queue, &pfifo_qdisc_ops, in ets_qdisc_change()
643 ets_class_id(sch, &q->classes[i]), in ets_qdisc_change()
652 sch_tree_lock(sch); in ets_qdisc_change()
679 sch_tree_unlock(sch); in ets_qdisc_change()
681 ets_offload_change(sch); in ets_qdisc_change()
693 static int ets_qdisc_init(struct Qdisc *sch, struct nlattr *opt, in ets_qdisc_init() argument
696 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_init()
702 err = tcf_block_get(&q->block, &q->filter_list, sch, extack); in ets_qdisc_init()
710 return ets_qdisc_change(sch, opt, extack); in ets_qdisc_init()
713 static void ets_qdisc_reset(struct Qdisc *sch) in ets_qdisc_reset() argument
715 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_reset()
726 static void ets_qdisc_destroy(struct Qdisc *sch) in ets_qdisc_destroy() argument
728 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_destroy()
731 ets_offload_destroy(sch); in ets_qdisc_destroy()
737 static int ets_qdisc_dump(struct Qdisc *sch, struct sk_buff *skb) in ets_qdisc_dump() argument
739 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_dump()
747 err = ets_offload_dump(sch); in ets_qdisc_dump()