相关代码如下:
#define alloc_pages(gfp_mask, order) alloc_pages_node(numa_node_id(), gfp_mask, order)#define alloc_page_vma(gfp_mask, vma, addr) alloc_pages(gfp_mask, 0)#define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0)
#define __get_free_page(gfp_mask) __get_free_pages((gfp_mask),0)#define __get_dma_pages(gfp_mask, order) __get_free_pages((gfp_mask) | GFP_DMA,(order))
#define pfn_to_page(pfn) (mem_map + ((pfn) – PHYS_PFN_OFFSET))#define page_to_pfn(page) ((unsigned long)((page) – mem_map) + PHYS_PFN_OFFSET)#define pfn_valid(pfn) ((pfn) >= PHYS_PFN_OFFSET && (pfn) < (PHYS_PFN_OFFSET + max_mapnr))
#define phys_to_page(phys) (pfn_to_page(phys >> PAGE_SHIFT))#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
1)__get_free_pages实现代码如下,,它返回页的虚拟地址:
2)alloc_pages_node
生命中,每一种苦难的背后都有一片晴朗的天空