- 论坛徽章:
- 0
|
原帖由 acewind 于 2009-4-20 12:20 发表 ![]()
找到一个 vmalloc_to_page 函数,应该可以
同意。
vmalloc_to_page()的思路就是根据传入的参数线性地址来一级一级遍历页表,最后得到物理地址,再把物理地址右移12位得出其在mem_map数组中的索引下表,从而得出其对应的struct page的值。
但我有一点不是很懂,在vmalloc_to_page()的实现中,这样一个调用路径:
- vmalloc_to_page() --> pte_offset_map()
- #if defined(CONFIG_HIGHPTE)
- #define pte_offset_map(dir, address) \
- ((pte_t *)kmap_atomic(pmd_page(*(dir)),KM_PTE0) + pte_index(address))
- #else
- #define pte_offset_map(dir, address) \
- ((pte_t *)page_address(pmd_page(*(dir))) + pte_index(address))
- #endif
复制代码
不太明白这个CONFIG_HIGHPTE是什么意思?
为什么在打开了这个flag以后,pte_offset_map()还要通过kmap_atomic()来做临时映射? |
|