- 论坛徽章:
- 0
|
page_cache_alloc_cold定义在include/linux/pagemap.h中,
static inline struct page *page_cache_alloc_cold(struct address_space *x)
{
return __page_cache_alloc(mapping_gfp_mask(x)|__GFP_COLD);
}
|
从这里看出分配的标志不只是__GFP_COLD,还与mapping中的gfp mask有关。那么这个mask的值是什么呢?在fs/inode.c中
static struct inode *alloc_inode(struct super_block *sb)
{
...
mapping_set_gfp_mask(mapping, GFP_HIGHUSER_PAGECACHE);
...
}
|
mask被初始化为GFP_HIGHUSER_PAGECACHE,GFP_HIGHUSER_PAGECACHE的定义是
#define GFP_HIGHUSER_PAGECACHE (__GFP_WAIT | __GFP_IO | __GFP_FS | \
__GFP_HARDWALL | __GFP_HIGHMEM | \
__GFP_MOVABLE)
|
里面有个__GPF_HIGHMEM,这个标志要求系统“优先”从高端内存中分配页面,注意是“优先”,系统不保证分配的一定是高端内存。
当你调用kmap(page)的时候,page可能是从高端内存分配的(概率比较大),也可能不是(概率较小)。但是无论page是否属于高端内存,kmap()都能处理。
[ 本帖最后由 upczhsh 于 2009-7-23 15:29 编辑 ] |
|