public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] sparsemem interaction with memory add bug fixes
@ 2006-04-12  2:33 Mike Kravetz
  2006-04-12  9:32 ` [Lhms-devel] " jschopp
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Mike Kravetz @ 2006-04-12  2:33 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Arnd Bergmann, Joel H Schopp, Dave Hansen, Andy Whitcroft,
	lhms-devel, linux-kernel

This patch fixes two bugs with the way sparsemem interacts with memory
add.  They are:
- memory leak if memmap for section already exists
- calling alloc_bootmem_node() after boot
These bugs were discovered and a first cut at the fixes were provided by
Arnd Bergmann <arnd@arndb.de> and Joel Schopp <jschopp@us.ibm.com>.

Signed-off-by: Mike Kravetz <kravetz@us.ibm.com>

diff -Naupr linux-2.6.17-rc1-mm2/mm/sparse.c linux-2.6.17-rc1-mm2.work/mm/sparse.c
--- linux-2.6.17-rc1-mm2/mm/sparse.c	2006-04-03 03:22:10.000000000 +0000
+++ linux-2.6.17-rc1-mm2.work/mm/sparse.c	2006-04-11 23:32:10.000000000 +0000
@@ -32,7 +32,10 @@ static struct mem_section *sparse_index_
 	unsigned long array_size = SECTIONS_PER_ROOT *
 				   sizeof(struct mem_section);
 
-	section = alloc_bootmem_node(NODE_DATA(nid), array_size);
+	if (system_state == SYSTEM_RUNNING)
+		section = kmalloc_node(array_size, GFP_KERNEL, nid);
+	else
+		section = alloc_bootmem_node(NODE_DATA(nid), array_size);
 
 	if (section)
 		memset(section, 0, array_size);
@@ -281,9 +284,9 @@ int sparse_add_one_section(struct zone *
 
 	ret = sparse_init_one_section(ms, section_nr, memmap);
 
+out:
 	if (ret <= 0)
 		__kfree_section_memmap(memmap, nr_pages);
-out:
 	pgdat_resize_unlock(pgdat, &flags);
 	return ret;
 }

^ permalink raw reply	[flat|nested] 7+ messages in thread
* [PATCH] sparsemem interaction with memory add bug fixes
@ 2006-04-12 17:19 Mike Kravetz
  0 siblings, 0 replies; 7+ messages in thread
From: Mike Kravetz @ 2006-04-12 17:19 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Arnd Bergmann, Joel H Schopp, Dave Hansen, Andy Whitcroft,
	lhms-devel, linux-kernel

Updated version of patch with Andy's suggestion.

Fix two bugs with the way sparsemem interacts with memory add:
- memory leak if memmap for section already exists
- calling alloc_bootmem_node() after boot

Signed-off-by: Joel Schopp <jschopp@austin.ibm.com>
Signed-off-by: Andy Whitcroft <apw@shadowen.org>
Signed-off-by: Mike Kravetz <kravetz@us.ibm.com>

diff -Naupr linux-2.6.17-rc1-mm2/mm/sparse.c linux-2.6.17-rc1-mm2.work/mm/sparse.c
--- linux-2.6.17-rc1-mm2/mm/sparse.c	2006-04-03 03:22:10.000000000 +0000
+++ linux-2.6.17-rc1-mm2.work/mm/sparse.c	2006-04-12 17:21:11.000000000 +0000
@@ -32,7 +32,10 @@ static struct mem_section *sparse_index_
 	unsigned long array_size = SECTIONS_PER_ROOT *
 				   sizeof(struct mem_section);
 
-	section = alloc_bootmem_node(NODE_DATA(nid), array_size);
+	if (system_state == SYSTEM_RUNNING)
+		section = kmalloc_node(array_size, GFP_KERNEL, nid);
+	else
+		section = alloc_bootmem_node(NODE_DATA(nid), array_size);
 
 	if (section)
 		memset(section, 0, array_size);
@@ -281,9 +284,9 @@ int sparse_add_one_section(struct zone *
 
 	ret = sparse_init_one_section(ms, section_nr, memmap);
 
-	if (ret <= 0)
-		__kfree_section_memmap(memmap, nr_pages);
 out:
 	pgdat_resize_unlock(pgdat, &flags);
+	if (ret <= 0)
+		__kfree_section_memmap(memmap, nr_pages);
 	return ret;
 }

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

end of thread, other threads:[~2006-04-12 17:19 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-04-12  2:33 [PATCH] sparsemem interaction with memory add bug fixes Mike Kravetz
2006-04-12  9:32 ` [Lhms-devel] " jschopp
2006-04-12 13:22 ` Andy Whitcroft
2006-04-12 13:43   ` jschopp
2006-04-12 14:46 ` Dave Hansen
2006-04-12 16:05   ` [Lhms-devel] " Mike Kravetz
  -- strict thread matches above, loose matches on Subject: below --
2006-04-12 17:19 Mike Kravetz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox