• Home
  • Raw
  • Download

Lines Matching refs:ht

82 	struct tc_u_knode __rcu	*ht[];  member
111 struct tc_u_hnode *ht = rcu_dereference_bh(tp->root); in u32_classify() local
123 n = rcu_dereference_bh(ht->ht[sel]); in u32_classify()
168 ht = rcu_dereference_bh(n->ht_down); in u32_classify()
169 if (!ht) { in u32_classify()
200 ht = rcu_dereference_bh(n->ht_down); in u32_classify()
202 if (ht->divisor) { in u32_classify()
209 sel = ht->divisor & u32_hash_fold(*data, &n->sel, in u32_classify()
242 ht = rcu_dereference_bh(n->ht_up); in u32_classify()
256 struct tc_u_hnode *ht; in u32_lookup_ht() local
258 for (ht = rtnl_dereference(tp_c->hlist); in u32_lookup_ht()
259 ht; in u32_lookup_ht()
260 ht = rtnl_dereference(ht->next)) in u32_lookup_ht()
261 if (ht->handle == handle) in u32_lookup_ht()
264 return ht; in u32_lookup_ht()
267 static struct tc_u_knode *u32_lookup_key(struct tc_u_hnode *ht, u32 handle) in u32_lookup_key() argument
273 if (sel > ht->divisor) in u32_lookup_key()
276 for (n = rtnl_dereference(ht->ht[sel]); in u32_lookup_key()
288 struct tc_u_hnode *ht; in u32_get() local
292 ht = rtnl_dereference(tp->root); in u32_get()
294 ht = u32_lookup_ht(tp_c, TC_U32_HTID(handle)); in u32_get()
296 if (!ht) in u32_get()
300 return ht; in u32_get()
302 return u32_lookup_key(ht, handle); in u32_get()
356 root_ht = kzalloc(struct_size(root_ht, ht, 1), GFP_KERNEL); in u32_init()
391 struct tc_u_hnode *ht = rtnl_dereference(n->ht_down); in __u32_destroy_key() local
394 if (ht && --ht->refcnt == 0) in __u32_destroy_key()
395 kfree(ht); in __u32_destroy_key()
453 struct tc_u_hnode *ht = rtnl_dereference(key->ht_up); in u32_delete_key() local
455 if (ht) { in u32_delete_key()
456 kp = &ht->ht[TC_U32_HASH(key->handle)]; in u32_delete_key()
464 idr_remove(&ht->handle_idr, key->handle); in u32_delete_key()
536 struct tc_u_hnode *ht = rtnl_dereference(n->ht_down); in u32_replace_hw_knode() local
557 cls_u32.knode.link_handle = ht->handle; in u32_replace_hw_knode()
572 static void u32_clear_hnode(struct tcf_proto *tp, struct tc_u_hnode *ht, in u32_clear_hnode() argument
579 for (h = 0; h <= ht->divisor; h++) { in u32_clear_hnode()
580 while ((n = rtnl_dereference(ht->ht[h])) != NULL) { in u32_clear_hnode()
581 RCU_INIT_POINTER(ht->ht[h], in u32_clear_hnode()
586 idr_remove(&ht->handle_idr, n->handle); in u32_clear_hnode()
595 static int u32_destroy_hnode(struct tcf_proto *tp, struct tc_u_hnode *ht, in u32_destroy_hnode() argument
602 WARN_ON(--ht->refcnt); in u32_destroy_hnode()
604 u32_clear_hnode(tp, ht, extack); in u32_destroy_hnode()
610 if (phn == ht) { in u32_destroy_hnode()
611 u32_clear_hw_hnode(tp, ht, extack); in u32_destroy_hnode()
612 idr_destroy(&ht->handle_idr); in u32_destroy_hnode()
613 idr_remove(&tp_c->handle_idr, ht->handle); in u32_destroy_hnode()
614 RCU_INIT_POINTER(*hn, ht->next); in u32_destroy_hnode()
615 kfree_rcu(ht, rcu); in u32_destroy_hnode()
635 struct tc_u_hnode *ht; in u32_destroy() local
639 while ((ht = rtnl_dereference(tp_c->hlist)) != NULL) { in u32_destroy()
640 u32_clear_hnode(tp, ht, extack); in u32_destroy()
641 RCU_INIT_POINTER(tp_c->hlist, ht->next); in u32_destroy()
646 if (--ht->refcnt == 0) in u32_destroy()
647 kfree_rcu(ht, rcu); in u32_destroy()
660 struct tc_u_hnode *ht = arg; in u32_delete() local
664 if (TC_U32_KEY(ht->handle)) { in u32_delete()
665 u32_remove_hw_knode(tp, (struct tc_u_knode *)ht, extack); in u32_delete()
666 ret = u32_delete_key(tp, (struct tc_u_knode *)ht); in u32_delete()
670 if (ht->is_root) { in u32_delete()
675 if (ht->refcnt == 1) { in u32_delete()
676 u32_destroy_hnode(tp, ht, extack); in u32_delete()
687 static u32 gen_new_kid(struct tc_u_hnode *ht, u32 htid) in gen_new_kid() argument
692 if (idr_alloc_u32(&ht->handle_idr, NULL, &index, max, GFP_KERNEL)) { in gen_new_kid()
694 if (idr_alloc_u32(&ht->handle_idr, NULL, &index, max, in gen_new_kid()
776 struct tc_u_hnode *ht; in u32_replace_knode() local
779 ht = rtnl_dereference(tp->root); in u32_replace_knode()
781 ht = u32_lookup_ht(tp_c, TC_U32_HTID(n->handle)); in u32_replace_knode()
783 ins = &ht->ht[TC_U32_HASH(n->handle)]; in u32_replace_knode()
793 idr_replace(&ht->handle_idr, n, n->handle); in u32_replace_knode()
801 struct tc_u_hnode *ht = rtnl_dereference(n->ht_down); in u32_init_knode() local
816 RCU_INIT_POINTER(new->ht_down, ht); in u32_init_knode()
840 if (ht) in u32_init_knode()
841 ht->refcnt++; in u32_init_knode()
852 struct tc_u_hnode *ht; in u32_change() local
941 ht = kzalloc(struct_size(ht, ht, divisor + 1), GFP_KERNEL); in u32_change()
942 if (ht == NULL) in u32_change()
945 handle = gen_new_htid(tp->data, ht); in u32_change()
947 kfree(ht); in u32_change()
951 err = idr_alloc_u32(&tp_c->handle_idr, ht, &handle, in u32_change()
954 kfree(ht); in u32_change()
958 ht->refcnt = 1; in u32_change()
959 ht->divisor = divisor; in u32_change()
960 ht->handle = handle; in u32_change()
961 ht->prio = tp->prio; in u32_change()
962 idr_init(&ht->handle_idr); in u32_change()
963 ht->flags = userflags; in u32_change()
965 err = u32_replace_hw_hnode(tp, ht, userflags, extack); in u32_change()
968 kfree(ht); in u32_change()
972 RCU_INIT_POINTER(ht->next, tp_c->hlist); in u32_change()
973 rcu_assign_pointer(tp_c->hlist, ht); in u32_change()
974 *arg = ht; in u32_change()
982 ht = rtnl_dereference(tp->root); in u32_change()
983 htid = ht->handle; in u32_change()
985 ht = u32_lookup_ht(tp->data, TC_U32_HTID(htid)); in u32_change()
986 if (!ht) { in u32_change()
992 ht = rtnl_dereference(tp->root); in u32_change()
993 htid = ht->handle; in u32_change()
996 if (ht->divisor < TC_U32_HASH(htid)) { in u32_change()
1043 handle = gen_new_kid(ht, htid); in u32_change()
1046 err = idr_alloc_u32(&ht->handle_idr, NULL, &handle, in u32_change()
1055 handle = gen_new_kid(ht, htid); in u32_change()
1087 RCU_INIT_POINTER(n->ht_up, ht); in u32_change()
1125 ins = &ht->ht[TC_U32_HASH(handle)]; in u32_change()
1151 idr_remove(&ht->handle_idr, handle); in u32_change()
1159 struct tc_u_hnode *ht; in u32_walk() local
1166 for (ht = rtnl_dereference(tp_c->hlist); in u32_walk()
1167 ht; in u32_walk()
1168 ht = rtnl_dereference(ht->next)) { in u32_walk()
1169 if (ht->prio != tp->prio) in u32_walk()
1172 if (arg->fn(tp, ht, arg) < 0) { in u32_walk()
1178 for (h = 0; h <= ht->divisor; h++) { in u32_walk()
1179 for (n = rtnl_dereference(ht->ht[h]); in u32_walk()
1196 static int u32_reoffload_hnode(struct tcf_proto *tp, struct tc_u_hnode *ht, in u32_reoffload_hnode() argument
1203 tc_cls_common_offload_init(&cls_u32.common, tp, ht->flags, extack); in u32_reoffload_hnode()
1205 cls_u32.hnode.divisor = ht->divisor; in u32_reoffload_hnode()
1206 cls_u32.hnode.handle = ht->handle; in u32_reoffload_hnode()
1207 cls_u32.hnode.prio = ht->prio; in u32_reoffload_hnode()
1210 if (err && add && tc_skip_sw(ht->flags)) in u32_reoffload_hnode()
1220 struct tc_u_hnode *ht = rtnl_dereference(n->ht_down); in u32_reoffload_knode() local
1242 cls_u32.knode.link_handle = ht->handle; in u32_reoffload_knode()
1254 struct tc_u_hnode *ht; in u32_reoffload() local
1259 for (ht = rtnl_dereference(tp_c->hlist); in u32_reoffload()
1260 ht; in u32_reoffload()
1261 ht = rtnl_dereference(ht->next)) { in u32_reoffload()
1262 if (ht->prio != tp->prio) in u32_reoffload()
1269 if (add && !tc_skip_hw(ht->flags)) { in u32_reoffload()
1270 err = u32_reoffload_hnode(tp, ht, add, cb, cb_priv, in u32_reoffload()
1276 for (h = 0; h <= ht->divisor; h++) { in u32_reoffload()
1277 for (n = rtnl_dereference(ht->ht[h]); in u32_reoffload()
1290 if (!add && !tc_skip_hw(ht->flags)) in u32_reoffload()
1291 u32_reoffload_hnode(tp, ht, add, cb, cb_priv, extack); in u32_reoffload()
1327 struct tc_u_hnode *ht = fh; in u32_dump() local
1328 u32 divisor = ht->divisor + 1; in u32_dump()