Lines Matching full:q

55 static inline int red_use_ecn(struct red_sched_data *q)  in red_use_ecn()  argument
57 return q->flags & TC_RED_ECN; in red_use_ecn()
60 static inline int red_use_harddrop(struct red_sched_data *q) in red_use_harddrop() argument
62 return q->flags & TC_RED_HARDDROP; in red_use_harddrop()
65 static int red_use_nodrop(struct red_sched_data *q) in red_use_nodrop() argument
67 return q->flags & TC_RED_NODROP; in red_use_nodrop()
74 struct red_sched_data *q = qdisc_priv(sch); in red_enqueue() local
75 struct Qdisc *child = q->qdisc; in red_enqueue()
79 q->vars.qavg = red_calc_qavg(&q->parms, in red_enqueue()
80 &q->vars, in red_enqueue()
83 if (red_is_idling(&q->vars)) in red_enqueue()
84 red_end_of_idle_period(&q->vars); in red_enqueue()
86 switch (red_action(&q->parms, &q->vars, q->vars.qavg)) { in red_enqueue()
92 if (!red_use_ecn(q)) { in red_enqueue()
93 q->stats.prob_drop++; in red_enqueue()
98 q->stats.prob_mark++; in red_enqueue()
99 skb = tcf_qevent_handle(&q->qe_mark, sch, skb, to_free, &ret); in red_enqueue()
102 } else if (!red_use_nodrop(q)) { in red_enqueue()
103 q->stats.prob_drop++; in red_enqueue()
113 if (red_use_harddrop(q) || !red_use_ecn(q)) { in red_enqueue()
114 q->stats.forced_drop++; in red_enqueue()
119 q->stats.forced_mark++; in red_enqueue()
120 skb = tcf_qevent_handle(&q->qe_mark, sch, skb, to_free, &ret); in red_enqueue()
123 } else if (!red_use_nodrop(q)) { in red_enqueue()
124 q->stats.forced_drop++; in red_enqueue()
136 sch->q.qlen++; in red_enqueue()
138 q->stats.pdrop++; in red_enqueue()
144 skb = tcf_qevent_handle(&q->qe_early_drop, sch, skb, to_free, &ret); in red_enqueue()
155 struct red_sched_data *q = qdisc_priv(sch); in red_dequeue() local
156 struct Qdisc *child = q->qdisc; in red_dequeue()
162 sch->q.qlen--; in red_dequeue()
164 if (!red_is_idling(&q->vars)) in red_dequeue()
165 red_start_of_idle_period(&q->vars); in red_dequeue()
172 struct red_sched_data *q = qdisc_priv(sch); in red_peek() local
173 struct Qdisc *child = q->qdisc; in red_peek()
180 struct red_sched_data *q = qdisc_priv(sch); in red_reset() local
182 qdisc_reset(q->qdisc); in red_reset()
183 red_restart(&q->vars); in red_reset()
188 struct red_sched_data *q = qdisc_priv(sch); in red_offload() local
200 opt.set.min = q->parms.qth_min >> q->parms.Wlog; in red_offload()
201 opt.set.max = q->parms.qth_max >> q->parms.Wlog; in red_offload()
202 opt.set.probability = q->parms.max_P; in red_offload()
203 opt.set.limit = q->limit; in red_offload()
204 opt.set.is_ecn = red_use_ecn(q); in red_offload()
205 opt.set.is_harddrop = red_use_harddrop(q); in red_offload()
206 opt.set.is_nodrop = red_use_nodrop(q); in red_offload()
217 struct red_sched_data *q = qdisc_priv(sch); in red_destroy() local
219 tcf_qevent_destroy(&q->qe_mark, sch); in red_destroy()
220 tcf_qevent_destroy(&q->qe_early_drop, sch); in red_destroy()
221 del_timer_sync(&q->adapt_timer); in red_destroy()
223 qdisc_put(q->qdisc); in red_destroy()
240 struct red_sched_data *q = qdisc_priv(sch); in __red_change() local
279 flags = (q->flags & ~flags_bf.selector) | flags_bf.value; in __red_change()
284 q->flags = flags; in __red_change()
285 q->userbits = userbits; in __red_change()
286 q->limit = ctl->limit; in __red_change()
288 qdisc_tree_flush_backlog(q->qdisc); in __red_change()
289 old_child = q->qdisc; in __red_change()
290 q->qdisc = child; in __red_change()
293 red_set_parms(&q->parms, in __red_change()
298 red_set_vars(&q->vars); in __red_change()
300 del_timer(&q->adapt_timer); in __red_change()
302 mod_timer(&q->adapt_timer, jiffies + HZ/2); in __red_change()
304 if (!q->qdisc->q.qlen) in __red_change()
305 red_start_of_idle_period(&q->vars); in __red_change()
324 struct red_sched_data *q = from_timer(q, t, adapt_timer); in red_adaptative_timer() local
325 struct Qdisc *sch = q->sch; in red_adaptative_timer()
331 red_adaptative_algo(&q->parms, &q->vars); in red_adaptative_timer()
332 mod_timer(&q->adapt_timer, jiffies + HZ/2); in red_adaptative_timer()
340 struct red_sched_data *q = qdisc_priv(sch); in red_init() local
344 q->qdisc = &noop_qdisc; in red_init()
345 q->sch = sch; in red_init()
346 timer_setup(&q->adapt_timer, red_adaptative_timer, 0); in red_init()
360 err = tcf_qevent_init(&q->qe_early_drop, sch, in red_init()
366 return tcf_qevent_init(&q->qe_mark, sch, in red_init()
374 struct red_sched_data *q = qdisc_priv(sch); in red_change() local
383 err = tcf_qevent_validate_change(&q->qe_early_drop, in red_change()
388 err = tcf_qevent_validate_change(&q->qe_mark, in red_change()
413 struct red_sched_data *q = qdisc_priv(sch); in red_dump() local
416 .limit = q->limit, in red_dump()
417 .flags = (q->flags & TC_RED_HISTORIC_FLAGS) | in red_dump()
418 q->userbits, in red_dump()
419 .qth_min = q->parms.qth_min >> q->parms.Wlog, in red_dump()
420 .qth_max = q->parms.qth_max >> q->parms.Wlog, in red_dump()
421 .Wlog = q->parms.Wlog, in red_dump()
422 .Plog = q->parms.Plog, in red_dump()
423 .Scell_log = q->parms.Scell_log, in red_dump()
435 nla_put_u32(skb, TCA_RED_MAX_P, q->parms.max_P) || in red_dump()
437 q->flags, TC_RED_SUPPORTED_FLAGS) || in red_dump()
438 tcf_qevent_dump(skb, TCA_RED_MARK_BLOCK, &q->qe_mark) || in red_dump()
439 tcf_qevent_dump(skb, TCA_RED_EARLY_DROP_BLOCK, &q->qe_early_drop)) in red_dump()
450 struct red_sched_data *q = qdisc_priv(sch); in red_dump_stats() local
460 .xstats = &q->stats, in red_dump_stats()
466 st.early = q->stats.prob_drop + q->stats.forced_drop; in red_dump_stats()
467 st.pdrop = q->stats.pdrop; in red_dump_stats()
468 st.marked = q->stats.prob_mark + q->stats.forced_mark; in red_dump_stats()
476 struct red_sched_data *q = qdisc_priv(sch); in red_dump_class() local
479 tcm->tcm_info = q->qdisc->handle; in red_dump_class()
501 struct red_sched_data *q = qdisc_priv(sch); in red_graft() local
506 *old = qdisc_replace(sch, new, &q->qdisc); in red_graft()
514 struct red_sched_data *q = qdisc_priv(sch); in red_leaf() local
515 return q->qdisc; in red_leaf()