- 追加された行はこの色です。
- 削除された行はこの色です。
*参照元 [#h34a4b8c]
#backlinks
*説明 [#w9629841]
-パス: [[linux-4.4.1/mm/cma.c]]
-FIXME: これは何?
--説明
**引数 [#j3df9d51]
-phys_addr_t base
--
--[[linux-4.4.1/phys_addr_t]]
-phys_addr_t size
--
-unsigned int order_per_bit
--
-struct cma **res_cma
--
--[[linux-4.4.1/cma]]
**返り値 [#abd139f2]
-int
--
**参考 [#qedf71a6]
*実装 [#p23835ba]
/**
* cma_init_reserved_mem() - create custom contiguous area from reserved memory
* @base: Base address of the reserved area
* @size: Size of the reserved area (in bytes),
* @order_per_bit: Order of pages represented by one bit on bitmap.
* @res_cma: Pointer to store the created cma region.
*
* This function creates custom contiguous area from already reserved memory.
*/
int __init cma_init_reserved_mem(phys_addr_t base, phys_addr_t size,
unsigned int order_per_bit,
struct cma **res_cma)
{
struct cma *cma;
phys_addr_t alignment;
/* Sanity checks */
if (cma_area_count == ARRAY_SIZE(cma_areas)) {
pr_err("Not enough slots for CMA reserved regions!\n");
return -ENOSPC;
}
-
--[[linux-4.4.1/ARRAY_SIZE()]]
--[[linux-4.4.1/pr_err()]]
if (!size || !memblock_is_region_reserved(base, size))
return -EINVAL;
-
--[[linux-4.4.1/memblock_is_region_reserved()]]
/* ensure minimal alignment required by mm core */
alignment = PAGE_SIZE << max(MAX_ORDER - 1, pageblock_order);
-
--[[linux-4.4.1/PAGE_SIZE]]
--[[linux-4.4.1/MAX_ORDER]]
--[[linux-4.4.1/max()]]
--[[linux-4.4.1/pageblock_order(global)]]
/* alignment should be aligned with order_per_bit */
if (!IS_ALIGNED(alignment >> PAGE_SHIFT, 1 << order_per_bit))
return -EINVAL;
-
--[[linux-4.4.1/IS_ALIGNED()]]
--[[linux-4.4.1/PAGE_SHIFT]]
if (ALIGN(base, alignment) != base || ALIGN(size, alignment) != size)
return -EINVAL;
/*
* Each reserved area must be initialised later, when more kernel
* subsystems (like slab allocator) are available.
*/
cma = &cma_areas[cma_area_count];
cma->base_pfn = PFN_DOWN(base);
cma->count = size >> PAGE_SHIFT;
cma->order_per_bit = order_per_bit;
*res_cma = cma;
cma_area_count++;
totalcma_pages += (size / PAGE_SIZE);
-
--[[linux-4.4.1/cma_areas(global)]]
--[[linux-4.4.1/PFN_DOWN()]]
--[[linux-4.4.1/totalcma_pages(global)]]
return 0;
}
*コメント [#ef0af007]