Lines Matching refs:sch
68 struct Qdisc *sch; member
92 static bool drop_early(struct Qdisc *sch, u32 packet_size) in drop_early() argument
94 struct pie_sched_data *q = qdisc_priv(sch); in drop_early()
97 u32 mtu = psched_mtu(qdisc_dev(sch)); in drop_early()
113 if (sch->qstats.backlog < 2 * mtu) in drop_early()
151 static int pie_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch, in pie_qdisc_enqueue() argument
154 struct pie_sched_data *q = qdisc_priv(sch); in pie_qdisc_enqueue()
157 if (unlikely(qdisc_qlen(sch) >= sch->limit)) { in pie_qdisc_enqueue()
162 if (!drop_early(sch, skb->len)) { in pie_qdisc_enqueue()
176 if (qdisc_qlen(sch) > q->stats.maxq) in pie_qdisc_enqueue()
177 q->stats.maxq = qdisc_qlen(sch); in pie_qdisc_enqueue()
179 return qdisc_enqueue_tail(skb, sch); in pie_qdisc_enqueue()
186 return qdisc_drop(skb, sch, to_free); in pie_qdisc_enqueue()
199 static int pie_change(struct Qdisc *sch, struct nlattr *opt, in pie_change() argument
202 struct pie_sched_data *q = qdisc_priv(sch); in pie_change()
215 sch_tree_lock(sch); in pie_change()
235 sch->limit = limit; in pie_change()
251 qlen = sch->q.qlen; in pie_change()
252 while (sch->q.qlen > sch->limit) { in pie_change()
253 struct sk_buff *skb = __qdisc_dequeue_head(&sch->q); in pie_change()
256 qdisc_qstats_backlog_dec(sch, skb); in pie_change()
257 rtnl_qdisc_drop(skb, sch); in pie_change()
259 qdisc_tree_reduce_backlog(sch, qlen - sch->q.qlen, dropped); in pie_change()
261 sch_tree_unlock(sch); in pie_change()
265 static void pie_process_dequeue(struct Qdisc *sch, struct sk_buff *skb) in pie_process_dequeue() argument
267 struct pie_sched_data *q = qdisc_priv(sch); in pie_process_dequeue()
268 int qlen = sch->qstats.backlog; /* current queue size in bytes */ in pie_process_dequeue()
330 static void calculate_probability(struct Qdisc *sch) in calculate_probability() argument
332 struct pie_sched_data *q = qdisc_priv(sch); in calculate_probability()
333 u32 qlen = sch->qstats.backlog; /* queue size in bytes */ in calculate_probability()
446 struct Qdisc *sch = q->sch; in pie_timer() local
447 spinlock_t *root_lock = qdisc_lock(qdisc_root_sleeping(sch)); in pie_timer()
450 calculate_probability(sch); in pie_timer()
458 static int pie_init(struct Qdisc *sch, struct nlattr *opt, in pie_init() argument
461 struct pie_sched_data *q = qdisc_priv(sch); in pie_init()
465 sch->limit = q->params.limit; in pie_init()
467 q->sch = sch; in pie_init()
471 int err = pie_change(sch, opt, extack); in pie_init()
481 static int pie_dump(struct Qdisc *sch, struct sk_buff *skb) in pie_dump() argument
483 struct pie_sched_data *q = qdisc_priv(sch); in pie_dump()
494 nla_put_u32(skb, TCA_PIE_LIMIT, sch->limit) || in pie_dump()
510 static int pie_dump_stats(struct Qdisc *sch, struct gnet_dump *d) in pie_dump_stats() argument
512 struct pie_sched_data *q = qdisc_priv(sch); in pie_dump_stats()
530 static struct sk_buff *pie_qdisc_dequeue(struct Qdisc *sch) in pie_qdisc_dequeue() argument
532 struct sk_buff *skb = qdisc_dequeue_head(sch); in pie_qdisc_dequeue()
537 pie_process_dequeue(sch, skb); in pie_qdisc_dequeue()
541 static void pie_reset(struct Qdisc *sch) in pie_reset() argument
543 struct pie_sched_data *q = qdisc_priv(sch); in pie_reset()
545 qdisc_reset_queue(sch); in pie_reset()
549 static void pie_destroy(struct Qdisc *sch) in pie_destroy() argument
551 struct pie_sched_data *q = qdisc_priv(sch); in pie_destroy()