109 lines
4.2 KiB
Diff
109 lines
4.2 KiB
Diff
|
|
From a450496281dbbc2b240bf5dc0829a17d113aed22 Mon Sep 17 00:00:00 2001
|
||
|
|
From: zhangxinhao <zhangxinhao1@huawei.com>
|
||
|
|
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 <zhangxinhao1@huawei.com>
|
||
|
|
---
|
||
|
|
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
|
||
|
|
|