*参照元 [#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;
-
-メモリマップに関連付けられている UIO のデバイス情報を取得する。
-参考: uio_mmap() にて vm_private_data への設定を行っている。
--[[linux-2.6.33/uio_device]]
--[[linux-2.6.33/uio_mmap()]]

 	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]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS