Skip to content

Commit 6e41289

Browse files
committed
core: switch internal functions to use hwloc_infos_s structure
Signed-off-by: Brice Goglin <[email protected]>
1 parent d7a40a4 commit 6e41289

File tree

9 files changed

+215
-190
lines changed

9 files changed

+215
-190
lines changed

hwloc/cpukinds.c

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ hwloc_internal_cpukinds_destroy(struct hwloc_topology *topology)
2828
for(i=0; i<topology->nr_cpukinds; i++) {
2929
struct hwloc_internal_cpukind_s *kind = &topology->cpukinds[i];
3030
hwloc_bitmap_free(kind->cpuset);
31-
hwloc__free_infos(kind->infos, kind->nr_infos);
31+
hwloc__free_infos(&kind->infos);
3232
}
3333
free(topology->cpukinds);
3434
topology->cpukinds = NULL;
@@ -59,8 +59,8 @@ hwloc_internal_cpukinds_dup(hwloc_topology_t new, hwloc_topology_t old)
5959
goto failed;
6060
}
6161
if (hwloc__tma_dup_infos(tma,
62-
&kinds[i].infos, &kinds[i].nr_infos,
63-
old->cpukinds[i].infos, old->cpukinds[i].nr_infos) < 0) {
62+
&kinds[i].infos,
63+
&old->cpukinds[i].infos) < 0) {
6464
assert(!tma || !tma->dontfree); /* this tma cannot fail to allocate */
6565
hwloc_bitmap_free(kinds[i].cpuset);
6666
new->nr_cpukinds = i;
@@ -85,7 +85,7 @@ hwloc_internal_cpukinds_restrict(hwloc_topology_t topology)
8585
hwloc_bitmap_and(kind->cpuset, kind->cpuset, hwloc_get_root_obj(topology)->cpuset);
8686
if (hwloc_bitmap_iszero(kind->cpuset)) {
8787
hwloc_bitmap_free(kind->cpuset);
88-
hwloc__free_infos(kind->infos, kind->nr_infos);
88+
hwloc__free_infos(&kind->infos);
8989
memmove(kind, kind+1, (topology->nr_cpukinds - i - 1)*sizeof(*kind));
9090
i--;
9191
topology->nr_cpukinds--;
@@ -106,29 +106,29 @@ hwloc__cpukind_check_duplicate_info(struct hwloc_internal_cpukind_s *kind,
106106
const char *name, const char *value)
107107
{
108108
unsigned i;
109-
for(i=0; i<kind->nr_infos; i++)
110-
if (!strcmp(kind->infos[i].name, name)
111-
&& !strcmp(kind->infos[i].value, value))
109+
for(i=0; i<kind->infos.count; i++)
110+
if (!strcmp(kind->infos.array[i].name, name)
111+
&& !strcmp(kind->infos.array[i].value, value))
112112
return 1;
113113
return 0;
114114
}
115115

116116
static __hwloc_inline void
117117
hwloc__cpukind_add_infos(struct hwloc_internal_cpukind_s *kind,
118-
const struct hwloc_info_s *infos, unsigned nr_infos)
118+
const struct hwloc_infos_s *infos)
119119
{
120120
unsigned i;
121-
for(i=0; i<nr_infos; i++) {
122-
if (hwloc__cpukind_check_duplicate_info(kind, infos[i].name, infos[i].value))
121+
for(i=0; i<infos->count; i++) {
122+
if (hwloc__cpukind_check_duplicate_info(kind, infos->array[i].name, infos->array[i].value))
123123
continue;
124-
hwloc__add_info(&kind->infos, &kind->nr_infos, infos[i].name, infos[i].value);
124+
hwloc__add_info(&kind->infos, infos->array[i].name, infos->array[i].value);
125125
}
126126
}
127127

128128
int
129129
hwloc_internal_cpukinds_register(hwloc_topology_t topology, hwloc_cpuset_t cpuset,
130130
int forced_efficiency,
131-
const struct hwloc_info_s *infos, unsigned nr_infos,
131+
const struct hwloc_infos_s *infos,
132132
unsigned long flags)
133133
{
134134
struct hwloc_internal_cpukind_s *kinds;
@@ -184,8 +184,9 @@ hwloc_internal_cpukinds_register(hwloc_topology_t topology, hwloc_cpuset_t cpuse
184184
kinds[newnr].efficiency = HWLOC_CPUKIND_EFFICIENCY_UNKNOWN;
185185
kinds[newnr].forced_efficiency = forced_efficiency;
186186
hwloc_bitmap_and(kinds[newnr].cpuset, cpuset, kinds[i].cpuset);
187-
hwloc__cpukind_add_infos(&kinds[newnr], kinds[i].infos, kinds[i].nr_infos);
188-
hwloc__cpukind_add_infos(&kinds[newnr], infos, nr_infos);
187+
hwloc__cpukind_add_infos(&kinds[newnr], &kinds[i].infos);
188+
if (infos)
189+
hwloc__cpukind_add_infos(&kinds[newnr], infos);
189190
/* remove cpuset PUs from the existing kind that we just split */
190191
hwloc_bitmap_andnot(kinds[i].cpuset, kinds[i].cpuset, kinds[newnr].cpuset);
191192
/* clear cpuset PUs that were taken care of */
@@ -196,7 +197,8 @@ hwloc_internal_cpukinds_register(hwloc_topology_t topology, hwloc_cpuset_t cpuse
196197
} else if (res == HWLOC_BITMAP_CONTAINS
197198
|| res == HWLOC_BITMAP_EQUAL) {
198199
/* append new info to existing smaller (or equal) kind */
199-
hwloc__cpukind_add_infos(&kinds[i], infos, nr_infos);
200+
if (infos)
201+
hwloc__cpukind_add_infos(&kinds[i], infos);
200202
if ((flags & HWLOC_CPUKINDS_REGISTER_FLAG_OVERWRITE_FORCED_EFFICIENCY)
201203
|| kinds[i].forced_efficiency == HWLOC_CPUKIND_EFFICIENCY_UNKNOWN)
202204
kinds[i].forced_efficiency = forced_efficiency;
@@ -218,7 +220,8 @@ hwloc_internal_cpukinds_register(hwloc_topology_t topology, hwloc_cpuset_t cpuse
218220
kinds[newnr].cpuset = cpuset;
219221
kinds[newnr].efficiency = HWLOC_CPUKIND_EFFICIENCY_UNKNOWN;
220222
kinds[newnr].forced_efficiency = forced_efficiency;
221-
hwloc__cpukind_add_infos(&kinds[newnr], infos, nr_infos);
223+
if (infos)
224+
hwloc__cpukind_add_infos(&kinds[newnr], infos);
222225
newnr++;
223226
} else {
224227
hwloc_bitmap_free(cpuset);
@@ -235,6 +238,7 @@ hwloc_cpukinds_register(hwloc_topology_t topology, hwloc_cpuset_t _cpuset,
235238
unsigned long flags)
236239
{
237240
hwloc_bitmap_t cpuset;
241+
struct hwloc_infos_s _infos;
238242
int err;
239243

240244
if (flags) {
@@ -254,7 +258,9 @@ hwloc_cpukinds_register(hwloc_topology_t topology, hwloc_cpuset_t _cpuset,
254258
if (forced_efficiency < 0)
255259
forced_efficiency = HWLOC_CPUKIND_EFFICIENCY_UNKNOWN;
256260

257-
err = hwloc_internal_cpukinds_register(topology, cpuset, forced_efficiency, infos, nr_infos, HWLOC_CPUKINDS_REGISTER_FLAG_OVERWRITE_FORCED_EFFICIENCY);
261+
_infos.array = infos;
262+
_infos.count = nr_infos;
263+
err = hwloc_internal_cpukinds_register(topology, cpuset, forced_efficiency, &_infos, HWLOC_CPUKINDS_REGISTER_FLAG_OVERWRITE_FORCED_EFFICIENCY);
258264
if (err < 0)
259265
return err;
260266

@@ -317,8 +323,8 @@ hwloc__cpukinds_summarize_info(struct hwloc_topology *topology,
317323

318324
for(i=0; i<topology->nr_cpukinds; i++) {
319325
struct hwloc_internal_cpukind_s *kind = &topology->cpukinds[i];
320-
for(j=0; j<kind->nr_infos; j++) {
321-
struct hwloc_info_s *info = &kind->infos[j];
326+
for(j=0; j<kind->infos.count; j++) {
327+
struct hwloc_info_s *info = &kind->infos.array[j];
322328
if (!strcmp(info->name, "FrequencyMaxMHz")) {
323329
summary->summaries[i].max_freq = atoi(info->value);
324330
} else if (!strcmp(info->name, "FrequencyBaseMHz")) {
@@ -622,8 +628,8 @@ hwloc_cpukinds_get_info(hwloc_topology_t topology,
622628
*efficiencyp = kind->efficiency;
623629

624630
if (nr_infosp && infosp) {
625-
*nr_infosp = kind->nr_infos;
626-
*infosp = kind->infos;
631+
*nr_infosp = kind->infos.count;
632+
*infosp = kind->infos.array;
627633
}
628634
return 0;
629635
}

hwloc/diff.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -424,10 +424,10 @@ int hwloc_topology_diff_build(hwloc_topology_t topo1,
424424
|| ic1->efficiency != ic2->efficiency
425425
|| ic1->forced_efficiency != ic2->forced_efficiency
426426
|| ic1->ranking_value != ic2->ranking_value
427-
|| ic1->nr_infos != ic2->nr_infos)
427+
|| ic1->infos.count != ic2->infos.count)
428428
goto roottoocomplex;
429-
for(j=0; j<ic1->nr_infos; j++) {
430-
struct hwloc_info_s *info1 = &ic1->infos[j], *info2 = &ic2->infos[j];
429+
for(j=0; j<ic1->infos.count; j++) {
430+
struct hwloc_info_s *info1 = &ic1->infos.array[j], *info2 = &ic2->infos.array[j];
431431
if (strcmp(info1->name, info2->name)
432432
|| strcmp(info1->value, info2->value)) {
433433
goto roottoocomplex;

hwloc/topology-darwin.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,17 +320,19 @@ static int hwloc__darwin_cpukinds_register(struct hwloc_topology *topology,
320320
int got_efficiency = kinds->nr ? 1 : 0;
321321

322322
for(i=0; i<kinds->nr; i++) {
323+
struct hwloc_infos_s infos;
323324
struct hwloc_info_s infoattr;
324-
unsigned nr_info = 0;
325325
int efficiency;
326326
hwloc_debug_2args_bitmap("building cpukind with perflevel %u compatible `%s' and cpuset %s\n",
327327
kinds->kinds[i].perflevel,
328328
kinds->kinds[i].compatible,
329329
kinds->kinds[i].cpuset);
330+
infos.count = 0;
330331
if (kinds->kinds[i].compatible) {
331332
infoattr.name = (char *) "DarwinCompatible";
332333
infoattr.value = kinds->kinds[i].compatible;
333-
nr_info = 1;
334+
infos.array = &infoattr;
335+
infos.count = 1;
334336
}
335337
if (kinds->kinds[i].perflevel >= 0) {
336338
/* perflevel0 always refers to the highest performance core type in the system. */
@@ -339,7 +341,7 @@ static int hwloc__darwin_cpukinds_register(struct hwloc_topology *topology,
339341
efficiency = HWLOC_CPUKIND_EFFICIENCY_UNKNOWN;
340342
got_efficiency = 0;
341343
}
342-
hwloc_internal_cpukinds_register(topology, kinds->kinds[i].cpuset, efficiency, &infoattr, nr_info, 0);
344+
hwloc_internal_cpukinds_register(topology, kinds->kinds[i].cpuset, efficiency, &infos, 0);
343345
free(kinds->kinds[i].compatible);
344346
/* the cpuset is given to the callee */
345347
}

0 commit comments

Comments
 (0)