On Wed, May 03, 2017 at 02:57:05PM +0200, Igor Mammedov wrote: > Signed-off-by: Igor Mammedov <imamm...@redhat.com> > Reviewed-by: David Gibson <da...@gibson.dropbear.id.au> > --- > numa.c | 19 ++++++++++++------- > 1 file changed, 12 insertions(+), 7 deletions(-) > > diff --git a/numa.c b/numa.c > index 5ff1212..c7e3e0a 100644 > --- a/numa.c > +++ b/numa.c > @@ -309,6 +309,7 @@ static void validate_numa_cpus(void) > void parse_numa_opts(MachineState *ms) > { > int i; > + const CPUArchIdList *possible_cpus; > MachineClass *mc = MACHINE_GET_CLASS(ms); > > for (i = 0; i < MAX_NODES; i++) { > @@ -379,11 +380,6 @@ void parse_numa_opts(MachineState *ms) > > numa_set_mem_ranges(); > > - for (i = 0; i < nb_numa_nodes; i++) { > - if (!bitmap_empty(numa_info[i].node_cpu, max_cpus)) { > - break; > - } > - } > /* Historically VCPUs were assigned in round-robin order to NUMA > * nodes. However it causes issues with guest not handling it nice > * in case where cores/threads from a multicore CPU appear on > @@ -391,11 +387,20 @@ void parse_numa_opts(MachineState *ms) > * rule grouping VCPUs by socket so that VCPUs from the same socket > * would be on the same node. > */ > - if (!mc->cpu_index_to_instance_props) { > + if (!mc->cpu_index_to_instance_props || !mc->possible_cpu_arch_ids) { > error_report("default CPUs to NUMA node mapping isn't > supported"); > exit(1); > } > - if (i == nb_numa_nodes) { > + > + possible_cpus = mc->possible_cpu_arch_ids(ms); > + for (i = 0; i < possible_cpus->len; i++) { > + if (possible_cpus->cpus[i].props.has_node_id) { > + break; > + } > + } > + > + /* no CPUs are assigned to NUMA nodes */ > + if (i == possible_cpus->len) { > for (i = 0; i < max_cpus; i++) { > CpuInstanceProperties props; > /* fetch default mapping from board and enable it */ > -- > 2.7.4 >
Reviewed-by: Andrew Jones <drjo...@redhat.com>