Re: [Qemu-devel] [PATCH v18 03/14] NUMA: Add numa_info structure to contain numa nodes info

2014-02-20 Thread hu tao
On Wed, Feb 19, 2014 at 5:26 PM, Igor Mammedov imamm...@redhat.com wrote:

 On Wed, 19 Feb 2014 15:53:54 +0800
 Hu Tao hu...@cn.fujitsu.com wrote:

  From: Wanlong Gao gaowanl...@cn.fujitsu.com
 
  Add the numa_info structure to contain the numa nodes memory,
  VCPUs information and the future added numa nodes host memory
  policies.
 this is old version that breaks spar build which Wanlong already fixed.

 You can replace patches 1-5 with more recent ones posted recently:
 http://www.mail-archive.com/qemu-devel@nongnu.org/msg216404.html


Thanks!


Re: [Qemu-devel] [PATCH v18 03/14] NUMA: Add numa_info structure to contain numa nodes info

2014-02-19 Thread Igor Mammedov
On Wed, 19 Feb 2014 15:53:54 +0800
Hu Tao hu...@cn.fujitsu.com wrote:

 From: Wanlong Gao gaowanl...@cn.fujitsu.com
 
 Add the numa_info structure to contain the numa nodes memory,
 VCPUs information and the future added numa nodes host memory
 policies.
this is old version that breaks spar build which Wanlong already fixed.

You can replace patches 1-5 with more recent ones posted recently:
http://www.mail-archive.com/qemu-devel@nongnu.org/msg216404.html

 
 Reviewed-by: Eduardo Habkost ehabk...@redhat.com
 Signed-off-by: Andre Przywara andre.przyw...@amd.com
 Signed-off-by: Wanlong Gao gaowanl...@cn.fujitsu.com
 Signed-off-by: Paolo Bonzini pbonz...@redhat.com
 Signed-off-by: Hu Tao hu...@cn.fujitsu.com
 ---
  hw/i386/pc.c| 12 
  include/sysemu/sysemu.h |  8 ++--
  monitor.c   |  2 +-
  numa.c  | 23 ---
  vl.c|  7 +++
  5 files changed, 30 insertions(+), 22 deletions(-)
 
 diff --git a/hw/i386/pc.c b/hw/i386/pc.c
 index e715a33..a464e48 100644
 --- a/hw/i386/pc.c
 +++ b/hw/i386/pc.c
 @@ -674,14 +674,14 @@ static FWCfgState *bochs_bios_init(void)
  unsigned int apic_id = x86_cpu_apic_id_from_index(i);
  assert(apic_id  apic_id_limit);
  for (j = 0; j  nb_numa_nodes; j++) {
 -if (test_bit(i, node_cpumask[j])) {
 +if (test_bit(i, numa_info[j].node_cpu)) {
  numa_fw_cfg[apic_id + 1] = cpu_to_le64(j);
  break;
  }
  }
  }
  for (i = 0; i  nb_numa_nodes; i++) {
 -numa_fw_cfg[apic_id_limit + 1 + i] = cpu_to_le64(node_mem[i]);
 +numa_fw_cfg[apic_id_limit + 1 + i] = 
 cpu_to_le64(numa_info[i].node_mem);
  }
  fw_cfg_add_bytes(fw_cfg, FW_CFG_NUMA, numa_fw_cfg,
   (1 + apic_id_limit + nb_numa_nodes) *
 @@ -1077,8 +1077,12 @@ PcGuestInfo *pc_guest_info_init(ram_addr_t 
 below_4g_mem_size,
  guest_info-apic_id_limit = pc_apic_id_limit(max_cpus);
  guest_info-apic_xrupt_override = kvm_allows_irq0_override();
  guest_info-numa_nodes = nb_numa_nodes;
 -guest_info-node_mem = g_memdup(node_mem, guest_info-numa_nodes *
 +guest_info-node_mem = g_malloc0(guest_info-numa_nodes *
  sizeof *guest_info-node_mem);
 +for (i = 0; i  nb_numa_nodes; i++) {
 +guest_info-node_mem[i] = numa_info[i].node_mem;
 +}
 +
  guest_info-node_cpu = g_malloc0(guest_info-apic_id_limit *
   sizeof *guest_info-node_cpu);
  
 @@ -1086,7 +1090,7 @@ PcGuestInfo *pc_guest_info_init(ram_addr_t 
 below_4g_mem_size,
  unsigned int apic_id = x86_cpu_apic_id_from_index(i);
  assert(apic_id  guest_info-apic_id_limit);
  for (j = 0; j  nb_numa_nodes; j++) {
 -if (test_bit(i, node_cpumask[j])) {
 +if (test_bit(i, numa_info[j].node_cpu)) {
  guest_info-node_cpu[apic_id] = j;
  break;
  }
 diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
 index 2509649..d873b42 100644
 --- a/include/sysemu/sysemu.h
 +++ b/include/sysemu/sysemu.h
 @@ -9,6 +9,7 @@
  #include qapi-types.h
  #include qemu/notify.h
  #include qemu/main-loop.h
 +#include qemu/bitmap.h
  
  /* vl.c */
  
 @@ -134,8 +135,11 @@ extern QEMUClockType rtc_clock;
  #define MAX_NODES 64
  #define MAX_CPUMASK_BITS 255
  extern int nb_numa_nodes;
 -extern uint64_t node_mem[MAX_NODES];
 -extern unsigned long *node_cpumask[MAX_NODES];
 +typedef struct node_info {
 +uint64_t node_mem;
 +DECLARE_BITMAP(node_cpu, MAX_CPUMASK_BITS);
 +} NodeInfo;
 +extern NodeInfo numa_info[MAX_NODES];
  void numa_add(const char *optarg);
  void set_numa_nodes(void);
  void set_numa_modes(void);
 diff --git a/monitor.c b/monitor.c
 index 690c152..0284735 100644
 --- a/monitor.c
 +++ b/monitor.c
 @@ -2004,7 +2004,7 @@ static void do_info_numa(Monitor *mon, const QDict 
 *qdict)
  }
  monitor_printf(mon, \n);
  monitor_printf(mon, node %d size: % PRId64  MB\n, i,
 -node_mem[i]  20);
 +numa_info[i].node_mem  20);
  }
  }
  
 diff --git a/numa.c b/numa.c
 index a06e2d1..1f413a0 100644
 --- a/numa.c
 +++ b/numa.c
 @@ -61,7 +61,7 @@ static void numa_node_parse_cpus(int nodenr, const char 
 *cpus)
  goto error;
  }
  
 -bitmap_set(node_cpumask[nodenr], value, endvalue-value+1);
 +bitmap_set(numa_info[nodenr].node_cpu, value, endvalue-value+1);
  return;
  
  error:
 @@ -101,7 +101,7 @@ void numa_add(const char *optarg)
  }
  
  if (get_param_value(option, 128, mem, optarg) == 0) {
 -node_mem[nodenr] = 0;
 +numa_info[nodenr].node_mem = 0;
  } else {
  int64_t sval;
  sval = strtosz(option, endptr);
 @@ -109,7 +109,7 @@ void numa_add(const char *optarg)
  fprintf(stderr, qemu: invalid numa mem size: %s\n, optarg);

[Qemu-devel] [PATCH v18 03/14] NUMA: Add numa_info structure to contain numa nodes info

2014-02-18 Thread Hu Tao
From: Wanlong Gao gaowanl...@cn.fujitsu.com

Add the numa_info structure to contain the numa nodes memory,
VCPUs information and the future added numa nodes host memory
policies.

Reviewed-by: Eduardo Habkost ehabk...@redhat.com
Signed-off-by: Andre Przywara andre.przyw...@amd.com
Signed-off-by: Wanlong Gao gaowanl...@cn.fujitsu.com
Signed-off-by: Paolo Bonzini pbonz...@redhat.com
Signed-off-by: Hu Tao hu...@cn.fujitsu.com
---
 hw/i386/pc.c| 12 
 include/sysemu/sysemu.h |  8 ++--
 monitor.c   |  2 +-
 numa.c  | 23 ---
 vl.c|  7 +++
 5 files changed, 30 insertions(+), 22 deletions(-)

diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index e715a33..a464e48 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -674,14 +674,14 @@ static FWCfgState *bochs_bios_init(void)
 unsigned int apic_id = x86_cpu_apic_id_from_index(i);
 assert(apic_id  apic_id_limit);
 for (j = 0; j  nb_numa_nodes; j++) {
-if (test_bit(i, node_cpumask[j])) {
+if (test_bit(i, numa_info[j].node_cpu)) {
 numa_fw_cfg[apic_id + 1] = cpu_to_le64(j);
 break;
 }
 }
 }
 for (i = 0; i  nb_numa_nodes; i++) {
-numa_fw_cfg[apic_id_limit + 1 + i] = cpu_to_le64(node_mem[i]);
+numa_fw_cfg[apic_id_limit + 1 + i] = 
cpu_to_le64(numa_info[i].node_mem);
 }
 fw_cfg_add_bytes(fw_cfg, FW_CFG_NUMA, numa_fw_cfg,
  (1 + apic_id_limit + nb_numa_nodes) *
@@ -1077,8 +1077,12 @@ PcGuestInfo *pc_guest_info_init(ram_addr_t 
below_4g_mem_size,
 guest_info-apic_id_limit = pc_apic_id_limit(max_cpus);
 guest_info-apic_xrupt_override = kvm_allows_irq0_override();
 guest_info-numa_nodes = nb_numa_nodes;
-guest_info-node_mem = g_memdup(node_mem, guest_info-numa_nodes *
+guest_info-node_mem = g_malloc0(guest_info-numa_nodes *
 sizeof *guest_info-node_mem);
+for (i = 0; i  nb_numa_nodes; i++) {
+guest_info-node_mem[i] = numa_info[i].node_mem;
+}
+
 guest_info-node_cpu = g_malloc0(guest_info-apic_id_limit *
  sizeof *guest_info-node_cpu);
 
@@ -1086,7 +1090,7 @@ PcGuestInfo *pc_guest_info_init(ram_addr_t 
below_4g_mem_size,
 unsigned int apic_id = x86_cpu_apic_id_from_index(i);
 assert(apic_id  guest_info-apic_id_limit);
 for (j = 0; j  nb_numa_nodes; j++) {
-if (test_bit(i, node_cpumask[j])) {
+if (test_bit(i, numa_info[j].node_cpu)) {
 guest_info-node_cpu[apic_id] = j;
 break;
 }
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index 2509649..d873b42 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -9,6 +9,7 @@
 #include qapi-types.h
 #include qemu/notify.h
 #include qemu/main-loop.h
+#include qemu/bitmap.h
 
 /* vl.c */
 
@@ -134,8 +135,11 @@ extern QEMUClockType rtc_clock;
 #define MAX_NODES 64
 #define MAX_CPUMASK_BITS 255
 extern int nb_numa_nodes;
-extern uint64_t node_mem[MAX_NODES];
-extern unsigned long *node_cpumask[MAX_NODES];
+typedef struct node_info {
+uint64_t node_mem;
+DECLARE_BITMAP(node_cpu, MAX_CPUMASK_BITS);
+} NodeInfo;
+extern NodeInfo numa_info[MAX_NODES];
 void numa_add(const char *optarg);
 void set_numa_nodes(void);
 void set_numa_modes(void);
diff --git a/monitor.c b/monitor.c
index 690c152..0284735 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2004,7 +2004,7 @@ static void do_info_numa(Monitor *mon, const QDict *qdict)
 }
 monitor_printf(mon, \n);
 monitor_printf(mon, node %d size: % PRId64  MB\n, i,
-node_mem[i]  20);
+numa_info[i].node_mem  20);
 }
 }
 
diff --git a/numa.c b/numa.c
index a06e2d1..1f413a0 100644
--- a/numa.c
+++ b/numa.c
@@ -61,7 +61,7 @@ static void numa_node_parse_cpus(int nodenr, const char *cpus)
 goto error;
 }
 
-bitmap_set(node_cpumask[nodenr], value, endvalue-value+1);
+bitmap_set(numa_info[nodenr].node_cpu, value, endvalue-value+1);
 return;
 
 error:
@@ -101,7 +101,7 @@ void numa_add(const char *optarg)
 }
 
 if (get_param_value(option, 128, mem, optarg) == 0) {
-node_mem[nodenr] = 0;
+numa_info[nodenr].node_mem = 0;
 } else {
 int64_t sval;
 sval = strtosz(option, endptr);
@@ -109,7 +109,7 @@ void numa_add(const char *optarg)
 fprintf(stderr, qemu: invalid numa mem size: %s\n, optarg);
 exit(1);
 }
-node_mem[nodenr] = sval;
+numa_info[nodenr].node_mem = sval;
 }
 if (get_param_value(option, 128, cpus, optarg) != 0) {
 numa_node_parse_cpus(nodenr, option);
@@ -134,7 +134,7 @@ void set_numa_nodes(void)
  * and distribute the available memory equally across all nodes
  */
 for (i = 0; i