- 追加された行はこの色です。
- 削除された行はこの色です。
*参照元 [#lc32b544]
#backlinks
*説明 [#eecfca4f]
-パス: [[linux-4.4.1/include/linux/gfp.h]]
-FIXME: これは何?
--説明
**引数 [#nf4ff30f]
-const gfp_t gfp_flags
--
--[[linux-4.4.1/gfp_t]]
**返り値 [#i228b4c9]
-int
--
**参考 [#b5e80a1a]
enum {
MIGRATE_UNMOVABLE,
MIGRATE_MOVABLE,
MIGRATE_RECLAIMABLE,
MIGRATE_PCPTYPES, /* the number of types on the pcp lists */
MIGRATE_HIGHATOMIC = MIGRATE_PCPTYPES,
#ifdef CONFIG_CMA
/*
* MIGRATE_CMA migration type is designed to mimic the way
* ZONE_MOVABLE works. Only movable pages can be allocated
* from MIGRATE_CMA pageblocks and page allocator never
* implicitly change migration type of MIGRATE_CMA pageblock.
*
* The way to use it is to change migratetype of a range of
* pageblocks to MIGRATE_CMA which can be done by
* __free_pageblock_cma() function. What is important though
* is that a range of pageblocks must be aligned to
* MAX_ORDER_NR_PAGES should biggest page be bigger then
* a single pageblock.
*/
MIGRATE_CMA,
#endif
#ifdef CONFIG_MEMORY_ISOLATION
MIGRATE_ISOLATE, /* can't allocate from here */
#endif
MIGRATE_TYPES
};
*実装 [#w1a5880b]
/* Convert GFP flags to their corresponding migrate type */
#define GFP_MOVABLE_MASK (__GFP_RECLAIMABLE|__GFP_MOVABLE)
#define GFP_MOVABLE_SHIFT 3
static inline int gfpflags_to_migratetype(const gfp_t gfp_flags)
{
VM_WARN_ON((gfp_flags & GFP_MOVABLE_MASK) == GFP_MOVABLE_MASK);
BUILD_BUG_ON((1UL << GFP_MOVABLE_SHIFT) != ___GFP_MOVABLE);
BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
-
--[[linux-4.4.1/VM_WARN_ON()]]
--[[linux-4.4.1/BUILD_BUG_ON()]]
--[[linux-4.4.1/___GFP_MOVABLE]]
if (unlikely(page_group_by_mobility_disabled))
return MIGRATE_UNMOVABLE;
-
--[[linux-4.4.1/unlikely()]]
--[[linux-4.4.1/page_group_by_mobility_disabled(global)]]
/* Group based on mobility */
return (gfp_flags & GFP_MOVABLE_MASK) >> GFP_MOVABLE_SHIFT;
}
#undef GFP_MOVABLE_MASK
#undef GFP_MOVABLE_SHIFT
*コメント [#o972f373]