Re: [Qemu-devel] [PATCH for-2.10 11/23] numa: do default mapping based on possible_cpus instead of node_cpu bitmaps

2017-03-27 Thread David Gibson
On Wed, Mar 22, 2017 at 02:32:36PM +0100, Igor Mammedov wrote:
> Signed-off-by: Igor Mammedov 

Reviewed-by: David Gibson 

> ---
>  numa.c | 19 ---
>  1 file changed, 12 insertions(+), 7 deletions(-)
> 
> diff --git a/numa.c b/numa.c
> index 44057f1..ab41776 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 */

-- 
David Gibson| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson


signature.asc
Description: PGP signature


[Qemu-devel] [PATCH for-2.10 11/23] numa: do default mapping based on possible_cpus instead of node_cpu bitmaps

2017-03-22 Thread Igor Mammedov
Signed-off-by: Igor Mammedov 
---
 numa.c | 19 ---
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/numa.c b/numa.c
index 44057f1..ab41776 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