linux-4.4.1/page_address()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#e168cb7d]
#backlinks
*説明 [#def4a777]
-パス: 複数あり
--WANT_PAGE_VIRTUAL 有効: [[linux-4.4.1/include/linux/mm....
--WANT_PAGE_VIRTUAL 無効、CONFIG_HIGHMEM 無効: [[linux-4....
--WANT_PAGE_VIRTUAL 無効、CONFIG_HIGHMEM 有効: [[linux-4....
-FIXME: これは何?
--説明
-WANT_PAGE_VIRTUAL はアーキテクチャ依存の値で、定義されて...
--arc
--m68k
--sparc
-HASHED_PAGE_VIRTUAL は CONFIG_HIGHMEM 有効、WANT_PAGE_VI...
-要するに、下記の 3パターンがあるってことです。
--WANT_PAGE_VIRTUAL 有効
--WANT_PAGE_VIRTUAL 無効、CONFIG_HIGHMEM 無効
--WANT_PAGE_VIRTUAL 無効、CONFIG_HIGHMEM 有効
**引数 [#x389acd0]
-const struct page *page
--
--[[linux-4.4.1/page]]
**返り値 [#ib3b1951]
-void *
--
**参考 [#sc75c2fd]
*実装 [#w5daec85]
**WANT_PAGE_VIRTUAL 有効: include/linux/mm.h [#j7bfc510]
-特殊ケース。CONFIG_HIGHMEM は無視されて、下記の実装が選...
#if defined(WANT_PAGE_VIRTUAL)
static inline void *page_address(const struct page *page)
{
return page->virtual;
}
...
**WANT_PAGE_VIRTUAL 無効、CONFIG_HIGHMEM 無効: include/li...
#if !defined(HASHED_PAGE_VIRTUAL) && !defined(WANT_PAGE_...
#define page_address(page) lowmem_page_address(page)
...
-
--[[linux-4.4.1/lowmem_page_address()]]
**WANT_PAGE_VIRTUAL 無効、CONFIG_HIGHMEM 有効: mm/highmem...
/**
* page_address - get the mapped virtual address of a page
* @page: &struct page to get the virtual address of
*
* Returns the page's virtual address.
*/
void *page_address(const struct page *page)
{
unsigned long flags;
void *ret;
struct page_address_slot *pas;
-
--[[linux-4.4.1/page_address_slot()]]
if (!PageHighMem(page))
return lowmem_page_address(page);
-
--[[linux-4.4.1/PageHighMem()]]
--[[linux-4.4.1/lowmem_page_address()]]
pas = page_slot(page);
ret = NULL;
spin_lock_irqsave(&pas->lock, flags);
-
--[[linux-4.4.1/page_slot()]]
--[[linux-4.4.1/spin_lock_irqsave()]]
if (!list_empty(&pas->lh)) {
-
--[[linux-4.4.1/list_empty()]]
struct page_address_map *pam;
-
--[[linux-4.4.1/page_address_map]]
list_for_each_entry(pam, &pas->lh, list) {
if (pam->page == page) {
ret = pam->virtual;
goto done;
}
}
-
--[[linux-4.4.1/list_for_each_entry()]]
}
done:
spin_unlock_irqrestore(&pas->lock, flags);
return ret;
-
--[[linux-4.4.1/spin_unlock_irqrestore()]]
}
EXPORT_SYMBOL(page_address);
-
--[[linux-4.4.1/EXPORT_SYMBOL()]]
*コメント [#r72c3d1b]
終了行:
*参照元 [#e168cb7d]
#backlinks
*説明 [#def4a777]
-パス: 複数あり
--WANT_PAGE_VIRTUAL 有効: [[linux-4.4.1/include/linux/mm....
--WANT_PAGE_VIRTUAL 無効、CONFIG_HIGHMEM 無効: [[linux-4....
--WANT_PAGE_VIRTUAL 無効、CONFIG_HIGHMEM 有効: [[linux-4....
-FIXME: これは何?
--説明
-WANT_PAGE_VIRTUAL はアーキテクチャ依存の値で、定義されて...
--arc
--m68k
--sparc
-HASHED_PAGE_VIRTUAL は CONFIG_HIGHMEM 有効、WANT_PAGE_VI...
-要するに、下記の 3パターンがあるってことです。
--WANT_PAGE_VIRTUAL 有効
--WANT_PAGE_VIRTUAL 無効、CONFIG_HIGHMEM 無効
--WANT_PAGE_VIRTUAL 無効、CONFIG_HIGHMEM 有効
**引数 [#x389acd0]
-const struct page *page
--
--[[linux-4.4.1/page]]
**返り値 [#ib3b1951]
-void *
--
**参考 [#sc75c2fd]
*実装 [#w5daec85]
**WANT_PAGE_VIRTUAL 有効: include/linux/mm.h [#j7bfc510]
-特殊ケース。CONFIG_HIGHMEM は無視されて、下記の実装が選...
#if defined(WANT_PAGE_VIRTUAL)
static inline void *page_address(const struct page *page)
{
return page->virtual;
}
...
**WANT_PAGE_VIRTUAL 無効、CONFIG_HIGHMEM 無効: include/li...
#if !defined(HASHED_PAGE_VIRTUAL) && !defined(WANT_PAGE_...
#define page_address(page) lowmem_page_address(page)
...
-
--[[linux-4.4.1/lowmem_page_address()]]
**WANT_PAGE_VIRTUAL 無効、CONFIG_HIGHMEM 有効: mm/highmem...
/**
* page_address - get the mapped virtual address of a page
* @page: &struct page to get the virtual address of
*
* Returns the page's virtual address.
*/
void *page_address(const struct page *page)
{
unsigned long flags;
void *ret;
struct page_address_slot *pas;
-
--[[linux-4.4.1/page_address_slot()]]
if (!PageHighMem(page))
return lowmem_page_address(page);
-
--[[linux-4.4.1/PageHighMem()]]
--[[linux-4.4.1/lowmem_page_address()]]
pas = page_slot(page);
ret = NULL;
spin_lock_irqsave(&pas->lock, flags);
-
--[[linux-4.4.1/page_slot()]]
--[[linux-4.4.1/spin_lock_irqsave()]]
if (!list_empty(&pas->lh)) {
-
--[[linux-4.4.1/list_empty()]]
struct page_address_map *pam;
-
--[[linux-4.4.1/page_address_map]]
list_for_each_entry(pam, &pas->lh, list) {
if (pam->page == page) {
ret = pam->virtual;
goto done;
}
}
-
--[[linux-4.4.1/list_for_each_entry()]]
}
done:
spin_unlock_irqrestore(&pas->lock, flags);
return ret;
-
--[[linux-4.4.1/spin_unlock_irqrestore()]]
}
EXPORT_SYMBOL(page_address);
-
--[[linux-4.4.1/EXPORT_SYMBOL()]]
*コメント [#r72c3d1b]
ページ名: