diff options
author | Andi Kleen <ak@suse.de> | 2008-07-24 00:27:45 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-24 13:47:17 -0400 |
commit | b54bbf7b81170f03597c17dd0b559e3006bc9868 (patch) | |
tree | abc6b326e293d3a685d943956d32ab4038a90e1f | |
parent | 5ced66c901f1cf0b684feb15c2cd8b126e263d07 (diff) |
mm: introduce non panic alloc_bootmem
Straight forward variant of the existing __alloc_bootmem_node, only
subsequent patch when allocating giant hugepages at boot -- don't want to
panic if we can't allocate as many as the user asked for.
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Nick Piggin <npiggin@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | include/linux/bootmem.h | 4 | ||||
-rw-r--r-- | mm/bootmem.c | 12 |
2 files changed, 16 insertions, 0 deletions
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h index dd8fee6c46d9..f352c5f125b4 100644 --- a/include/linux/bootmem.h +++ b/include/linux/bootmem.h | |||
@@ -89,6 +89,10 @@ extern void *__alloc_bootmem_node(pg_data_t *pgdat, | |||
89 | unsigned long size, | 89 | unsigned long size, |
90 | unsigned long align, | 90 | unsigned long align, |
91 | unsigned long goal); | 91 | unsigned long goal); |
92 | extern void *__alloc_bootmem_node_nopanic(pg_data_t *pgdat, | ||
93 | unsigned long size, | ||
94 | unsigned long align, | ||
95 | unsigned long goal); | ||
92 | extern unsigned long init_bootmem_node(pg_data_t *pgdat, | 96 | extern unsigned long init_bootmem_node(pg_data_t *pgdat, |
93 | unsigned long freepfn, | 97 | unsigned long freepfn, |
94 | unsigned long startpfn, | 98 | unsigned long startpfn, |
diff --git a/mm/bootmem.c b/mm/bootmem.c index 4bc6ae2fbaa3..9ac972535fff 100644 --- a/mm/bootmem.c +++ b/mm/bootmem.c | |||
@@ -578,6 +578,18 @@ void * __init alloc_bootmem_section(unsigned long size, | |||
578 | } | 578 | } |
579 | #endif | 579 | #endif |
580 | 580 | ||
581 | void * __init __alloc_bootmem_node_nopanic(pg_data_t *pgdat, unsigned long size, | ||
582 | unsigned long align, unsigned long goal) | ||
583 | { | ||
584 | void *ptr; | ||
585 | |||
586 | ptr = alloc_bootmem_core(pgdat->bdata, size, align, goal, 0); | ||
587 | if (ptr) | ||
588 | return ptr; | ||
589 | |||
590 | return __alloc_bootmem_nopanic(size, align, goal); | ||
591 | } | ||
592 | |||
581 | #ifndef ARCH_LOW_ADDRESS_LIMIT | 593 | #ifndef ARCH_LOW_ADDRESS_LIMIT |
582 | #define ARCH_LOW_ADDRESS_LIMIT 0xffffffffUL | 594 | #define ARCH_LOW_ADDRESS_LIMIT 0xffffffffUL |
583 | #endif | 595 | #endif |