*参照元 [#m81896d3]
#backlinks

*説明 [#v6a0a75b]
-パス: [[linux-4.4.1/drivers/staging/android/ion/ion_carveout_heap.c]]

-FIXME: これは何?
--説明


**引数 [#y317538a]
-
-struct ion_heap *heap
--
--[[linux-4.4.1/ion_heap]]
-struct ion_buffer *buffer
--
--[[linux-4.4.1/ion_buffer]]
-unsigned long size
--
-unsigned long align
--
-unsigned long flags
--


**返り値 [#jdd4a0d7]
-
-int
--


**参考 [#vbb68662]


*実装 [#oa77e234]
 static int ion_carveout_heap_allocate(struct ion_heap *heap,
                                       struct ion_buffer *buffer,
                                       unsigned long size, unsigned long align,
                                       unsigned long flags)
 {
         struct sg_table *table;
         ion_phys_addr_t paddr;
         int ret;
 
-
--[[linux-4.4.1/sg_table]]
--[[linux-4.4.1/ion_phys_addr_t]]

         if (align > PAGE_SIZE)
                 return -EINVAL;
 
-
--[[linux-4.4.1/PAGE_SIZE]]

         table = kmalloc(sizeof(struct sg_table), GFP_KERNEL);
         if (!table)
                 return -ENOMEM;
         ret = sg_alloc_table(table, 1, GFP_KERNEL);
         if (ret)
                 goto err_free;
 
-
--[[linux-4.4.1/kmalloc()]]
--[[linux-4.4.1/sg_alloc_table()]]

         paddr = ion_carveout_allocate(heap, size, align);
         if (paddr == ION_CARVEOUT_ALLOCATE_FAIL) {
                 ret = -ENOMEM;
                 goto err_free_table;
         }
 
-
--[[linux-4.4.1/ion_carveout_allocate()]]

         sg_set_page(table->sgl, pfn_to_page(PFN_DOWN(paddr)), size, 0);
         buffer->priv_virt = table;
 
-
--[[linux-4.4.1/sg_set_page()]]
--[[linux-4.4.1/pfn_to_page()]]
--[[linux-4.4.1/PFN_DOWN()]]

         return 0;
 
 err_free_table:
         sg_free_table(table);
 err_free:
         kfree(table);
         return ret;
-
--[[linux-4.4.1/sg_free_table()]]
--[[linux-4.4.1/kfree()]]

 }


*コメント [#zfe73ed9]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS