From: Shaohui Zheng <shaohui.zheng@intel.com>
To: Wu Fengguang <fengguang.wu@intel.com>,
akpm@linux-foundation.org, linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org, y-goto@jp.fujitsu.com,
haveblue@us.ibm.com, kamezawa.hiroyu@jp.fujitsu.com,
ak@linux.intel.com, fengguang.wu@intel.com, hpa@kernel.org,
haicheng.li@intel.com, shaohui.zheng@linux.intel.com
Subject: Re: [Patch - Resend v4] Memory-Hotplug: Fix the bug on interface /dev/mem for 64-bit kernel
Date: Mon, 1 Feb 2010 20:22:02 +0800 [thread overview]
Message-ID: <20100201122202.GA2021@shaohui> (raw)
In-Reply-To: <20100201044124.GA29097@localhost>
[-- Attachment #1: Type: text/plain, Size: 2416 bytes --]
On Mon, Feb 01, 2010 at 12:41:24PM +0800, Wu Fengguang wrote:
> Shaohui,
>
> Some style nitpicks..
>
> > #ifdef CONFIG_MEMORY_HOTPLUG
> > +/**
>
> Should use /* here.
Agree.
>
> > + * After memory hotplug, the variable max_pfn, max_low_pfn and high_memory will
> > + * be affected, it will be updated in this function.
> > + */
> > +static inline void __meminit update_end_of_memory_vars(u64 start,
>
> The "inline" and "__meminit" are both redundant here.
will remove both.
>
> > + max_low_pfn = max_pfn = end_pfn;
>
> One assignment per line is preferred.
will change to 2 statements.
>
> Thanks,
> Fengguang
Memory-Hotplug: Fix the bug on interface /dev/mem for 64-bit kernel
The new added memory can not be access by interface /dev/mem, because we do not
update the variables high_memory, max_pfn and max_low_pfn.
Add a function update_end_of_memory_vars to update these variables for 64-bit
kernel.
CC: Andi Kleen <ak@linux.intel.com>
CC: Li Haicheng <haicheng.li@intel.com>
Reviewed-by: Wu Fengguang <fengguang.wu@intel.com>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Shaohui Zheng <shaohui.zheng@intel.com>
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 5198b9b..e1c9202 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -49,6 +49,7 @@
#include <asm/numa.h>
#include <asm/cacheflush.h>
#include <asm/init.h>
+#include <linux/bootmem.h>
static unsigned long dma_reserve __initdata;
@@ -616,6 +617,21 @@ void __init paging_init(void)
*/
#ifdef CONFIG_MEMORY_HOTPLUG
/*
+ * After memory hotplug, the variables max_pfn, max_low_pfn and high_memory will
+ * be affected, they will be updated in this function.
+ */
+static void update_end_of_memory_vars(u64 start, u64 size)
+{
+ unsigned long end_pfn = PFN_UP(start + size);
+
+ if (end_pfn > max_pfn) {
+ max_pfn = end_pfn;
+ max_low_pfn = end_pfn;
+ high_memory = (void *)__va(max_pfn * PAGE_SIZE - 1) + 1;
+ }
+}
+
+/*
* Memory is added always to NORMAL zone. This means you will never get
* additional DMA/DMA32 memory.
*/
@@ -634,6 +650,9 @@ int arch_add_memory(int nid, u64 start, u64 size)
ret = __add_pages(nid, zone, start_pfn, nr_pages);
WARN_ON_ONCE(ret);
+ /* update max_pfn, max_low_pfn and high_memory */
+ update_end_of_memory_vars(start, size);
+
return ret;
}
EXPORT_SYMBOL_GPL(arch_add_memory);
--
Thanks & Regards,
Shaohui
[-- Attachment #2: memory-hotplug-fix-the-bug-on-interface-dev-mem-v5.patch --]
[-- Type: text/x-diff, Size: 1762 bytes --]
Memory-Hotplug: Fix the bug on interface /dev/mem for 64-bit kernel
The new added memory can not be access by interface /dev/mem, because we do not
update the variables high_memory, max_pfn and max_low_pfn.
Add a function update_end_of_memory_vars to update these variables for 64-bit
kernel.
CC: Andi Kleen <ak@linux.intel.com>
CC: Li Haicheng <haicheng.li@intel.com>
Reviewed-by: Wu Fengguang <fengguang.wu@intel.com>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Shaohui Zheng <shaohui.zheng@intel.com>
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 5198b9b..e1c9202 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -49,6 +49,7 @@
#include <asm/numa.h>
#include <asm/cacheflush.h>
#include <asm/init.h>
+#include <linux/bootmem.h>
static unsigned long dma_reserve __initdata;
@@ -616,6 +617,21 @@ void __init paging_init(void)
*/
#ifdef CONFIG_MEMORY_HOTPLUG
/*
+ * After memory hotplug, the variables max_pfn, max_low_pfn and high_memory will
+ * be affected, they will be updated in this function.
+ */
+static void update_end_of_memory_vars(u64 start, u64 size)
+{
+ unsigned long end_pfn = PFN_UP(start + size);
+
+ if (end_pfn > max_pfn) {
+ max_pfn = end_pfn;
+ max_low_pfn = end_pfn;
+ high_memory = (void *)__va(max_pfn * PAGE_SIZE - 1) + 1;
+ }
+}
+
+/*
* Memory is added always to NORMAL zone. This means you will never get
* additional DMA/DMA32 memory.
*/
@@ -634,6 +650,9 @@ int arch_add_memory(int nid, u64 start, u64 size)
ret = __add_pages(nid, zone, start_pfn, nr_pages);
WARN_ON_ONCE(ret);
+ /* update max_pfn, max_low_pfn and high_memory */
+ update_end_of_memory_vars(start, size);
+
return ret;
}
EXPORT_SYMBOL_GPL(arch_add_memory);
WARNING: multiple messages have this Message-ID (diff)
From: Shaohui Zheng <shaohui.zheng@intel.com>
To: Wu Fengguang <fengguang.wu@intel.com>,
akpm@linux-foundation.org, linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org, y-goto@jp.fujitsu.com,
haveblue@us.ibm.com, kamezawa.hiroyu@jp.fujitsu.com,
ak@linux.intel.com, hpa@kernel.org, haicheng.li@intel.com,
shaohui.zheng@linux.intel.com
Subject: Re: [Patch - Resend v4] Memory-Hotplug: Fix the bug on interface /dev/mem for 64-bit kernel
Date: Mon, 1 Feb 2010 20:22:02 +0800 [thread overview]
Message-ID: <20100201122202.GA2021@shaohui> (raw)
In-Reply-To: <20100201044124.GA29097@localhost>
[-- Attachment #1: Type: text/plain, Size: 2416 bytes --]
On Mon, Feb 01, 2010 at 12:41:24PM +0800, Wu Fengguang wrote:
> Shaohui,
>
> Some style nitpicks..
>
> > #ifdef CONFIG_MEMORY_HOTPLUG
> > +/**
>
> Should use /* here.
Agree.
>
> > + * After memory hotplug, the variable max_pfn, max_low_pfn and high_memory will
> > + * be affected, it will be updated in this function.
> > + */
> > +static inline void __meminit update_end_of_memory_vars(u64 start,
>
> The "inline" and "__meminit" are both redundant here.
will remove both.
>
> > + max_low_pfn = max_pfn = end_pfn;
>
> One assignment per line is preferred.
will change to 2 statements.
>
> Thanks,
> Fengguang
Memory-Hotplug: Fix the bug on interface /dev/mem for 64-bit kernel
The new added memory can not be access by interface /dev/mem, because we do not
update the variables high_memory, max_pfn and max_low_pfn.
Add a function update_end_of_memory_vars to update these variables for 64-bit
kernel.
CC: Andi Kleen <ak@linux.intel.com>
CC: Li Haicheng <haicheng.li@intel.com>
Reviewed-by: Wu Fengguang <fengguang.wu@intel.com>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Shaohui Zheng <shaohui.zheng@intel.com>
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 5198b9b..e1c9202 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -49,6 +49,7 @@
#include <asm/numa.h>
#include <asm/cacheflush.h>
#include <asm/init.h>
+#include <linux/bootmem.h>
static unsigned long dma_reserve __initdata;
@@ -616,6 +617,21 @@ void __init paging_init(void)
*/
#ifdef CONFIG_MEMORY_HOTPLUG
/*
+ * After memory hotplug, the variables max_pfn, max_low_pfn and high_memory will
+ * be affected, they will be updated in this function.
+ */
+static void update_end_of_memory_vars(u64 start, u64 size)
+{
+ unsigned long end_pfn = PFN_UP(start + size);
+
+ if (end_pfn > max_pfn) {
+ max_pfn = end_pfn;
+ max_low_pfn = end_pfn;
+ high_memory = (void *)__va(max_pfn * PAGE_SIZE - 1) + 1;
+ }
+}
+
+/*
* Memory is added always to NORMAL zone. This means you will never get
* additional DMA/DMA32 memory.
*/
@@ -634,6 +650,9 @@ int arch_add_memory(int nid, u64 start, u64 size)
ret = __add_pages(nid, zone, start_pfn, nr_pages);
WARN_ON_ONCE(ret);
+ /* update max_pfn, max_low_pfn and high_memory */
+ update_end_of_memory_vars(start, size);
+
return ret;
}
EXPORT_SYMBOL_GPL(arch_add_memory);
--
Thanks & Regards,
Shaohui
[-- Attachment #2: memory-hotplug-fix-the-bug-on-interface-dev-mem-v5.patch --]
[-- Type: text/x-diff, Size: 1762 bytes --]
Memory-Hotplug: Fix the bug on interface /dev/mem for 64-bit kernel
The new added memory can not be access by interface /dev/mem, because we do not
update the variables high_memory, max_pfn and max_low_pfn.
Add a function update_end_of_memory_vars to update these variables for 64-bit
kernel.
CC: Andi Kleen <ak@linux.intel.com>
CC: Li Haicheng <haicheng.li@intel.com>
Reviewed-by: Wu Fengguang <fengguang.wu@intel.com>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Shaohui Zheng <shaohui.zheng@intel.com>
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 5198b9b..e1c9202 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -49,6 +49,7 @@
#include <asm/numa.h>
#include <asm/cacheflush.h>
#include <asm/init.h>
+#include <linux/bootmem.h>
static unsigned long dma_reserve __initdata;
@@ -616,6 +617,21 @@ void __init paging_init(void)
*/
#ifdef CONFIG_MEMORY_HOTPLUG
/*
+ * After memory hotplug, the variables max_pfn, max_low_pfn and high_memory will
+ * be affected, they will be updated in this function.
+ */
+static void update_end_of_memory_vars(u64 start, u64 size)
+{
+ unsigned long end_pfn = PFN_UP(start + size);
+
+ if (end_pfn > max_pfn) {
+ max_pfn = end_pfn;
+ max_low_pfn = end_pfn;
+ high_memory = (void *)__va(max_pfn * PAGE_SIZE - 1) + 1;
+ }
+}
+
+/*
* Memory is added always to NORMAL zone. This means you will never get
* additional DMA/DMA32 memory.
*/
@@ -634,6 +650,9 @@ int arch_add_memory(int nid, u64 start, u64 size)
ret = __add_pages(nid, zone, start_pfn, nr_pages);
WARN_ON_ONCE(ret);
+ /* update max_pfn, max_low_pfn and high_memory */
+ update_end_of_memory_vars(start, size);
+
return ret;
}
EXPORT_SYMBOL_GPL(arch_add_memory);
next prev parent reply other threads:[~2010-02-01 12:22 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-01 4:12 [Patch - Resend v4] Memory-Hotplug: Fix the bug on interface /dev/mem for 64-bit kernel Shaohui Zheng
2010-02-01 4:41 ` Wu Fengguang
2010-02-01 4:41 ` Wu Fengguang
2010-02-01 12:22 ` Shaohui Zheng [this message]
2010-02-01 12:22 ` 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=20100201122202.GA2021@shaohui \
--to=shaohui.zheng@intel.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=fengguang.wu@intel.com \
--cc=haicheng.li@intel.com \
--cc=haveblue@us.ibm.com \
--cc=hpa@kernel.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=shaohui.zheng@linux.intel.com \
--cc=y-goto@jp.fujitsu.com \
/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.