我试图详细了解页面分配程序,并在下面找到了序列:
__ alloc_pages_nodemask()
- > get_page_from_freelist()
- > buffered_rmqueue()
- > __rmqueue()
- > __rmqueue_smallest()//如果这将失败,调用将转到__rmqueue_fallback()
__rmqueue_fallback()
api取决于fallbacks[][]
以下。
static int fallbacks[MIGRATE_TYPES][4] = {
[MIGRATE_UNMOVABLE] = { MIGRATE_RECLAIMABLE, MIGRATE_MOVABLE, MIGRATE_RESERVE },
[MIGRATE_RECLAIMABLE] = { MIGRATE_UNMOVABLE, MIGRATE_MOVABLE, MIGRATE_RESERVE },
#ifdef CONFIG_CMA
[MIGRATE_MOVABLE] = { MIGRATE_CMA, MIGRATE_RECLAIMABLE, MIGRATE_UNMOVABLE, MIGRATE_RESERVE },
[MIGRATE_CMA] = { MIGRATE_RESERVE }, /* Never used */
#else
[MIGRATE_MOVABLE] = { MIGRATE_RECLAIMABLE, MIGRATE_UNMOVABLE, MIGRATE_RESERVE },
#endif
[MIGRATE_RESERVE] = { MIGRATE_RESERVE }, /* Never used */
#ifdef CONFIG_MEMORY_ISOLATION
[MIGRATE_ISOLATE] = { MIGRATE_RESERVE }, /* Never used */
#endif
};
请详细说明数组的用法。
我从声明上方的评论中找到了这个:
"此数组描述了订单列表在免费时回落 所需迁移类型的列表已耗尽。"