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