0001
0002 #ifndef __LINUX_BOOTMEM_INFO_H
0003 #define __LINUX_BOOTMEM_INFO_H
0004
0005 #include <linux/mm.h>
0006
0007
0008
0009
0010
0011 enum {
0012 MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE = 12,
0013 SECTION_INFO = MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE,
0014 MIX_SECTION_INFO,
0015 NODE_INFO,
0016 MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE = NODE_INFO,
0017 };
0018
0019 #ifdef CONFIG_HAVE_BOOTMEM_INFO_NODE
0020 void __init register_page_bootmem_info_node(struct pglist_data *pgdat);
0021
0022 void get_page_bootmem(unsigned long info, struct page *page,
0023 unsigned long type);
0024 void put_page_bootmem(struct page *page);
0025
0026
0027
0028
0029
0030
0031 static inline void free_bootmem_page(struct page *page)
0032 {
0033 unsigned long magic = page->index;
0034
0035
0036
0037
0038
0039 VM_BUG_ON_PAGE(page_ref_count(page) != 2, page);
0040
0041 if (magic == SECTION_INFO || magic == MIX_SECTION_INFO)
0042 put_page_bootmem(page);
0043 else
0044 VM_BUG_ON_PAGE(1, page);
0045 }
0046 #else
0047 static inline void register_page_bootmem_info_node(struct pglist_data *pgdat)
0048 {
0049 }
0050
0051 static inline void put_page_bootmem(struct page *page)
0052 {
0053 }
0054
0055 static inline void get_page_bootmem(unsigned long info, struct page *page,
0056 unsigned long type)
0057 {
0058 }
0059
0060 static inline void free_bootmem_page(struct page *page)
0061 {
0062 free_reserved_page(page);
0063 }
0064 #endif
0065
0066 #endif