linux-4.4.1/vb2_dma_sg_alloc_compacted()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#t7ec07b6]
#backlinks
*説明 [#p9a36d38]
-パス: [[linux-4.4.1/drivers/media/v4l2-core/videobuf2-dm...
-FIXME: これは何?
--説明
**引数 [#p5922ce9]
-struct vb2_dma_sg_buf *buf
--
--[[linux-4.4.1/vb2_dma_sg_buf]]
-gfp_t gfp_flag
--
--[[linux-4.4.1/gfp_t]]
**返り値 [#tf31d97d]
-int
--
**参考 [#r508527f]
*実装 [#x478554b]
static int vb2_dma_sg_alloc_compacted(struct vb2_dma_sg_...
gfp_t gfp_flags)
{
unsigned int last_page = 0;
int size = buf->size;
while (size > 0) {
struct page *pages;
int order;
int i;
-
--[[linux-4.4.1/page]]
order = get_order(size);
/* Dont over allocate*/
if ((PAGE_SIZE << order) > size)
order--;
-
--[[linux-4.4.1/get_order()]]
pages = NULL;
while (!pages) {
pages = alloc_pages(GFP_KERNEL |...
__GFP_NOWARN | g...
if (pages)
break;
-
--[[linux-4.4.1/alloc_pages()]]
if (order == 0) {
while (last_page--)
__free_page(buf-...
return -ENOMEM;
}
order--;
-
--[[linux-4.4.1/__free_page()]]
}
split_page(pages, order);
for (i = 0; i < (1 << order); i++)
buf->pages[last_page++] = &pages...
-
--[[linux-4.4.1/split_page()]]
size -= PAGE_SIZE << order;
}
return 0;
}
*コメント [#bd3e02c4]
終了行:
*参照元 [#t7ec07b6]
#backlinks
*説明 [#p9a36d38]
-パス: [[linux-4.4.1/drivers/media/v4l2-core/videobuf2-dm...
-FIXME: これは何?
--説明
**引数 [#p5922ce9]
-struct vb2_dma_sg_buf *buf
--
--[[linux-4.4.1/vb2_dma_sg_buf]]
-gfp_t gfp_flag
--
--[[linux-4.4.1/gfp_t]]
**返り値 [#tf31d97d]
-int
--
**参考 [#r508527f]
*実装 [#x478554b]
static int vb2_dma_sg_alloc_compacted(struct vb2_dma_sg_...
gfp_t gfp_flags)
{
unsigned int last_page = 0;
int size = buf->size;
while (size > 0) {
struct page *pages;
int order;
int i;
-
--[[linux-4.4.1/page]]
order = get_order(size);
/* Dont over allocate*/
if ((PAGE_SIZE << order) > size)
order--;
-
--[[linux-4.4.1/get_order()]]
pages = NULL;
while (!pages) {
pages = alloc_pages(GFP_KERNEL |...
__GFP_NOWARN | g...
if (pages)
break;
-
--[[linux-4.4.1/alloc_pages()]]
if (order == 0) {
while (last_page--)
__free_page(buf-...
return -ENOMEM;
}
order--;
-
--[[linux-4.4.1/__free_page()]]
}
split_page(pages, order);
for (i = 0; i < (1 << order); i++)
buf->pages[last_page++] = &pages...
-
--[[linux-4.4.1/split_page()]]
size -= PAGE_SIZE << order;
}
return 0;
}
*コメント [#bd3e02c4]
ページ名: