linux-4.4.1/dma_cache_maint_page()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#vda0b1ea]
#backlinks
*説明 [#yfeb084c]
-パス: [[linux-4.4.1/arch/arm/mm/dma-mapping.c]]
-FIXME: これは何?
--説明
**引数 [#t0eed486]
-struct page *page
--
--[[linux-4.4.1/page]]
-unsigned long offset
--
-size_t size
--
-enum dma_data_direction dir
--
--[[linux-4.4.1/dma_data_direction]]
-void (*op)(const void *, size_t, int)
--
**返り値 [#w1989c40]
-なし
**参考 [#m0e3b954]
*実装 [#ced84061]
static void dma_cache_maint_page(struct page *page, unsi...
size_t size, enum dma_data_direction dir,
void (*op)(const void *, size_t, int))
{
unsigned long pfn;
size_t left = size;
pfn = page_to_pfn(page) + offset / PAGE_SIZE;
offset %= PAGE_SIZE;
-
--[[linux-4.4.1/page_to_pfn()]]
--[[linux-4.4.1/PAGE_SIZE]]
/*
* A single sg entry may refer to multiple physi...
* pages. But we still need to process highmem ...
* If highmem is not configured then the bulk of...
* optimized out.
*/
do {
size_t len = left;
void *vaddr;
page = pfn_to_page(pfn);
-
--[[linux-4.4.1/pfn_to_page()]]
if (PageHighMem(page)) {
-
--[[linux-4.4.1/PageHighMem()]]
if (len + offset > PAGE_SIZE)
len = PAGE_SIZE - offset;
if (cache_is_vipt_nonaliasing()) {
vaddr = kmap_atomic(page);
op(vaddr + offset, len, ...
kunmap_atomic(vaddr);
-
--[[linux-4.4.1/cache_is_vipt_nonaliasing()]]
--[[linux-4.4.1/kmap_atomic()]]
--[[linux-4.4.1/kunmap_atomic()]]
} else {
vaddr = kmap_high_get(pa...
if (vaddr) {
op(vaddr + offse...
kunmap_high(page);
}
-
--[[linux-4.4.1/kmap_high_get()]]
--[[linux-4.4.1/kunmap_high()]]
}
} else {
vaddr = page_address(page) + off...
op(vaddr, len, dir);
-
--[[linux-4.4.1/page_address()]]
}
offset = 0;
pfn++;
left -= len;
} while (left);
}
*コメント [#qdefd662]
終了行:
*参照元 [#vda0b1ea]
#backlinks
*説明 [#yfeb084c]
-パス: [[linux-4.4.1/arch/arm/mm/dma-mapping.c]]
-FIXME: これは何?
--説明
**引数 [#t0eed486]
-struct page *page
--
--[[linux-4.4.1/page]]
-unsigned long offset
--
-size_t size
--
-enum dma_data_direction dir
--
--[[linux-4.4.1/dma_data_direction]]
-void (*op)(const void *, size_t, int)
--
**返り値 [#w1989c40]
-なし
**参考 [#m0e3b954]
*実装 [#ced84061]
static void dma_cache_maint_page(struct page *page, unsi...
size_t size, enum dma_data_direction dir,
void (*op)(const void *, size_t, int))
{
unsigned long pfn;
size_t left = size;
pfn = page_to_pfn(page) + offset / PAGE_SIZE;
offset %= PAGE_SIZE;
-
--[[linux-4.4.1/page_to_pfn()]]
--[[linux-4.4.1/PAGE_SIZE]]
/*
* A single sg entry may refer to multiple physi...
* pages. But we still need to process highmem ...
* If highmem is not configured then the bulk of...
* optimized out.
*/
do {
size_t len = left;
void *vaddr;
page = pfn_to_page(pfn);
-
--[[linux-4.4.1/pfn_to_page()]]
if (PageHighMem(page)) {
-
--[[linux-4.4.1/PageHighMem()]]
if (len + offset > PAGE_SIZE)
len = PAGE_SIZE - offset;
if (cache_is_vipt_nonaliasing()) {
vaddr = kmap_atomic(page);
op(vaddr + offset, len, ...
kunmap_atomic(vaddr);
-
--[[linux-4.4.1/cache_is_vipt_nonaliasing()]]
--[[linux-4.4.1/kmap_atomic()]]
--[[linux-4.4.1/kunmap_atomic()]]
} else {
vaddr = kmap_high_get(pa...
if (vaddr) {
op(vaddr + offse...
kunmap_high(page);
}
-
--[[linux-4.4.1/kmap_high_get()]]
--[[linux-4.4.1/kunmap_high()]]
}
} else {
vaddr = page_address(page) + off...
op(vaddr, len, dir);
-
--[[linux-4.4.1/page_address()]]
}
offset = 0;
pfn++;
left -= len;
} while (left);
}
*コメント [#qdefd662]
ページ名: