Lines Matching defs:sch

77 static int ets_quantum_parse(struct Qdisc *sch, const struct nlattr *attr,
90 ets_class_from_arg(struct Qdisc *sch, unsigned long arg)
92 struct ets_sched *q = qdisc_priv(sch);
97 static u32 ets_class_id(struct Qdisc *sch, const struct ets_class *cl)
99 struct ets_sched *q = qdisc_priv(sch);
102 return TC_H_MAKE(sch->handle, band + 1);
105 static void ets_offload_change(struct Qdisc *sch)
107 struct net_device *dev = qdisc_dev(sch);
108 struct ets_sched *q = qdisc_priv(sch);
122 qopt.handle = sch->handle;
123 qopt.parent = sch->parent;
125 qopt.replace_params.qstats = &sch->qstats;
146 static void ets_offload_destroy(struct Qdisc *sch)
148 struct net_device *dev = qdisc_dev(sch);
155 qopt.handle = sch->handle;
156 qopt.parent = sch->parent;
160 static void ets_offload_graft(struct Qdisc *sch, struct Qdisc *new,
164 struct net_device *dev = qdisc_dev(sch);
168 qopt.handle = sch->handle;
169 qopt.parent = sch->parent;
173 qdisc_offload_graft_helper(dev, sch, new, old, TC_SETUP_QDISC_ETS,
177 static int ets_offload_dump(struct Qdisc *sch)
182 qopt.handle = sch->handle;
183 qopt.parent = sch->parent;
184 qopt.stats.bstats = &sch->bstats;
185 qopt.stats.qstats = &sch->qstats;
187 return qdisc_offload_dump_helper(sch, TC_SETUP_QDISC_ETS, &qopt);
197 static int ets_class_change(struct Qdisc *sch, u32 classid, u32 parentid,
201 struct ets_class *cl = ets_class_from_arg(sch, *arg);
202 struct ets_sched *q = qdisc_priv(sch);
234 err = ets_quantum_parse(sch, tb[TCA_ETS_QUANTA_BAND], &quantum,
239 sch_tree_lock(sch);
241 sch_tree_unlock(sch);
243 ets_offload_change(sch);
247 static int ets_class_graft(struct Qdisc *sch, unsigned long arg,
251 struct ets_class *cl = ets_class_from_arg(sch, arg);
254 new = qdisc_create_dflt(sch->dev_queue, &pfifo_qdisc_ops,
255 ets_class_id(sch, cl), NULL);
262 *old = qdisc_replace(sch, new, &cl->qdisc);
263 ets_offload_graft(sch, new, *old, arg, extack);
267 static struct Qdisc *ets_class_leaf(struct Qdisc *sch, unsigned long arg)
269 struct ets_class *cl = ets_class_from_arg(sch, arg);
274 static unsigned long ets_class_find(struct Qdisc *sch, u32 classid)
277 struct ets_sched *q = qdisc_priv(sch);
284 static void ets_class_qlen_notify(struct Qdisc *sch, unsigned long arg)
286 struct ets_class *cl = ets_class_from_arg(sch, arg);
287 struct ets_sched *q = qdisc_priv(sch);
293 if (!ets_class_is_strict(q, cl) && sch->q.qlen)
297 static int ets_class_dump(struct Qdisc *sch, unsigned long arg,
300 struct ets_class *cl = ets_class_from_arg(sch, arg);
301 struct ets_sched *q = qdisc_priv(sch);
305 tcm->tcm_handle = ets_class_id(sch, cl);
322 static int ets_class_dump_stats(struct Qdisc *sch, unsigned long arg,
325 struct ets_class *cl = ets_class_from_arg(sch, arg);
335 static void ets_qdisc_walk(struct Qdisc *sch, struct qdisc_walker *arg)
337 struct ets_sched *q = qdisc_priv(sch);
344 if (!tc_qdisc_stats_dump(sch, i + 1, arg))
350 ets_qdisc_tcf_block(struct Qdisc *sch, unsigned long cl,
353 struct ets_sched *q = qdisc_priv(sch);
363 static unsigned long ets_qdisc_bind_tcf(struct Qdisc *sch, unsigned long parent,
366 return ets_class_find(sch, classid);
369 static void ets_qdisc_unbind_tcf(struct Qdisc *sch, unsigned long arg)
373 static struct ets_class *ets_classify(struct sk_buff *skb, struct Qdisc *sch,
376 struct ets_sched *q = qdisc_priv(sch);
383 if (TC_H_MAJ(skb->priority) != sch->handle) {
410 static int ets_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,
414 struct ets_sched *q = qdisc_priv(sch);
419 cl = ets_classify(skb, sch, &err);
422 qdisc_qstats_drop(sch);
432 qdisc_qstats_drop(sch);
442 sch->qstats.backlog += len;
443 sch->q.qlen++;
448 ets_qdisc_dequeue_skb(struct Qdisc *sch, struct sk_buff *skb)
450 qdisc_bstats_update(sch, skb);
451 qdisc_qstats_backlog_dec(sch, skb);
452 sch->q.qlen--;
456 static struct sk_buff *ets_qdisc_dequeue(struct Qdisc *sch)
458 struct ets_sched *q = qdisc_priv(sch);
469 return ets_qdisc_dequeue_skb(sch, skb);
490 return ets_qdisc_dequeue_skb(sch, skb);
539 static int ets_qdisc_quanta_parse(struct Qdisc *sch, struct nlattr *quanta_attr,
562 err = ets_quantum_parse(sch, attr, &quanta[band++],
576 static int ets_qdisc_change(struct Qdisc *sch, struct nlattr *opt,
581 struct ets_sched *q = qdisc_priv(sch);
622 err = ets_qdisc_quanta_parse(sch, tb[TCA_ETS_QUANTA],
632 quanta[i] = psched_mtu(qdisc_dev(sch));
637 queues[i] = qdisc_create_dflt(sch->dev_queue, &pfifo_qdisc_ops,
638 ets_class_id(sch, &q->classes[i]),
647 sch_tree_lock(sch);
673 sch_tree_unlock(sch);
675 ets_offload_change(sch);
687 static int ets_qdisc_init(struct Qdisc *sch, struct nlattr *opt,
690 struct ets_sched *q = qdisc_priv(sch);
696 err = tcf_block_get(&q->block, &q->filter_list, sch, extack);
704 return ets_qdisc_change(sch, opt, extack);
707 static void ets_qdisc_reset(struct Qdisc *sch)
709 struct ets_sched *q = qdisc_priv(sch);
720 static void ets_qdisc_destroy(struct Qdisc *sch)
722 struct ets_sched *q = qdisc_priv(sch);
725 ets_offload_destroy(sch);
731 static int ets_qdisc_dump(struct Qdisc *sch, struct sk_buff *skb)
733 struct ets_sched *q = qdisc_priv(sch);
740 err = ets_offload_dump(sch);