__get_free_pages

已经在没看函数定义前觉得有点奇怪,它怎么是用page_address, 现在知道了,如果分配的页面里面有 __GFP_HIGHMEM 的标志,直接就BUG_ON 了。

这说明__get_free_pages是从低端内存分配的, 释放函数用free_page(addr), 而不用 __free_page(page).


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);


        page = alloc_pages(gfp_mask, order);
        if (!page)
                return 0;
        return (unsigned long) page_address(page);
}
EXPORT_SYMBOL(__get_free_pages);

你可能感兴趣的:(__get_free_pages)