Lines Matching refs:sch
77 struct Qdisc *sch; member
99 static bool drop_early(struct Qdisc *sch, u32 packet_size) in drop_early() argument
101 struct pie_sched_data *q = qdisc_priv(sch); in drop_early()
104 u32 mtu = psched_mtu(qdisc_dev(sch)); in drop_early()
120 if (sch->qstats.backlog < 2 * mtu) in drop_early()
138 static int pie_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch, in pie_qdisc_enqueue() argument
141 struct pie_sched_data *q = qdisc_priv(sch); in pie_qdisc_enqueue()
144 if (unlikely(qdisc_qlen(sch) >= sch->limit)) { in pie_qdisc_enqueue()
149 if (!drop_early(sch, skb->len)) { in pie_qdisc_enqueue()
163 if (qdisc_qlen(sch) > q->stats.maxq) in pie_qdisc_enqueue()
164 q->stats.maxq = qdisc_qlen(sch); in pie_qdisc_enqueue()
166 return qdisc_enqueue_tail(skb, sch); in pie_qdisc_enqueue()
171 return qdisc_drop(skb, sch, to_free); in pie_qdisc_enqueue()
184 static int pie_change(struct Qdisc *sch, struct nlattr *opt, in pie_change() argument
187 struct pie_sched_data *q = qdisc_priv(sch); in pie_change()
199 sch_tree_lock(sch); in pie_change()
218 sch->limit = limit; in pie_change()
234 qlen = sch->q.qlen; in pie_change()
235 while (sch->q.qlen > sch->limit) { in pie_change()
236 struct sk_buff *skb = __qdisc_dequeue_head(&sch->q); in pie_change()
239 qdisc_qstats_backlog_dec(sch, skb); in pie_change()
240 rtnl_qdisc_drop(skb, sch); in pie_change()
242 qdisc_tree_reduce_backlog(sch, qlen - sch->q.qlen, dropped); in pie_change()
244 sch_tree_unlock(sch); in pie_change()
248 static void pie_process_dequeue(struct Qdisc *sch, struct sk_buff *skb) in pie_process_dequeue() argument
251 struct pie_sched_data *q = qdisc_priv(sch); in pie_process_dequeue()
252 int qlen = sch->qstats.backlog; /* current queue size in bytes */ in pie_process_dequeue()
314 static void calculate_probability(struct Qdisc *sch) in calculate_probability() argument
316 struct pie_sched_data *q = qdisc_priv(sch); in calculate_probability()
317 u32 qlen = sch->qstats.backlog; /* queue size in bytes */ in calculate_probability()
430 struct Qdisc *sch = q->sch; in pie_timer() local
431 spinlock_t *root_lock = qdisc_lock(qdisc_root_sleeping(sch)); in pie_timer()
434 calculate_probability(sch); in pie_timer()
443 static int pie_init(struct Qdisc *sch, struct nlattr *opt, in pie_init() argument
446 struct pie_sched_data *q = qdisc_priv(sch); in pie_init()
450 sch->limit = q->params.limit; in pie_init()
452 q->sch = sch; in pie_init()
456 int err = pie_change(sch, opt, extack); in pie_init()
466 static int pie_dump(struct Qdisc *sch, struct sk_buff *skb) in pie_dump() argument
468 struct pie_sched_data *q = qdisc_priv(sch); in pie_dump()
479 nla_put_u32(skb, TCA_PIE_LIMIT, sch->limit) || in pie_dump()
495 static int pie_dump_stats(struct Qdisc *sch, struct gnet_dump *d) in pie_dump_stats() argument
497 struct pie_sched_data *q = qdisc_priv(sch); in pie_dump_stats()
515 static struct sk_buff *pie_qdisc_dequeue(struct Qdisc *sch) in pie_qdisc_dequeue() argument
518 skb = qdisc_dequeue_head(sch); in pie_qdisc_dequeue()
523 pie_process_dequeue(sch, skb); in pie_qdisc_dequeue()
527 static void pie_reset(struct Qdisc *sch) in pie_reset() argument
529 struct pie_sched_data *q = qdisc_priv(sch); in pie_reset()
530 qdisc_reset_queue(sch); in pie_reset()
534 static void pie_destroy(struct Qdisc *sch) in pie_destroy() argument
536 struct pie_sched_data *q = qdisc_priv(sch); in pie_destroy()