| 1317 | } |
| 1318 | |
| 1319 | void rte_efd_lookup_bulk(const struct rte_efd_table * const table, |
| 1320 | const unsigned int socket_id, const int num_keys, |
| 1321 | const void **key_list, efd_value_t * const value_list) |
| 1322 | { |
| 1323 | int i; |
| 1324 | uint32_t chunk_id_list[RTE_EFD_BURST_MAX]; |
| 1325 | uint32_t bin_id_list[RTE_EFD_BURST_MAX]; |
| 1326 | uint8_t bin_choice_list[RTE_EFD_BURST_MAX]; |
| 1327 | uint32_t group_id_list[RTE_EFD_BURST_MAX]; |
| 1328 | struct efd_online_group_entry *group; |
| 1329 | |
| 1330 | struct efd_online_chunk *chunks = table->chunks[socket_id]; |
| 1331 | |
| 1332 | for (i = 0; i < num_keys; i++) { |
| 1333 | efd_compute_ids(table, key_list[i], &chunk_id_list[i], |
| 1334 | &bin_id_list[i]); |
| 1335 | rte_prefetch0(&chunks[chunk_id_list[i]].bin_choice_list); |
| 1336 | } |
| 1337 | |
| 1338 | for (i = 0; i < num_keys; i++) { |
| 1339 | bin_choice_list[i] = efd_get_choice(table, socket_id, |
| 1340 | chunk_id_list[i], bin_id_list[i]); |
| 1341 | group_id_list[i] = |
| 1342 | efd_bin_to_group[bin_choice_list[i]][bin_id_list[i]]; |
| 1343 | group = &chunks[chunk_id_list[i]].groups[group_id_list[i]]; |
| 1344 | rte_prefetch0(group); |
| 1345 | } |
| 1346 | |
| 1347 | for (i = 0; i < num_keys; i++) { |
| 1348 | group = &chunks[chunk_id_list[i]].groups[group_id_list[i]]; |
| 1349 | value_list[i] = efd_lookup_internal(group, |
| 1350 | EFD_HASHFUNCA(key_list[i], table), |
| 1351 | EFD_HASHFUNCB(key_list[i], table), |
| 1352 | table->lookup_fn); |
| 1353 | } |
| 1354 | } |