- 论坛徽章:
- 0
|
原帖由 思一克 于 2007-6-13 15:18 发表于 22楼
remap_pfn_range是用来map整个物理内存成一个文件。这时,vm_pgoff的数值就等于物理页号。
还是不明白啊,大哥remap_pfn_range最终会调用下面函数,对于vm_pgoff=0,第一次调用时,pfn为0,
所以下面set_pte_at(mm, addr, pte, pfn_pte(pfn, prot)将第0页内存映射进进程空间?
不能理解remap_pfn_range函数,请各位多多指教
static int remap_pte_range(struct mm_struct *mm, pmd_t *pmd,
unsigned long addr, unsigned long end,
unsigned long pfn, pgprot_t prot)
{
pte_t *pte;
spinlock_t *ptl;
pte = pte_alloc_map_lock(mm, pmd, addr, &ptl);
if (!pte)
return -ENOMEM;
arch_enter_lazy_mmu_mode();
do {
BUG_ON(!pte_none(*pte));
set_pte_at(mm, addr, pte, pfn_pte(pfn, prot));
pfn++;
} while (pte++, addr += PAGE_SIZE, addr != end);
arch_leave_lazy_mmu_mode();
pte_unmap_unlock(pte - 1, ptl);
return 0;
} |
|