在内核中,gfp 是 get free pages 的缩写,因此 gfp_t 类型的参数往往出现在内存分配函数中,比如 __get_free_pages() 或者 kmalloc(),它用来告诉内存分配函数在分配过程中可以做什么,以及不可以做什么,比如 GFP_ATOMIC 表示内存分配过程中不能 sleep。更多 GFP_XXX 的定义可以参看 include/linux/gfp.h 文件。
#define GFP_ATOMIC (__GFP_HIGH|__GFP_ATOMIC|__GFP_KSWAPD_RECLAIM)
#define GFP_KERNEL (__GFP_RECLAIM | __GFP_IO | __GFP_FS)
#define GFP_KERNEL_ACCOUNT (GFP_KERNEL | __GFP_ACCOUNT)
#define GFP_NOWAIT (__GFP_KSWAPD_RECLAIM)
#define GFP_NOIO (__GFP_RECLAIM)
#define GFP_NOFS (__GFP_RECLAIM | __GFP_IO)
#define GFP_USER (__GFP_RECLAIM | __GFP_IO | __GFP_FS | __GFP_HARDWALL)