[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 2 PATCH 16/16] hw/core: Fix up the machine_set_cpu_num
From: |
Moger, Babu |
Subject: |
[Qemu-devel] [RFC 2 PATCH 16/16] hw/core: Fix up the machine_set_cpu_numa_node for epyc |
Date: |
Fri, 6 Sep 2019 19:13:29 +0000 |
Current topology id match will not work for epyc mode when setting
the node id. In epyc mode, ids like smt_id, thread_id, core_id,
ccx_id, socket_id can be same for more than one CPUs with across
two numa nodes.
For example, we can have two CPUs with following ids on two different node.
1. smt_id=0, thread_id=0, core_id=0, ccx_id=0, socket_id=0, node_id=0
2. smt_id=0, thread_id=0, core_id=0, ccx_id=0, socket_id=0, node_id=1
The function machine_set_cpu_numa_node will fail to find a match to assign
the node. Added new function machine_set_cpu_numa_node_epyc to set the node_id
directly in epyc mode.
Signed-off-by: Babu Moger <address@hidden>
---
hw/core/machine.c | 24 ++++++++++++++++++++++++
hw/core/numa.c | 6 +++++-
include/hw/boards.h | 4 ++++
3 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 9a8586cf30..6bceefc6f3 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -741,6 +741,30 @@ void machine_set_cpu_numa_node(MachineState *machine,
}
}
+void machine_set_cpu_numa_node_epyc(MachineState *machine,
+ const CpuInstanceProperties *props,
+ unsigned index,
+ Error **errp)
+{
+ MachineClass *mc = MACHINE_GET_CLASS(machine);
+ CPUArchId *slot;
+
+ if (!mc->possible_cpu_arch_ids) {
+ error_setg(errp, "mapping of CPUs to NUMA node is not supported");
+ return;
+ }
+
+ /* disabling node mapping is not supported, forbid it */
+ assert(props->has_node_id);
+
+ /* force board to initialize possible_cpus if it hasn't been done yet */
+ mc->possible_cpu_arch_ids(machine);
+
+ slot = &machine->possible_cpus->cpus[index];
+ slot->props.node_id = props->node_id;
+ slot->props.has_node_id = props->has_node_id;
+}
+
static void smp_parse(MachineState *ms, QemuOpts *opts)
{
if (opts) {
diff --git a/hw/core/numa.c b/hw/core/numa.c
index 27fa6b5e1d..a9e835aea6 100644
--- a/hw/core/numa.c
+++ b/hw/core/numa.c
@@ -247,7 +247,11 @@ void set_numa_node_options(MachineState *ms, NumaOptions
*object, Error **errp)
props = mc->cpu_index_to_instance_props(ms, cpus->value);
props.node_id = nodenr;
props.has_node_id = true;
- machine_set_cpu_numa_node(ms, &props, &err);
+ if (ms->epyc) {
+ machine_set_cpu_numa_node_epyc(ms, &props, cpus->value, &err);
+ } else {
+ machine_set_cpu_numa_node(ms, &props, &err);
+ }
if (err) {
error_propagate(errp, err);
return;
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 0001d42e50..ec1b1c5a85 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -74,6 +74,10 @@ HotpluggableCPUList
*machine_query_hotpluggable_cpus(MachineState *machine);
void machine_set_cpu_numa_node(MachineState *machine,
const CpuInstanceProperties *props,
Error **errp);
+void machine_set_cpu_numa_node_epyc(MachineState *machine,
+ const CpuInstanceProperties *props,
+ unsigned index,
+ Error **errp);
void machine_class_allow_dynamic_sysbus_dev(MachineClass *mc, const char
*type);
- Re: [RFC 2 PATCH 06/16] hw/core: Add core complex id in X86CPU topology, (continued)
- [Qemu-devel] [RFC 2 PATCH 07/16] hw/386: Add new epyc mode topology decoding functions, Moger, Babu, 2019/09/06
- [Qemu-devel] [RFC 2 PATCH 08/16] i386: Cleanup and use the new epyc mode topology functions, Moger, Babu, 2019/09/06
- [Qemu-devel] [RFC 2 PATCH 09/16] hw/i386: Introduce initialize_topo_info function, Moger, Babu, 2019/09/06
- [Qemu-devel] [RFC 2 PATCH 10/16] hw/i386: Introduce apicid_from_cpu_idx in PCMachineState, Moger, Babu, 2019/09/06
- [Qemu-devel] [RFC 2 PATCH 11/16] Introduce-topo_ids_from_apicid-handler, Moger, Babu, 2019/09/06
- [Qemu-devel] [RFC 2 PATCH 12/16] hw/i386: Introduce apic_id_from_topo_ids handler in PCMachineState, Moger, Babu, 2019/09/06
- [Qemu-devel] [RFC 2 PATCH 13/16] machine: Add new epyc property in PCMachineState, Moger, Babu, 2019/09/06
- [Qemu-devel] [RFC 2 PATCH 14/16] hw/i386: Introduce epyc mode function handlers, Moger, Babu, 2019/09/06
- [Qemu-devel] [RFC 2 PATCH 15/16] i386: Fix pkg_id offset for epyc mode, Moger, Babu, 2019/09/06
- [Qemu-devel] [RFC 2 PATCH 16/16] hw/core: Fix up the machine_set_cpu_numa_node for epyc,
Moger, Babu <=
- Re: [RFC 2 PATCH 00/16] APIC ID fixes for AMD EPYC CPU models, Moger, Babu, 2019/09/20