Lines Matching refs:cl

53 static void drr_purge_queue(struct drr_class *cl)  in drr_purge_queue()  argument
55 unsigned int len = cl->qdisc->q.qlen; in drr_purge_queue()
57 qdisc_reset(cl->qdisc); in drr_purge_queue()
58 qdisc_tree_decrease_qlen(cl->qdisc, len); in drr_purge_queue()
69 struct drr_class *cl = (struct drr_class *)*arg; in drr_change_class() local
89 if (cl != NULL) { in drr_change_class()
91 err = gen_replace_estimator(&cl->bstats, NULL, in drr_change_class()
92 &cl->rate_est, in drr_change_class()
101 cl->quantum = quantum; in drr_change_class()
107 cl = kzalloc(sizeof(struct drr_class), GFP_KERNEL); in drr_change_class()
108 if (cl == NULL) in drr_change_class()
111 cl->refcnt = 1; in drr_change_class()
112 cl->common.classid = classid; in drr_change_class()
113 cl->quantum = quantum; in drr_change_class()
114 cl->qdisc = qdisc_create_dflt(sch->dev_queue, in drr_change_class()
116 if (cl->qdisc == NULL) in drr_change_class()
117 cl->qdisc = &noop_qdisc; in drr_change_class()
120 err = gen_replace_estimator(&cl->bstats, NULL, &cl->rate_est, in drr_change_class()
124 qdisc_destroy(cl->qdisc); in drr_change_class()
125 kfree(cl); in drr_change_class()
131 qdisc_class_hash_insert(&q->clhash, &cl->common); in drr_change_class()
136 *arg = (unsigned long)cl; in drr_change_class()
140 static void drr_destroy_class(struct Qdisc *sch, struct drr_class *cl) in drr_destroy_class() argument
142 gen_kill_estimator(&cl->bstats, &cl->rate_est); in drr_destroy_class()
143 qdisc_destroy(cl->qdisc); in drr_destroy_class()
144 kfree(cl); in drr_destroy_class()
150 struct drr_class *cl = (struct drr_class *)arg; in drr_delete_class() local
152 if (cl->filter_cnt > 0) in drr_delete_class()
157 drr_purge_queue(cl); in drr_delete_class()
158 qdisc_class_hash_remove(&q->clhash, &cl->common); in drr_delete_class()
160 BUG_ON(--cl->refcnt == 0); in drr_delete_class()
172 struct drr_class *cl = drr_find_class(sch, classid); in drr_get_class() local
174 if (cl != NULL) in drr_get_class()
175 cl->refcnt++; in drr_get_class()
177 return (unsigned long)cl; in drr_get_class()
182 struct drr_class *cl = (struct drr_class *)arg; in drr_put_class() local
184 if (--cl->refcnt == 0) in drr_put_class()
185 drr_destroy_class(sch, cl); in drr_put_class()
189 unsigned long cl) in drr_tcf_chain() argument
193 if (cl) in drr_tcf_chain()
202 struct drr_class *cl = drr_find_class(sch, classid); in drr_bind_tcf() local
204 if (cl != NULL) in drr_bind_tcf()
205 cl->filter_cnt++; in drr_bind_tcf()
207 return (unsigned long)cl; in drr_bind_tcf()
212 struct drr_class *cl = (struct drr_class *)arg; in drr_unbind_tcf() local
214 cl->filter_cnt--; in drr_unbind_tcf()
220 struct drr_class *cl = (struct drr_class *)arg; in drr_graft_class() local
224 &pfifo_qdisc_ops, cl->common.classid); in drr_graft_class()
230 drr_purge_queue(cl); in drr_graft_class()
231 *old = cl->qdisc; in drr_graft_class()
232 cl->qdisc = new; in drr_graft_class()
239 struct drr_class *cl = (struct drr_class *)arg; in drr_class_leaf() local
241 return cl->qdisc; in drr_class_leaf()
246 struct drr_class *cl = (struct drr_class *)arg; in drr_qlen_notify() local
248 if (cl->qdisc->q.qlen == 0) in drr_qlen_notify()
249 list_del(&cl->alist); in drr_qlen_notify()
255 struct drr_class *cl = (struct drr_class *)arg; in drr_dump_class() local
259 tcm->tcm_handle = cl->common.classid; in drr_dump_class()
260 tcm->tcm_info = cl->qdisc->handle; in drr_dump_class()
265 if (nla_put_u32(skb, TCA_DRR_QUANTUM, cl->quantum)) in drr_dump_class()
277 struct drr_class *cl = (struct drr_class *)arg; in drr_dump_class_stats() local
278 __u32 qlen = cl->qdisc->q.qlen; in drr_dump_class_stats()
283 xstats.deficit = cl->deficit; in drr_dump_class_stats()
285 if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 || in drr_dump_class_stats()
286 gnet_stats_copy_rate_est(d, &cl->bstats, &cl->rate_est) < 0 || in drr_dump_class_stats()
287 gnet_stats_copy_queue(d, NULL, &cl->qdisc->qstats, qlen) < 0) in drr_dump_class_stats()
296 struct drr_class *cl; in drr_walk() local
303 hlist_for_each_entry(cl, &q->clhash.hash[i], common.hnode) { in drr_walk()
308 if (arg->fn(sch, (unsigned long)cl, arg) < 0) { in drr_walk()
321 struct drr_class *cl; in drr_classify() local
327 cl = drr_find_class(sch, skb->priority); in drr_classify()
328 if (cl != NULL) in drr_classify()
329 return cl; in drr_classify()
345 cl = (struct drr_class *)res.class; in drr_classify()
346 if (cl == NULL) in drr_classify()
347 cl = drr_find_class(sch, res.classid); in drr_classify()
348 return cl; in drr_classify()
356 struct drr_class *cl; in drr_enqueue() local
359 cl = drr_classify(skb, sch, &err); in drr_enqueue()
360 if (cl == NULL) { in drr_enqueue()
367 err = qdisc_enqueue(skb, cl->qdisc); in drr_enqueue()
370 cl->qstats.drops++; in drr_enqueue()
376 if (cl->qdisc->q.qlen == 1) { in drr_enqueue()
377 list_add_tail(&cl->alist, &q->active); in drr_enqueue()
378 cl->deficit = cl->quantum; in drr_enqueue()
388 struct drr_class *cl; in drr_dequeue() local
395 cl = list_first_entry(&q->active, struct drr_class, alist); in drr_dequeue()
396 skb = cl->qdisc->ops->peek(cl->qdisc); in drr_dequeue()
398 qdisc_warn_nonwc(__func__, cl->qdisc); in drr_dequeue()
403 if (len <= cl->deficit) { in drr_dequeue()
404 cl->deficit -= len; in drr_dequeue()
405 skb = qdisc_dequeue_peeked(cl->qdisc); in drr_dequeue()
406 if (cl->qdisc->q.qlen == 0) in drr_dequeue()
407 list_del(&cl->alist); in drr_dequeue()
409 bstats_update(&cl->bstats, skb); in drr_dequeue()
415 cl->deficit += cl->quantum; in drr_dequeue()
416 list_move_tail(&cl->alist, &q->active); in drr_dequeue()
425 struct drr_class *cl; in drr_drop() local
428 list_for_each_entry(cl, &q->active, alist) { in drr_drop()
429 if (cl->qdisc->ops->drop) { in drr_drop()
430 len = cl->qdisc->ops->drop(cl->qdisc); in drr_drop()
433 if (cl->qdisc->q.qlen == 0) in drr_drop()
434 list_del(&cl->alist); in drr_drop()
457 struct drr_class *cl; in drr_reset_qdisc() local
461 hlist_for_each_entry(cl, &q->clhash.hash[i], common.hnode) { in drr_reset_qdisc()
462 if (cl->qdisc->q.qlen) in drr_reset_qdisc()
463 list_del(&cl->alist); in drr_reset_qdisc()
464 qdisc_reset(cl->qdisc); in drr_reset_qdisc()
473 struct drr_class *cl; in drr_destroy_qdisc() local
480 hlist_for_each_entry_safe(cl, next, &q->clhash.hash[i], in drr_destroy_qdisc()
482 drr_destroy_class(sch, cl); in drr_destroy_qdisc()