diff options
author | Jon Tollefson <kniht@linux.vnet.ibm.com> | 2008-07-24 00:27:52 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-24 13:47:19 -0400 |
commit | 53ba51d21d6e048424ab8aadfebdb1f25ae07b60 (patch) | |
tree | 0d5c5ee420e85f3a86ff7fe9151e7c3d547e7de1 /mm/hugetlb.c | |
parent | e11bfbfcb08ef4223b863799897c19cdf7c5bc00 (diff) |
hugetlb: allow arch overridden hugepage allocation
Allow alloc_bootmem_huge_page() to be overridden by architectures that
can't always use bootmem. This requires huge_boot_pages to be available
for use by this function.
This is required for powerpc 16G pages, which have to be reserved prior to
boot-time. The location of these pages are indicated in the device tree.
Acked-by: Adam Litke <agl@us.ibm.com>
Signed-off-by: Jon Tollefson <kniht@linux.vnet.ibm.com>
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>
Diffstat (limited to 'mm/hugetlb.c')
-rw-r--r-- | mm/hugetlb.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 2a2f6e869401..3e1506b808a3 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -31,6 +31,8 @@ static int max_hstate; | |||
31 | unsigned int default_hstate_idx; | 31 | unsigned int default_hstate_idx; |
32 | struct hstate hstates[HUGE_MAX_HSTATE]; | 32 | struct hstate hstates[HUGE_MAX_HSTATE]; |
33 | 33 | ||
34 | __initdata LIST_HEAD(huge_boot_pages); | ||
35 | |||
34 | /* for command line parsing */ | 36 | /* for command line parsing */ |
35 | static struct hstate * __initdata parsed_hstate; | 37 | static struct hstate * __initdata parsed_hstate; |
36 | static unsigned long __initdata default_hstate_max_huge_pages; | 38 | static unsigned long __initdata default_hstate_max_huge_pages; |
@@ -925,14 +927,7 @@ static struct page *alloc_huge_page(struct vm_area_struct *vma, | |||
925 | return page; | 927 | return page; |
926 | } | 928 | } |
927 | 929 | ||
928 | static __initdata LIST_HEAD(huge_boot_pages); | 930 | __attribute__((weak)) int alloc_bootmem_huge_page(struct hstate *h) |
929 | |||
930 | struct huge_bootmem_page { | ||
931 | struct list_head list; | ||
932 | struct hstate *hstate; | ||
933 | }; | ||
934 | |||
935 | static int __init alloc_bootmem_huge_page(struct hstate *h) | ||
936 | { | 931 | { |
937 | struct huge_bootmem_page *m; | 932 | struct huge_bootmem_page *m; |
938 | int nr_nodes = nodes_weight(node_online_map); | 933 | int nr_nodes = nodes_weight(node_online_map); |