diff options
authorChristoph Lameter <clameter@engr.sgi.com>2005-06-22 20:26:07 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-22 20:42:32 -0700
commitb7c84c6ada2be942eca6722edb2cfaad412cd5de (patch)
parenta4936044001694f033fe4ea94d6034d51a6b465c (diff)
[PATCH] boot_pageset must not be freed.
The boot_pageset needs to be preserved for hotplugging and for off line processors and nodes. Otherwise pointers will point into memory that has now a different use. /proc/zoneinfo is currently showing strange results if processors / nodes are not present. Signed-off-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
1 files changed, 9 insertions, 2 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 206920796f5..559336de968 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1742,10 +1742,17 @@ inline void setup_pageset(struct per_cpu_pageset *p, unsigned long batch)
* with interrupts disabled.
* Some NUMA counter updates may also be caught by the boot pagesets.
- * These will be discarded when bootup is complete.
+ *
+ * The boot_pagesets must be kept even after bootup is complete for
+ * unused processors and/or zones. They do play a role for bootstrapping
+ * hotplugged processors.
+ *
+ * zoneinfo_show() and maybe other functions do
+ * not check if the processor is online before following the pageset pointer.
+ * Other parts of the kernel may not check if the zone is available.
static struct per_cpu_pageset
- boot_pageset[NR_CPUS] __initdata;
+ boot_pageset[NR_CPUS];
* Dynamically allocate memory for the