diff options
author | Dave Hansen <haveblue@us.ibm.com> | 2007-01-11 02:15:30 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2007-01-11 21:18:20 -0500 |
commit | a2f3aa02576632cdb60bd3de1f4bf55e9ac65604 (patch) | |
tree | 2b9b73675de73866fbd219fab5bf2d804e6817b1 /include/linux/mmzone.h | |
parent | 47a4d5be7c50b2e9b905abbe2b97dc87051c5a44 (diff) |
[PATCH] Fix sparsemem on Cell
Fix an oops experienced on the Cell architecture when init-time functions,
early_*(), are called at runtime. It alters the call paths to make sure
that the callers explicitly say whether the call is being made on behalf of
a hotplug even, or happening at boot-time.
It has been compile tested on ppc64, ia64, s390, i386 and x86_64.
Acked-by: Arnd Bergmann <arndb@de.ibm.com>
Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
Cc: Yasunori Goto <y-goto@jp.fujitsu.com>
Acked-by: Andy Whitcroft <apw@shadowen.org>
Cc: Christoph Lameter <clameter@engr.sgi.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux/mmzone.h')
-rw-r--r-- | include/linux/mmzone.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index e339a7345f25..b262f47961fb 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
@@ -450,9 +450,13 @@ void build_all_zonelists(void); | |||
450 | void wakeup_kswapd(struct zone *zone, int order); | 450 | void wakeup_kswapd(struct zone *zone, int order); |
451 | int zone_watermark_ok(struct zone *z, int order, unsigned long mark, | 451 | int zone_watermark_ok(struct zone *z, int order, unsigned long mark, |
452 | int classzone_idx, int alloc_flags); | 452 | int classzone_idx, int alloc_flags); |
453 | 453 | enum memmap_context { | |
454 | MEMMAP_EARLY, | ||
455 | MEMMAP_HOTPLUG, | ||
456 | }; | ||
454 | extern int init_currently_empty_zone(struct zone *zone, unsigned long start_pfn, | 457 | extern int init_currently_empty_zone(struct zone *zone, unsigned long start_pfn, |
455 | unsigned long size); | 458 | unsigned long size, |
459 | enum memmap_context context); | ||
456 | 460 | ||
457 | #ifdef CONFIG_HAVE_MEMORY_PRESENT | 461 | #ifdef CONFIG_HAVE_MEMORY_PRESENT |
458 | void memory_present(int nid, unsigned long start, unsigned long end); | 462 | void memory_present(int nid, unsigned long start, unsigned long end); |