It will be used by a future commit. struct ovs_numa_dump now uses an hmap instead of a list to make ovs_numa_dump_contains_core() more efficient.
Signed-off-by: Daniele Di Proietto <diproiet...@vmware.com> --- lib/ovs-numa.c | 25 ++++++++++++++++++++++--- lib/ovs-numa.h | 10 ++++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/lib/ovs-numa.c b/lib/ovs-numa.c index e1e7068a2..85f392a91 100644 --- a/lib/ovs-numa.c +++ b/lib/ovs-numa.c @@ -494,7 +494,7 @@ ovs_numa_dump_cores_on_numa(int numa_id) struct ovs_numa_dump *dump = xmalloc(sizeof *dump); struct numa_node *numa = get_numa_by_numa_id(numa_id); - ovs_list_init(&dump->dump); + hmap_init(&dump->dump); if (numa) { struct cpu_core *core; @@ -504,13 +504,30 @@ ovs_numa_dump_cores_on_numa(int numa_id) info->numa_id = numa->numa_id; info->core_id = core->core_id; - ovs_list_insert(&dump->dump, &info->list_node); + hmap_insert(&dump->dump, &info->hmap_node, + hash_2words(info->numa_id, info->core_id)); } } return dump; } +bool +ovs_numa_dump_contains_core(const struct ovs_numa_dump *dump, + int numa_id, unsigned core_id) +{ + struct ovs_numa_info *core; + + HMAP_FOR_EACH_WITH_HASH (core, hmap_node, hash_2words(numa_id, core_id), + &dump->dump) { + if (core->core_id == core_id && core->numa_id == numa_id) { + return true; + } + } + + return false; +} + void ovs_numa_dump_destroy(struct ovs_numa_dump *dump) { @@ -520,10 +537,12 @@ ovs_numa_dump_destroy(struct ovs_numa_dump *dump) return; } - LIST_FOR_EACH_POP (iter, list_node, &dump->dump) { + HMAP_FOR_EACH_POP (iter, hmap_node, &dump->dump) { free(iter); } + hmap_destroy(&dump->dump); + free(dump); } diff --git a/lib/ovs-numa.h b/lib/ovs-numa.h index be836b2ca..c0eae07d8 100644 --- a/lib/ovs-numa.h +++ b/lib/ovs-numa.h @@ -21,19 +21,19 @@ #include <stdbool.h> #include "compiler.h" -#include "openvswitch/list.h" +#include "openvswitch/hmap.h" #define OVS_CORE_UNSPEC INT_MAX #define OVS_NUMA_UNSPEC INT_MAX /* Dump of a list of 'struct ovs_numa_info'. */ struct ovs_numa_dump { - struct ovs_list dump; + struct hmap dump; }; /* A numa_id - core_id pair. */ struct ovs_numa_info { - struct ovs_list list_node; + struct hmap_node hmap_node; int numa_id; unsigned core_id; }; @@ -54,10 +54,12 @@ unsigned ovs_numa_get_unpinned_core_any(void); unsigned ovs_numa_get_unpinned_core_on_numa(int numa_id); void ovs_numa_unpin_core(unsigned core_id); struct ovs_numa_dump *ovs_numa_dump_cores_on_numa(int numa_id); +bool ovs_numa_dump_contains_core(const struct ovs_numa_dump *, + int numa_id, unsigned core_id); void ovs_numa_dump_destroy(struct ovs_numa_dump *); int ovs_numa_thread_setaffinity_core(unsigned core_id); #define FOR_EACH_CORE_ON_NUMA(ITER, DUMP) \ - LIST_FOR_EACH((ITER), list_node, &(DUMP)->dump) + HMAP_FOR_EACH((ITER), hmap_node, &(DUMP)->dump) #endif /* ovs-numa.h */ -- 2.11.0 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev