linux-2.6.33/uio_vma_fault()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#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, str...
{
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...
* 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]
終了行:
*参照元 [#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, str...
{
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...
* 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]
ページ名: