Lines Matching refs:sch
142 static void tbf_offload_change(struct Qdisc *sch)
144 struct tbf_sched_data *q = qdisc_priv(sch);
145 struct net_device *dev = qdisc_dev(sch);
152 qopt.handle = sch->handle;
153 qopt.parent = sch->parent;
156 qopt.replace_params.qstats = &sch->qstats;
161 static void tbf_offload_destroy(struct Qdisc *sch)
163 struct net_device *dev = qdisc_dev(sch);
170 qopt.handle = sch->handle;
171 qopt.parent = sch->parent;
175 static int tbf_offload_dump(struct Qdisc *sch)
180 qopt.handle = sch->handle;
181 qopt.parent = sch->parent;
182 qopt.stats.bstats = &sch->bstats;
183 qopt.stats.qstats = &sch->qstats;
185 return qdisc_offload_dump_helper(sch, TC_SETUP_QDISC_TBF, &qopt);
188 static void tbf_offload_graft(struct Qdisc *sch, struct Qdisc *new,
192 .handle = sch->handle,
193 .parent = sch->parent,
198 qdisc_offload_graft_helper(qdisc_dev(sch), sch, new, old,
205 static int tbf_segment(struct sk_buff *skb, struct Qdisc *sch,
208 struct tbf_sched_data *q = qdisc_priv(sch);
217 return qdisc_drop(skb, sch, to_free);
227 qdisc_qstats_drop(sch);
233 sch->q.qlen += nb;
234 sch->qstats.backlog += len;
236 qdisc_tree_reduce_backlog(sch, 1 - nb, prev_len - len);
245 static int tbf_enqueue(struct sk_buff *skb, struct Qdisc *sch,
248 struct tbf_sched_data *q = qdisc_priv(sch);
255 return tbf_segment(skb, sch, to_free);
256 return qdisc_drop(skb, sch, to_free);
261 qdisc_qstats_drop(sch);
265 sch->qstats.backlog += len;
266 sch->q.qlen++;
275 static struct sk_buff *tbf_dequeue(struct Qdisc *sch)
277 struct tbf_sched_data *q = qdisc_priv(sch);
310 qdisc_qstats_backlog_dec(sch, skb);
311 sch->q.qlen--;
312 qdisc_bstats_update(sch, skb);
330 qdisc_qstats_overlimit(sch);
335 static void tbf_reset(struct Qdisc *sch)
337 struct tbf_sched_data *q = qdisc_priv(sch);
356 static int tbf_change(struct Qdisc *sch, struct nlattr *opt,
360 struct tbf_sched_data *q = qdisc_priv(sch);
427 if (max_size < psched_mtu(qdisc_dev(sch)))
429 max_size, qdisc_dev(sch)->name,
430 psched_mtu(qdisc_dev(sch)));
442 child = fifo_create_dflt(sch, &bfifo_qdisc_ops, qopt->limit,
453 sch_tree_lock(sch);
475 sch_tree_unlock(sch);
479 tbf_offload_change(sch);
484 static int tbf_init(struct Qdisc *sch, struct nlattr *opt,
487 struct tbf_sched_data *q = qdisc_priv(sch);
489 qdisc_watchdog_init(&q->watchdog, sch);
497 return tbf_change(sch, opt, extack);
500 static void tbf_destroy(struct Qdisc *sch)
502 struct tbf_sched_data *q = qdisc_priv(sch);
505 tbf_offload_destroy(sch);
509 static int tbf_dump(struct Qdisc *sch, struct sk_buff *skb)
511 struct tbf_sched_data *q = qdisc_priv(sch);
516 err = tbf_offload_dump(sch);
551 static int tbf_dump_class(struct Qdisc *sch, unsigned long cl,
554 struct tbf_sched_data *q = qdisc_priv(sch);
562 static int tbf_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
565 struct tbf_sched_data *q = qdisc_priv(sch);
570 *old = qdisc_replace(sch, new, &q->qdisc);
572 tbf_offload_graft(sch, new, *old, extack);
576 static struct Qdisc *tbf_leaf(struct Qdisc *sch, unsigned long arg)
578 struct tbf_sched_data *q = qdisc_priv(sch);
582 static unsigned long tbf_find(struct Qdisc *sch, u32 classid)
587 static void tbf_walk(struct Qdisc *sch, struct qdisc_walker *walker)
590 tc_qdisc_stats_dump(sch, 1, walker);