| 741 | } |
| 742 | |
| 743 | void |
| 744 | rte_efd_free(struct rte_efd_table *table) |
| 745 | { |
| 746 | uint8_t socket_id; |
| 747 | struct rte_efd_list *efd_list; |
| 748 | struct rte_tailq_entry *te, *temp; |
| 749 | |
| 750 | if (table == NULL) |
| 751 | return; |
| 752 | |
| 753 | for (socket_id = 0; socket_id < RTE_MAX_NUMA_NODES; socket_id++) |
| 754 | rte_free(table->chunks[socket_id]); |
| 755 | |
| 756 | efd_list = RTE_TAILQ_CAST(rte_efd_tailq.head, rte_efd_list); |
| 757 | rte_mcfg_tailq_write_lock(); |
| 758 | |
| 759 | RTE_TAILQ_FOREACH_SAFE(te, efd_list, next, temp) { |
| 760 | if (te->data == (void *) table) { |
| 761 | TAILQ_REMOVE(efd_list, te, next); |
| 762 | rte_free(te); |
| 763 | break; |
| 764 | } |
| 765 | } |
| 766 | |
| 767 | rte_mcfg_tailq_write_unlock(); |
| 768 | rte_ring_free(table->free_slots); |
| 769 | rte_free(table->offline_chunks); |
| 770 | rte_free(table->keys); |
| 771 | rte_free(table); |
| 772 | } |
| 773 | |
| 774 | /** |
| 775 | * Applies a previously computed table entry to the specified table for all |