struct page *vmalloc_to_page(const void *addr)用于找到虚拟地址addr对应的物理page
其源码分析如下:
struct page *vmalloc_to_page(const void *addr)
{
return virt_to_page(addr);
}
调用virt_to_page 得到addr对应的物理page页
通过__virt_to_pgoff 得到的值加上VMEMMAP_START 表示就可以得到物理page页的地址
#define virt_to_page(vaddr) ((struct page *)((__virt_to_pgoff(vaddr)) | VMEMMAP_START))
从这里可以看到只要vmalloc申请到的虚拟得治减去~PAGE_OFFSET 就可以得到物理地址,然后再处于page size 就可
以到offset为VMEMMAP_START的虚拟地址
#define __virt_to_pgoff(kaddr) (((u64)(kaddr) & ~PAGE_OFFSET) / PAGE_SIZE * sizeof(struct page))
内存管理API之vmalloc_to_page
最新推荐文章于 2024-09-06 18:15:40 发布