Lines Matching refs:vchunk
168 struct mlxsw_sp_acl_tcam_vchunk *vchunk; member
196 struct mlxsw_sp_acl_tcam_vchunk *vchunk; member
345 struct mlxsw_sp_acl_tcam_vchunk *vchunk; in mlxsw_sp_acl_tcam_vregion_prio() local
350 vchunk = list_first_entry(&vregion->vchunk_list, in mlxsw_sp_acl_tcam_vregion_prio()
351 typeof(*vchunk), list); in mlxsw_sp_acl_tcam_vregion_prio()
352 return vchunk->priority; in mlxsw_sp_acl_tcam_vregion_prio()
358 struct mlxsw_sp_acl_tcam_vchunk *vchunk; in mlxsw_sp_acl_tcam_vregion_max_prio() local
362 vchunk = list_last_entry(&vregion->vchunk_list, in mlxsw_sp_acl_tcam_vregion_max_prio()
363 typeof(*vchunk), list); in mlxsw_sp_acl_tcam_vregion_max_prio()
364 return vchunk->priority; in mlxsw_sp_acl_tcam_vregion_max_prio()
745 mlxsw_sp_acl_tcam_rehash_ctx_vchunk_changed(struct mlxsw_sp_acl_tcam_vchunk *vchunk) in mlxsw_sp_acl_tcam_rehash_ctx_vchunk_changed() argument
747 struct mlxsw_sp_acl_tcam_vregion *vregion = vchunk->vregion; in mlxsw_sp_acl_tcam_rehash_ctx_vchunk_changed()
753 if (vregion->rehash.ctx.current_vchunk == vchunk) { in mlxsw_sp_acl_tcam_rehash_ctx_vchunk_changed()
902 struct mlxsw_sp_acl_tcam_vchunk *vchunk, in mlxsw_sp_acl_tcam_chunk_create() argument
911 chunk->vchunk = vchunk; in mlxsw_sp_acl_tcam_chunk_create()
914 ops->chunk_init(region->priv, chunk->priv, vchunk->priority); in mlxsw_sp_acl_tcam_chunk_create()
934 struct mlxsw_sp_acl_tcam_vchunk *vchunk, *vchunk2; in mlxsw_sp_acl_tcam_vchunk_create() local
942 vchunk = kzalloc(sizeof(*vchunk), GFP_KERNEL); in mlxsw_sp_acl_tcam_vchunk_create()
943 if (!vchunk) in mlxsw_sp_acl_tcam_vchunk_create()
945 INIT_LIST_HEAD(&vchunk->ventry_list); in mlxsw_sp_acl_tcam_vchunk_create()
946 vchunk->priority = priority; in mlxsw_sp_acl_tcam_vchunk_create()
947 vchunk->vgroup = vgroup; in mlxsw_sp_acl_tcam_vchunk_create()
948 refcount_set(&vchunk->ref_count, 1); in mlxsw_sp_acl_tcam_vchunk_create()
957 vchunk->vregion = vregion; in mlxsw_sp_acl_tcam_vchunk_create()
959 err = rhashtable_insert_fast(&vgroup->vchunk_ht, &vchunk->ht_node, in mlxsw_sp_acl_tcam_vchunk_create()
965 vchunk->chunk = mlxsw_sp_acl_tcam_chunk_create(mlxsw_sp, vchunk, in mlxsw_sp_acl_tcam_vchunk_create()
966 vchunk->vregion->region); in mlxsw_sp_acl_tcam_vchunk_create()
967 if (IS_ERR(vchunk->chunk)) { in mlxsw_sp_acl_tcam_vchunk_create()
969 err = PTR_ERR(vchunk->chunk); in mlxsw_sp_acl_tcam_vchunk_create()
981 list_add_tail(&vchunk->list, pos); in mlxsw_sp_acl_tcam_vchunk_create()
985 return vchunk; in mlxsw_sp_acl_tcam_vchunk_create()
988 rhashtable_remove_fast(&vgroup->vchunk_ht, &vchunk->ht_node, in mlxsw_sp_acl_tcam_vchunk_create()
993 kfree(vchunk); in mlxsw_sp_acl_tcam_vchunk_create()
999 struct mlxsw_sp_acl_tcam_vchunk *vchunk) in mlxsw_sp_acl_tcam_vchunk_destroy() argument
1001 struct mlxsw_sp_acl_tcam_vregion *vregion = vchunk->vregion; in mlxsw_sp_acl_tcam_vchunk_destroy()
1002 struct mlxsw_sp_acl_tcam_vgroup *vgroup = vchunk->vgroup; in mlxsw_sp_acl_tcam_vchunk_destroy()
1006 list_del(&vchunk->list); in mlxsw_sp_acl_tcam_vchunk_destroy()
1007 if (vchunk->chunk2) in mlxsw_sp_acl_tcam_vchunk_destroy()
1008 mlxsw_sp_acl_tcam_chunk_destroy(mlxsw_sp, vchunk->chunk2); in mlxsw_sp_acl_tcam_vchunk_destroy()
1009 mlxsw_sp_acl_tcam_chunk_destroy(mlxsw_sp, vchunk->chunk); in mlxsw_sp_acl_tcam_vchunk_destroy()
1011 rhashtable_remove_fast(&vgroup->vchunk_ht, &vchunk->ht_node, in mlxsw_sp_acl_tcam_vchunk_destroy()
1013 mlxsw_sp_acl_tcam_vregion_put(mlxsw_sp, vchunk->vregion); in mlxsw_sp_acl_tcam_vchunk_destroy()
1014 kfree(vchunk); in mlxsw_sp_acl_tcam_vchunk_destroy()
1024 struct mlxsw_sp_acl_tcam_vchunk *vchunk; in mlxsw_sp_acl_tcam_vchunk_get() local
1026 vchunk = rhashtable_lookup_fast(&vgroup->vchunk_ht, &priority, in mlxsw_sp_acl_tcam_vchunk_get()
1028 if (vchunk) { in mlxsw_sp_acl_tcam_vchunk_get()
1029 if (WARN_ON(!mlxsw_afk_key_info_subset(vchunk->vregion->key_info, in mlxsw_sp_acl_tcam_vchunk_get()
1032 refcount_inc(&vchunk->ref_count); in mlxsw_sp_acl_tcam_vchunk_get()
1033 return vchunk; in mlxsw_sp_acl_tcam_vchunk_get()
1041 struct mlxsw_sp_acl_tcam_vchunk *vchunk) in mlxsw_sp_acl_tcam_vchunk_put() argument
1043 if (!refcount_dec_and_test(&vchunk->ref_count)) in mlxsw_sp_acl_tcam_vchunk_put()
1045 mlxsw_sp_acl_tcam_vchunk_destroy(mlxsw_sp, vchunk); in mlxsw_sp_acl_tcam_vchunk_put()
1114 struct mlxsw_sp_acl_tcam_vchunk *vchunk; in mlxsw_sp_acl_tcam_ventry_add() local
1117 vchunk = mlxsw_sp_acl_tcam_vchunk_get(mlxsw_sp, vgroup, rulei->priority, in mlxsw_sp_acl_tcam_ventry_add()
1119 if (IS_ERR(vchunk)) in mlxsw_sp_acl_tcam_ventry_add()
1120 return PTR_ERR(vchunk); in mlxsw_sp_acl_tcam_ventry_add()
1122 ventry->vchunk = vchunk; in mlxsw_sp_acl_tcam_ventry_add()
1124 vregion = vchunk->vregion; in mlxsw_sp_acl_tcam_ventry_add()
1128 vchunk->chunk); in mlxsw_sp_acl_tcam_ventry_add()
1135 list_add_tail(&ventry->list, &vchunk->ventry_list); in mlxsw_sp_acl_tcam_ventry_add()
1136 mlxsw_sp_acl_tcam_rehash_ctx_vchunk_changed(vchunk); in mlxsw_sp_acl_tcam_ventry_add()
1142 mlxsw_sp_acl_tcam_vchunk_put(mlxsw_sp, vchunk); in mlxsw_sp_acl_tcam_ventry_add()
1149 struct mlxsw_sp_acl_tcam_vchunk *vchunk = ventry->vchunk; in mlxsw_sp_acl_tcam_ventry_del() local
1150 struct mlxsw_sp_acl_tcam_vregion *vregion = vchunk->vregion; in mlxsw_sp_acl_tcam_ventry_del()
1153 mlxsw_sp_acl_tcam_rehash_ctx_vchunk_changed(vchunk); in mlxsw_sp_acl_tcam_ventry_del()
1157 mlxsw_sp_acl_tcam_vchunk_put(mlxsw_sp, vchunk); in mlxsw_sp_acl_tcam_ventry_del()
1165 struct mlxsw_sp_acl_tcam_vchunk *vchunk = ventry->vchunk; in mlxsw_sp_acl_tcam_ventry_action_replace() local
1168 vchunk->vregion->region, in mlxsw_sp_acl_tcam_ventry_action_replace()
1177 struct mlxsw_sp_acl_tcam_vregion *vregion = ventry->vchunk->vregion; in mlxsw_sp_acl_tcam_ventry_activity_get()
1212 struct mlxsw_sp_acl_tcam_vchunk *vchunk, in mlxsw_sp_acl_tcam_vchunk_migrate_start() argument
1218 WARN_ON(vchunk->chunk2); in mlxsw_sp_acl_tcam_vchunk_migrate_start()
1220 new_chunk = mlxsw_sp_acl_tcam_chunk_create(mlxsw_sp, vchunk, region); in mlxsw_sp_acl_tcam_vchunk_migrate_start()
1223 vchunk->chunk2 = vchunk->chunk; in mlxsw_sp_acl_tcam_vchunk_migrate_start()
1224 vchunk->chunk = new_chunk; in mlxsw_sp_acl_tcam_vchunk_migrate_start()
1225 ctx->current_vchunk = vchunk; in mlxsw_sp_acl_tcam_vchunk_migrate_start()
1233 struct mlxsw_sp_acl_tcam_vchunk *vchunk, in mlxsw_sp_acl_tcam_vchunk_migrate_end() argument
1236 mlxsw_sp_acl_tcam_chunk_destroy(mlxsw_sp, vchunk->chunk2); in mlxsw_sp_acl_tcam_vchunk_migrate_end()
1237 vchunk->chunk2 = NULL; in mlxsw_sp_acl_tcam_vchunk_migrate_end()
1243 struct mlxsw_sp_acl_tcam_vchunk *vchunk, in mlxsw_sp_acl_tcam_vchunk_migrate_one() argument
1251 if (vchunk->chunk->region != region) { in mlxsw_sp_acl_tcam_vchunk_migrate_one()
1252 err = mlxsw_sp_acl_tcam_vchunk_migrate_start(mlxsw_sp, vchunk, in mlxsw_sp_acl_tcam_vchunk_migrate_one()
1256 } else if (!vchunk->chunk2) { in mlxsw_sp_acl_tcam_vchunk_migrate_one()
1261 if (list_empty(&vchunk->ventry_list)) in mlxsw_sp_acl_tcam_vchunk_migrate_one()
1270 ventry = list_first_entry(&vchunk->ventry_list, in mlxsw_sp_acl_tcam_vchunk_migrate_one()
1273 WARN_ON(ventry->vchunk != vchunk); in mlxsw_sp_acl_tcam_vchunk_migrate_one()
1275 list_for_each_entry_from(ventry, &vchunk->ventry_list, list) { in mlxsw_sp_acl_tcam_vchunk_migrate_one()
1283 vchunk->chunk, credits); in mlxsw_sp_acl_tcam_vchunk_migrate_one()
1296 swap(vchunk->chunk, vchunk->chunk2); in mlxsw_sp_acl_tcam_vchunk_migrate_one()
1316 mlxsw_sp_acl_tcam_vchunk_migrate_end(mlxsw_sp, vchunk, ctx); in mlxsw_sp_acl_tcam_vchunk_migrate_one()
1326 struct mlxsw_sp_acl_tcam_vchunk *vchunk; in mlxsw_sp_acl_tcam_vchunk_migrate_all() local
1336 vchunk = ctx->current_vchunk; in mlxsw_sp_acl_tcam_vchunk_migrate_all()
1338 vchunk = list_first_entry(&vregion->vchunk_list, in mlxsw_sp_acl_tcam_vchunk_migrate_all()
1339 typeof(*vchunk), list); in mlxsw_sp_acl_tcam_vchunk_migrate_all()
1341 list_for_each_entry_from(vchunk, &vregion->vchunk_list, list) { in mlxsw_sp_acl_tcam_vchunk_migrate_all()
1342 err = mlxsw_sp_acl_tcam_vchunk_migrate_one(mlxsw_sp, vchunk, in mlxsw_sp_acl_tcam_vchunk_migrate_all()
1798 struct mlxsw_sp_acl_tcam_vchunk *vchunk; member
1831 ruleset->vchunk = mlxsw_sp_acl_tcam_vchunk_get(mlxsw_sp, in mlxsw_sp_acl_tcam_mr_ruleset_add()
1834 if (IS_ERR(ruleset->vchunk)) { in mlxsw_sp_acl_tcam_mr_ruleset_add()
1835 err = PTR_ERR(ruleset->vchunk); in mlxsw_sp_acl_tcam_mr_ruleset_add()
1851 mlxsw_sp_acl_tcam_vchunk_put(mlxsw_sp, ruleset->vchunk); in mlxsw_sp_acl_tcam_mr_ruleset_del()