首先让我们看下__GFP_MOVABLE的定义
#define __GFP_MOVABLE ((__force gfp_t)___GFP_MOVABLE)
#define ___GFP_MOVABLE 0x08u
这个标志位在很多地方都有使用,如磁盘文件系统分配页缓存、用户态程序分配堆栈空间等。
那我们来看下,此类标志位是怎么影响页面分配的?
其余的先不分析,我们直接从分配物理页面的入口函数__alloc_pages_nodemask来分析。
在__alloc_pages_nodemask函数中,有个非常重要的变量---页分配上下文,具体初始化代码:
struct alloc_context ac = {
.high_zoneidx = gfp_zone(gfp_mask),
.zonelist = zonelist,
.nodemask = nodemask,
.migratetype = gfpflags_to_migratetype(gfp_mask),
};
在此上下文中,条用gfpflags_to_mi