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

Function __table_create

dpdk/lib/table/rte_swx_table_em.c:193–287  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

191#define CL RTE_CACHE_LINE_ROUNDUP
192
193static int
194__table_create(struct table **table,
195 uint64_t *memory_footprint,
196 struct rte_swx_table_params *params,
197 const char *args __rte_unused,
198 int numa_node)
199{
200 struct table *t;
201 uint8_t *memory;
202 size_t table_meta_sz, bucket_sz, bucket_ext_sz, key_sz,
203 key_stack_sz, bkt_ext_stack_sz, data_sz, total_size;
204 size_t bucket_offset, bucket_ext_offset, key_offset,
205 key_stack_offset, bkt_ext_stack_offset, data_offset;
206 uint32_t key_size, key_data_size, n_buckets, n_buckets_ext, i;
207
208 /* Check input arguments. */
209 CHECK(params, EINVAL);
210 CHECK(params->match_type == RTE_SWX_TABLE_MATCH_EXACT, EINVAL);
211 CHECK(params->key_size, EINVAL);
212
213 if (params->key_mask0) {
214 for (i = 0; i < params->key_size; i++)
215 if (params->key_mask0[i] != 0xFF)
216 break;
217
218 CHECK(i == params->key_size, EINVAL);
219 }
220
221 CHECK(params->n_keys_max, EINVAL);
222
223 /* Memory allocation. */
224 key_size = rte_align64pow2(params->key_size);
225 key_data_size = rte_align64pow2(params->action_data_size + 8);
226 n_buckets = rte_align64pow2((params->n_keys_max + KEYS_PER_BUCKET - 1) / KEYS_PER_BUCKET);
227 n_buckets_ext = n_buckets;
228
229 table_meta_sz = CL(sizeof(struct table));
230 bucket_sz = CL(n_buckets * sizeof(struct bucket_extension));
231 bucket_ext_sz = CL(n_buckets_ext * sizeof(struct bucket_extension));
232 key_sz = CL(params->n_keys_max * key_size);
233 key_stack_sz = CL(params->n_keys_max * sizeof(uint32_t));
234 bkt_ext_stack_sz = CL(n_buckets_ext * sizeof(uint32_t));
235 data_sz = CL(params->n_keys_max * key_data_size);
236 total_size = table_meta_sz + bucket_sz + bucket_ext_sz +
237 key_sz + key_stack_sz + bkt_ext_stack_sz + data_sz;
238
239 bucket_offset = table_meta_sz;
240 bucket_ext_offset = bucket_offset + bucket_sz;
241 key_offset = bucket_ext_offset + bucket_ext_sz;
242 key_stack_offset = key_offset + key_sz;
243 bkt_ext_stack_offset = key_stack_offset + key_stack_sz;
244 data_offset = bkt_ext_stack_offset + bkt_ext_stack_sz;
245
246 if (!table) {
247 if (memory_footprint)
248 *memory_footprint = total_size;
249 return 0;
250 }

Callers 2

table_createFunction · 0.85
table_footprintFunction · 0.85

Calls 6

memsetFunction · 0.85
rte_ctz32Function · 0.85
rte_swx_keycmp_func_getFunction · 0.85
env_mallocFunction · 0.70
rte_align64pow2Function · 0.50
memcpyFunction · 0.50

Tested by

no test coverage detected