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 /include | |
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 'include')
-rw-r--r-- | include/linux/hugetlb.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index b2c17f62cacb..9a71d4cc88c8 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
@@ -39,6 +39,7 @@ void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed); | |||
39 | extern unsigned long hugepages_treat_as_movable; | 39 | extern unsigned long hugepages_treat_as_movable; |
40 | extern const unsigned long hugetlb_zero, hugetlb_infinity; | 40 | extern const unsigned long hugetlb_zero, hugetlb_infinity; |
41 | extern int sysctl_hugetlb_shm_group; | 41 | extern int sysctl_hugetlb_shm_group; |
42 | extern struct list_head huge_boot_pages; | ||
42 | 43 | ||
43 | /* arch callbacks */ | 44 | /* arch callbacks */ |
44 | 45 | ||
@@ -188,6 +189,14 @@ struct hstate { | |||
188 | char name[HSTATE_NAME_LEN]; | 189 | char name[HSTATE_NAME_LEN]; |
189 | }; | 190 | }; |
190 | 191 | ||
192 | struct huge_bootmem_page { | ||
193 | struct list_head list; | ||
194 | struct hstate *hstate; | ||
195 | }; | ||
196 | |||
197 | /* arch callback */ | ||
198 | int __init alloc_bootmem_huge_page(struct hstate *h); | ||
199 | |||
191 | void __init hugetlb_add_hstate(unsigned order); | 200 | void __init hugetlb_add_hstate(unsigned order); |
192 | struct hstate *size_to_hstate(unsigned long size); | 201 | struct hstate *size_to_hstate(unsigned long size); |
193 | 202 | ||
@@ -256,6 +265,7 @@ static inline struct hstate *page_hstate(struct page *page) | |||
256 | 265 | ||
257 | #else | 266 | #else |
258 | struct hstate {}; | 267 | struct hstate {}; |
268 | #define alloc_bootmem_huge_page(h) NULL | ||
259 | #define hstate_file(f) NULL | 269 | #define hstate_file(f) NULL |
260 | #define hstate_vma(v) NULL | 270 | #define hstate_vma(v) NULL |
261 | #define hstate_inode(i) NULL | 271 | #define hstate_inode(i) NULL |