2 #include "libbenchmark_topology_internal.h"
8 /****************************************************************************/
9 void libbenchmark_topology_generate_numa_modes_list( struct libbenchmark_topology_state *ts, enum libbenchmark_topology_numa_mode numa_mode, struct libshared_memory_state *ms, struct lfds710_list_asu_state *numa_modes_list )
14 struct libbenchmark_topology_numa_node
17 LFDS710_PAL_ASSERT( ts != NULL );
18 LFDS710_PAL_ASSERT( numa_mode == LIBBENCHMARK_TOPOLOGY_NUMA_MODE_SMP or numa_mode == LIBBENCHMARK_TOPOLOGY_NUMA_MODE_NUMA );
19 LFDS710_PAL_ASSERT( ms != NULL );
20 LFDS710_PAL_ASSERT( numa_modes_list != NULL );
22 lfds710_list_asu_init_valid_on_current_logical_core( numa_modes_list, NULL );
26 case LIBBENCHMARK_TOPOLOGY_NUMA_MODE_SMP:
27 tnn = libshared_memory_alloc_from_most_free_space_node( ms, sizeof(struct libbenchmark_topology_numa_node), LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES );
28 tnn->mode = LIBBENCHMARK_TOPOLOGY_NUMA_MODE_SMP;
29 LFDS710_LIST_ASU_SET_VALUE_IN_ELEMENT( tnn->lasue, tnn );
30 lfds710_list_asu_insert_at_start( numa_modes_list, &tnn->lasue );
33 case LIBBENCHMARK_TOPOLOGY_NUMA_MODE_NUMA:
34 libbenchmark_topology_query( ts, LIBBENCHMARK_TOPOLOGY_QUERY_GET_NUMBER_OF_NODE_TYPE, (void *) (lfds710_pal_uint_t) LIBBENCHMARK_TOPOLOGY_NODE_TYPE_NUMA, &numa_node_count );
36 if( numa_node_count == 1 )
38 tnn = libshared_memory_alloc_from_most_free_space_node( ms, sizeof(struct libbenchmark_topology_numa_node), LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES );
39 tnn->mode = LIBBENCHMARK_TOPOLOGY_NUMA_MODE_NUMA;
40 LFDS710_LIST_ASU_SET_VALUE_IN_ELEMENT( tnn->lasue, tnn );
41 lfds710_list_asu_insert_at_start( numa_modes_list, &tnn->lasue );
44 if( numa_node_count >= 2 )
46 tnn = libshared_memory_alloc_from_most_free_space_node( ms, sizeof(struct libbenchmark_topology_numa_node), LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES );
47 tnn->mode = LIBBENCHMARK_TOPOLOGY_NUMA_MODE_NUMA;
48 LFDS710_LIST_ASU_SET_VALUE_IN_ELEMENT( tnn->lasue, tnn );
49 lfds710_list_asu_insert_at_start( numa_modes_list, &tnn->lasue );
51 tnn = libshared_memory_alloc_from_most_free_space_node( ms, sizeof(struct libbenchmark_topology_numa_node), LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES );
52 tnn->mode = LIBBENCHMARK_TOPOLOGY_NUMA_MODE_NUMA_BUT_NOT_USED;
53 LFDS710_LIST_ASU_SET_VALUE_IN_ELEMENT( tnn->lasue, tnn );
54 lfds710_list_asu_insert_at_start( numa_modes_list, &tnn->lasue );
58 case LIBBENCHMARK_TOPOLOGY_NUMA_MODE_NUMA_BUT_NOT_USED: