Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef __LINUX_BOOTMEM_INFO_H
0003 #define __LINUX_BOOTMEM_INFO_H
0004 
0005 #include <linux/mm.h>
0006 
0007 /*
0008  * Types for free bootmem stored in page->lru.next. These have to be in
0009  * some random range in unsigned long space for debugging purposes.
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  * Any memory allocated via the memblock allocator and not via the
0028  * buddy will be marked reserved already in the memmap. For those
0029  * pages, we can call this function to free it to buddy allocator.
0030  */
0031 static inline void free_bootmem_page(struct page *page)
0032 {
0033     unsigned long magic = page->index;
0034 
0035     /*
0036      * The reserve_bootmem_region sets the reserved flag on bootmem
0037      * pages.
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 /* __LINUX_BOOTMEM_INFO_H */