Lines Matching refs: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);
328 if (gnet_stats_copy_basic(qdisc_root_sleeping_running(sch),
336 static void ets_qdisc_walk(struct Qdisc *sch, struct qdisc_walker *arg)
338 struct ets_sched *q = qdisc_priv(sch);
349 if (arg->fn(sch, i + 1, arg) < 0) {
358 ets_qdisc_tcf_block(struct Qdisc *sch, unsigned long cl,
361 struct ets_sched *q = qdisc_priv(sch);
371 static unsigned long ets_qdisc_bind_tcf(struct Qdisc *sch, unsigned long parent,
374 return ets_class_find(sch, classid);
377 static void ets_qdisc_unbind_tcf(struct Qdisc *sch, unsigned long arg)
381 static struct ets_class *ets_classify(struct sk_buff *skb, struct Qdisc *sch,
384 struct ets_sched *q = qdisc_priv(sch);
391 if (TC_H_MAJ(skb->priority) != sch->handle) {
418 static int ets_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,
422 struct ets_sched *q = qdisc_priv(sch);
427 cl = ets_classify(skb, sch, &err);
430 qdisc_qstats_drop(sch);
440 qdisc_qstats_drop(sch);
450 sch->qstats.backlog += len;
451 sch->q.qlen++;
456 ets_qdisc_dequeue_skb(struct Qdisc *sch, struct sk_buff *skb)
458 qdisc_bstats_update(sch, skb);
459 qdisc_qstats_backlog_dec(sch, skb);
460 sch->q.qlen--;
464 static struct sk_buff *ets_qdisc_dequeue(struct Qdisc *sch)
466 struct ets_sched *q = qdisc_priv(sch);
477 return ets_qdisc_dequeue_skb(sch, skb);
498 return ets_qdisc_dequeue_skb(sch, skb);
547 static int ets_qdisc_quanta_parse(struct Qdisc *sch, struct nlattr *quanta_attr,
570 err = ets_quantum_parse(sch, attr, &quanta[band++],
584 static int ets_qdisc_change(struct Qdisc *sch, struct nlattr *opt,
589 struct ets_sched *q = qdisc_priv(sch);
635 err = ets_qdisc_quanta_parse(sch, tb[TCA_ETS_QUANTA],
645 quanta[i] = psched_mtu(qdisc_dev(sch));
650 queues[i] = qdisc_create_dflt(sch->dev_queue, &pfifo_qdisc_ops,
651 ets_class_id(sch, &q->classes[i]),
660 sch_tree_lock(sch);
687 sch_tree_unlock(sch);
689 ets_offload_change(sch);
697 static int ets_qdisc_init(struct Qdisc *sch, struct nlattr *opt,
700 struct ets_sched *q = qdisc_priv(sch);
706 err = tcf_block_get(&q->block, &q->filter_list, sch, extack);
711 return ets_qdisc_change(sch, opt, extack);
714 static void ets_qdisc_reset(struct Qdisc *sch)
716 struct ets_sched *q = qdisc_priv(sch);
727 static void ets_qdisc_destroy(struct Qdisc *sch)
729 struct ets_sched *q = qdisc_priv(sch);
732 ets_offload_destroy(sch);
738 static int ets_qdisc_dump(struct Qdisc *sch, struct sk_buff *skb)
740 struct ets_sched *q = qdisc_priv(sch);
747 err = ets_offload_dump(sch);