[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [Qemu-devel] [PATCH v3 06/18] numa: mirror cpu to node ma
From: |
Eduardo Habkost |
Subject: |
Re: [Qemu-ppc] [Qemu-devel] [PATCH v3 06/18] numa: mirror cpu to node mapping in MachineState::possible_cpus |
Date: |
Fri, 26 May 2017 12:46:25 -0300 |
User-agent: |
Mutt/1.8.0 (2017-02-23) |
On Wed, May 10, 2017 at 01:29:50PM +0200, Igor Mammedov wrote:
[...]
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 2482c63..420c8c4 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -389,6 +389,102 @@ HotpluggableCPUList
> *machine_query_hotpluggable_cpus(MachineState *machine)
[...]
> +void machine_set_cpu_numa_node(MachineState *machine,
> + const CpuInstanceProperties *props, Error
> **errp)
> +{
[...]
> + /* force board to initialize possible_cpus if it hasn't been done yet */
> + mc->possible_cpu_arch_ids(machine);
[...]
> diff --git a/numa.c b/numa.c
> index 7182481..7db5dde 100644
> --- a/numa.c
> +++ b/numa.c
> @@ -170,6 +170,7 @@ static void parse_numa_node(MachineState *ms,
> NumaNodeOptions *node,
> exit(1);
> }
> for (cpus = node->cpus; cpus; cpus = cpus->next) {
> + CpuInstanceProperties props;
> if (cpus->value >= max_cpus) {
> error_setg(errp,
> "CPU index (%" PRIu16 ")"
> @@ -178,6 +179,10 @@ static void parse_numa_node(MachineState *ms,
> NumaNodeOptions *node,
> return;
> }
> bitmap_set(numa_info[nodenr].node_cpu, cpus->value, 1);
> + 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, &error_fatal);
This triggers a call to possible_cpu_arch_ids() before
nb_numa_nodes is set to the actual number of NUMA nodes in the
machine, breaking the "node_id = ... % nb_numa_nodes"
initialization logic in pc, virt, and spapr.
The initialization ordering between possible_cpus and NUMA data
structures looks very subtle and fragile. I still don't see an
obvious way to untangle that.
I suggest moving the default-NUMA-mapping code to a separate
machine class method, instead of relying on
possible_cpu_arch_ids() to initialize node_id.
--
Eduardo
- [Qemu-ppc] [PATCH v3 00/18] numa: add '-numa cpu' option, Igor Mammedov, 2017/05/10
- [Qemu-ppc] [PATCH v3 02/18] spapr: add node-id property to sPAPR core, Igor Mammedov, 2017/05/10
- [Qemu-ppc] [PATCH v3 03/18] pc: add node-id property to CPU, Igor Mammedov, 2017/05/10
- [Qemu-ppc] [PATCH v3 05/18] numa: add check that board supports cpu_index to node mapping, Igor Mammedov, 2017/05/10
- [Qemu-ppc] [PATCH v3 01/18] numa: move source of default CPUs to NUMA node mapping into boards, Igor Mammedov, 2017/05/10
- [Qemu-ppc] [PATCH v3 04/18] virt-arm: add node-id property to CPU, Igor Mammedov, 2017/05/10
- [Qemu-ppc] [PATCH v3 07/18] numa: do default mapping based on possible_cpus instead of node_cpu bitmaps, Igor Mammedov, 2017/05/10
- [Qemu-ppc] [PATCH v3 06/18] numa: mirror cpu to node mapping in MachineState::possible_cpus, Igor Mammedov, 2017/05/10
- Re: [Qemu-ppc] [Qemu-devel] [PATCH v3 06/18] numa: mirror cpu to node mapping in MachineState::possible_cpus,
Eduardo Habkost <=
- Re: [Qemu-ppc] [Qemu-devel] [PATCH v3 06/18] numa: mirror cpu to node mapping in MachineState::possible_cpus, Igor Mammedov, 2017/05/30
- Re: [Qemu-ppc] [Qemu-devel] [PATCH v3 06/18] numa: mirror cpu to node mapping in MachineState::possible_cpus, Eduardo Habkost, 2017/05/30
[Qemu-ppc] [PATCH v3 08/18] pc: get numa node mapping from possible_cpus instead of numa_get_node_for_cpu(), Igor Mammedov, 2017/05/10
[Qemu-ppc] [PATCH v3 09/18] spapr: get numa node mapping from possible_cpus instead of numa_get_node_for_cpu(), Igor Mammedov, 2017/05/10
[Qemu-ppc] [PATCH v3 10/18] virt-arm: get numa node mapping from possible_cpus instead of numa_get_node_for_cpu(), Igor Mammedov, 2017/05/10
[Qemu-ppc] [PATCH v3 11/18] QMP: include CpuInstanceProperties into query_cpus output output, Igor Mammedov, 2017/05/10