查看文章 |
gfp_zone
2009-09-24 17:05
gfp_zone函数作用: 根据gfp flag确定选择哪一个zone来分配内存。 static inline enum zone_type gfp_zone(gfp_t flags) { enum zone_type z; int bit = flags & GFP_ZONEMASK; //获取zone相关的flag z = (GFP_ZONE_TABLE >> (bit * ZONES_SHIFT)) & ((1 << ZONES_SHIFT) - 1); /*这里用到了GFP_ZONE_TABLE。zone的最大值所占用的bit数位ZONES_SHIFT。flag有各种的组合,0到组合的最大值都分别对应一个zone值,也就是需要占用ZONES_SHIFT bit数。(bit * ZONES_SHIFT)就是指组合值bit对应在zone table里所占用bit数的起始值。((1 << ZONES_SHIFT) - 1)为ZONES_SHIFT个1。*/ if (__builtin_constant_p(bit)) BUILD_BUG_ON((GFP_ZONE_BAD >> bit) & 1); else { #ifdef CONFIG_DEBUG_VM BUG_ON((GFP_ZONE_BAD >> bit) & 1); #endif } return z; } |
最近读者: