diff options
Diffstat (limited to 'mm/memblock.c')
| -rw-r--r-- | mm/memblock.c | 21 | 
1 files changed, 19 insertions, 2 deletions
| diff --git a/mm/memblock.c b/mm/memblock.c index 0ab5a749bfa6..5096500b2647 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -472,7 +472,7 @@ static int __init_memblock memblock_double_array(struct memblock_type *type,  		kfree(old_array);  	else if (old_array != memblock_memory_init_regions &&  		 old_array != memblock_reserved_init_regions) -		memblock_free(__pa(old_array), old_alloc_size); +		memblock_free_ptr(old_array, old_alloc_size);  	/*  	 * Reserve the new array if that comes from the memblock.  Otherwise, we @@ -796,6 +796,20 @@ int __init_memblock memblock_remove(phys_addr_t base, phys_addr_t size)  }  /** + * memblock_free_ptr - free boot memory allocation + * @ptr: starting address of the  boot memory allocation + * @size: size of the boot memory block in bytes + * + * Free boot memory block previously allocated by memblock_alloc_xx() API. + * The freeing memory will not be released to the buddy allocator. + */ +void __init_memblock memblock_free_ptr(void *ptr, size_t size) +{ +	if (ptr) +		memblock_free(__pa(ptr), size); +} + +/**   * memblock_free - free boot memory block   * @base: phys starting address of the  boot memory block   * @size: size of the boot memory block in bytes @@ -918,6 +932,9 @@ int __init_memblock memblock_mark_mirror(phys_addr_t base, phys_addr_t size)   * covered by the memory map. The struct page representing NOMAP memory   * frames in the memory map will be PageReserved()   * + * Note: if the memory being marked %MEMBLOCK_NOMAP was allocated from + * memblock, the caller must inform kmemleak to ignore that memory + *   * Return: 0 on success, -errno on failure.   */  int __init_memblock memblock_mark_nomap(phys_addr_t base, phys_addr_t size) @@ -1673,7 +1690,7 @@ void __init memblock_cap_memory_range(phys_addr_t base, phys_addr_t size)  	if (!size)  		return; -	if (memblock.memory.cnt <= 1) { +	if (!memblock_memory->total_size) {  		pr_warn("%s: No memory registered yet\n", __func__);  		return;  	} |