MCPcopy Create free account
hub / github.com/F-Stack/f-stack / mlx5_l3t_clear_entry

Function mlx5_l3t_clear_entry

dpdk/drivers/net/mlx5/mlx5_utils.c:984–1064  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

982}
983
984int32_t
985mlx5_l3t_clear_entry(struct mlx5_l3t_tbl *tbl, uint32_t idx)
986{
987 struct mlx5_l3t_level_tbl *g_tbl, *m_tbl;
988 struct mlx5_l3t_entry_word *w_e_tbl;
989 struct mlx5_l3t_entry_dword *dw_e_tbl;
990 struct mlx5_l3t_entry_qword *qw_e_tbl;
991 struct mlx5_l3t_entry_ptr *ptr_e_tbl;
992 void *e_tbl;
993 uint32_t entry_idx;
994 uint64_t ref_cnt;
995 int32_t ret = -1;
996
997 rte_spinlock_lock(&tbl->sl);
998 g_tbl = tbl->tbl;
999 if (!g_tbl)
1000 goto out;
1001 m_tbl = g_tbl->tbl[(idx >> MLX5_L3T_GT_OFFSET) & MLX5_L3T_GT_MASK];
1002 if (!m_tbl)
1003 goto out;
1004 e_tbl = m_tbl->tbl[(idx >> MLX5_L3T_MT_OFFSET) & MLX5_L3T_MT_MASK];
1005 if (!e_tbl)
1006 goto out;
1007 entry_idx = idx & MLX5_L3T_ET_MASK;
1008 switch (tbl->type) {
1009 case MLX5_L3T_TYPE_WORD:
1010 w_e_tbl = (struct mlx5_l3t_entry_word *)e_tbl;
1011 MLX5_ASSERT(w_e_tbl->entry[entry_idx].ref_cnt);
1012 ret = --w_e_tbl->entry[entry_idx].ref_cnt;
1013 if (ret)
1014 goto out;
1015 w_e_tbl->entry[entry_idx].data = 0;
1016 ref_cnt = --w_e_tbl->ref_cnt;
1017 break;
1018 case MLX5_L3T_TYPE_DWORD:
1019 dw_e_tbl = (struct mlx5_l3t_entry_dword *)e_tbl;
1020 MLX5_ASSERT(dw_e_tbl->entry[entry_idx].ref_cnt);
1021 ret = --dw_e_tbl->entry[entry_idx].ref_cnt;
1022 if (ret)
1023 goto out;
1024 dw_e_tbl->entry[entry_idx].data = 0;
1025 ref_cnt = --dw_e_tbl->ref_cnt;
1026 break;
1027 case MLX5_L3T_TYPE_QWORD:
1028 qw_e_tbl = (struct mlx5_l3t_entry_qword *)e_tbl;
1029 MLX5_ASSERT(qw_e_tbl->entry[entry_idx].ref_cnt);
1030 ret = --qw_e_tbl->entry[entry_idx].ref_cnt;
1031 if (ret)
1032 goto out;
1033 qw_e_tbl->entry[entry_idx].data = 0;
1034 ref_cnt = --qw_e_tbl->ref_cnt;
1035 break;
1036 default:
1037 ptr_e_tbl = (struct mlx5_l3t_entry_ptr *)e_tbl;
1038 MLX5_ASSERT(ptr_e_tbl->entry[entry_idx].ref_cnt);
1039 ret = --ptr_e_tbl->entry[entry_idx].ref_cnt;
1040 if (ret)
1041 goto out;

Calls 4

mlx5_ipool_freeFunction · 0.85
mlx5_freeFunction · 0.85
rte_spinlock_lockFunction · 0.50
rte_spinlock_unlockFunction · 0.50

Tested by

no test coverage detected