qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/2] numa/pc-dimm: Fix stat of memory size in no


From: zhanghailiang
Subject: Re: [Qemu-devel] [PATCH 2/2] numa/pc-dimm: Fix stat of memory size in node when hotplug memory
Date: Wed, 17 Sep 2014 16:22:18 +0800
User-agent: Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20120327 Thunderbird/11.0.1

On 2014/9/16 19:20, Igor Mammedov wrote:
On Tue, 16 Sep 2014 18:39:16 +0800
zhanghailiang<address@hidden>  wrote:

When do memory hotplug, if there is numa node, we should add
the memory size to the corresponding node memory size.

For now, it mainly affects the result of hmp command "info numa".

Signed-off-by: zhanghailiang<address@hidden>
---
  hw/i386/pc.c            |  1 +
  include/sysemu/sysemu.h |  1 +
  numa.c                  | 13 +++++++++++++
  3 files changed, 15 insertions(+)

diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 77b6782..bafe48e 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -1607,6 +1607,7 @@ static void pc_dimm_plug(HotplugHandler *hotplug_dev,
      memory_region_add_subregion(&pcms->hotplug_memory,
                                  addr - pcms->hotplug_memory_base, mr);
      vmstate_register_ram(mr, dev);
+    update_numa_node_mem_size(dimm->node, memory_region_size(mr), true);

      hhc = HOTPLUG_HANDLER_GET_CLASS(pcms->acpi_dev);
      hhc->plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev,&local_err);
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index d8539fd..5bc9d73 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -160,6 +160,7 @@ typedef struct node_info {
  extern NodeInfo numa_info[MAX_NODES];
  void set_numa_nodes(void);
  void set_numa_modes(void);
+void update_numa_node_mem_size(int node, uint64_t size, bool hotplug);
  extern QemuOptsList qemu_numa_opts;
  int numa_init_func(QemuOpts *opts, void *opaque);

diff --git a/numa.c b/numa.c
index 3b98135..bbfa16f 100644
--- a/numa.c
+++ b/numa.c
@@ -315,6 +315,19 @@ void memory_region_allocate_system_memory(MemoryRegion 
*mr, Object *owner,
      }
  }

+void update_numa_node_mem_size(int node, uint64_t size, bool hotplug)
+{
+    if (!nb_numa_nodes) {
+        return;
+    }
+
+    if (hotplug) {
+        numa_info[node].node_mem += size;
+    } else {
+        numa_info[node].node_mem -= size;
+    }
+}
I don't think is right thing to do.
numa_info.node_mem provides mapping of initial memory specified with -m XXX 
option,
and later used for building ACPI SRAT table.


Got it;)

I'd suggest to fix 'info numa' command instead. Add to it ability to enumerate
all memory devices, in that case when initial memory is converted to memory 
devices
'info numa' will continue to work correctly.


Hmm, Good idea, i will fix it.Thanks.

+
  static int query_memdev(Object *obj, void *opaque)
  {
      MemdevList **list = opaque;


.






reply via email to

[Prev in Thread] Current Thread [Next in Thread]