Lines Matching defs:sch
91 static inline int gred_wred_mode_check(struct Qdisc *sch)
93 struct gred_sched *table = qdisc_priv(sch);
114 struct Qdisc *sch)
117 return sch->qstats.backlog;
164 static int gred_enqueue(struct sk_buff *skb, struct Qdisc *sch,
168 struct gred_sched *t = qdisc_priv(sch);
181 if (likely(sch->qstats.backlog + qdisc_pkt_len(skb) <=
182 sch->limit))
183 return qdisc_enqueue_tail(skb, sch);
213 gred_backlog(t, q, sch));
226 qdisc_qstats_overlimit(sch);
236 qdisc_qstats_overlimit(sch);
246 if (gred_backlog(t, q, sch) + qdisc_pkt_len(skb) <= q->limit) {
248 return qdisc_enqueue_tail(skb, sch);
253 return qdisc_drop(skb, sch, to_free);
256 qdisc_drop(skb, sch, to_free);
260 static struct sk_buff *gred_dequeue(struct Qdisc *sch)
263 struct gred_sched *t = qdisc_priv(sch);
265 skb = qdisc_dequeue_head(sch);
278 if (!sch->qstats.backlog)
292 static void gred_reset(struct Qdisc *sch)
295 struct gred_sched *t = qdisc_priv(sch);
297 qdisc_reset_queue(sch);
310 static void gred_offload(struct Qdisc *sch, enum tc_gred_command command)
312 struct gred_sched *table = qdisc_priv(sch);
313 struct net_device *dev = qdisc_dev(sch);
316 .handle = sch->handle,
317 .parent = sch->parent,
346 opt.set.qstats = &sch->qstats;
352 static int gred_offload_dump_stats(struct Qdisc *sch)
354 struct gred_sched *table = qdisc_priv(sch);
364 hw_stats->handle = sch->handle;
365 hw_stats->parent = sch->parent;
371 ret = qdisc_offload_dump_helper(sch, TC_SETUP_QDISC_GRED, hw_stats);
382 _bstats_update(&sch->bstats,
385 sch->qstats.qlen += hw_stats->stats.qstats[i].qlen;
386 sch->qstats.backlog += hw_stats->stats.qstats[i].backlog;
387 sch->qstats.drops += hw_stats->stats.qstats[i].drops;
388 sch->qstats.requeues += hw_stats->stats.qstats[i].requeues;
389 sch->qstats.overlimits += hw_stats->stats.qstats[i].overlimits;
401 static int gred_change_table_def(struct Qdisc *sch, struct nlattr *dps,
404 struct gred_sched *table = qdisc_priv(sch);
432 sch_tree_lock(sch);
443 sch_tree_unlock(sch);
448 if (gred_wred_mode_check(sch))
470 gred_offload(sch, TC_GRED_REPLACE);
474 static inline int gred_change_vq(struct Qdisc *sch, int dp,
480 struct gred_sched *table = qdisc_priv(sch);
498 if (ctl->limit > sch->limit)
499 q->limit = sch->limit;
635 static int gred_change(struct Qdisc *sch, struct nlattr *opt,
638 struct gred_sched *table = qdisc_priv(sch);
656 sch->limit = nla_get_u32(tb[TCA_GRED_LIMIT]);
657 return gred_change_table_def(sch, tb[TCA_GRED_DPS], extack);
700 sch_tree_lock(sch);
702 err = gred_change_vq(sch, ctl->DP, ctl, prio, stab, max_P, &prealloc,
712 if (gred_wred_mode_check(sch))
716 sch_tree_unlock(sch);
719 gred_offload(sch, TC_GRED_REPLACE);
723 sch_tree_unlock(sch);
728 static int gred_init(struct Qdisc *sch, struct nlattr *opt,
749 sch->limit = nla_get_u32(tb[TCA_GRED_LIMIT]);
751 sch->limit = qdisc_dev(sch)->tx_queue_len
752 * psched_mtu(qdisc_dev(sch));
754 return gred_change_table_def(sch, tb[TCA_GRED_DPS], extack);
757 static int gred_dump(struct Qdisc *sch, struct sk_buff *skb)
759 struct gred_sched *table = qdisc_priv(sch);
770 if (gred_offload_dump_stats(sch))
787 if (nla_put_u32(skb, TCA_GRED_LIMIT, sch->limit))
813 opt.backlog = gred_backlog(table, q, sch);
870 gred_backlog(table, q, sch)))
900 static void gred_destroy(struct Qdisc *sch)
902 struct gred_sched *table = qdisc_priv(sch);
909 gred_offload(sch, TC_GRED_DESTROY);