linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] memory hotplug: avoid double registration on ia64 platform
@ 2012-08-17  7:52 qiuxishi
  2012-08-17 13:24 ` Greg KH
  0 siblings, 1 reply; 2+ messages in thread
From: qiuxishi @ 2012-08-17  7:52 UTC (permalink / raw)
  To: akpm, mgorman, tony.luck, yinghai, jiang.liu
  Cc: qiuxishi, bessel.wang, wujianguo, paul.gortmaker,
	kamezawa.hiroyu, kosaki.motohiro, rientjes, minchan, chenkeping,
	linux-mm, stable, linux-kernel, liuj97

From: Xishi Qiu <qiuxishi@huawei.com>

Hi all,
There may be have a bug when register section info. For example, on
an Itanium platform, the pfn range of node0 includes the other nodes.
So when hot remove memory, we can't free the memmap's page because
page_count() is 2 after put_page_bootmem().

sparse_remove_one_section()->free_section_usemap()->free_map_bootmem()
->put_page_bootmem()

pgdat0: start_pfn=0x100,    spanned_pfn=0x20fb00, present_pfn=0x7f8a3, => 0x100-0x20fc00
pgdat1: start_pfn=0x80000,  spanned_pfn=0x80000,  present_pfn=0x80000, => 0x80000-0x100000
pgdat2: start_pfn=0x100000, spanned_pfn=0x80000,  present_pfn=0x80000, => 0x100000-0x180000
pgdat3: start_pfn=0x180000, spanned_pfn=0x80000,  present_pfn=0x80000, => 0x180000-0x200000


Signed-off-by: Xishi Qiu <qiuxishi@huawei.com>
---
 mm/memory_hotplug.c |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index 2adbcac..cf493c7 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -126,9 +126,6 @@ static void register_page_bootmem_info_section(unsigned long start_pfn)
 	struct mem_section *ms;
 	struct page *page, *memmap;

-	if (!pfn_valid(start_pfn))
-		return;
-
 	section_nr = pfn_to_section_nr(start_pfn);
 	ms = __nr_to_section(section_nr);

@@ -187,9 +184,10 @@ void register_page_bootmem_info_node(struct pglist_data *pgdat)
 	end_pfn = pfn + pgdat->node_spanned_pages;

 	/* register_section info */
-	for (; pfn < end_pfn; pfn += PAGES_PER_SECTION)
-		register_page_bootmem_info_section(pfn);
-
+	for (; pfn < end_pfn; pfn += PAGES_PER_SECTION) {
+		if (pfn_valid(pfn) && (pfn_to_nid(pfn) == node))
+			register_page_bootmem_info_section(pfn);
+	}
 }
 #endif /* !CONFIG_SPARSEMEM_VMEMMAP */

-- 1.7.1

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] memory hotplug: avoid double registration on ia64 platform
  2012-08-17  7:52 [PATCH] memory hotplug: avoid double registration on ia64 platform qiuxishi
@ 2012-08-17 13:24 ` Greg KH
  0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2012-08-17 13:24 UTC (permalink / raw)
  To: qiuxishi
  Cc: akpm, mgorman, tony.luck, yinghai, jiang.liu, qiuxishi,
	bessel.wang, wujianguo, paul.gortmaker, kamezawa.hiroyu,
	kosaki.motohiro, rientjes, minchan, chenkeping, linux-mm, stable,
	linux-kernel, liuj97

On Fri, Aug 17, 2012 at 03:52:47PM +0800, qiuxishi wrote:
> From: Xishi Qiu <qiuxishi@huawei.com>
> 
> Hi all,
> There may be have a bug when register section info. For example, on
> an Itanium platform, the pfn range of node0 includes the other nodes.
> So when hot remove memory, we can't free the memmap's page because
> page_count() is 2 after put_page_bootmem().
> 
> sparse_remove_one_section()->free_section_usemap()->free_map_bootmem()
> ->put_page_bootmem()
> 
> pgdat0: start_pfn=0x100,    spanned_pfn=0x20fb00, present_pfn=0x7f8a3, => 0x100-0x20fc00
> pgdat1: start_pfn=0x80000,  spanned_pfn=0x80000,  present_pfn=0x80000, => 0x80000-0x100000
> pgdat2: start_pfn=0x100000, spanned_pfn=0x80000,  present_pfn=0x80000, => 0x100000-0x180000
> pgdat3: start_pfn=0x180000, spanned_pfn=0x80000,  present_pfn=0x80000, => 0x180000-0x200000
> 
> 
> Signed-off-by: Xishi Qiu <qiuxishi@huawei.com>
> ---
>  mm/memory_hotplug.c |   10 ++++------
>  1 files changed, 4 insertions(+), 6 deletions(-)

<formletter>

This is not the correct way to submit patches for inclusion in the
stable kernel tree.  Please read Documentation/stable_kernel_rules.txt
for how to do this properly.

</formletter>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-08-17 13:24 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-17  7:52 [PATCH] memory hotplug: avoid double registration on ia64 platform qiuxishi
2012-08-17 13:24 ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).