このページを編集する際は、編集に関する方針に従ってください。

概要

  • linux2.6/mm/rmap.cにて定義
  • 引数で渡されたメモリリージョン内にあるページのアドレスを返す
    • メモリリージョン内にページが存在しない場合はエラーコードを返す

引数

実装

/*

* At what user virtual address is page expected in vma?
*/

static inline unsigned long vma_address(struct page *page, struct vm_area_struct *vma) {

	pgoff_t pgoff = page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT); 
  • page->indexはページ単位のファイルオフセット、またはスワップ領域のインデックス(mappingがスワップキャッシュの場合)を意味する
	unsigned long address;
	address = vma->vm_start + ((pgoff - vma->vm_pgoff) << PAGE_SHIFT);
  • vma領域のpageに対応するアドレスを返す
	if (unlikely(address < vma->vm_start || address >= vma->vm_end)) {
		/* page should be within any vma from prio_tree_next */
		BUG_ON(!PageAnon(page));
  • ページpageがユーザ仮想メモリにマッピングされている場合、1を返して終了
		return -EFAULT;
  • メモリリージョン内にページが存在しない場合はエラーコードを返す
	}
	return address;

}

呼出元


履歴

  • 作者:ひら
  • 日付:2005/11/25
  • 対象:2.6.10
    更新日更新者更新内容

コメント



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-11-24 (火) 07:20:16 (2921d)