Lines Matching refs:tvlv_handler

630 batadv_tvlv_handler_free_ref(struct batadv_tvlv_handler *tvlv_handler)  in batadv_tvlv_handler_free_ref()  argument
632 if (atomic_dec_and_test(&tvlv_handler->refcount)) in batadv_tvlv_handler_free_ref()
633 kfree_rcu(tvlv_handler, rcu); in batadv_tvlv_handler_free_ref()
648 struct batadv_tvlv_handler *tvlv_handler_tmp, *tvlv_handler = NULL; in batadv_tvlv_handler_get() local
662 tvlv_handler = tvlv_handler_tmp; in batadv_tvlv_handler_get()
667 return tvlv_handler; in batadv_tvlv_handler_get()
922 struct batadv_tvlv_handler *tvlv_handler, in batadv_tvlv_call_handler() argument
928 if (!tvlv_handler) in batadv_tvlv_call_handler()
932 if (!tvlv_handler->ogm_handler) in batadv_tvlv_call_handler()
938 tvlv_handler->ogm_handler(bat_priv, orig_node, in batadv_tvlv_call_handler()
941 tvlv_handler->flags |= BATADV_TVLV_HANDLER_OGM_CALLED; in batadv_tvlv_call_handler()
949 if (!tvlv_handler->unicast_handler) in batadv_tvlv_call_handler()
952 return tvlv_handler->unicast_handler(bat_priv, src, in batadv_tvlv_call_handler()
980 struct batadv_tvlv_handler *tvlv_handler; in batadv_tvlv_containers_process() local
995 tvlv_handler = batadv_tvlv_handler_get(bat_priv, in batadv_tvlv_containers_process()
999 ret |= batadv_tvlv_call_handler(bat_priv, tvlv_handler, in batadv_tvlv_containers_process()
1003 if (tvlv_handler) in batadv_tvlv_containers_process()
1004 batadv_tvlv_handler_free_ref(tvlv_handler); in batadv_tvlv_containers_process()
1013 hlist_for_each_entry_rcu(tvlv_handler, in batadv_tvlv_containers_process()
1015 if ((tvlv_handler->flags & BATADV_TVLV_HANDLER_OGM_CIFNOTFND) && in batadv_tvlv_containers_process()
1016 !(tvlv_handler->flags & BATADV_TVLV_HANDLER_OGM_CALLED)) in batadv_tvlv_containers_process()
1017 tvlv_handler->ogm_handler(bat_priv, orig_node, in batadv_tvlv_containers_process()
1020 tvlv_handler->flags &= ~BATADV_TVLV_HANDLER_OGM_CALLED; in batadv_tvlv_containers_process()
1080 struct batadv_tvlv_handler *tvlv_handler; in batadv_tvlv_handler_register() local
1082 tvlv_handler = batadv_tvlv_handler_get(bat_priv, type, version); in batadv_tvlv_handler_register()
1083 if (tvlv_handler) { in batadv_tvlv_handler_register()
1084 batadv_tvlv_handler_free_ref(tvlv_handler); in batadv_tvlv_handler_register()
1088 tvlv_handler = kzalloc(sizeof(*tvlv_handler), GFP_ATOMIC); in batadv_tvlv_handler_register()
1089 if (!tvlv_handler) in batadv_tvlv_handler_register()
1092 tvlv_handler->ogm_handler = optr; in batadv_tvlv_handler_register()
1093 tvlv_handler->unicast_handler = uptr; in batadv_tvlv_handler_register()
1094 tvlv_handler->type = type; in batadv_tvlv_handler_register()
1095 tvlv_handler->version = version; in batadv_tvlv_handler_register()
1096 tvlv_handler->flags = flags; in batadv_tvlv_handler_register()
1097 atomic_set(&tvlv_handler->refcount, 1); in batadv_tvlv_handler_register()
1098 INIT_HLIST_NODE(&tvlv_handler->list); in batadv_tvlv_handler_register()
1101 hlist_add_head_rcu(&tvlv_handler->list, &bat_priv->tvlv.handler_list); in batadv_tvlv_handler_register()
1115 struct batadv_tvlv_handler *tvlv_handler; in batadv_tvlv_handler_unregister() local
1117 tvlv_handler = batadv_tvlv_handler_get(bat_priv, type, version); in batadv_tvlv_handler_unregister()
1118 if (!tvlv_handler) in batadv_tvlv_handler_unregister()
1121 batadv_tvlv_handler_free_ref(tvlv_handler); in batadv_tvlv_handler_unregister()
1123 hlist_del_rcu(&tvlv_handler->list); in batadv_tvlv_handler_unregister()
1125 batadv_tvlv_handler_free_ref(tvlv_handler); in batadv_tvlv_handler_unregister()