The patch titled Subject: mm: memblock: update comments and kernel-doc has been added to the -mm tree. Its filename is memblock-update-comments-and-kernel-doc.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/memblock-update-comments-and-kernel-doc.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/memblock-update-comments-and-kernel-doc.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Mike Rapoport <rppt@xxxxxxxxxxxxx> Subject: mm: memblock: update comments and kernel-doc * Remove comments mentioning bootmem * Extend "DOC: memblock overview" * Add kernel-doc comments for several more functions Link: http://lkml.kernel.org/r/1549626347-25461-1-git-send-email-rppt@xxxxxxxxxxxxx Signed-off-by: Mike Rapoport <rppt@xxxxxxxxxxxxx> Reviewed-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Cc: Jonathan Corbet <corbet@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/memblock.c | 60 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 17 deletions(-) --- a/mm/memblock.c~memblock-update-comments-and-kernel-doc +++ a/mm/memblock.c @@ -69,8 +69,19 @@ * :c:func:`memblock_set_node`. The :c:func:`memblock_add_node` * performs such an assignment directly. * - * Once memblock is setup the memory can be allocated using either - * memblock or bootmem APIs. + * Once memblock is setup the memory can be allocated using one of the + * API variants: + * + * * :c:func:`memblock_phys_alloc*` - these functions return the + * **physical** address of the allocated memory + * * :c:func:`memblock_alloc*` - these functions return the **virtual** + * address of the allocated memory. + * + * Note, that both API variants use implict assumptions about allowed + * memory ranges and the fallback methods. Consult the documentation + * of :c:func:`memblock_alloc_internal` and + * :c:func:`memblock_alloc_range_nid` functions for more elaboarte + * description. * * As the system boot progresses, the architecture specific * :c:func:`mem_init` function frees all the memory to the buddy page @@ -428,17 +439,7 @@ static int __init_memblock memblock_doub else in_slab = &memblock_reserved_in_slab; - /* Try to find some space for it. - * - * WARNING: We assume that either slab_is_available() and we use it or - * we use MEMBLOCK for allocations. That means that this is unsafe to - * use when bootmem is currently active (unless bootmem itself is - * implemented on top of MEMBLOCK which isn't the case yet) - * - * This should however not be an issue for now, as we currently only - * call into MEMBLOCK while it's still active, or much later when slab - * is active for memory hotplug operations - */ + /* Try to find some space for it */ if (use_slab) { new_array = kmalloc(new_size, GFP_KERNEL); addr = new_array ? __pa(new_array) : 0; @@ -982,7 +983,7 @@ static bool should_skip_region(struct me } /** - * __next__mem_range - next function for for_each_free_mem_range() etc. + * __next_mem_range - next function for for_each_free_mem_range() etc. * @idx: pointer to u64 loop variable * @nid: node selector, %NUMA_NO_NODE for all nodes * @flags: pick from blocks based on memory attributes @@ -1392,6 +1393,18 @@ done: return found; } +/** + * memblock_phys_alloc_range - allocate a memory block inside specified range + * @size: size of memory block to be allocated in bytes + * @align: alignment of the region and block's size + * @start: the lower bound of the memory region to allocate (physical address) + * @end: the upper bound of the memory region to allocate (physical address) + * + * Allocate @size bytes in the between @start and @end. + * + * Return: physical address of the allocated memory block on success, + * %0 on failure. + */ phys_addr_t __init memblock_phys_alloc_range(phys_addr_t size, phys_addr_t align, phys_addr_t start, @@ -1400,6 +1413,19 @@ phys_addr_t __init memblock_phys_alloc_r return memblock_alloc_range_nid(size, align, start, end, NUMA_NO_NODE); } +/** + * memblock_phys_alloc_range - allocate a memory block from specified MUMA node + * @size: size of memory block to be allocated in bytes + * @align: alignment of the region and block's size + * @nid: nid of the free area to find, %NUMA_NO_NODE for any node + * + * Allocates memory block from the specified NUMA node. If the node + * has no available memory, attempts to allocated from any node in the + * system. + * + * Return: physical address of the allocated memory block on success, + * %0 on failure. + */ phys_addr_t __init memblock_phys_alloc_try_nid(phys_addr_t size, phys_addr_t align, int nid) { return memblock_alloc_range_nid(size, align, 0, @@ -1526,13 +1552,13 @@ void * __init memblock_alloc_try_nid( } /** - * __memblock_free_late - free bootmem block pages directly to buddy allocator + * __memblock_free_late - free pages directly to buddy allocator * @base: phys starting address of the boot memory block * @size: size of the boot memory block in bytes * - * This is only useful when the bootmem allocator has already been torn + * This is only useful when the memblock allocator has already been torn * down, but we are still initializing the system. Pages are released directly - * to the buddy allocator, no bootmem metadata is updated because it is gone. + * to the buddy allocator. */ void __init __memblock_free_late(phys_addr_t base, phys_addr_t size) { _ Patches currently in -mm which might be from rppt@xxxxxxxxxxxxx are powerpc-prefer-memblock-apis-returning-virtual-address.patch microblaze-prefer-memblock-api-returning-virtual-address.patch sh-prefer-memblock-apis-returning-virtual-address.patch openrisc-simplify-pte_alloc_one_kernel.patch arch-simplify-several-early-memory-allocations.patch arm-s390-unicore32-remove-oneliner-wrappers-for-memblock_alloc.patch mm-page_alloc-check-return-value-of-memblock_alloc_node_nopanic.patch docs-mm-vmalloc-re-indent-kernel-doc-comemnts.patch docs-core-api-mm-fix-user-memory-accessors-formatting.patch docs-core-api-mm-fix-return-value-descriptions-in-mm.patch openrisc-prefer-memblock-apis-returning-virtual-address.patch memblock-replace-memblock_alloc_baseanywhere-with-memblock_phys_alloc.patch memblock-drop-memblock_alloc_base_nid.patch memblock-emphasize-that-memblock_alloc_range-returns-a-physical-address.patch memblock-memblock_phys_alloc_try_nid-dont-panic.patch memblock-memblock_phys_alloc-dont-panic.patch memblock-drop-__memblock_alloc_base.patch memblock-drop-memblock_alloc_base.patch memblock-refactor-internal-allocation-functions.patch memblock-refactor-internal-allocation-functions-fix.patch memblock-make-memblock_find_in_range_node-and-choose_memblock_flags-static.patch arch-use-memblock_alloc-instead-of-memblock_alloc_fromsize-align-0.patch arch-dont-memset0-memory-returned-by-memblock_alloc.patch ia64-add-checks-for-the-return-value-of-memblock_alloc.patch sparc-add-checks-for-the-return-value-of-memblock_alloc.patch mm-percpu-add-checks-for-the-return-value-of-memblock_alloc.patch init-main-add-checks-for-the-return-value-of-memblock_alloc.patch swiotlb-add-checks-for-the-return-value-of-memblock_alloc.patch treewide-add-checks-for-the-return-value-of-memblock_alloc.patch treewide-add-checks-for-the-return-value-of-memblock_alloc-fix-2.patch treewide-add-checks-for-the-return-value-of-memblock_alloc-fix-3.patch memblock-memblock_alloc_try_nid-dont-panic.patch memblock-drop-memblock_alloc__nopanic-variants.patch memblock-remove-memblock_setclear_region_flags.patch memblock-split-checks-whether-a-region-should-be-skipped-to-a-helper-function.patch memblock-update-comments-and-kernel-doc.patch