Re: [Qemu-devel] [PATCH v18 03/14] NUMA: Add numa_info structure to contain numa nodes info
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
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
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