From: Shaohui Zheng <shaohui.zheng@intel.com>
To: akpm@linux-foundation.org, linux-mm@kvack.org
Cc: Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
x86@kernel.org, Andi Kleen <ak@linux.intel.com>,
Andrew Morton <akpm@linux-foundation.org>,
Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>,
Greg Kroah-Hartman <gregkh@suse.de>,
Wu Fengguang <fengguang.wu@intel.com>,
Heiko Carstens <heiko.carstens@de.ibm.com>,
linux-kernel@vger.kernel.org, haicheng.li@linux.intel.com,
shaohui.zheng@linux.intel.com
Subject: [RFC, 6/7] NUMA hotplug emulator
Date: Thu, 13 May 2010 20:00:16 +0800 [thread overview]
Message-ID: <20100513120016.GG2169@shaohui> (raw)
[-- Attachment #1: Type: text/plain, Size: 2829 bytes --]
hotplug emulator:extend memory probe interface to support NUMA
Extend memory probe interface to support an extra paramter nid,
the reserved memory can be added into this node if node exists.
Add a memory section(128M) to node 3(boots with mem=1024m)
echo 0x40000000,3 > memory/probe
And more we make it friendly, it is possible to add memory to do
echo 3g > memory/probe
echo 1024m,3 > memory/probe
It maintains backwards compatibility.
Signed-off-by: Shaohui Zheng <shaohui.zheng@intel.com>
Signed-off-by: Haicheng Li <haicheng.li@intel.com>
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
---
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 54ccb0d..787024f 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1239,6 +1239,17 @@ config ARCH_CPU_PROBE_RELEASE
is for cpu hot-add/hot-remove to specified node in software method.
This is for debuging and testing purpose
+config ARCH_MEMORY_PROBE
+ def_bool y
+ bool "Memory hotplug emulation"
+ depends on NUMA_HOTPLUG_EMU
+ ---help---
+ Enable memory hotplug emulation. Reserve memory with grub parameter
+ "mem=N"(such as mem=1024M), where N is the initial memory size, the
+ rest physical memory will be removed from e820 table; the memory probe
+ interface is for memory hot-add to specified node in software method.
+ This is for debuging and testing purpose
+
config NODES_SHIFT
int "Maximum NUMA Nodes (as a power of 2)" if !MAXSMP
range 1 10
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index 933442f..1c2d83d 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -329,6 +329,8 @@ static int block_size_init(void)
* will not need to do it from userspace. The fake hot-add code
* as well as ppc64 will do all of their discovery in userspace
* and will require this interface.
+ *
+ * Parameter format: start_addr, nid
*/
#ifdef CONFIG_ARCH_MEMORY_PROBE
static ssize_t
@@ -339,10 +341,26 @@ memory_probe_store(struct class *class, struct class_attribute *attr,
int nid;
int ret;
- phys_addr = simple_strtoull(buf, NULL, 0);
+ char *p = strchr(buf, ',');
+
+ if (p != NULL && strlen(p+1) > 0) {
+ /* nid specified */
+ *p++ = '\0';
+ nid = simple_strtoul(p, NULL, 0);
+ phys_addr = memparse(buf, NULL);
+ } else {
+ phys_addr = memparse(buf, NULL);
+ nid = memory_add_physaddr_to_nid(phys_addr);
+ }
- nid = memory_add_physaddr_to_nid(phys_addr);
- ret = add_memory(nid, phys_addr, PAGES_PER_SECTION << PAGE_SHIFT);
+ if (nid < 0 || nid > nr_node_ids - 1) {
+ printk(KERN_ERR "Invalid node id %d(0<=nid<%d).\n", nid, nr_node_ids);
+ } else {
+ printk(KERN_INFO "Add a memory section to node: %d.\n", nid);
+ ret = add_memory(nid, phys_addr, PAGES_PER_SECTION << PAGE_SHIFT);
+ if (ret)
+ count = ret;
+ }
if (ret)
count = ret;
--
Thanks & Regards,
Shaohui
[-- Attachment #2: 006-hotplug-emulator-extend-memory-probe-interface-to-support-numa.patch --]
[-- Type: text/x-diff, Size: 2798 bytes --]
hotplug emulator:extend memory probe interface to support NUMA
Extend memory probe interface to support an extra paramter nid,
the reserved memory can be added into this node if node exists.
Add a memory section(128M) to node 3(boots with mem=1024m)
echo 0x40000000,3 > memory/probe
And more we make it friendly, it is possible to add memory to do
echo 3g > memory/probe
echo 1024m,3 > memory/probe
It maintains backwards compatibility.
Signed-off-by: Shaohui Zheng <shaohui.zheng@intel.com>
Signed-off-by: Haicheng Li <haicheng.li@intel.com>
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
---
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 54ccb0d..787024f 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1239,6 +1239,17 @@ config ARCH_CPU_PROBE_RELEASE
is for cpu hot-add/hot-remove to specified node in software method.
This is for debuging and testing purpose
+config ARCH_MEMORY_PROBE
+ def_bool y
+ bool "Memory hotplug emulation"
+ depends on NUMA_HOTPLUG_EMU
+ ---help---
+ Enable memory hotplug emulation. Reserve memory with grub parameter
+ "mem=N"(such as mem=1024M), where N is the initial memory size, the
+ rest physical memory will be removed from e820 table; the memory probe
+ interface is for memory hot-add to specified node in software method.
+ This is for debuging and testing purpose
+
config NODES_SHIFT
int "Maximum NUMA Nodes (as a power of 2)" if !MAXSMP
range 1 10
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index 933442f..1c2d83d 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -329,6 +329,8 @@ static int block_size_init(void)
* will not need to do it from userspace. The fake hot-add code
* as well as ppc64 will do all of their discovery in userspace
* and will require this interface.
+ *
+ * Parameter format: start_addr, nid
*/
#ifdef CONFIG_ARCH_MEMORY_PROBE
static ssize_t
@@ -339,10 +341,26 @@ memory_probe_store(struct class *class, struct class_attribute *attr,
int nid;
int ret;
- phys_addr = simple_strtoull(buf, NULL, 0);
+ char *p = strchr(buf, ',');
+
+ if (p != NULL && strlen(p+1) > 0) {
+ /* nid specified */
+ *p++ = '\0';
+ nid = simple_strtoul(p, NULL, 0);
+ phys_addr = memparse(buf, NULL);
+ } else {
+ phys_addr = memparse(buf, NULL);
+ nid = memory_add_physaddr_to_nid(phys_addr);
+ }
- nid = memory_add_physaddr_to_nid(phys_addr);
- ret = add_memory(nid, phys_addr, PAGES_PER_SECTION << PAGE_SHIFT);
+ if (nid < 0 || nid > nr_node_ids - 1) {
+ printk(KERN_ERR "Invalid node id %d(0<=nid<%d).\n", nid, nr_node_ids);
+ } else {
+ printk(KERN_INFO "Add a memory section to node: %d.\n", nid);
+ ret = add_memory(nid, phys_addr, PAGES_PER_SECTION << PAGE_SHIFT);
+ if (ret)
+ count = ret;
+ }
if (ret)
count = ret;
WARNING: multiple messages have this Message-ID (diff)
From: Shaohui Zheng <shaohui.zheng@intel.com>
To: akpm@linux-foundation.org, linux-mm@kvack.org
Cc: Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
x86@kernel.org, Andi Kleen <ak@linux.intel.com>,
Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>,
Greg Kroah-Hartman <gregkh@suse.de>,
Wu Fengguang <fengguang.wu@intel.com>,
Heiko Carstens <heiko.carstens@de.ibm.com>,
linux-kernel@vger.kernel.org, haicheng.li@linux.intel.com,
shaohui.zheng@linux.intel.com
Subject: [RFC, 6/7] NUMA hotplug emulator
Date: Thu, 13 May 2010 20:00:16 +0800 [thread overview]
Message-ID: <20100513120016.GG2169@shaohui> (raw)
[-- Attachment #1: Type: text/plain, Size: 2829 bytes --]
hotplug emulator:extend memory probe interface to support NUMA
Extend memory probe interface to support an extra paramter nid,
the reserved memory can be added into this node if node exists.
Add a memory section(128M) to node 3(boots with mem=1024m)
echo 0x40000000,3 > memory/probe
And more we make it friendly, it is possible to add memory to do
echo 3g > memory/probe
echo 1024m,3 > memory/probe
It maintains backwards compatibility.
Signed-off-by: Shaohui Zheng <shaohui.zheng@intel.com>
Signed-off-by: Haicheng Li <haicheng.li@intel.com>
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
---
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 54ccb0d..787024f 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1239,6 +1239,17 @@ config ARCH_CPU_PROBE_RELEASE
is for cpu hot-add/hot-remove to specified node in software method.
This is for debuging and testing purpose
+config ARCH_MEMORY_PROBE
+ def_bool y
+ bool "Memory hotplug emulation"
+ depends on NUMA_HOTPLUG_EMU
+ ---help---
+ Enable memory hotplug emulation. Reserve memory with grub parameter
+ "mem=N"(such as mem=1024M), where N is the initial memory size, the
+ rest physical memory will be removed from e820 table; the memory probe
+ interface is for memory hot-add to specified node in software method.
+ This is for debuging and testing purpose
+
config NODES_SHIFT
int "Maximum NUMA Nodes (as a power of 2)" if !MAXSMP
range 1 10
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index 933442f..1c2d83d 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -329,6 +329,8 @@ static int block_size_init(void)
* will not need to do it from userspace. The fake hot-add code
* as well as ppc64 will do all of their discovery in userspace
* and will require this interface.
+ *
+ * Parameter format: start_addr, nid
*/
#ifdef CONFIG_ARCH_MEMORY_PROBE
static ssize_t
@@ -339,10 +341,26 @@ memory_probe_store(struct class *class, struct class_attribute *attr,
int nid;
int ret;
- phys_addr = simple_strtoull(buf, NULL, 0);
+ char *p = strchr(buf, ',');
+
+ if (p != NULL && strlen(p+1) > 0) {
+ /* nid specified */
+ *p++ = '\0';
+ nid = simple_strtoul(p, NULL, 0);
+ phys_addr = memparse(buf, NULL);
+ } else {
+ phys_addr = memparse(buf, NULL);
+ nid = memory_add_physaddr_to_nid(phys_addr);
+ }
- nid = memory_add_physaddr_to_nid(phys_addr);
- ret = add_memory(nid, phys_addr, PAGES_PER_SECTION << PAGE_SHIFT);
+ if (nid < 0 || nid > nr_node_ids - 1) {
+ printk(KERN_ERR "Invalid node id %d(0<=nid<%d).\n", nid, nr_node_ids);
+ } else {
+ printk(KERN_INFO "Add a memory section to node: %d.\n", nid);
+ ret = add_memory(nid, phys_addr, PAGES_PER_SECTION << PAGE_SHIFT);
+ if (ret)
+ count = ret;
+ }
if (ret)
count = ret;
--
Thanks & Regards,
Shaohui
[-- Attachment #2: 006-hotplug-emulator-extend-memory-probe-interface-to-support-numa.patch --]
[-- Type: text/x-diff, Size: 2798 bytes --]
hotplug emulator:extend memory probe interface to support NUMA
Extend memory probe interface to support an extra paramter nid,
the reserved memory can be added into this node if node exists.
Add a memory section(128M) to node 3(boots with mem=1024m)
echo 0x40000000,3 > memory/probe
And more we make it friendly, it is possible to add memory to do
echo 3g > memory/probe
echo 1024m,3 > memory/probe
It maintains backwards compatibility.
Signed-off-by: Shaohui Zheng <shaohui.zheng@intel.com>
Signed-off-by: Haicheng Li <haicheng.li@intel.com>
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
---
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 54ccb0d..787024f 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1239,6 +1239,17 @@ config ARCH_CPU_PROBE_RELEASE
is for cpu hot-add/hot-remove to specified node in software method.
This is for debuging and testing purpose
+config ARCH_MEMORY_PROBE
+ def_bool y
+ bool "Memory hotplug emulation"
+ depends on NUMA_HOTPLUG_EMU
+ ---help---
+ Enable memory hotplug emulation. Reserve memory with grub parameter
+ "mem=N"(such as mem=1024M), where N is the initial memory size, the
+ rest physical memory will be removed from e820 table; the memory probe
+ interface is for memory hot-add to specified node in software method.
+ This is for debuging and testing purpose
+
config NODES_SHIFT
int "Maximum NUMA Nodes (as a power of 2)" if !MAXSMP
range 1 10
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index 933442f..1c2d83d 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -329,6 +329,8 @@ static int block_size_init(void)
* will not need to do it from userspace. The fake hot-add code
* as well as ppc64 will do all of their discovery in userspace
* and will require this interface.
+ *
+ * Parameter format: start_addr, nid
*/
#ifdef CONFIG_ARCH_MEMORY_PROBE
static ssize_t
@@ -339,10 +341,26 @@ memory_probe_store(struct class *class, struct class_attribute *attr,
int nid;
int ret;
- phys_addr = simple_strtoull(buf, NULL, 0);
+ char *p = strchr(buf, ',');
+
+ if (p != NULL && strlen(p+1) > 0) {
+ /* nid specified */
+ *p++ = '\0';
+ nid = simple_strtoul(p, NULL, 0);
+ phys_addr = memparse(buf, NULL);
+ } else {
+ phys_addr = memparse(buf, NULL);
+ nid = memory_add_physaddr_to_nid(phys_addr);
+ }
- nid = memory_add_physaddr_to_nid(phys_addr);
- ret = add_memory(nid, phys_addr, PAGES_PER_SECTION << PAGE_SHIFT);
+ if (nid < 0 || nid > nr_node_ids - 1) {
+ printk(KERN_ERR "Invalid node id %d(0<=nid<%d).\n", nid, nr_node_ids);
+ } else {
+ printk(KERN_INFO "Add a memory section to node: %d.\n", nid);
+ ret = add_memory(nid, phys_addr, PAGES_PER_SECTION << PAGE_SHIFT);
+ if (ret)
+ count = ret;
+ }
if (ret)
count = ret;
next reply other threads:[~2010-05-13 12:04 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-13 12:00 Shaohui Zheng [this message]
2010-05-13 12:00 ` [RFC, 6/7] NUMA hotplug emulator Shaohui Zheng
2010-05-13 16:56 ` Greg KH
2010-05-13 16:56 ` Greg KH
2010-05-13 18:02 ` Dave Hansen
2010-05-13 18:02 ` Dave Hansen
2010-05-13 18:15 ` Greg KH
2010-05-13 18:15 ` Greg KH
2010-05-13 18:49 ` Dave Hansen
2010-05-13 18:49 ` Dave Hansen
2010-05-13 18:58 ` Greg KH
2010-05-13 18:58 ` Greg KH
2010-05-13 19:16 ` Dave Hansen
2010-05-13 19:16 ` Dave Hansen
2010-05-13 19:21 ` Greg KH
2010-05-13 19:21 ` Greg KH
2010-05-18 5:41 ` Shaohui Zheng
2010-05-18 5:41 ` Shaohui Zheng
2010-05-18 7:27 ` Dave Hansen
2010-05-18 7:27 ` Dave Hansen
2010-05-18 7:56 ` Shaohui Zheng
2010-05-18 7:56 ` Shaohui Zheng
2010-05-18 8:55 ` Andi Kleen
2010-05-18 8:55 ` Andi Kleen
2010-05-18 15:46 ` Dave Hansen
2010-05-18 15:46 ` Dave Hansen
2010-05-18 7:44 ` Nicholas A. Bellinger
2010-05-18 7:44 ` Nicholas A. Bellinger
2010-05-18 7:44 ` Paul Mundt
2010-05-18 7:44 ` Paul Mundt
2010-05-18 8:08 ` Shaohui Zheng
2010-05-18 8:08 ` Shaohui Zheng
2010-05-14 1:49 ` Shaohui Zheng
2010-05-14 1:49 ` Shaohui Zheng
2010-05-14 2:05 ` Wu Fengguang
2010-05-14 2:05 ` Wu Fengguang
2010-05-14 2:08 ` Shaohui Zheng
2010-05-14 2:08 ` Shaohui Zheng
2010-05-21 10:11 ` Ankita Garg
2010-05-21 10:11 ` Ankita Garg
2010-05-24 1:26 ` Shaohui Zheng
2010-05-24 1:26 ` Shaohui Zheng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100513120016.GG2169@shaohui \
--to=shaohui.zheng@intel.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=fengguang.wu@intel.com \
--cc=gregkh@suse.de \
--cc=haicheng.li@linux.intel.com \
--cc=heiko.carstens@de.ibm.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mingo@redhat.com \
--cc=seto.hidetoshi@jp.fujitsu.com \
--cc=shaohui.zheng@linux.intel.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.