From: Stefan Kober <stefan.kober@cyberus-technology.de> Parse the user provided cpu topology information and transform it into correct cloud-hypervisor API calls. On-behalf-of: SAP stefan.kober@sap.com On-behalf-of: SAP thomas.prescher@sap.com Signed-off-by: Stefan Kober <stefan.kober@cyberus-technology.de> Signed-off-by: Thomas Prescher <thomas.prescher@cyberus-technology.de> --- src/ch/ch_monitor.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/ch/ch_monitor.c b/src/ch/ch_monitor.c index 9bd5eb0114..e0fae8206c 100644 --- a/src/ch/ch_monitor.c +++ b/src/ch/ch_monitor.c @@ -69,10 +69,28 @@ virCHMonitorPut(virCHMonitor *mon, domainLogContext *logCtxt, virJSONValue **answer); +static int +virCHMonitorBuildCPUTopologyJson(virJSONValue *content, virDomainDef *vmdef) +{ + if (virDomainDefGetVcpusTopology(vmdef, NULL) != 0) { + return -1; + } + if (virJSONValueObjectAppendNumberInt(content, "threads_per_core", vmdef->cpu->threads) < 0) + return -1; + if (virJSONValueObjectAppendNumberInt(content, "cores_per_die", vmdef->cpu->cores) < 0) + return -1; + if (virJSONValueObjectAppendNumberInt(content, "dies_per_package", vmdef->cpu->dies) < 0) + return -1; + if (virJSONValueObjectAppendNumberInt(content, "packages", vmdef->cpu->sockets) < 0) + return -1; + return 0; +} + static int virCHMonitorBuildCPUJson(virJSONValue *content, virDomainDef *vmdef) { g_autoptr(virJSONValue) cpus = NULL; + g_autoptr(virJSONValue) topology = virJSONValueNewObject(); unsigned int maxvcpus = 0; unsigned int nvcpus = 0; virDomainVcpuDef *vcpu; @@ -92,6 +110,11 @@ virCHMonitorBuildCPUJson(virJSONValue *content, virDomainDef *vmdef) return -1; if (virJSONValueObjectAppendNumberInt(cpus, "max_vcpus", vmdef->maxvcpus) < 0) return -1; + if (virCHMonitorBuildCPUTopologyJson(topology, vmdef) == 0) { + VIR_INFO("Using CPU topology: %d:%d:%d:%d", vmdef->cpu->sockets, vmdef->cpu->dies, vmdef->cpu->cores, vmdef->cpu->threads); + if (virJSONValueObjectAppend(cpus, "topology", &topology) < 0) + return -1; + } if (virJSONValueObjectAppend(content, "cpus", &cpus) < 0) return -1; } -- 2.53.0