Lines Matching refs:tbl
20 static void mesh_path_free_rcu(struct mesh_table *tbl, struct mesh_path *mpath);
82 struct mesh_table *tbl = tblptr; in mesh_path_rht_free() local
84 mesh_path_free_rcu(tbl, mpath); in mesh_path_rht_free()
87 static void mesh_table_init(struct mesh_table *tbl) in mesh_table_init() argument
89 INIT_HLIST_HEAD(&tbl->known_gates); in mesh_table_init()
90 INIT_HLIST_HEAD(&tbl->walk_head); in mesh_table_init()
91 atomic_set(&tbl->entries, 0); in mesh_table_init()
92 spin_lock_init(&tbl->gates_lock); in mesh_table_init()
93 spin_lock_init(&tbl->walk_lock); in mesh_table_init()
98 WARN_ON(rhashtable_init(&tbl->rhead, &mesh_rht_params)); in mesh_table_init()
101 static void mesh_table_free(struct mesh_table *tbl) in mesh_table_free() argument
103 rhashtable_free_and_destroy(&tbl->rhead, in mesh_table_free()
104 mesh_path_rht_free, tbl); in mesh_table_free()
243 static struct mesh_path *mpath_lookup(struct mesh_table *tbl, const u8 *dst, in mpath_lookup() argument
248 mpath = rhashtable_lookup(&tbl->rhead, dst, mesh_rht_params); in mpath_lookup()
280 __mesh_path_lookup_by_idx(struct mesh_table *tbl, int idx) in __mesh_path_lookup_by_idx() argument
285 hlist_for_each_entry_rcu(mpath, &tbl->walk_head, walk_list) { in __mesh_path_lookup_by_idx()
339 struct mesh_table *tbl; in mesh_path_add_gate() local
343 tbl = &mpath->sdata->u.mesh.mesh_paths; in mesh_path_add_gate()
354 spin_lock(&tbl->gates_lock); in mesh_path_add_gate()
355 hlist_add_head_rcu(&mpath->gate_list, &tbl->known_gates); in mesh_path_add_gate()
356 spin_unlock(&tbl->gates_lock); in mesh_path_add_gate()
374 static void mesh_gate_del(struct mesh_table *tbl, struct mesh_path *mpath) in mesh_gate_del() argument
381 spin_lock_bh(&tbl->gates_lock); in mesh_gate_del()
384 spin_unlock_bh(&tbl->gates_lock); in mesh_gate_del()
683 struct mesh_table *tbl; in mesh_path_add() local
700 tbl = &sdata->u.mesh.mesh_paths; in mesh_path_add()
701 spin_lock_bh(&tbl->walk_lock); in mesh_path_add()
702 mpath = rhashtable_lookup_get_insert_fast(&tbl->rhead, in mesh_path_add()
706 hlist_add_head(&new_mpath->walk_list, &tbl->walk_head); in mesh_path_add()
707 spin_unlock_bh(&tbl->walk_lock); in mesh_path_add()
725 struct mesh_table *tbl; in mpp_path_add() local
742 tbl = &sdata->u.mesh.mpp_paths; in mpp_path_add()
744 spin_lock_bh(&tbl->walk_lock); in mpp_path_add()
745 ret = rhashtable_lookup_insert_fast(&tbl->rhead, in mpp_path_add()
749 hlist_add_head_rcu(&new_mpath->walk_list, &tbl->walk_head); in mpp_path_add()
750 spin_unlock_bh(&tbl->walk_lock); in mpp_path_add()
773 struct mesh_table *tbl = &sdata->u.mesh.mesh_paths; in mesh_plink_broken() local
778 hlist_for_each_entry_rcu(mpath, &tbl->walk_head, walk_list) { in mesh_plink_broken()
795 static void mesh_path_free_rcu(struct mesh_table *tbl, in mesh_path_free_rcu() argument
802 mesh_gate_del(tbl, mpath); in mesh_path_free_rcu()
806 atomic_dec(&tbl->entries); in mesh_path_free_rcu()
811 static void __mesh_path_del(struct mesh_table *tbl, struct mesh_path *mpath) in __mesh_path_del() argument
814 rhashtable_remove_fast(&tbl->rhead, &mpath->rhash, mesh_rht_params); in __mesh_path_del()
815 if (tbl == &mpath->sdata->u.mesh.mpp_paths) in __mesh_path_del()
819 mesh_path_free_rcu(tbl, mpath); in __mesh_path_del()
836 struct mesh_table *tbl = &sdata->u.mesh.mesh_paths; in mesh_path_flush_by_nexthop() local
840 spin_lock_bh(&tbl->walk_lock); in mesh_path_flush_by_nexthop()
841 hlist_for_each_entry_safe(mpath, n, &tbl->walk_head, walk_list) { in mesh_path_flush_by_nexthop()
843 __mesh_path_del(tbl, mpath); in mesh_path_flush_by_nexthop()
845 spin_unlock_bh(&tbl->walk_lock); in mesh_path_flush_by_nexthop()
851 struct mesh_table *tbl = &sdata->u.mesh.mpp_paths; in mpp_flush_by_proxy() local
855 spin_lock_bh(&tbl->walk_lock); in mpp_flush_by_proxy()
856 hlist_for_each_entry_safe(mpath, n, &tbl->walk_head, walk_list) { in mpp_flush_by_proxy()
858 __mesh_path_del(tbl, mpath); in mpp_flush_by_proxy()
860 spin_unlock_bh(&tbl->walk_lock); in mpp_flush_by_proxy()
863 static void table_flush_by_iface(struct mesh_table *tbl) in table_flush_by_iface() argument
868 spin_lock_bh(&tbl->walk_lock); in table_flush_by_iface()
869 hlist_for_each_entry_safe(mpath, n, &tbl->walk_head, walk_list) { in table_flush_by_iface()
870 __mesh_path_del(tbl, mpath); in table_flush_by_iface()
872 spin_unlock_bh(&tbl->walk_lock); in table_flush_by_iface()
897 static int table_path_del(struct mesh_table *tbl, in table_path_del() argument
903 spin_lock_bh(&tbl->walk_lock); in table_path_del()
904 mpath = rhashtable_lookup_fast(&tbl->rhead, addr, mesh_rht_params); in table_path_del()
906 spin_unlock_bh(&tbl->walk_lock); in table_path_del()
910 __mesh_path_del(tbl, mpath); in table_path_del()
911 spin_unlock_bh(&tbl->walk_lock); in table_path_del()
966 struct mesh_table *tbl; in mesh_path_send_to_gates() local
971 tbl = &sdata->u.mesh.mesh_paths; in mesh_path_send_to_gates()
974 hlist_for_each_entry_rcu(gate, &tbl->known_gates, gate_list) { in mesh_path_send_to_gates()
987 hlist_for_each_entry_rcu(gate, &tbl->known_gates, gate_list) { in mesh_path_send_to_gates()
1074 struct mesh_table *tbl) in mesh_path_tbl_expire() argument
1079 spin_lock_bh(&tbl->walk_lock); in mesh_path_tbl_expire()
1080 hlist_for_each_entry_safe(mpath, n, &tbl->walk_head, walk_list) { in mesh_path_tbl_expire()
1084 __mesh_path_del(tbl, mpath); in mesh_path_tbl_expire()
1086 spin_unlock_bh(&tbl->walk_lock); in mesh_path_tbl_expire()