Lines Matching +full:1 +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 WRITE_ONCE(q->stats.prob_drop, in red_enqueue()
94 q->stats.prob_drop + 1); in red_enqueue()
99 WRITE_ONCE(q->stats.prob_mark, in red_enqueue()
100 q->stats.prob_mark + 1); in red_enqueue()
101 skb = tcf_qevent_handle(&q->qe_mark, sch, skb, to_free, &ret); in red_enqueue()
104 } else if (!red_use_nodrop(q)) { in red_enqueue()
105 WRITE_ONCE(q->stats.prob_drop, in red_enqueue()
106 q->stats.prob_drop + 1); in red_enqueue()
116 if (red_use_harddrop(q) || !red_use_ecn(q)) { in red_enqueue()
117 WRITE_ONCE(q->stats.forced_drop, in red_enqueue()
118 q->stats.forced_drop + 1); in red_enqueue()
123 WRITE_ONCE(q->stats.forced_mark, in red_enqueue()
124 q->stats.forced_mark + 1); in red_enqueue()
125 skb = tcf_qevent_handle(&q->qe_mark, sch, skb, to_free, &ret); in red_enqueue()
128 } else if (!red_use_nodrop(q)) { in red_enqueue()
129 WRITE_ONCE(q->stats.forced_drop, in red_enqueue()
130 q->stats.forced_drop + 1); in red_enqueue()
142 sch->q.qlen++; in red_enqueue()
144 WRITE_ONCE(q->stats.pdrop, in red_enqueue()
145 q->stats.pdrop + 1); in red_enqueue()
151 skb = tcf_qevent_handle(&q->qe_early_drop, sch, skb, to_free, &ret); in red_enqueue()
162 struct red_sched_data *q = qdisc_priv(sch); in red_dequeue() local
163 struct Qdisc *child = q->qdisc; in red_dequeue()
169 sch->q.qlen--; in red_dequeue()
171 if (!red_is_idling(&q->vars)) in red_dequeue()
172 red_start_of_idle_period(&q->vars); in red_dequeue()
179 struct red_sched_data *q = qdisc_priv(sch); in red_peek() local
180 struct Qdisc *child = q->qdisc; in red_peek()
187 struct red_sched_data *q = qdisc_priv(sch); in red_reset() local
189 qdisc_reset(q->qdisc); in red_reset()
190 red_restart(&q->vars); in red_reset()
195 struct red_sched_data *q = qdisc_priv(sch); in red_offload() local
207 opt.set.min = q->parms.qth_min >> q->parms.Wlog; in red_offload()
208 opt.set.max = q->parms.qth_max >> q->parms.Wlog; in red_offload()
209 opt.set.probability = q->parms.max_P; in red_offload()
210 opt.set.limit = q->limit; in red_offload()
211 opt.set.is_ecn = red_use_ecn(q); in red_offload()
212 opt.set.is_harddrop = red_use_harddrop(q); in red_offload()
213 opt.set.is_nodrop = red_use_nodrop(q); in red_offload()
224 struct red_sched_data *q = qdisc_priv(sch); in red_destroy() local
226 tcf_qevent_destroy(&q->qe_mark, sch); in red_destroy()
227 tcf_qevent_destroy(&q->qe_early_drop, sch); in red_destroy()
228 timer_delete_sync(&q->adapt_timer); in red_destroy()
230 qdisc_put(q->qdisc); in red_destroy()
233 static const struct nla_policy red_policy[TCA_RED_MAX + 1] = {
247 struct red_sched_data *q = qdisc_priv(sch); in __red_change() local
286 flags = (q->flags & ~flags_bf.selector) | flags_bf.value; in __red_change()
291 q->flags = flags; in __red_change()
292 q->userbits = userbits; in __red_change()
293 q->limit = ctl->limit; in __red_change()
295 qdisc_purge_queue(q->qdisc); in __red_change()
296 old_child = q->qdisc; in __red_change()
297 q->qdisc = child; in __red_change()
300 red_set_parms(&q->parms, in __red_change()
305 red_set_vars(&q->vars); in __red_change()
307 timer_delete(&q->adapt_timer); in __red_change()
309 mod_timer(&q->adapt_timer, jiffies + HZ/2); in __red_change()
311 if (!q->qdisc->q.qlen) in __red_change()
312 red_start_of_idle_period(&q->vars); in __red_change()
331 struct red_sched_data *q = timer_container_of(q, t, adapt_timer); in red_adaptative_timer() local
332 struct Qdisc *sch = q->sch; in red_adaptative_timer()
338 red_adaptative_algo(&q->parms, &q->vars); in red_adaptative_timer()
339 mod_timer(&q->adapt_timer, jiffies + HZ/2); in red_adaptative_timer()
347 struct red_sched_data *q = qdisc_priv(sch); in red_init() local
348 struct nlattr *tb[TCA_RED_MAX + 1]; in red_init()
351 q->qdisc = &noop_qdisc; in red_init()
352 q->sch = sch; in red_init()
353 timer_setup(&q->adapt_timer, red_adaptative_timer, 0); in red_init()
367 err = tcf_qevent_init(&q->qe_early_drop, sch, in red_init()
373 return tcf_qevent_init(&q->qe_mark, sch, in red_init()
381 struct red_sched_data *q = qdisc_priv(sch); in red_change() local
382 struct nlattr *tb[TCA_RED_MAX + 1]; in red_change()
390 err = tcf_qevent_validate_change(&q->qe_early_drop, in red_change()
395 err = tcf_qevent_validate_change(&q->qe_mark, in red_change()
420 struct red_sched_data *q = qdisc_priv(sch); in red_dump() local
423 .limit = q->limit, in red_dump()
424 .flags = (q->flags & TC_RED_HISTORIC_FLAGS) | in red_dump()
425 q->userbits, in red_dump()
426 .qth_min = q->parms.qth_min >> q->parms.Wlog, in red_dump()
427 .qth_max = q->parms.qth_max >> q->parms.Wlog, in red_dump()
428 .Wlog = q->parms.Wlog, in red_dump()
429 .Plog = q->parms.Plog, in red_dump()
430 .Scell_log = q->parms.Scell_log, in red_dump()
442 nla_put_u32(skb, TCA_RED_MAX_P, q->parms.max_P) || in red_dump()
444 q->flags, TC_RED_SUPPORTED_FLAGS) || in red_dump()
445 tcf_qevent_dump(skb, TCA_RED_MARK_BLOCK, &q->qe_mark) || in red_dump()
446 tcf_qevent_dump(skb, TCA_RED_EARLY_DROP_BLOCK, &q->qe_early_drop)) in red_dump()
457 struct red_sched_data *q = qdisc_priv(sch); in red_dump_stats() local
467 .xstats = &q->stats, in red_dump_stats()
473 st.early = READ_ONCE(q->stats.prob_drop) + in red_dump_stats()
474 READ_ONCE(q->stats.forced_drop); in red_dump_stats()
476 st.pdrop = READ_ONCE(q->stats.pdrop); in red_dump_stats()
478 st.marked = READ_ONCE(q->stats.prob_mark) + in red_dump_stats()
479 READ_ONCE(q->stats.forced_mark); in red_dump_stats()
487 struct red_sched_data *q = qdisc_priv(sch); in red_dump_class() local
489 tcm->tcm_handle |= TC_H_MIN(1); in red_dump_class()
490 tcm->tcm_info = q->qdisc->handle; in red_dump_class()
512 struct red_sched_data *q = qdisc_priv(sch); in red_graft() local
517 *old = qdisc_replace(sch, new, &q->qdisc); in red_graft()
525 struct red_sched_data *q = qdisc_priv(sch); in red_leaf() local
526 return q->qdisc; in red_leaf()
531 return 1; in red_find()
537 tc_qdisc_stats_dump(sch, 1, walker); in red_walk()