1 /* SPDX-License-Identifier: GPL-2.0 */ 2 3 #ifndef _LINUX_PAGE_FRAG_CACHE_H 4 #define _LINUX_PAGE_FRAG_CACHE_H 5 6 #include <linux/log2.h> 7 #include <linux/mm_types_task.h> 8 #include <linux/types.h> 9 10 static inline void page_frag_cache_init(struct page_frag_cache *nc) 11 { 12 nc->va = NULL; 13 } 14 15 static inline bool page_frag_cache_is_pfmemalloc(struct page_frag_cache *nc) 16 { 17 return !!nc->pfmemalloc; 18 } 19 20 void page_frag_cache_drain(struct page_frag_cache *nc); 21 void __page_frag_cache_drain(struct page *page, unsigned int count); 22 void *__page_frag_alloc_align(struct page_frag_cache *nc, unsigned int fragsz, 23 gfp_t gfp_mask, unsigned int align_mask); 24 25 static inline void *page_frag_alloc_align(struct page_frag_cache *nc, 26 unsigned int fragsz, gfp_t gfp_mask, 27 unsigned int align) 28 { 29 WARN_ON_ONCE(!is_power_of_2(align)); 30 return __page_frag_alloc_align(nc, fragsz, gfp_mask, -align); 31 } 32 33 static inline void *page_frag_alloc(struct page_frag_cache *nc, 34 unsigned int fragsz, gfp_t gfp_mask) 35 { 36 return __page_frag_alloc_align(nc, fragsz, gfp_mask, ~0u); 37 } 38 39 void page_frag_free(void *addr); 40 41 #endif 42