diff --git a/tests/testutils.c b/tests/testutils.c index 7c095caac9..4b13d11278 100644 --- a/tests/testutils.c +++ b/tests/testutils.c @@ -1228,6 +1228,57 @@ virCapsPtr virTestGenericCapsInit(void) return NULL; } + +#define MAX_CELLS 4 +#define MAX_CPUS_IN_CELL 2 +#define MAX_MEM_IN_CELL 2097152 + +/* + * Build NUMA topology with cell id starting from (0 + seq) + * for testing + */ +int +virTestCapsBuildNUMATopology(virCapsPtr caps, + int seq) +{ + virCapsHostNUMACellCPUPtr cell_cpus = NULL; + int core_id, cell_id; + int id; + + id = 0; + for (cell_id = 0; cell_id < MAX_CELLS; cell_id++) { + if (VIR_ALLOC_N(cell_cpus, MAX_CPUS_IN_CELL) < 0) + goto error; + + for (core_id = 0; core_id < MAX_CPUS_IN_CELL; core_id++) { + cell_cpus[core_id].id = id + core_id; + cell_cpus[core_id].socket_id = cell_id + seq; + cell_cpus[core_id].core_id = id + core_id; + if (!(cell_cpus[core_id].siblings = + virBitmapNew(MAX_CPUS_IN_CELL))) + goto error; + ignore_value(virBitmapSetBit(cell_cpus[core_id].siblings, id)); + } + id++; + + if (virCapabilitiesAddHostNUMACell(caps, cell_id + seq, + MAX_MEM_IN_CELL, + MAX_CPUS_IN_CELL, cell_cpus, + VIR_ARCH_NONE, NULL, + VIR_ARCH_NONE, NULL) < 0) + goto error; + + cell_cpus = NULL; + } + + return 0; + + error: + virCapabilitiesClearHostNUMACellCPUTopology(cell_cpus, MAX_CPUS_IN_CELL); + VIR_FREE(cell_cpus); + return -1; +} + static virDomainDefParserConfig virTestGenericDomainDefParserConfig = { .features = VIR_DOMAIN_DEF_FEATURE_INDIVIDUAL_VCPUS, }; diff --git a/tests/testutils.h b/tests/testutils.h index d840875bc1..3bd7bf1603 100644 --- a/tests/testutils.h +++ b/tests/testutils.h @@ -147,6 +147,8 @@ int virTestMain(int argc, } virCapsPtr virTestGenericCapsInit(void); +int virTestCapsBuildNUMATopology(virCapsPtr caps, + int seq); virDomainXMLOptionPtr virTestGenericDomainXMLConfInit(void); typedef enum { diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index 3222d7864c..dc7e90b952 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -400,7 +400,12 @@ virCapsPtr testQemuCapsInit(void) qemuTestSetHostCPU(caps, NULL); - caps->host.nnumaCell_max = 4; + /* + * Build a NUMA topology with cell_id (NUMA node id + * being 3(0 + 3),4(1 + 3), 5 and 6 + */ + if (virTestCapsBuildNUMATopology(caps, 3) < 0) + goto cleanup; if (testQemuAddI686Guest(caps) < 0) goto cleanup; diff --git a/tests/vircapstest.c b/tests/vircapstest.c index 664b7da143..1df3fa091f 100644 --- a/tests/vircapstest.c +++ b/tests/vircapstest.c @@ -29,62 +29,6 @@ #define VIR_FROM_THIS VIR_FROM_NONE -#define MAX_CELLS 4 -#define MAX_CPUS_IN_CELL 2 -#define MAX_MEM_IN_CELL 2097152 - - -/* - * Build NUMA Toplogy with cell id starting from (0 + seq) - * for testing - */ -static virCapsPtr -buildNUMATopology(int seq) -{ - virCapsPtr caps; - virCapsHostNUMACellCPUPtr cell_cpus = NULL; - int core_id, cell_id; - int id; - - if ((caps = virCapabilitiesNew(VIR_ARCH_X86_64, false, false)) == NULL) - goto error; - - id = 0; - for (cell_id = 0; cell_id < MAX_CELLS; cell_id++) { - if (VIR_ALLOC_N(cell_cpus, MAX_CPUS_IN_CELL) < 0) - goto error; - - for (core_id = 0; core_id < MAX_CPUS_IN_CELL; core_id++) { - cell_cpus[core_id].id = id + core_id; - cell_cpus[core_id].socket_id = cell_id + seq; - cell_cpus[core_id].core_id = id + core_id; - if (!(cell_cpus[core_id].siblings = - virBitmapNew(MAX_CPUS_IN_CELL))) - goto error; - ignore_value(virBitmapSetBit(cell_cpus[core_id].siblings, id)); - } - id++; - - if (virCapabilitiesAddHostNUMACell(caps, cell_id + seq, - MAX_MEM_IN_CELL, - MAX_CPUS_IN_CELL, cell_cpus, - VIR_ARCH_NONE, NULL, - VIR_ARCH_NONE, NULL) < 0) - goto error; - - cell_cpus = NULL; - } - - return caps; - - error: - virCapabilitiesClearHostNUMACellCPUTopology(cell_cpus, MAX_CPUS_IN_CELL); - VIR_FREE(cell_cpus); - virObjectUnref(caps); - return NULL; - -} - static int test_virCapabilitiesGetCpusForNodemask(const void *data ATTRIBUTE_UNUSED) @@ -96,11 +40,11 @@ test_virCapabilitiesGetCpusForNodemask(const void *data ATTRIBUTE_UNUSED) int mask_size = 8; int ret = -1; - /* - * Build a NUMA topology with cell_id (NUMA node id - * being 3(0 + 3),4(1 + 3), 5 and 6 - */ - if (!(caps = buildNUMATopology(3))) + + if (!(caps = virCapabilitiesNew(VIR_ARCH_X86_64, false, false))) + goto error; + + if (virTestCapsBuildNUMATopology(caps, 3) < 0) goto error; if (virBitmapParse(nodestr, &nodemask, mask_size) < 0)