From 7c1f6702e171e98ada700d3634534f541ff5feb5 Mon Sep 17 00:00:00 2001 From: jokenzhang Date: Mon, 22 May 2023 22:40:01 +0800 Subject: [PATCH] =?UTF-8?q?cpu=5Ftopo:=20support=20for=20cpu=5Ftopo=20"clu?= =?UTF-8?q?sters=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Kunpeng920 support a new structure "cluster" in cpu topology. Support it in libvirt. Signed-off-by: zhangxinhao (cherry picked from commit 0d65fed7bbadc46a7036c37e8aaaa96a7b3a7e1f) --- ...ection-of-vCPU-pids-when-multiple-cl.patch | 108 ++ ...upport-for-cpu_topo-clusters-in-conf.patch | 1152 +++++++++++++++++ ...-for-reporting-cluster_id-in-NUMA-to.patch | 522 ++++++++ ...-for-specifying-clusters-in-qemu-com.patch | 163 +++ libvirt.spec | 12 +- 5 files changed, 1956 insertions(+), 1 deletion(-) create mode 100644 cpu_topo-fix-detection-of-vCPU-pids-when-multiple-cl.patch create mode 100644 cpu_topo-support-for-cpu_topo-clusters-in-conf.patch create mode 100644 cpu_topo-support-for-reporting-cluster_id-in-NUMA-to.patch create mode 100644 cpu_topo-support-for-specifying-clusters-in-qemu-com.patch diff --git a/cpu_topo-fix-detection-of-vCPU-pids-when-multiple-cl.patch b/cpu_topo-fix-detection-of-vCPU-pids-when-multiple-cl.patch new file mode 100644 index 0000000..123b781 --- /dev/null +++ b/cpu_topo-fix-detection-of-vCPU-pids-when-multiple-cl.patch @@ -0,0 +1,108 @@ +From a450496281dbbc2b240bf5dc0829a17d113aed22 Mon Sep 17 00:00:00 2001 +From: zhangxinhao +Date: Wed, 17 May 2023 09:41:19 +0800 +Subject: cpu_topo: fix detection of vCPU pids when multiple + clusters are present + +The logic for querying hotpluggable CPUs needs to sort the list +of CPUs returned by QEMU. Add the logic of cluster when sorting +the hotpluggable CPUs. + +Signed-off-by: zhangxinhao +--- + src/qemu/qemu_domain.c | 3 ++- + src/qemu/qemu_monitor.c | 2 ++ + src/qemu/qemu_monitor.h | 2 ++ + src/qemu/qemu_monitor_json.c | 5 +++++ + 4 files changed, 11 insertions(+), 1 deletion(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 152c8615d5..fbc665aff3 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -13877,11 +13877,12 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, + + if (validTIDs) + VIR_DEBUG("vCPU[%zu] PID %llu is valid " +- "(node=%d socket=%d die=%d core=%d thread=%d)", ++ "(node=%d socket=%d die=%d cluster=%d core=%d thread=%d)", + i, (unsigned long long)info[i].tid, + info[i].node_id, + info[i].socket_id, + info[i].die_id, ++ info[i].cluster_id, + info[i].core_id, + info[i].thread_id); + } +diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c +index ffd1d348e5..3bdfdbe078 100644 +--- a/src/qemu/qemu_monitor.c ++++ b/src/qemu/qemu_monitor.c +@@ -1676,6 +1676,7 @@ qemuMonitorCPUInfoClear(qemuMonitorCPUInfoPtr cpus, + cpus[i].qemu_id = -1; + cpus[i].socket_id = -1; + cpus[i].die_id = -1; ++ cpus[i].cluster_id = -1; + cpus[i].core_id = -1; + cpus[i].thread_id = -1; + cpus[i].node_id = -1; +@@ -1832,6 +1833,7 @@ qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotpl + !vcpus[mastervcpu].online; + vcpus[mastervcpu].socket_id = hotplugvcpus[i].socket_id; + vcpus[mastervcpu].die_id = hotplugvcpus[i].die_id; ++ vcpus[mastervcpu].cluster_id = hotplugvcpus[i].cluster_id; + vcpus[mastervcpu].core_id = hotplugvcpus[i].core_id; + vcpus[mastervcpu].thread_id = hotplugvcpus[i].thread_id; + vcpus[mastervcpu].node_id = hotplugvcpus[i].node_id; +diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h +index 76d0bbb753..1c6b001872 100644 +--- a/src/qemu/qemu_monitor.h ++++ b/src/qemu/qemu_monitor.h +@@ -579,6 +579,7 @@ struct qemuMonitorQueryHotpluggableCpusEntry { + int node_id; + int socket_id; + int die_id; ++ int cluster_id; + int core_id; + int thread_id; + +@@ -602,6 +603,7 @@ struct _qemuMonitorCPUInfo { + * all entries are -1 */ + int socket_id; + int die_id; ++ int cluster_id; + int core_id; + int thread_id; + int node_id; +diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c +index a02d0e2780..afd826bc2f 100644 +--- a/src/qemu/qemu_monitor_json.c ++++ b/src/qemu/qemu_monitor_json.c +@@ -8598,12 +8598,14 @@ qemuMonitorJSONProcessHotpluggableCpusReply(virJSONValuePtr vcpu, + entry->node_id = -1; + entry->socket_id = -1; + entry->die_id = -1; ++ entry->cluster_id = -1; + entry->core_id = -1; + entry->thread_id = -1; + + ignore_value(virJSONValueObjectGetNumberInt(props, "node-id", &entry->node_id)); + ignore_value(virJSONValueObjectGetNumberInt(props, "socket-id", &entry->socket_id)); + ignore_value(virJSONValueObjectGetNumberInt(props, "die-id", &entry->die_id)); ++ ignore_value(virJSONValueObjectGetNumberInt(props, "cluster-id", &entry->cluster_id)); + ignore_value(virJSONValueObjectGetNumberInt(props, "core-id", &entry->core_id)); + ignore_value(virJSONValueObjectGetNumberInt(props, "thread-id", &entry->thread_id)); + +@@ -8641,6 +8643,9 @@ qemuMonitorQueryHotpluggableCpusEntrySort(const void *p1, + if (a->die_id != b->die_id) + return a->die_id - b->die_id; + ++ if (a->cluster_id != b->cluster_id) ++ return a->cluster_id - b->cluster_id; ++ + if (a->core_id != b->core_id) + return a->core_id - b->core_id; + +-- +2.25.1 + diff --git a/cpu_topo-support-for-cpu_topo-clusters-in-conf.patch b/cpu_topo-support-for-cpu_topo-clusters-in-conf.patch new file mode 100644 index 0000000..c8a96f7 --- /dev/null +++ b/cpu_topo-support-for-cpu_topo-clusters-in-conf.patch @@ -0,0 +1,1152 @@ +From 576236efe092a457cd3c33fef139fb21985713c6 Mon Sep 17 00:00:00 2001 +From: zhangxinhao +Date: Tue, 9 May 2023 15:23:48 +0800 +Subject: cpu_topo: support for cpu_topo "clusters” in conf + +Kunpeng920 support a new structure "cluster" in cpu topology. Support +"clusters" in XML parser. + +Signed-off-by: zhangxinhao +--- + docs/formatcaps.html.in | 2 +- + docs/formatdomain.html.in | 23 +++++++++-------- + docs/schemas/cputypes.rng | 5 ++++ + src/conf/cpu_conf.c | 25 +++++++++++++++++-- + src/conf/cpu_conf.h | 1 + + src/conf/domain_conf.c | 1 + + src/cpu/cpu.c | 1 + + src/qemu/qemu_command.c | 5 ++++ + src/vmx/vmx.c | 7 ++++++ + .../x86_64-host+guest,model486-result.xml | 2 +- + .../x86_64-host+guest,models-result.xml | 2 +- + .../cputestdata/x86_64-host+guest-result.xml | 2 +- + tests/cputestdata/x86_64-host+guest.xml | 2 +- + .../x86_64-host+host-model-nofallback.xml | 2 +- + ...t-Haswell-noTSX+Haswell,haswell-result.xml | 2 +- + ...ell-noTSX+Haswell-noTSX,haswell-result.xml | 2 +- + ...ost-Haswell-noTSX+Haswell-noTSX-result.xml | 2 +- + .../x86_64-host-worse+guest-result.xml | 2 +- + .../ppc64-modern-bulk-result-conf.xml | 2 +- + .../ppc64-modern-bulk-result-live.xml | 2 +- + .../ppc64-modern-individual-result-conf.xml | 2 +- + .../ppc64-modern-individual-result-live.xml | 2 +- + .../x86-modern-bulk-result-conf.xml | 2 +- + .../x86-modern-bulk-result-live.xml | 2 +- + .../x86-modern-individual-add-result-conf.xml | 2 +- + .../x86-modern-individual-add-result-live.xml | 2 +- + .../x86-old-bulk-result-conf.xml | 2 +- + .../x86-old-bulk-result-live.xml | 2 +- + .../fd-memory-no-numa-topology.xml | 2 +- + .../fd-memory-numa-topology.xml | 2 +- + .../fd-memory-numa-topology2.xml | 2 +- + .../fd-memory-numa-topology3.xml | 2 +- + tests/qemuxml2argvdata/hugepages-nvdimm.xml | 2 +- + .../memfd-memory-default-hugepage.xml | 2 +- + tests/qemuxml2argvdata/memfd-memory-numa.xml | 2 +- + .../memory-hotplug-nvdimm-access.xml | 2 +- + .../memory-hotplug-nvdimm-align.xml | 2 +- + .../memory-hotplug-nvdimm-label.xml | 2 +- + .../memory-hotplug-nvdimm-pmem.xml | 2 +- + .../memory-hotplug-nvdimm-readonly.xml | 2 +- + .../memory-hotplug-nvdimm.xml | 2 +- + .../qemuxml2xmloutdata/cpu-numa-disjoint.xml | 2 +- + .../cpu-numa-disordered.xml | 2 +- + .../qemuxml2xmloutdata/cpu-numa-memshared.xml | 2 +- + .../cpu-numa-no-memory-element.xml | 2 +- + tests/qemuxml2xmloutdata/cpu-numa1.xml | 2 +- + tests/qemuxml2xmloutdata/cpu-numa2.xml | 2 +- + .../fd-memory-no-numa-topology.xml | 2 +- + .../fd-memory-numa-topology.xml | 2 +- + .../fd-memory-numa-topology2.xml | 2 +- + .../fd-memory-numa-topology3.xml | 2 +- + .../graphics-spice-timeout.xml | 2 +- + tests/qemuxml2xmloutdata/hugepages-nvdimm.xml | 2 +- + .../memfd-memory-default-hugepage.xml | 2 +- + .../qemuxml2xmloutdata/memfd-memory-numa.xml | 2 +- + .../memory-hotplug-dimm.xml | 2 +- + .../memory-hotplug-nvdimm-access.xml | 2 +- + .../memory-hotplug-nvdimm-align.xml | 2 +- + .../memory-hotplug-nvdimm-label.xml | 2 +- + .../memory-hotplug-nvdimm-pmem.xml | 2 +- + .../memory-hotplug-nvdimm-ppc64.xml | 2 +- + .../memory-hotplug-nvdimm-readonly.xml | 2 +- + .../memory-hotplug-nvdimm.xml | 2 +- + tests/qemuxml2xmloutdata/memory-hotplug.xml | 2 +- + .../numad-auto-memory-vcpu-cpuset.xml | 2 +- + ...to-memory-vcpu-no-cpuset-and-placement.xml | 2 +- + .../numad-auto-vcpu-no-numatune.xml | 2 +- + .../numad-static-vcpu-no-numatune.xml | 2 +- + tests/qemuxml2xmloutdata/pci-expander-bus.xml | 2 +- + .../qemuxml2xmloutdata/pcie-expander-bus.xml | 2 +- + .../pseries-phb-numa-node.xml | 2 +- + tests/qemuxml2xmloutdata/smp.xml | 2 +- + .../vmx2xmldata/vmx2xml-esx-in-the-wild-8.xml | 2 +- + .../vmx2xmldata/vmx2xml-esx-in-the-wild-9.xml | 2 +- + 74 files changed, 121 insertions(+), 79 deletions(-) + +diff --git a/docs/formatcaps.html.in b/docs/formatcaps.html.in +index 59d21a7..ff40f06 100644 +--- a/docs/formatcaps.html.in ++++ b/docs/formatcaps.html.in +@@ -173,7 +173,7 @@ + </features> + <model>core2duo</model> + <vendor>Intel</vendor> +- <topology sockets="1" dies="1" cores="2" threads="1"/> ++ <topology sockets="1" dies="1" clusters="1" cores="2" threads="1"/> + <feature name="lahf_lm"/> + <feature name='xtpr'/> + ... +diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in +index 5860ec9..6e51c3b 100644 +--- a/docs/formatdomain.html.in ++++ b/docs/formatdomain.html.in +@@ -1470,7 +1470,7 @@ + <cpu match='exact'> + <model fallback='allow'>core2duo</model> + <vendor>Intel</vendor> +- <topology sockets='1' dies='1' cores='2' threads='1'/> ++ <topology sockets='1' dies='1' clusters="1" cores='2' threads='1'/> + <cache level='3' mode='emulate'/> + <feature policy='disable' name='lahf_lm'/> + </cpu> +@@ -1479,7 +1479,7 @@ +
+ <cpu mode='host-model'>
+   <model fallback='forbid'/>
+-  <topology sockets='1' dies='1' cores='2' threads='1'/>
++  <topology sockets='1' dies='1' clusters='1' cores='2' threads='1'/>
+ </cpu>
+ ...
+ +@@ -1498,7 +1498,7 @@ +
+ ...
+ <cpu>
+-  <topology sockets='1' dies='1' cores='2' threads='1'/>
++  <topology sockets='1' dies='1' clusters='1' cores='2' threads='1'/>
+ </cpu>
+ ...
+ +@@ -1674,14 +1674,15 @@ +
topology
+
The topology element specifies requested topology of + virtual CPU provided to the guest. Four attributes, sockets, +- dies, cores, and threads, +- accept non-zero positive integer values. They refer to the total number +- of CPU sockets, number of dies per socket, number of cores per die, and +- number of threads per core, respectively. The dies +- attribute is optional and will default to 1 if omitted, while the other +- attributes are all mandatory. Hypervisors may require that the maximum +- number of vCPUs specified by the cpus element equals to +- the number of vcpus resulting from the topology.
++ dies, dies, cores, ++ and threads, accept non-zero positive integer values. They ++ refer to the total number of CPU sockets, number of dies per socket, ++ number of clusters per die, number of cores per cluster, and number of ++ threads per core, respectively. The attribute dies and ++ clusters are optional and will default to 1 if omitted, ++ while the other attributes are all mandatory. Hypervisors may require ++ that the maximum number of vCPUs specified by the cpus ++ element equals to the number of vcpus resulting from the topology. + +
feature
+
The cpu element can contain zero or more +diff --git a/docs/schemas/cputypes.rng b/docs/schemas/cputypes.rng +index e2744ac..699fd05 100644 +--- a/docs/schemas/cputypes.rng ++++ b/docs/schemas/cputypes.rng +@@ -91,6 +91,11 @@ + + + ++ ++ ++ ++ ++ + + + +diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c +index 989306b..3c2ee73 100644 +--- a/src/conf/cpu_conf.c ++++ b/src/conf/cpu_conf.c +@@ -240,6 +240,7 @@ virCPUDefCopyWithoutModel(const virCPUDef *cpu) + copy->fallback = cpu->fallback; + copy->sockets = cpu->sockets; + copy->dies = cpu->dies; ++ copy->clusters = cpu->clusters; + copy->cores = cpu->cores; + copy->threads = cpu->threads; + copy->arch = cpu->arch; +@@ -547,6 +548,17 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt, + def->dies = 1; + } + ++ if (virXPathNode("./topology[1]/@clusters", ctxt)) { ++ if (virXPathULong("string(./topology[1]/@clusters)", ctxt, &ul) < 0) { ++ virReportError(VIR_ERR_XML_ERROR, "%s", ++ _("Malformed 'clusters' attribute in CPU topology")); ++ goto cleanup; ++ } ++ def->clusters = (unsigned int) ul; ++ } else { ++ def->clusters = 1; ++ } ++ + if (virXPathULong("string(./topology[1]/@cores)", ctxt, &ul) < 0) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Missing 'cores' attribute in CPU topology")); +@@ -561,7 +573,8 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt, + } + def->threads = (unsigned int) ul; + +- if (!def->sockets || !def->cores || !def->threads || !def->dies) { ++ if (!def->sockets || !def->cores || !def->threads || !def->dies || ++ !def -> clusters) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Invalid CPU topology")); + goto cleanup; +@@ -833,10 +846,12 @@ virCPUDefFormatBuf(virBufferPtr buf, + virBufferAddLit(buf, "/>\n"); + } + +- if (def->sockets && def->dies && def->cores && def->threads) { ++ if (def->sockets && def->dies && def->clusters && def->cores && ++ def->threads) { + virBufferAddLit(buf, "sockets); + virBufferAsprintf(buf, " dies='%u'", def->dies); ++ virBufferAsprintf(buf, " clusters='%u'", def->clusters); + virBufferAsprintf(buf, " cores='%u'", def->cores); + virBufferAsprintf(buf, " threads='%u'", def->threads); + virBufferAddLit(buf, "/>\n"); +@@ -1081,6 +1096,12 @@ virCPUDefIsEqual(virCPUDefPtr src, + return false; + } + ++ if (src->clusters != dst->clusters) { ++ MISMATCH(_("Target CPU clusters %d does not match source %d"), ++ dst->clusters, src->clusters); ++ return false; ++ } ++ + if (src->cores != dst->cores) { + MISMATCH(_("Target CPU cores %d does not match source %d"), + dst->cores, src->cores); +diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h +index 1b297ed..10a2252 100644 +--- a/src/conf/cpu_conf.h ++++ b/src/conf/cpu_conf.h +@@ -134,6 +134,7 @@ struct _virCPUDef { + unsigned int microcodeVersion; + unsigned int sockets; + unsigned int dies; ++ unsigned int clusters; + unsigned int cores; + unsigned int threads; + size_t nfeatures; +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index b8cf1ad..7ae4034 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -2088,6 +2088,7 @@ virDomainDefGetVcpusTopology(const virDomainDef *def, + + /* multiplication of 32bit numbers fits into a 64bit variable */ + if ((tmp *= def->cpu->dies) > UINT_MAX || ++ (tmp *= def->cpu->clusters) > UINT_MAX || + (tmp *= def->cpu->cores) > UINT_MAX || + (tmp *= def->cpu->threads) > UINT_MAX) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, +diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c +index df78a0d..27d26fc 100644 +--- a/src/cpu/cpu.c ++++ b/src/cpu/cpu.c +@@ -426,6 +426,7 @@ virCPUGetHost(virArch arch, + if (nodeInfo) { + cpu->sockets = nodeInfo->sockets; + cpu->dies = 1; ++ cpu->clusters = 1; + cpu->cores = nodeInfo->cores; + cpu->threads = nodeInfo->threads; + } +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 5f7e847..85f95b4 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -7335,6 +7335,11 @@ qemuBuildSmpCommandLine(virCommandPtr cmd, + _("Only 1 die per socket is supported")); + return -1; + } ++ if (def->cpu->clusters != 1) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("Only 1 cluster per dies is supported")); ++ return -1; ++ } + virBufferAsprintf(&buf, ",sockets=%u", def->cpu->sockets); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SMP_DIES)) + virBufferAsprintf(&buf, ",dies=%u", def->cpu->dies); +diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c +index 5f2ada6..76e5e66 100644 +--- a/src/vmx/vmx.c ++++ b/src/vmx/vmx.c +@@ -1494,6 +1494,7 @@ virVMXParseConfig(virVMXContext *ctx, + goto cleanup; + } + cpu->dies = 1; ++ cpu->clusters = 1; + cpu->cores = coresPerSocket; + cpu->threads = 1; + +@@ -3222,6 +3223,12 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virDomainDe + goto cleanup; + } + ++ if (def->cpu->clusters != 1) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("Only 1 cluster per die is supported")); ++ goto cleanup; ++ } ++ + calculated_vcpus = def->cpu->sockets * def->cpu->cores; + if (calculated_vcpus != maxvcpus) { + virReportError(VIR_ERR_INTERNAL_ERROR, +diff --git a/tests/cputestdata/x86_64-host+guest,model486-result.xml b/tests/cputestdata/x86_64-host+guest,model486-result.xml +index ea8e2d3..b533f22 100644 +--- a/tests/cputestdata/x86_64-host+guest,model486-result.xml ++++ b/tests/cputestdata/x86_64-host+guest,model486-result.xml +@@ -1,6 +1,6 @@ + + 486 +- ++ + + + +diff --git a/tests/cputestdata/x86_64-host+guest,models-result.xml b/tests/cputestdata/x86_64-host+guest,models-result.xml +index 0dd6955..f476022 100644 +--- a/tests/cputestdata/x86_64-host+guest,models-result.xml ++++ b/tests/cputestdata/x86_64-host+guest,models-result.xml +@@ -1,6 +1,6 @@ + + Nehalem +- ++ + + + +diff --git a/tests/cputestdata/x86_64-host+guest-result.xml b/tests/cputestdata/x86_64-host+guest-result.xml +index 28e3152..cf41b3f 100644 +--- a/tests/cputestdata/x86_64-host+guest-result.xml ++++ b/tests/cputestdata/x86_64-host+guest-result.xml +@@ -1,6 +1,6 @@ + + Penryn +- ++ + + + +diff --git a/tests/cputestdata/x86_64-host+guest.xml b/tests/cputestdata/x86_64-host+guest.xml +index 28e3152..cf41b3f 100644 +--- a/tests/cputestdata/x86_64-host+guest.xml ++++ b/tests/cputestdata/x86_64-host+guest.xml +@@ -1,6 +1,6 @@ + + Penryn +- ++ + + + +diff --git a/tests/cputestdata/x86_64-host+host-model-nofallback.xml b/tests/cputestdata/x86_64-host+host-model-nofallback.xml +index 16d6e1d..881eea7 100644 +--- a/tests/cputestdata/x86_64-host+host-model-nofallback.xml ++++ b/tests/cputestdata/x86_64-host+host-model-nofallback.xml +@@ -1,7 +1,7 @@ + + Penryn + Intel +- ++ + + + +diff --git a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml +index 8eda668..67994c6 100644 +--- a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml ++++ b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml +@@ -1,6 +1,6 @@ + + Haswell +- ++ + + + +diff --git a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml +index cb02449..4804c0b 100644 +--- a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml ++++ b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml +@@ -1,6 +1,6 @@ + + Haswell +- ++ + + + +diff --git a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml +index 7ee926a..c21b331 100644 +--- a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml ++++ b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml +@@ -1,4 +1,4 @@ + + Haswell-noTSX +- ++ + +diff --git a/tests/cputestdata/x86_64-host-worse+guest-result.xml b/tests/cputestdata/x86_64-host-worse+guest-result.xml +index 9d54c66..712c3ad 100644 +--- a/tests/cputestdata/x86_64-host-worse+guest-result.xml ++++ b/tests/cputestdata/x86_64-host-worse+guest-result.xml +@@ -1,6 +1,6 @@ + + Penryn +- ++ + + + +diff --git a/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-conf.xml b/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-conf.xml +index f80c436..e976c00 100644 +--- a/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-conf.xml ++++ b/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-conf.xml +@@ -43,7 +43,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-live.xml b/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-live.xml +index 7998b97..21666a0 100644 +--- a/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-live.xml ++++ b/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-live.xml +@@ -43,7 +43,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-conf.xml b/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-conf.xml +index 2a48a97..2740737 100644 +--- a/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-conf.xml ++++ b/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-conf.xml +@@ -43,7 +43,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-live.xml b/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-live.xml +index 90518d1..b9e325d 100644 +--- a/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-live.xml ++++ b/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-live.xml +@@ -43,7 +43,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuhotplugtestcpus/x86-modern-bulk-result-conf.xml b/tests/qemuhotplugtestcpus/x86-modern-bulk-result-conf.xml +index 0d622fc..0b86f3a 100644 +--- a/tests/qemuhotplugtestcpus/x86-modern-bulk-result-conf.xml ++++ b/tests/qemuhotplugtestcpus/x86-modern-bulk-result-conf.xml +@@ -19,7 +19,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuhotplugtestcpus/x86-modern-bulk-result-live.xml b/tests/qemuhotplugtestcpus/x86-modern-bulk-result-live.xml +index ed9deae..c21b000 100644 +--- a/tests/qemuhotplugtestcpus/x86-modern-bulk-result-live.xml ++++ b/tests/qemuhotplugtestcpus/x86-modern-bulk-result-live.xml +@@ -19,7 +19,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-conf.xml b/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-conf.xml +index 342f172..bef1189 100644 +--- a/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-conf.xml ++++ b/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-conf.xml +@@ -19,7 +19,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-live.xml b/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-live.xml +index b8341c7..aa63e72 100644 +--- a/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-live.xml ++++ b/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-live.xml +@@ -19,7 +19,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuhotplugtestcpus/x86-old-bulk-result-conf.xml b/tests/qemuhotplugtestcpus/x86-old-bulk-result-conf.xml +index 29da89f..2952fba 100644 +--- a/tests/qemuhotplugtestcpus/x86-old-bulk-result-conf.xml ++++ b/tests/qemuhotplugtestcpus/x86-old-bulk-result-conf.xml +@@ -9,7 +9,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuhotplugtestcpus/x86-old-bulk-result-live.xml b/tests/qemuhotplugtestcpus/x86-old-bulk-result-live.xml +index f81194d..a5087a7 100644 +--- a/tests/qemuhotplugtestcpus/x86-old-bulk-result-live.xml ++++ b/tests/qemuhotplugtestcpus/x86-old-bulk-result-live.xml +@@ -9,7 +9,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuxml2argvdata/fd-memory-no-numa-topology.xml b/tests/qemuxml2argvdata/fd-memory-no-numa-topology.xml +index 0749952..d9e20d4 100644 +--- a/tests/qemuxml2argvdata/fd-memory-no-numa-topology.xml ++++ b/tests/qemuxml2argvdata/fd-memory-no-numa-topology.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuxml2argvdata/fd-memory-numa-topology.xml b/tests/qemuxml2argvdata/fd-memory-numa-topology.xml +index 05ea164..7e082eb 100644 +--- a/tests/qemuxml2argvdata/fd-memory-numa-topology.xml ++++ b/tests/qemuxml2argvdata/fd-memory-numa-topology.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2argvdata/fd-memory-numa-topology2.xml b/tests/qemuxml2argvdata/fd-memory-numa-topology2.xml +index 904e64f..919b30a 100644 +--- a/tests/qemuxml2argvdata/fd-memory-numa-topology2.xml ++++ b/tests/qemuxml2argvdata/fd-memory-numa-topology2.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2argvdata/fd-memory-numa-topology3.xml b/tests/qemuxml2argvdata/fd-memory-numa-topology3.xml +index 9785609..a429a27 100644 +--- a/tests/qemuxml2argvdata/fd-memory-numa-topology3.xml ++++ b/tests/qemuxml2argvdata/fd-memory-numa-topology3.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2argvdata/hugepages-nvdimm.xml b/tests/qemuxml2argvdata/hugepages-nvdimm.xml +index 144d02b..f8a5a2f 100644 +--- a/tests/qemuxml2argvdata/hugepages-nvdimm.xml ++++ b/tests/qemuxml2argvdata/hugepages-nvdimm.xml +@@ -16,7 +16,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2argvdata/memfd-memory-default-hugepage.xml b/tests/qemuxml2argvdata/memfd-memory-default-hugepage.xml +index 69d27ef..f3e155a 100644 +--- a/tests/qemuxml2argvdata/memfd-memory-default-hugepage.xml ++++ b/tests/qemuxml2argvdata/memfd-memory-default-hugepage.xml +@@ -18,7 +18,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2argvdata/memfd-memory-numa.xml b/tests/qemuxml2argvdata/memfd-memory-numa.xml +index e3d5d92..ed814a0 100644 +--- a/tests/qemuxml2argvdata/memfd-memory-numa.xml ++++ b/tests/qemuxml2argvdata/memfd-memory-numa.xml +@@ -20,7 +20,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.xml +index a1cc126..5e74f58 100644 +--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.xml ++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml +index 018a693..c1de357 100644 +--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml ++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.xml +index c9d54a6..db0d67e 100644 +--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.xml ++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml +index 391d70f..bfa1589 100644 +--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml ++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.xml +index 09b2c5c..bff89db 100644 +--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.xml ++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.xml +index a32474d..827a7ca 100644 +--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.xml ++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/cpu-numa-disjoint.xml b/tests/qemuxml2xmloutdata/cpu-numa-disjoint.xml +index d7f5372..2e4c53c 100644 +--- a/tests/qemuxml2xmloutdata/cpu-numa-disjoint.xml ++++ b/tests/qemuxml2xmloutdata/cpu-numa-disjoint.xml +@@ -9,7 +9,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/cpu-numa-disordered.xml b/tests/qemuxml2xmloutdata/cpu-numa-disordered.xml +index 487ced1..e5979c3 100644 +--- a/tests/qemuxml2xmloutdata/cpu-numa-disordered.xml ++++ b/tests/qemuxml2xmloutdata/cpu-numa-disordered.xml +@@ -9,7 +9,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/cpu-numa-memshared.xml b/tests/qemuxml2xmloutdata/cpu-numa-memshared.xml +index f472bff..f4af5be 100644 +--- a/tests/qemuxml2xmloutdata/cpu-numa-memshared.xml ++++ b/tests/qemuxml2xmloutdata/cpu-numa-memshared.xml +@@ -9,7 +9,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/cpu-numa-no-memory-element.xml b/tests/qemuxml2xmloutdata/cpu-numa-no-memory-element.xml +index 2ef7f84..d583f86 100644 +--- a/tests/qemuxml2xmloutdata/cpu-numa-no-memory-element.xml ++++ b/tests/qemuxml2xmloutdata/cpu-numa-no-memory-element.xml +@@ -9,7 +9,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/cpu-numa1.xml b/tests/qemuxml2xmloutdata/cpu-numa1.xml +index 2ef7f84..d583f86 100644 +--- a/tests/qemuxml2xmloutdata/cpu-numa1.xml ++++ b/tests/qemuxml2xmloutdata/cpu-numa1.xml +@@ -9,7 +9,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/cpu-numa2.xml b/tests/qemuxml2xmloutdata/cpu-numa2.xml +index 2ef7f84..d583f86 100644 +--- a/tests/qemuxml2xmloutdata/cpu-numa2.xml ++++ b/tests/qemuxml2xmloutdata/cpu-numa2.xml +@@ -9,7 +9,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/fd-memory-no-numa-topology.xml b/tests/qemuxml2xmloutdata/fd-memory-no-numa-topology.xml +index 0749952..d9e20d4 100644 +--- a/tests/qemuxml2xmloutdata/fd-memory-no-numa-topology.xml ++++ b/tests/qemuxml2xmloutdata/fd-memory-no-numa-topology.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuxml2xmloutdata/fd-memory-numa-topology.xml b/tests/qemuxml2xmloutdata/fd-memory-numa-topology.xml +index 05ea164..7e082eb 100644 +--- a/tests/qemuxml2xmloutdata/fd-memory-numa-topology.xml ++++ b/tests/qemuxml2xmloutdata/fd-memory-numa-topology.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/fd-memory-numa-topology2.xml b/tests/qemuxml2xmloutdata/fd-memory-numa-topology2.xml +index 904e64f..919b30a 100644 +--- a/tests/qemuxml2xmloutdata/fd-memory-numa-topology2.xml ++++ b/tests/qemuxml2xmloutdata/fd-memory-numa-topology2.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/fd-memory-numa-topology3.xml b/tests/qemuxml2xmloutdata/fd-memory-numa-topology3.xml +index 9785609..a429a27 100644 +--- a/tests/qemuxml2xmloutdata/fd-memory-numa-topology3.xml ++++ b/tests/qemuxml2xmloutdata/fd-memory-numa-topology3.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/graphics-spice-timeout.xml b/tests/qemuxml2xmloutdata/graphics-spice-timeout.xml +index 6e23652..f7a7c87 100644 +--- a/tests/qemuxml2xmloutdata/graphics-spice-timeout.xml ++++ b/tests/qemuxml2xmloutdata/graphics-spice-timeout.xml +@@ -18,7 +18,7 @@ + + core2duo + Intel +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/hugepages-nvdimm.xml b/tests/qemuxml2xmloutdata/hugepages-nvdimm.xml +index 144d02b..f8a5a2f 100644 +--- a/tests/qemuxml2xmloutdata/hugepages-nvdimm.xml ++++ b/tests/qemuxml2xmloutdata/hugepages-nvdimm.xml +@@ -16,7 +16,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/memfd-memory-default-hugepage.xml b/tests/qemuxml2xmloutdata/memfd-memory-default-hugepage.xml +index 69d27ef..f3e155a 100644 +--- a/tests/qemuxml2xmloutdata/memfd-memory-default-hugepage.xml ++++ b/tests/qemuxml2xmloutdata/memfd-memory-default-hugepage.xml +@@ -18,7 +18,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/memfd-memory-numa.xml b/tests/qemuxml2xmloutdata/memfd-memory-numa.xml +index e3d5d92..ed814a0 100644 +--- a/tests/qemuxml2xmloutdata/memfd-memory-numa.xml ++++ b/tests/qemuxml2xmloutdata/memfd-memory-numa.xml +@@ -20,7 +20,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-dimm.xml b/tests/qemuxml2xmloutdata/memory-hotplug-dimm.xml +index 326b5c9..378b262 100644 +--- a/tests/qemuxml2xmloutdata/memory-hotplug-dimm.xml ++++ b/tests/qemuxml2xmloutdata/memory-hotplug-dimm.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-access.xml b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-access.xml +index a1cc126..5e74f58 100644 +--- a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-access.xml ++++ b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-access.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-align.xml b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-align.xml +index 018a693..c1de357 100644 +--- a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-align.xml ++++ b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-align.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-label.xml b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-label.xml +index c9d54a6..db0d67e 100644 +--- a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-label.xml ++++ b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-label.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-pmem.xml b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-pmem.xml +index 391d70f..bfa1589 100644 +--- a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-pmem.xml ++++ b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-pmem.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-ppc64.xml b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-ppc64.xml +index ae5a17d..e90b462 100644 +--- a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-ppc64.xml ++++ b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-ppc64.xml +@@ -10,7 +10,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-readonly.xml b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-readonly.xml +index 09b2c5c..bff89db 100644 +--- a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-readonly.xml ++++ b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-readonly.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm.xml b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm.xml +index a32474d..827a7ca 100644 +--- a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm.xml ++++ b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm.xml +@@ -14,7 +14,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/memory-hotplug.xml b/tests/qemuxml2xmloutdata/memory-hotplug.xml +index 0e5295d..547f613 100644 +--- a/tests/qemuxml2xmloutdata/memory-hotplug.xml ++++ b/tests/qemuxml2xmloutdata/memory-hotplug.xml +@@ -10,7 +10,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-cpuset.xml b/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-cpuset.xml +index 841ea69..f438a7c 100644 +--- a/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-cpuset.xml ++++ b/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-cpuset.xml +@@ -12,7 +12,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-no-cpuset-and-placement.xml b/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-no-cpuset-and-placement.xml +index 2e3998e..4d37383 100644 +--- a/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-no-cpuset-and-placement.xml ++++ b/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-no-cpuset-and-placement.xml +@@ -12,7 +12,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuxml2xmloutdata/numad-auto-vcpu-no-numatune.xml b/tests/qemuxml2xmloutdata/numad-auto-vcpu-no-numatune.xml +index 7c1f18c..051606f 100644 +--- a/tests/qemuxml2xmloutdata/numad-auto-vcpu-no-numatune.xml ++++ b/tests/qemuxml2xmloutdata/numad-auto-vcpu-no-numatune.xml +@@ -12,7 +12,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuxml2xmloutdata/numad-static-vcpu-no-numatune.xml b/tests/qemuxml2xmloutdata/numad-static-vcpu-no-numatune.xml +index 3d05790..2479852 100644 +--- a/tests/qemuxml2xmloutdata/numad-static-vcpu-no-numatune.xml ++++ b/tests/qemuxml2xmloutdata/numad-static-vcpu-no-numatune.xml +@@ -9,7 +9,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/qemuxml2xmloutdata/pci-expander-bus.xml b/tests/qemuxml2xmloutdata/pci-expander-bus.xml +index 60e4e4a..6f8103b 100644 +--- a/tests/qemuxml2xmloutdata/pci-expander-bus.xml ++++ b/tests/qemuxml2xmloutdata/pci-expander-bus.xml +@@ -9,7 +9,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/pcie-expander-bus.xml b/tests/qemuxml2xmloutdata/pcie-expander-bus.xml +index 452d476..80d5ece 100644 +--- a/tests/qemuxml2xmloutdata/pcie-expander-bus.xml ++++ b/tests/qemuxml2xmloutdata/pcie-expander-bus.xml +@@ -9,7 +9,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/pseries-phb-numa-node.xml b/tests/qemuxml2xmloutdata/pseries-phb-numa-node.xml +index b05ac33..35c0e18 100644 +--- a/tests/qemuxml2xmloutdata/pseries-phb-numa-node.xml ++++ b/tests/qemuxml2xmloutdata/pseries-phb-numa-node.xml +@@ -13,7 +13,7 @@ + + + +- ++ + + + +diff --git a/tests/qemuxml2xmloutdata/smp.xml b/tests/qemuxml2xmloutdata/smp.xml +index 3e00f57..0816d5f 100644 +--- a/tests/qemuxml2xmloutdata/smp.xml ++++ b/tests/qemuxml2xmloutdata/smp.xml +@@ -9,7 +9,7 @@ + + + +- ++ + + + destroy +diff --git a/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-8.xml b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-8.xml +index 2011bfb..4b1a9d1 100644 +--- a/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-8.xml ++++ b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-8.xml +@@ -11,7 +11,7 @@ + hvm + + +- ++ + + + destroy +diff --git a/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-9.xml b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-9.xml +index fa428c1..f7b6eb6 100644 +--- a/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-9.xml ++++ b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-9.xml +@@ -12,7 +12,7 @@ + hvm + + +- ++ + + + destroy +-- +2.25.1 + diff --git a/cpu_topo-support-for-reporting-cluster_id-in-NUMA-to.patch b/cpu_topo-support-for-reporting-cluster_id-in-NUMA-to.patch new file mode 100644 index 0000000..9a214ba --- /dev/null +++ b/cpu_topo-support-for-reporting-cluster_id-in-NUMA-to.patch @@ -0,0 +1,522 @@ +From baa40f939ab38d80597651aec82779af25599bb0 Mon Sep 17 00:00:00 2001 +From: zhangxinhao +Date: Tue, 9 May 2023 23:28:59 +0800 +Subject: cpu_topo: support for reporting cluster_id in NUMA + topology + +Support report the die_id in the NUMA topology capabilities. + +Signed-off-by: zhangxinhao +--- + docs/schemas/capability.rng | 3 ++ + src/conf/capabilities.c | 4 ++- + src/conf/capabilities.h | 1 + + src/libvirt_linux.syms | 1 + + src/util/virhostcpu.c | 22 +++++++++++++ + src/util/virhostcpu.h | 1 + + .../vircaps2xmldata/vircaps-aarch64-basic.xml | 32 +++++++++---------- + .../vircaps-x86_64-basic-dies.xml | 24 +++++++------- + .../vircaps2xmldata/vircaps-x86_64-basic.xml | 32 +++++++++---------- + .../vircaps2xmldata/vircaps-x86_64-caches.xml | 16 +++++----- + .../vircaps-x86_64-resctrl-cdp.xml | 24 +++++++------- + .../vircaps-x86_64-resctrl-cmt.xml | 24 +++++++------- + .../vircaps-x86_64-resctrl-fake-feature.xml | 24 +++++++------- + .../vircaps-x86_64-resctrl-skx-twocaches.xml | 2 +- + .../vircaps-x86_64-resctrl-skx.xml | 2 +- + .../vircaps-x86_64-resctrl.xml | 24 +++++++------- + 16 files changed, 133 insertions(+), 103 deletions(-) + +diff --git a/docs/schemas/capability.rng b/docs/schemas/capability.rng +index 031c55bf20..f5b37d8c18 100644 +--- a/docs/schemas/capability.rng ++++ b/docs/schemas/capability.rng +@@ -268,6 +268,9 @@ + + + ++ ++ ++ + + + +diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c +index 12c8c3a324..3c3a66a78a 100644 +--- a/src/conf/capabilities.c ++++ b/src/conf/capabilities.c +@@ -874,9 +874,10 @@ virCapabilitiesHostNUMAFormat(virCapsHostNUMAPtr caps, + return -1; + + virBufferAsprintf(buf, +- " socket_id='%d' die_id='%d' core_id='%d' siblings='%s'", ++ " socket_id='%d' die_id='%d' cluster_id='%d' core_id='%d' siblings='%s'", + cell->cpus[j].socket_id, + cell->cpus[j].die_id, ++ cell->cpus[j].cluster_id, + cell->cpus[j].core_id, + siblings); + VIR_FREE(siblings); +@@ -1465,6 +1466,7 @@ virCapabilitiesFillCPUInfo(int cpu_id G_GNUC_UNUSED, + + if (virHostCPUGetSocket(cpu_id, &cpu->socket_id) < 0 || + virHostCPUGetDie(cpu_id, &cpu->die_id) < 0 || ++ virHostCPUGetCluster(cpu_id, &cpu->cluster_id) < 0 || + virHostCPUGetCore(cpu_id, &cpu->core_id) < 0) + return -1; + +diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h +index e2581fac8b..f88bb412b5 100644 +--- a/src/conf/capabilities.h ++++ b/src/conf/capabilities.h +@@ -89,6 +89,7 @@ struct _virCapsHostNUMACellCPU { + unsigned int id; + unsigned int socket_id; + unsigned int die_id; ++ unsigned int cluster_id; + unsigned int core_id; + virBitmapPtr siblings; + }; +diff --git a/src/libvirt_linux.syms b/src/libvirt_linux.syms +index 55649ae39c..004cbfee97 100644 +--- a/src/libvirt_linux.syms ++++ b/src/libvirt_linux.syms +@@ -3,6 +3,7 @@ + # + + # util/virhostcpu.h ++virHostCPUGetCluster; + virHostCPUGetCore; + virHostCPUGetDie; + virHostCPUGetInfoPopulateLinux; +diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c +index 8c8fc3a476..d2ac31e784 100644 +--- a/src/util/virhostcpu.c ++++ b/src/util/virhostcpu.c +@@ -240,6 +240,28 @@ virHostCPUGetDie(unsigned int cpu, unsigned int *die) + return 0; + } + ++int ++virHostCPUGetCluster(unsigned int cpu, unsigned int *cluster) ++{ ++ int cluster_id; ++ int ret = virFileReadValueInt(&cluster_id, ++ "%s/cpu/cpu%u/topology/cluster_id", ++ SYSFS_SYSTEM_PATH, cpu); ++ if (ret == -1) ++ return -1; ++ ++ /* If the file is not there, it's 0. ++ * Another alternative is cluster_id set to -1, meaning that ++ * the arch does not have cluster_id support. Set @cluster to ++ * 0 in this case too. */ ++ if (ret == -2 || cluster_id < 0) ++ cluster_id = 0; ++ ++ *cluster = cluster_id; ++ ++ return 0; ++} ++ + int + virHostCPUGetCore(unsigned int cpu, unsigned int *core) + { +diff --git a/src/util/virhostcpu.h b/src/util/virhostcpu.h +index 9be2e51a38..e3a04c2eeb 100644 +--- a/src/util/virhostcpu.h ++++ b/src/util/virhostcpu.h +@@ -66,6 +66,7 @@ int virHostCPUStatsAssign(virNodeCPUStatsPtr param, + #ifdef __linux__ + int virHostCPUGetSocket(unsigned int cpu, unsigned int *socket); + int virHostCPUGetDie(unsigned int cpu, unsigned int *die); ++int virHostCPUGetCluster(unsigned int cpu, unsigned int *cluster); + int virHostCPUGetCore(unsigned int cpu, unsigned int *core); + + virBitmapPtr virHostCPUGetSiblingsList(unsigned int cpu); +diff --git a/tests/vircaps2xmldata/vircaps-aarch64-basic.xml b/tests/vircaps2xmldata/vircaps-aarch64-basic.xml +index 0a04052c40..5533ae0586 100644 +--- a/tests/vircaps2xmldata/vircaps-aarch64-basic.xml ++++ b/tests/vircaps2xmldata/vircaps-aarch64-basic.xml +@@ -16,10 +16,10 @@ + 4096 + 6144 + +- +- +- +- ++ ++ ++ ++ + + + +@@ -28,10 +28,10 @@ + 6144 + 8192 + +- +- +- +- ++ ++ ++ ++ + + + +@@ -40,10 +40,10 @@ + 8192 + 10240 + +- +- +- +- ++ ++ ++ ++ + + + +@@ -52,10 +52,10 @@ + 10240 + 12288 + +- +- +- +- ++ ++ ++ ++ + + + +diff --git a/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml b/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml +index 8a3ca2d13c..c86dc4defc 100644 +--- a/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml ++++ b/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml +@@ -14,18 +14,18 @@ + 4096 + 6144 + +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/tests/vircaps2xmldata/vircaps-x86_64-basic.xml b/tests/vircaps2xmldata/vircaps-x86_64-basic.xml +index 4da09f889c..9ae155d571 100644 +--- a/tests/vircaps2xmldata/vircaps-x86_64-basic.xml ++++ b/tests/vircaps2xmldata/vircaps-x86_64-basic.xml +@@ -14,10 +14,10 @@ + 4096 + 6144 + +- +- +- +- ++ ++ ++ ++ + + + +@@ -26,10 +26,10 @@ + 6144 + 8192 + +- +- +- +- ++ ++ ++ ++ + + + +@@ -38,10 +38,10 @@ + 8192 + 10240 + +- +- +- +- ++ ++ ++ ++ + + + +@@ -50,10 +50,10 @@ + 10240 + 12288 + +- +- +- +- ++ ++ ++ ++ + + + +diff --git a/tests/vircaps2xmldata/vircaps-x86_64-caches.xml b/tests/vircaps2xmldata/vircaps-x86_64-caches.xml +index 28f00c0a90..05b33147b7 100644 +--- a/tests/vircaps2xmldata/vircaps-x86_64-caches.xml ++++ b/tests/vircaps2xmldata/vircaps-x86_64-caches.xml +@@ -17,14 +17,14 @@ + 4096 + 6144 + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml +index ee26fe9464..167b217d8e 100644 +--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml ++++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml +@@ -17,12 +17,12 @@ + 4096 + 6144 + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + + +@@ -31,12 +31,12 @@ + 6144 + 8192 + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + + +diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml +index acdd97ec58..311bb58e6a 100644 +--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml ++++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml +@@ -17,12 +17,12 @@ + 4096 + 6144 + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + + +@@ -31,12 +31,12 @@ + 6144 + 8192 + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + + +diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml +index 5f3678e072..8f64bcad63 100644 +--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml ++++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml +@@ -17,12 +17,12 @@ + 4096 + 6144 + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + + +@@ -31,12 +31,12 @@ + 6144 + 8192 + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + + +diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml +index 6769bd0591..eb53eb2142 100644 +--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml ++++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml +@@ -17,7 +17,7 @@ + 4096 + 6144 + +- ++ + + + +diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml +index bc52480905..38ea0bdc27 100644 +--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml ++++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml +@@ -17,7 +17,7 @@ + 4096 + 6144 + +- ++ + + + +diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml +index c386edd4b0..ea9e2613d7 100644 +--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml ++++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml +@@ -17,12 +17,12 @@ + 4096 + 6144 + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + + +@@ -31,12 +31,12 @@ + 6144 + 8192 + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + + +-- +2.25.1 + diff --git a/cpu_topo-support-for-specifying-clusters-in-qemu-com.patch b/cpu_topo-support-for-specifying-clusters-in-qemu-com.patch new file mode 100644 index 0000000..08c5cc8 --- /dev/null +++ b/cpu_topo-support-for-specifying-clusters-in-qemu-com.patch @@ -0,0 +1,163 @@ +From 2e275763162623b59b1872a16c0c9f0f3837f530 Mon Sep 17 00:00:00 2001 +From: zhangxinhao +Date: Tue, 9 May 2023 23:01:36 +0800 +Subject: cpu_topo: support for specifying "clusters" in qemu + comand + +Support for cpu topology "clusters" for qemu command parameter "-smp". + +Signed-off-by: zhangxinhao +--- + src/qemu/qemu_capabilities.c | 2 ++ + src/qemu/qemu_capabilities.h | 1 + + src/qemu/qemu_command.c | 7 ++--- + tests/qemuxml2argvdata/smp-clusters.args | 30 +++++++++++++++++++++ + tests/qemuxml2argvdata/smp-clusters.xml | 33 ++++++++++++++++++++++++ + tests/qemuxml2argvtest.c | 1 + + 6 files changed, 69 insertions(+), 5 deletions(-) + create mode 100644 tests/qemuxml2argvdata/smp-clusters.args + create mode 100644 tests/qemuxml2argvdata/smp-clusters.xml + +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index 21b477cd4d..19030b2040 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -579,6 +579,7 @@ VIR_ENUM_IMPL(virQEMUCaps, + /* 365 */ + "calc-dirty-rate", + "dirtyrate-param.mode", ++ "smp-clusters", + ); + + +@@ -3218,6 +3219,7 @@ static struct virQEMUCapsCommandLineProps virQEMUCapsCommandLine[] = { + { "chardev", "fd", QEMU_CAPS_CHARDEV_FD_PASS }, + { "overcommit", NULL, QEMU_CAPS_OVERCOMMIT }, + { "smp-opts", "dies", QEMU_CAPS_SMP_DIES }, ++ { "smp-opts", "clusters", QEMU_CAPS_SMP_CLUSTERS }, + }; + + static int +diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h +index 00682eb52c..43507760c8 100644 +--- a/src/qemu/qemu_capabilities.h ++++ b/src/qemu/qemu_capabilities.h +@@ -560,6 +560,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ + /* 365 */ + QEMU_CAPS_CALC_DIRTY_RATE, /* accepts calc-dirty-rate */ + QEMU_CAPS_DIRTYRATE_MODE , /* calc-dirty-rate accepts mode parameter */ ++ QEMU_CAPS_SMP_CLUSTERS, /* -smp clusters= */ + + QEMU_CAPS_LAST /* this must always be the last item */ + } virQEMUCapsFlags; +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 85f95b41c3..dc7fb871e7 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -7335,14 +7335,11 @@ qemuBuildSmpCommandLine(virCommandPtr cmd, + _("Only 1 die per socket is supported")); + return -1; + } +- if (def->cpu->clusters != 1) { +- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", +- _("Only 1 cluster per dies is supported")); +- return -1; +- } + virBufferAsprintf(&buf, ",sockets=%u", def->cpu->sockets); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SMP_DIES)) + virBufferAsprintf(&buf, ",dies=%u", def->cpu->dies); ++ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SMP_CLUSTERS)) ++ virBufferAsprintf(&buf, ",clusters=%u", def->cpu->clusters); + virBufferAsprintf(&buf, ",cores=%u", def->cpu->cores); + virBufferAsprintf(&buf, ",threads=%u", def->cpu->threads); + } else { +diff --git a/tests/qemuxml2argvdata/smp-clusters.args b/tests/qemuxml2argvdata/smp-clusters.args +new file mode 100644 +index 0000000000..ab91ad7218 +--- /dev/null ++++ b/tests/qemuxml2argvdata/smp-clusters.args +@@ -0,0 +1,30 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/tmp/lib/domain--1-QEMUGuest1 \ ++USER=test \ ++LOGNAME=test \ ++XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ ++XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ ++XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu-system-i386 \ ++-name QEMUGuest1 \ ++-S \ ++-machine pc,usb=off,dump-guest-core=off \ ++-accel tcg \ ++-m 214 \ ++-realtime mlock=off \ ++-smp 1,maxcpus=4,sockets=2,clusters=2,cores=1,threads=1 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-display none \ ++-no-user-config \ ++-nodefaults \ ++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ ++server,nowait \ ++-mon chardev=charmonitor,id=monitor,mode=control \ ++-rtc base=utc \ ++-no-shutdown \ ++-no-acpi \ ++-usb \ ++-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ ++-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 +diff --git a/tests/qemuxml2argvdata/smp-clusters.xml b/tests/qemuxml2argvdata/smp-clusters.xml +new file mode 100644 +index 0000000000..c1845b8213 +--- /dev/null ++++ b/tests/qemuxml2argvdata/smp-clusters.xml +@@ -0,0 +1,33 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219136 ++ 219136 ++ 4 ++ ++ hvm ++ ++ ++ ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu-system-i386 ++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index ec90532b5f..df62dfacb6 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1828,6 +1828,7 @@ mymain(void) + + DO_TEST("smp", NONE); + DO_TEST("smp-dies", QEMU_CAPS_SMP_DIES); ++ DO_TEST("smp-clusters", QEMU_CAPS_SMP_CLUSTERS); + + DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD); + DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD); +-- +2.25.1 + diff --git a/libvirt.spec b/libvirt.spec index d7f59e7..998fa39 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -101,7 +101,7 @@ Summary: Library providing a simple virtualization API Name: libvirt Version: 6.2.0 -Release: 56 +Release: 57 License: LGPLv2+ URL: https://libvirt.org/ @@ -480,6 +480,10 @@ Patch0367: bugfix-fix-warnings-found-by-clang.patch Patch0368: Fix-potential-crash-during-driver-cleanup.patch Patch0369: nodedev-ignore-EINVAL-from-libudev-in-udevEventHandl.patch Patch0370: qemu-tpm-Pass-logfile-to-swtpm_setup-for-incoming-mi.patch +Patch0371: cpu_topo-support-for-cpu_topo-clusters-in-conf.patch +Patch0372: cpu_topo-support-for-specifying-clusters-in-qemu-com.patch +Patch0373: cpu_topo-support-for-reporting-cluster_id-in-NUMA-to.patch +Patch0374: cpu_topo-fix-detection-of-vCPU-pids-when-multiple-cl.patch Requires: libvirt-daemon = %{version}-%{release} Requires: libvirt-daemon-config-network = %{version}-%{release} @@ -2216,6 +2220,12 @@ exit 0 %changelog +* Mon May 22 2023 zhangxinhao - 6.2.0-57 +- cpu_topo: support for cpu_topo "clusters” in conf +- cpu_topo: support for specifying "clusters" in qemu comand +- cpu_topo: support for reporting cluster_id in NUMA topology +- cpu_topo: fix detection of vCPU pids when multiple clusters are present + * Sun May 21 2023 XuFei - 6.2.0-56 - nodedev: ignore EINVAL from libudev in udevEventHandleThread - qemu: tpm: Pass --logfile to swtpm_setup for incoming migration -- Gitee