diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index e3235bf9a2f21b6bd784689ef659ae870b6b54b3..9ebf01a4b403326d2718fda188583b51e0e74494 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13531,7 +13531,7 @@ virDomainDefParseXML(xmlDocPtr xml, if (virDomainNumatuneParseXML(def->numa, def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC, - def->cpu ? def->cpu->ncells : 0, + virDomainNumaGetNodeCount(def->cpu), ctxt) < 0) goto error; diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c index 7ee2b3e694c6441279acd28f4671b2b974fe5eb0..8000415b2ed24b958eaacb6e3012ebf3138d15e8 100644 --- a/src/conf/numa_conf.c +++ b/src/conf/numa_conf.c @@ -760,14 +760,15 @@ virDomainNumaDefCPUFormat(virBufferPtr buf, { virNumaMemAccess memAccess; char *cpustr; + size_t ncells = virDomainNumaGetNodeCount(def); size_t i; - if (def->ncells == 0) + if (ncells == 0) return 0; virBufferAddLit(buf, "\n"); virBufferAdjustIndent(buf, 2); - for (i = 0; i < def->ncells; i++) { + for (i = 0; i < ncells; i++) { memAccess = def->cells[i].memAccess; if (!(cpustr = virBitmapFormat(def->cells[i].cpumask))) @@ -813,3 +814,13 @@ virDomainNumaNew(void) return ret; } + + +size_t +virDomainNumaGetNodeCount(virCPUDefPtr numa) +{ + if (!numa) + return 0; + + return numa->ncells; +} diff --git a/src/conf/numa_conf.h b/src/conf/numa_conf.h index 5fa1b9a9b4cda5a19b872fc752de2d037a47b6ce..07759ed813543e0b7d21132bd1b9ce5e0a2b3e8e 100644 --- a/src/conf/numa_conf.h +++ b/src/conf/numa_conf.h @@ -86,6 +86,9 @@ int virDomainNumatuneMaybeGetNodeset(virDomainNumaPtr numatune, virBitmapPtr *retNodeset, int cellid); +size_t virDomainNumaGetNodeCount(virCPUDefPtr numa) + ATTRIBUTE_NONNULL(1); + /* * Formatters */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index b220a322d22394f6c0ab6e7aa2e654aad80f5748..924ad37f6fa075ef26b090d0986fd3c29b56dd34 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -629,6 +629,7 @@ virNodeDeviceObjUnlock; # conf/numa_conf.h virDomainNumaEquals; virDomainNumaFree; +virDomainNumaGetNodeCount; virDomainNumaNew; virDomainNumatuneFormatNodeset; virDomainNumatuneFormatXML; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 74f0bd36d8211d47f6fa920e4efe05ba20e309dc..befb98279f5a097c1f181c8e80828e613cdc872b 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7121,7 +7121,7 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, bool needBackend = false; int rc; int ret = -1; - size_t ncells = def->cpu->ncells; + size_t ncells = virDomainNumaGetNodeCount(def->cpu); const long system_page_size = virGetSystemPageSizeKB(); if (virDomainNumatuneHasPerNodeBinding(def->numa) && @@ -8318,7 +8318,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, "-m"); def->mem.max_balloon = VIR_DIV_UP(def->mem.max_balloon, 1024) * 1024; virCommandAddArgFormat(cmd, "%llu", def->mem.max_balloon / 1024); - if (def->mem.nhugepages && (!def->cpu || !def->cpu->ncells)) { + if (def->mem.nhugepages && !virDomainNumaGetNodeCount(def->cpu)) { const long system_page_size = virGetSystemPageSizeKB(); char *mem_path = NULL; @@ -8398,7 +8398,7 @@ qemuBuildCommandLine(virConnectPtr conn, } } - if (def->cpu && def->cpu->ncells) + if (virDomainNumaGetNodeCount(def->cpu)) if (qemuBuildNumaArgStr(cfg, def, cmd, qemuCaps, nodeset) < 0) goto error;