- 論壇徽章:
- 0
|
原帖由 rwen2012 于 2007-6-13 11:51 發(fā)表于 9樓
filemap.c里的nopage很容易理解,這個(gè)vm_pgoff明顯就是文件偏移
struct page *filemap_nopage(struct vm_area_struct *area,
unsigned long address, int *type)
{
...
那如果看LDD3中 兩種mmap方法的實(shí)現(xiàn):
1,
static int simple_remap_mmap(struct file *filp, struct vm_area_struct *vma)
{
if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, //remap_pfn_mmap的第三個(gè)參數(shù)要求是pfn
vma->vm_end - vma->vm_start,
vma->vm_page_prot))
return -EAGAIN;
2,
static int simple_nopage_mmap(struct file *filp, struct vm_area_struct *vma)
{
unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
if (offset >= __pa(high_memory) || (filp->f_flags & O_SYNC))
vma->vm_flags |= VM_IO;
vm_pgoff就明顯是pfn了。
差別在哪里? |
|