Lines Matching refs:cl

58 	struct drr_class *cl = (struct drr_class *)*arg;  in drr_change_class()  local
83 if (cl != NULL) { in drr_change_class()
85 err = gen_replace_estimator(&cl->bstats, NULL, in drr_change_class()
86 &cl->rate_est, in drr_change_class()
97 cl->quantum = quantum; in drr_change_class()
103 cl = kzalloc(sizeof(struct drr_class), GFP_KERNEL); in drr_change_class()
104 if (cl == NULL) in drr_change_class()
107 gnet_stats_basic_sync_init(&cl->bstats); in drr_change_class()
108 cl->common.classid = classid; in drr_change_class()
109 cl->quantum = quantum; in drr_change_class()
110 cl->qdisc = qdisc_create_dflt(sch->dev_queue, in drr_change_class()
113 if (cl->qdisc == NULL) in drr_change_class()
114 cl->qdisc = &noop_qdisc; in drr_change_class()
116 qdisc_hash_add(cl->qdisc, true); in drr_change_class()
119 err = gen_replace_estimator(&cl->bstats, NULL, &cl->rate_est, in drr_change_class()
123 qdisc_put(cl->qdisc); in drr_change_class()
124 kfree(cl); in drr_change_class()
130 qdisc_class_hash_insert(&q->clhash, &cl->common); in drr_change_class()
135 *arg = (unsigned long)cl; in drr_change_class()
139 static void drr_destroy_class(struct Qdisc *sch, struct drr_class *cl) in drr_destroy_class() argument
141 gen_kill_estimator(&cl->rate_est); in drr_destroy_class()
142 qdisc_put(cl->qdisc); in drr_destroy_class()
143 kfree(cl); in drr_destroy_class()
150 struct drr_class *cl = (struct drr_class *)arg; in drr_delete_class() local
152 if (qdisc_class_in_use(&cl->common)) { in drr_delete_class()
159 qdisc_purge_queue(cl->qdisc); in drr_delete_class()
160 qdisc_class_hash_remove(&q->clhash, &cl->common); in drr_delete_class()
164 drr_destroy_class(sch, cl); in drr_delete_class()
173 static struct tcf_block *drr_tcf_block(struct Qdisc *sch, unsigned long cl, in drr_tcf_block() argument
178 if (cl) { in drr_tcf_block()
189 struct drr_class *cl = drr_find_class(sch, classid); in drr_bind_tcf() local
191 if (cl) in drr_bind_tcf()
192 qdisc_class_get(&cl->common); in drr_bind_tcf()
194 return (unsigned long)cl; in drr_bind_tcf()
199 struct drr_class *cl = (struct drr_class *)arg; in drr_unbind_tcf() local
201 qdisc_class_put(&cl->common); in drr_unbind_tcf()
208 struct drr_class *cl = (struct drr_class *)arg; in drr_graft_class() local
212 cl->common.classid, NULL); in drr_graft_class()
217 *old = qdisc_replace(sch, new, &cl->qdisc); in drr_graft_class()
223 struct drr_class *cl = (struct drr_class *)arg; in drr_class_leaf() local
225 return cl->qdisc; in drr_class_leaf()
230 struct drr_class *cl = (struct drr_class *)arg; in drr_qlen_notify() local
232 list_del(&cl->alist); in drr_qlen_notify()
238 struct drr_class *cl = (struct drr_class *)arg; in drr_dump_class() local
242 tcm->tcm_handle = cl->common.classid; in drr_dump_class()
243 tcm->tcm_info = cl->qdisc->handle; in drr_dump_class()
248 if (nla_put_u32(skb, TCA_DRR_QUANTUM, cl->quantum)) in drr_dump_class()
260 struct drr_class *cl = (struct drr_class *)arg; in drr_dump_class_stats() local
261 __u32 qlen = qdisc_qlen_sum(cl->qdisc); in drr_dump_class_stats()
262 struct Qdisc *cl_q = cl->qdisc; in drr_dump_class_stats()
267 xstats.deficit = cl->deficit; in drr_dump_class_stats()
269 if (gnet_stats_copy_basic(d, NULL, &cl->bstats, true) < 0 || in drr_dump_class_stats()
270 gnet_stats_copy_rate_est(d, &cl->rate_est) < 0 || in drr_dump_class_stats()
280 struct drr_class *cl; in drr_walk() local
287 hlist_for_each_entry(cl, &q->clhash.hash[i], common.hnode) { in drr_walk()
288 if (!tc_qdisc_stats_dump(sch, (unsigned long)cl, arg)) in drr_walk()
298 struct drr_class *cl; in drr_classify() local
304 cl = drr_find_class(sch, skb->priority); in drr_classify()
305 if (cl != NULL) in drr_classify()
306 return cl; in drr_classify()
324 cl = (struct drr_class *)res.class; in drr_classify()
325 if (cl == NULL) in drr_classify()
326 cl = drr_find_class(sch, res.classid); in drr_classify()
327 return cl; in drr_classify()
337 struct drr_class *cl; in drr_enqueue() local
341 cl = drr_classify(skb, sch, &err); in drr_enqueue()
342 if (cl == NULL) { in drr_enqueue()
349 first = !cl->qdisc->q.qlen; in drr_enqueue()
350 err = qdisc_enqueue(skb, cl->qdisc, to_free); in drr_enqueue()
353 cl->qstats.drops++; in drr_enqueue()
360 list_add_tail(&cl->alist, &q->active); in drr_enqueue()
361 cl->deficit = cl->quantum; in drr_enqueue()
372 struct drr_class *cl; in drr_dequeue() local
379 cl = list_first_entry(&q->active, struct drr_class, alist); in drr_dequeue()
380 skb = cl->qdisc->ops->peek(cl->qdisc); in drr_dequeue()
382 qdisc_warn_nonwc(__func__, cl->qdisc); in drr_dequeue()
387 if (len <= cl->deficit) { in drr_dequeue()
388 cl->deficit -= len; in drr_dequeue()
389 skb = qdisc_dequeue_peeked(cl->qdisc); in drr_dequeue()
392 if (cl->qdisc->q.qlen == 0) in drr_dequeue()
393 list_del(&cl->alist); in drr_dequeue()
395 bstats_update(&cl->bstats, skb); in drr_dequeue()
402 cl->deficit += cl->quantum; in drr_dequeue()
403 list_move_tail(&cl->alist, &q->active); in drr_dequeue()
428 struct drr_class *cl; in drr_reset_qdisc() local
432 hlist_for_each_entry(cl, &q->clhash.hash[i], common.hnode) { in drr_reset_qdisc()
433 if (cl->qdisc->q.qlen) in drr_reset_qdisc()
434 list_del(&cl->alist); in drr_reset_qdisc()
435 qdisc_reset(cl->qdisc); in drr_reset_qdisc()
443 struct drr_class *cl; in drr_destroy_qdisc() local
450 hlist_for_each_entry_safe(cl, next, &q->clhash.hash[i], in drr_destroy_qdisc()
452 drr_destroy_class(sch, cl); in drr_destroy_qdisc()