Lines Matching +full:1 +full:q

21  * has no traffic then band 1, etc.
54 u8 prio2band[TC_PRIO_MAX + 1];
58 static const struct nla_policy ets_policy[TCA_ETS_MAX + 1] = {
65 static const struct nla_policy ets_priomap_policy[TCA_ETS_MAX + 1] = {
69 static const struct nla_policy ets_quanta_policy[TCA_ETS_MAX + 1] = {
73 static const struct nla_policy ets_class_policy[TCA_ETS_MAX + 1] = {
92 struct ets_sched *q = qdisc_priv(sch); in ets_class_from_arg() local
94 if (arg == 0 || arg > q->nbands) in ets_class_from_arg()
96 return &q->classes[arg - 1]; in ets_class_from_arg()
101 struct ets_sched *q = qdisc_priv(sch); in ets_class_id() local
102 int band = cl - q->classes; in ets_class_id()
104 return TC_H_MAKE(sch->handle, band + 1); in ets_class_id()
110 struct ets_sched *q = qdisc_priv(sch); in ets_offload_change() local
126 qopt.replace_params.bands = q->nbands; in ets_offload_change()
129 q->prio2band, sizeof(q->prio2band)); in ets_offload_change()
131 for (i = 0; i < q->nbands; i++) in ets_offload_change()
132 q_sum += q->classes[i].quantum; in ets_offload_change()
134 for (i = 0; i < q->nbands; i++) { in ets_offload_change()
135 quantum = q->classes[i].quantum; in ets_offload_change()
172 qopt.graft_params.band = arg - 1; in ets_offload_graft()
192 static bool ets_class_is_strict(struct ets_sched *q, const struct ets_class *cl) in ets_class_is_strict() argument
194 unsigned int band = cl - q->classes; in ets_class_is_strict()
196 return band < q->nstrict; in ets_class_is_strict()
204 struct ets_sched *q = qdisc_priv(sch); in ets_class_change() local
206 struct nlattr *tb[TCA_ETS_MAX + 1]; in ets_class_change()
231 if (ets_class_is_strict(q, cl)) { in ets_class_change()
279 struct ets_sched *q = qdisc_priv(sch); in ets_class_find() local
281 if (band - 1 >= q->nbands) in ets_class_find()
289 struct ets_sched *q = qdisc_priv(sch); in ets_class_qlen_notify() local
295 if (!ets_class_is_strict(q, cl) && sch->q.qlen) in ets_class_qlen_notify()
303 struct ets_sched *q = qdisc_priv(sch); in ets_class_dump() local
313 if (!ets_class_is_strict(q, cl)) { in ets_class_dump()
332 return -1; in ets_class_dump_stats()
339 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_walk() local
345 for (i = 0; i < q->nbands; i++) { in ets_qdisc_walk()
346 if (!tc_qdisc_stats_dump(sch, i + 1, arg)) in ets_qdisc_walk()
355 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_tcf_block() local
362 return q->block; in ets_qdisc_tcf_block()
378 struct ets_sched *q = qdisc_priv(sch); in ets_classify() local
386 fl = rcu_dereference_bh(q->filter_list); in ets_classify()
402 return &q->classes[q->prio2band[band & TC_PRIO_MAX]]; in ets_classify()
406 band = TC_H_MIN(band) - 1; in ets_classify()
407 if (band >= q->nbands) in ets_classify()
408 return &q->classes[q->prio2band[0]]; in ets_classify()
409 return &q->classes[band]; in ets_classify()
416 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_enqueue() local
429 first = !cl->qdisc->q.qlen; in ets_qdisc_enqueue()
439 if (first && !ets_class_is_strict(q, cl)) { in ets_qdisc_enqueue()
440 list_add_tail(&cl->alist, &q->active); in ets_qdisc_enqueue()
445 sch->q.qlen++; in ets_qdisc_enqueue()
454 sch->q.qlen--; in ets_qdisc_dequeue_skb()
460 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_dequeue() local
466 while (1) { in ets_qdisc_dequeue()
467 for (band = 0; band < q->nstrict; band++) { in ets_qdisc_dequeue()
468 cl = &q->classes[band]; in ets_qdisc_dequeue()
474 if (list_empty(&q->active)) in ets_qdisc_dequeue()
477 cl = list_first_entry(&q->active, struct ets_class, alist); in ets_qdisc_dequeue()
490 if (cl->qdisc->q.qlen == 0) in ets_qdisc_dequeue()
496 list_move_tail(&cl->alist, &q->active); in ets_qdisc_dequeue()
533 WARN_ON_ONCE(1); /* Validate should have caught this. */ in ets_qdisc_priomap_parse()
570 WARN_ON_ONCE(1); /* Validate should have caught this. */ in ets_qdisc_quanta_parse()
583 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_change() local
584 struct nlattr *tb[TCA_ETS_MAX + 1]; in ets_qdisc_change()
585 unsigned int oldbands = q->nbands; in ets_qdisc_change()
586 u8 priomap[TC_PRIO_MAX + 1]; in ets_qdisc_change()
601 if (nbands < 1 || nbands > TCQ_ETS_MAX_BANDS) { in ets_qdisc_change()
606 memset(priomap, nbands - 1, sizeof(priomap)); in ets_qdisc_change()
640 ets_class_id(sch, &q->classes[i]), in ets_qdisc_change()
651 WRITE_ONCE(q->nbands, nbands); in ets_qdisc_change()
652 for (i = nstrict; i < q->nstrict; i++) { in ets_qdisc_change()
653 if (q->classes[i].qdisc->q.qlen) { in ets_qdisc_change()
654 list_add_tail(&q->classes[i].alist, &q->active); in ets_qdisc_change()
655 q->classes[i].deficit = quanta[i]; in ets_qdisc_change()
658 for (i = q->nbands; i < oldbands; i++) { in ets_qdisc_change()
659 if (i >= q->nstrict && q->classes[i].qdisc->q.qlen) in ets_qdisc_change()
660 list_del(&q->classes[i].alist); in ets_qdisc_change()
661 qdisc_tree_flush_backlog(q->classes[i].qdisc); in ets_qdisc_change()
663 WRITE_ONCE(q->nstrict, nstrict); in ets_qdisc_change()
664 memcpy(q->prio2band, priomap, sizeof(priomap)); in ets_qdisc_change()
666 for (i = 0; i < q->nbands; i++) in ets_qdisc_change()
667 WRITE_ONCE(q->classes[i].quantum, quanta[i]); in ets_qdisc_change()
669 for (i = oldbands; i < q->nbands; i++) { in ets_qdisc_change()
670 q->classes[i].qdisc = queues[i]; in ets_qdisc_change()
671 if (q->classes[i].qdisc != &noop_qdisc) in ets_qdisc_change()
672 qdisc_hash_add(q->classes[i].qdisc, true); in ets_qdisc_change()
678 for (i = q->nbands; i < oldbands; i++) { in ets_qdisc_change()
679 qdisc_put(q->classes[i].qdisc); in ets_qdisc_change()
680 q->classes[i].qdisc = NULL; in ets_qdisc_change()
681 WRITE_ONCE(q->classes[i].quantum, 0); in ets_qdisc_change()
682 q->classes[i].deficit = 0; in ets_qdisc_change()
683 gnet_stats_basic_sync_init(&q->classes[i].bstats); in ets_qdisc_change()
684 memset(&q->classes[i].qstats, 0, sizeof(q->classes[i].qstats)); in ets_qdisc_change()
692 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_init() local
698 err = tcf_block_get(&q->block, &q->filter_list, sch, extack); in ets_qdisc_init()
702 INIT_LIST_HEAD(&q->active); in ets_qdisc_init()
704 INIT_LIST_HEAD(&q->classes[i].alist); in ets_qdisc_init()
711 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_reset() local
714 for (band = q->nstrict; band < q->nbands; band++) { in ets_qdisc_reset()
715 if (q->classes[band].qdisc->q.qlen) in ets_qdisc_reset()
716 list_del(&q->classes[band].alist); in ets_qdisc_reset()
718 for (band = 0; band < q->nbands; band++) in ets_qdisc_reset()
719 qdisc_reset(q->classes[band].qdisc); in ets_qdisc_reset()
724 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_destroy() local
728 tcf_block_put(q->block); in ets_qdisc_destroy()
729 for (band = 0; band < q->nbands; band++) in ets_qdisc_destroy()
730 qdisc_put(q->classes[band].qdisc); in ets_qdisc_destroy()
735 struct ets_sched *q = qdisc_priv(sch); in ets_qdisc_dump() local
751 nbands = READ_ONCE(q->nbands); in ets_qdisc_dump()
755 nstrict = READ_ONCE(q->nstrict); in ets_qdisc_dump()
766 READ_ONCE(q->classes[band].quantum))) in ets_qdisc_dump()
779 READ_ONCE(q->prio2band[prio]))) in ets_qdisc_dump()