- 追加された行はこの色です。
- 削除された行はこの色です。
*参照元 [#f526a3a3]
#backlinks
*説明 [#ra242583]
-パス: [[linux-2.6.33/drivers/uio/uio.c]]
-FIXME: これは何?
--説明
**引数 [#ye6d66a5]
-struct vm_area_struct *vma
--
--[[linux-2.6.33/vm_area_struct]]
-struct vm_fault *vmf
--
--[[linux-2.6.33/vm_fault]]
**返り値 [#t282ca0f]
-int
--
**参考 [#cac85d9a]
*実装 [#ydc7695b]
static int uio_vma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
{
struct uio_device *idev = vma->vm_private_data;
-
--[[linux-2.6.33/uio_device]]
struct page *page;
-
--[[linux-2.6.33/page]]
unsigned long offset;
int mi = uio_find_mem_index(vma);
if (mi < 0)
return VM_FAULT_SIGBUS;
-
--[[linux-2.6.33/uio_find_mem_index()]]
/*
* We need to subtract mi because userspace uses offset = N*PAGE_SIZE
* to use mem[N].
*/
offset = (vmf->pgoff - mi) << PAGE_SHIFT;
if (idev->info->mem[mi].memtype == UIO_MEM_LOGICAL)
page = virt_to_page(idev->info->mem[mi].addr + offset);
else
page = vmalloc_to_page((void *)idev->info->mem[mi].addr
+ offset);
-
--[[linux-2.6.33/virt_to_page()]]
-
--[[linux-2.6.33/vmalloc_to_page()]]
get_page(page);
-
--[[linux-2.6.33/get_page()]]
vmf->page = page;
return 0;
}
*コメント [#bd3c5449]