Lines Matching refs:ruleset
70 struct mlxsw_sp_acl_ruleset *ruleset; member
100 mlxsw_sp_acl_ruleset_is_singular(const struct mlxsw_sp_acl_ruleset *ruleset) in mlxsw_sp_acl_ruleset_is_singular() argument
103 return refcount_read(&ruleset->ref_count) == 2; in mlxsw_sp_acl_ruleset_is_singular()
110 struct mlxsw_sp_acl_ruleset *ruleset = block->ruleset_zero; in mlxsw_sp_acl_ruleset_bind() local
111 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_ruleset_bind()
113 return ops->ruleset_bind(mlxsw_sp, ruleset->priv, in mlxsw_sp_acl_ruleset_bind()
121 struct mlxsw_sp_acl_ruleset *ruleset = block->ruleset_zero; in mlxsw_sp_acl_ruleset_unbind() local
122 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_ruleset_unbind()
124 ops->ruleset_unbind(mlxsw_sp, ruleset->priv, in mlxsw_sp_acl_ruleset_unbind()
130 struct mlxsw_sp_acl_ruleset *ruleset, in mlxsw_sp_acl_ruleset_block_bind() argument
136 block->ruleset_zero = ruleset; in mlxsw_sp_acl_ruleset_block_bind()
155 struct mlxsw_sp_acl_ruleset *ruleset, in mlxsw_sp_acl_ruleset_block_unbind() argument
172 struct mlxsw_sp_acl_ruleset *ruleset; in mlxsw_sp_acl_ruleset_create() local
176 alloc_size = sizeof(*ruleset) + ops->ruleset_priv_size; in mlxsw_sp_acl_ruleset_create()
177 ruleset = kzalloc(alloc_size, GFP_KERNEL); in mlxsw_sp_acl_ruleset_create()
178 if (!ruleset) in mlxsw_sp_acl_ruleset_create()
180 refcount_set(&ruleset->ref_count, 1); in mlxsw_sp_acl_ruleset_create()
181 ruleset->ht_key.block = block; in mlxsw_sp_acl_ruleset_create()
182 ruleset->ht_key.chain_index = chain_index; in mlxsw_sp_acl_ruleset_create()
183 ruleset->ht_key.ops = ops; in mlxsw_sp_acl_ruleset_create()
185 err = rhashtable_init(&ruleset->rule_ht, &mlxsw_sp_acl_rule_ht_params); in mlxsw_sp_acl_ruleset_create()
189 err = ops->ruleset_add(mlxsw_sp, &acl->tcam, ruleset->priv, in mlxsw_sp_acl_ruleset_create()
190 tmplt_elusage, &ruleset->min_prio, in mlxsw_sp_acl_ruleset_create()
191 &ruleset->max_prio); in mlxsw_sp_acl_ruleset_create()
195 err = rhashtable_insert_fast(&acl->ruleset_ht, &ruleset->ht_node, in mlxsw_sp_acl_ruleset_create()
200 return ruleset; in mlxsw_sp_acl_ruleset_create()
203 ops->ruleset_del(mlxsw_sp, ruleset->priv); in mlxsw_sp_acl_ruleset_create()
205 rhashtable_destroy(&ruleset->rule_ht); in mlxsw_sp_acl_ruleset_create()
207 kfree(ruleset); in mlxsw_sp_acl_ruleset_create()
212 struct mlxsw_sp_acl_ruleset *ruleset) in mlxsw_sp_acl_ruleset_destroy() argument
214 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_ruleset_destroy()
217 rhashtable_remove_fast(&acl->ruleset_ht, &ruleset->ht_node, in mlxsw_sp_acl_ruleset_destroy()
219 ops->ruleset_del(mlxsw_sp, ruleset->priv); in mlxsw_sp_acl_ruleset_destroy()
220 rhashtable_destroy(&ruleset->rule_ht); in mlxsw_sp_acl_ruleset_destroy()
221 kfree(ruleset); in mlxsw_sp_acl_ruleset_destroy()
224 static void mlxsw_sp_acl_ruleset_ref_inc(struct mlxsw_sp_acl_ruleset *ruleset) in mlxsw_sp_acl_ruleset_ref_inc() argument
226 refcount_inc(&ruleset->ref_count); in mlxsw_sp_acl_ruleset_ref_inc()
230 struct mlxsw_sp_acl_ruleset *ruleset) in mlxsw_sp_acl_ruleset_ref_dec() argument
232 if (!refcount_dec_and_test(&ruleset->ref_count)) in mlxsw_sp_acl_ruleset_ref_dec()
234 mlxsw_sp_acl_ruleset_destroy(mlxsw_sp, ruleset); in mlxsw_sp_acl_ruleset_ref_dec()
259 struct mlxsw_sp_acl_ruleset *ruleset; in mlxsw_sp_acl_ruleset_lookup() local
264 ruleset = __mlxsw_sp_acl_ruleset_lookup(acl, block, chain_index, ops); in mlxsw_sp_acl_ruleset_lookup()
265 if (!ruleset) in mlxsw_sp_acl_ruleset_lookup()
267 return ruleset; in mlxsw_sp_acl_ruleset_lookup()
278 struct mlxsw_sp_acl_ruleset *ruleset; in mlxsw_sp_acl_ruleset_get() local
284 ruleset = __mlxsw_sp_acl_ruleset_lookup(acl, block, chain_index, ops); in mlxsw_sp_acl_ruleset_get()
285 if (ruleset) { in mlxsw_sp_acl_ruleset_get()
286 mlxsw_sp_acl_ruleset_ref_inc(ruleset); in mlxsw_sp_acl_ruleset_get()
287 return ruleset; in mlxsw_sp_acl_ruleset_get()
294 struct mlxsw_sp_acl_ruleset *ruleset) in mlxsw_sp_acl_ruleset_put() argument
296 mlxsw_sp_acl_ruleset_ref_dec(mlxsw_sp, ruleset); in mlxsw_sp_acl_ruleset_put()
299 u16 mlxsw_sp_acl_ruleset_group_id(struct mlxsw_sp_acl_ruleset *ruleset) in mlxsw_sp_acl_ruleset_group_id() argument
301 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_ruleset_group_id()
303 return ops->ruleset_group_id(ruleset->priv); in mlxsw_sp_acl_ruleset_group_id()
306 void mlxsw_sp_acl_ruleset_prio_get(struct mlxsw_sp_acl_ruleset *ruleset, in mlxsw_sp_acl_ruleset_prio_get() argument
310 *p_min_prio = ruleset->min_prio; in mlxsw_sp_acl_ruleset_prio_get()
311 *p_max_prio = ruleset->max_prio; in mlxsw_sp_acl_ruleset_prio_get()
815 struct mlxsw_sp_acl_ruleset *ruleset, in mlxsw_sp_acl_rule_create() argument
820 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_rule_create()
824 mlxsw_sp_acl_ruleset_ref_inc(ruleset); in mlxsw_sp_acl_rule_create()
832 rule->ruleset = ruleset; in mlxsw_sp_acl_rule_create()
845 mlxsw_sp_acl_ruleset_ref_dec(mlxsw_sp, ruleset); in mlxsw_sp_acl_rule_create()
852 struct mlxsw_sp_acl_ruleset *ruleset = rule->ruleset; in mlxsw_sp_acl_rule_destroy() local
856 mlxsw_sp_acl_ruleset_ref_dec(mlxsw_sp, ruleset); in mlxsw_sp_acl_rule_destroy()
862 struct mlxsw_sp_acl_ruleset *ruleset = rule->ruleset; in mlxsw_sp_acl_rule_add() local
863 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_rule_add()
864 struct mlxsw_sp_flow_block *block = ruleset->ht_key.block; in mlxsw_sp_acl_rule_add()
867 err = ops->rule_add(mlxsw_sp, ruleset->priv, rule->priv, rule->rulei); in mlxsw_sp_acl_rule_add()
871 err = rhashtable_insert_fast(&ruleset->rule_ht, &rule->ht_node, in mlxsw_sp_acl_rule_add()
876 if (!ruleset->ht_key.chain_index && in mlxsw_sp_acl_rule_add()
877 mlxsw_sp_acl_ruleset_is_singular(ruleset)) { in mlxsw_sp_acl_rule_add()
882 err = mlxsw_sp_acl_ruleset_block_bind(mlxsw_sp, ruleset, block); in mlxsw_sp_acl_rule_add()
896 rhashtable_remove_fast(&ruleset->rule_ht, &rule->ht_node, in mlxsw_sp_acl_rule_add()
906 struct mlxsw_sp_acl_ruleset *ruleset = rule->ruleset; in mlxsw_sp_acl_rule_del() local
907 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_rule_del()
908 struct mlxsw_sp_flow_block *block = ruleset->ht_key.block; in mlxsw_sp_acl_rule_del()
916 if (!ruleset->ht_key.chain_index && in mlxsw_sp_acl_rule_del()
917 mlxsw_sp_acl_ruleset_is_singular(ruleset)) in mlxsw_sp_acl_rule_del()
918 mlxsw_sp_acl_ruleset_block_unbind(mlxsw_sp, ruleset, block); in mlxsw_sp_acl_rule_del()
919 rhashtable_remove_fast(&ruleset->rule_ht, &rule->ht_node, in mlxsw_sp_acl_rule_del()
928 struct mlxsw_sp_acl_ruleset *ruleset = rule->ruleset; in mlxsw_sp_acl_rule_action_replace() local
929 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_rule_action_replace()
940 struct mlxsw_sp_acl_ruleset *ruleset, in mlxsw_sp_acl_rule_lookup() argument
943 return rhashtable_lookup_fast(&ruleset->rule_ht, &cookie, in mlxsw_sp_acl_rule_lookup()
956 struct mlxsw_sp_acl_ruleset *ruleset = rule->ruleset; in mlxsw_sp_acl_rule_activity_update() local
957 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_rule_activity_update()