本文共 586 字,大约阅读时间需要 1 分钟。
unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)用于以gfp_mask分配方式分配2的order次方个连续的物理页其源码分析如下:unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order){ struct page *page; /* * __get_free_pages() returns a 32-bit address, which cannot represent * a highmem page */ #可见通过这个函数不能申请到高端内存 VM_BUG_ON((gfp_mask & __GFP_HIGHMEM) != 0); #首先通过alloc_pages 申请到page,然后通过 page_address 将page 转成虚拟地址返回给用户 #使用,由于这里已经判断page是否为null了。所以用于在调用__get_free_pages 只要判断 #返回值是0就表示调用失败了. page = alloc_pages(gfp_mask, order); if (!page) return 0; return (unsigned long) page_address(page);}
转载地址:http://mgjmi.baihongyu.com/