Lines Matching refs:sch

44 	struct Qdisc		*sch;
70 static int red_enqueue(struct sk_buff *skb, struct Qdisc *sch,
73 struct red_sched_data *q = qdisc_priv(sch);
90 qdisc_qstats_overlimit(sch);
98 skb = tcf_qevent_handle(&q->qe_mark, sch, skb, to_free, &ret);
110 qdisc_qstats_overlimit(sch);
118 skb = tcf_qevent_handle(&q->qe_mark, sch, skb, to_free, &ret);
133 sch->qstats.backlog += len;
134 sch->q.qlen++;
137 qdisc_qstats_drop(sch);
142 skb = tcf_qevent_handle(&q->qe_early_drop, sch, skb, to_free, &ret);
146 qdisc_drop(skb, sch, to_free);
150 static struct sk_buff *red_dequeue(struct Qdisc *sch)
153 struct red_sched_data *q = qdisc_priv(sch);
158 qdisc_bstats_update(sch, skb);
159 qdisc_qstats_backlog_dec(sch, skb);
160 sch->q.qlen--;
168 static struct sk_buff *red_peek(struct Qdisc *sch)
170 struct red_sched_data *q = qdisc_priv(sch);
176 static void red_reset(struct Qdisc *sch)
178 struct red_sched_data *q = qdisc_priv(sch);
184 static int red_offload(struct Qdisc *sch, bool enable)
186 struct red_sched_data *q = qdisc_priv(sch);
187 struct net_device *dev = qdisc_dev(sch);
189 .handle = sch->handle,
190 .parent = sch->parent,
205 opt.set.qstats = &sch->qstats;
213 static void red_destroy(struct Qdisc *sch)
215 struct red_sched_data *q = qdisc_priv(sch);
217 tcf_qevent_destroy(&q->qe_mark, sch);
218 tcf_qevent_destroy(&q->qe_early_drop, sch);
220 red_offload(sch, false);
234 static int __red_change(struct Qdisc *sch, struct nlattr **tb,
238 struct red_sched_data *q = qdisc_priv(sch);
266 child = fifo_create_dflt(sch, &bfifo_qdisc_ops, ctl->limit,
275 sch_tree_lock(sch);
305 sch_tree_unlock(sch);
307 red_offload(sch, true);
314 sch_tree_unlock(sch);
323 struct Qdisc *sch = q->sch;
327 root_lock = qdisc_lock(qdisc_root_sleeping(sch));
335 static int red_init(struct Qdisc *sch, struct nlattr *opt,
338 struct red_sched_data *q = qdisc_priv(sch);
343 q->sch = sch;
354 err = __red_change(sch, tb, extack);
358 err = tcf_qevent_init(&q->qe_early_drop, sch,
364 return tcf_qevent_init(&q->qe_mark, sch,
369 static int red_change(struct Qdisc *sch, struct nlattr *opt,
372 struct red_sched_data *q = qdisc_priv(sch);
391 return __red_change(sch, tb, extack);
394 static int red_dump_offload_stats(struct Qdisc *sch)
398 .handle = sch->handle,
399 .parent = sch->parent,
401 .stats.bstats = &sch->bstats,
402 .stats.qstats = &sch->qstats,
406 return qdisc_offload_dump_helper(sch, TC_SETUP_QDISC_RED, &hw_stats);
409 static int red_dump(struct Qdisc *sch, struct sk_buff *skb)
411 struct red_sched_data *q = qdisc_priv(sch);
425 err = red_dump_offload_stats(sch);
446 static int red_dump_stats(struct Qdisc *sch, struct gnet_dump *d)
448 struct red_sched_data *q = qdisc_priv(sch);
449 struct net_device *dev = qdisc_dev(sch);
452 if (sch->flags & TCQ_F_OFFLOADED) {
455 .handle = sch->handle,
456 .parent = sch->parent,
471 static int red_dump_class(struct Qdisc *sch, unsigned long cl,
474 struct red_sched_data *q = qdisc_priv(sch);
481 static void red_graft_offload(struct Qdisc *sch,
486 .handle = sch->handle,
487 .parent = sch->parent,
492 qdisc_offload_graft_helper(qdisc_dev(sch), sch, new, old,
496 static int red_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
499 struct red_sched_data *q = qdisc_priv(sch);
504 *old = qdisc_replace(sch, new, &q->qdisc);
506 red_graft_offload(sch, new, *old, extack);
510 static struct Qdisc *red_leaf(struct Qdisc *sch, unsigned long arg)
512 struct red_sched_data *q = qdisc_priv(sch);
516 static unsigned long red_find(struct Qdisc *sch, u32 classid)
521 static void red_walk(struct Qdisc *sch, struct qdisc_walker *walker)
524 tc_qdisc_stats_dump(sch, 1, walker);