1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef __LINUX_GFP_H 2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __LINUX_GFP_H 3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/mmzone.h> 5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/stddef.h> 6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/linkage.h> 7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct vm_area_struct; 9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * GFP bitmasks.. 12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low three bits) */ 14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_DMA ((__force gfp_t)0x01u) 15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_HIGHMEM ((__force gfp_t)0x02u) 16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef CONFIG_DMA_IS_DMA32 17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_DMA32 ((__force gfp_t)0x01) /* ZONE_DMA is ZONE_DMA32 */ 18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif BITS_PER_LONG < 64 19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_DMA32 ((__force gfp_t)0x00) /* ZONE_NORMAL is ZONE_DMA32 */ 20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else 21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_DMA32 ((__force gfp_t)0x04) /* Has own ZONE_DMA32 */ 22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Action modifiers - doesn't change the zoning 26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * __GFP_REPEAT: Try hard to allocate the memory, but the allocation attempt 28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * _might_ fail. This depends upon the particular VM implementation. 29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * __GFP_NOFAIL: The VM implementation _must_ retry infinitely: the caller 31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * cannot handle allocation failures. 32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * __GFP_NORETRY: The VM implementation must not retry indefinitely. 34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_WAIT ((__force gfp_t)0x10u) /* Can wait and reschedule? */ 36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_HIGH ((__force gfp_t)0x20u) /* Should access emergency pools? */ 37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_IO ((__force gfp_t)0x40u) /* Can start physical IO? */ 38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_FS ((__force gfp_t)0x80u) /* Can call down to low-level FS? */ 39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_COLD ((__force gfp_t)0x100u) /* Cache-cold page required */ 40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_NOWARN ((__force gfp_t)0x200u) /* Suppress page allocation failure warning */ 41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_REPEAT ((__force gfp_t)0x400u) /* Retry the allocation. Might fail */ 42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_NOFAIL ((__force gfp_t)0x800u) /* Retry for ever. Cannot fail */ 43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_NORETRY ((__force gfp_t)0x1000u)/* Do not retry. Might fail */ 44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_NO_GROW ((__force gfp_t)0x2000u)/* Slab internal usage */ 45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_COMP ((__force gfp_t)0x4000u)/* Add compound page metadata */ 46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_ZERO ((__force gfp_t)0x8000u)/* Return zeroed page on success */ 47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_NOMEMALLOC ((__force gfp_t)0x10000u) /* Don't use emergency reserves */ 48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_HARDWALL ((__force gfp_t)0x20000u) /* Enforce hardwall cpuset memory allocs */ 49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_BITS_SHIFT 20 /* Room for 20 __GFP_FOO bits */ 51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) 52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* if you forget to add the bitmask here kernel will crash, period */ 54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GFP_LEVEL_MASK (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_FS| \ 55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __GFP_COLD|__GFP_NOWARN|__GFP_REPEAT| \ 56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __GFP_NOFAIL|__GFP_NORETRY|__GFP_NO_GROW|__GFP_COMP| \ 57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __GFP_NOMEMALLOC|__GFP_HARDWALL) 58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This equals 0, but use constants in case they ever change */ 60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GFP_NOWAIT (GFP_ATOMIC & ~__GFP_HIGH) 61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* GFP_ATOMIC means both !wait (__GFP_WAIT not set) and use emergency pool */ 62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GFP_ATOMIC (__GFP_HIGH) 63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GFP_NOIO (__GFP_WAIT) 64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GFP_NOFS (__GFP_WAIT | __GFP_IO) 65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS) 66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GFP_USER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL) 67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GFP_HIGHUSER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL | \ 68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __GFP_HIGHMEM) 69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Flag - indicates that the buffer will be suitable for DMA. Ignored on some 71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru platforms, used as appropriate on others */ 72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GFP_DMA __GFP_DMA 74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 4GB DMA on some platforms */ 76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GFP_DMA32 __GFP_DMA32 77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 79c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline int gfp_zone(gfp_t gfp) 80c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 81c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int zone = GFP_ZONEMASK & (__force int) gfp; 82c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru BUG_ON(zone >= GFP_ZONETYPES); 83c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return zone; 84c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 85c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 86c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 87c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * There is only one page-allocator function, and two main namespaces to 88c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * it. The alloc_page*() variants return 'struct page *' and as such 89c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * can allocate highmem pages, the *get*page*() variants return 90c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * virtual kernel addresses to the allocated page(s). 91c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 92c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 93c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 94c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * We get the zone list from the current node and the gfp_mask. 95c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * This zone list contains a maximum of MAXNODES*MAX_NR_ZONES zones. 96c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 97c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * For the normal case of non-DISCONTIGMEM systems the NODE_DATA() gets 98c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * optimized to &contig_page_data at compile-time. 99c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 101c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef HAVE_ARCH_FREE_PAGE 102c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void arch_free_page(struct page *page, int order) { } 103c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 104c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 105c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct page * 106c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste QueruFASTCALL(__alloc_pages(gfp_t, unsigned int, struct zonelist *)); 107c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 108c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask, 109c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned int order) 110c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 111c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru if (unlikely(order >= MAX_ORDER)) 112c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return NULL; 113c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 114c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* Unknown node is current node */ 115c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru if (nid < 0) 116c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru nid = numa_node_id(); 117c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 118c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return __alloc_pages(gfp_mask, order, 119c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru NODE_DATA(nid)->node_zonelists + gfp_zone(gfp_mask)); 120c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 121c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 122c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef CONFIG_NUMA 123c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct page *alloc_pages_current(gfp_t gfp_mask, unsigned order); 124c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 125c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline struct page * 126c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querualloc_pages(gfp_t gfp_mask, unsigned int order) 127c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 128c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru if (unlikely(order >= MAX_ORDER)) 129c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return NULL; 130c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 131c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return alloc_pages_current(gfp_mask, order); 132c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 133c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct page *alloc_page_vma(gfp_t gfp_mask, 134c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct vm_area_struct *vma, unsigned long addr); 135c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else 136c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define alloc_pages(gfp_mask, order) \ 137c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru alloc_pages_node(numa_node_id(), gfp_mask, order) 138c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define alloc_page_vma(gfp_mask, vma, addr) alloc_pages(gfp_mask, 0) 139c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 140c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0) 141c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 142c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern unsigned long FASTCALL(__get_free_pages(gfp_t gfp_mask, unsigned int order)); 143c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern unsigned long FASTCALL(get_zeroed_page(gfp_t gfp_mask)); 144c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 145c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __get_free_page(gfp_mask) \ 146c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __get_free_pages((gfp_mask),0) 147c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 148c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __get_dma_pages(gfp_mask, order) \ 149c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __get_free_pages((gfp_mask) | GFP_DMA,(order)) 150c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 151c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void FASTCALL(__free_pages(struct page *page, unsigned int order)); 152c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void FASTCALL(free_pages(unsigned long addr, unsigned int order)); 153c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void FASTCALL(free_hot_page(struct page *page)); 154c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void FASTCALL(free_cold_page(struct page *page)); 155c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 156c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __free_page(page) __free_pages((page), 0) 157c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define free_page(addr) free_pages((addr),0) 158c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 159c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruvoid page_alloc_init(void); 160c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef CONFIG_NUMA 161c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruvoid drain_node_pages(int node); 162c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else 163c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void drain_node_pages(int node) { }; 164c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 165c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 166c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* __LINUX_GFP_H */ 167