From: Andrew Morton <akpm@linux-foundation.org>
To: Santosh Shilimkar <santosh.shilimkar@ti.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
linux-arm-kernel@lists.infradead.org,
Yinghai Lu <yinghai@kernel.org>, Tejun Heo <tj@kernel.org>,
Grygorii Strashko <grygorii.strashko@ti.com>
Subject: Re: [PATCH v3 08/23] mm/memblock: Add memblock memory allocation apis
Date: Mon, 9 Dec 2013 16:25:17 -0800 [thread overview]
Message-ID: <20131209162517.b259540cdd23bfacadc9d171@linux-foundation.org> (raw)
In-Reply-To: <1386625856-12942-9-git-send-email-santosh.shilimkar@ti.com>
On Mon, 9 Dec 2013 16:50:41 -0500 Santosh Shilimkar <santosh.shilimkar@ti.com> wrote:
> Introduce memblock memory allocation APIs which allow to support
> PAE or LPAE extension on 32 bits archs where the physical memory
> start address can be beyond 4GB. In such cases, existing bootmem
> APIs which operate on 32 bit addresses won't work and needs
> memblock layer which operates on 64 bit addresses.
>
> So we add equivalent APIs so that we can replace usage of bootmem
> with memblock interfaces. Architectures already converted to
> NO_BOOTMEM use these new memblock interfaces. The architectures
> which are still not converted to NO_BOOTMEM continue to function
> as is because we still maintain the fal lback option of bootmem
> back-end supporting these new interfaces. So no functional change
> as such.
>
> In long run, once all the architectures moves to NO_BOOTMEM, we
> can get rid of bootmem layer completely. This is one step to remove
> the core code dependency with bootmem and also gives path for
> architectures to move away from bootmem.
>
> The proposed interface will became active if both
> CONFIG_HAVE_MEMBLOCK and CONFIG_NO_BOOTMEM are specified by arch.
> In case !CONFIG_NO_BOOTMEM, the memblock() wrappers will fallback
> to the existing bootmem apis so that arch's not converted to
> NO_BOOTMEM continue to work as is.
>
> The meaning of MEMBLOCK_ALLOC_ACCESSIBLE and MEMBLOCK_ALLOC_ANYWHERE
> is kept same.
>
> ...
>
> +static inline void * __init memblock_virt_alloc(
> + phys_addr_t size, phys_addr_t align)
> +{
> + return memblock_virt_alloc_try_nid(size, align, BOOTMEM_LOW_LIMIT,
> + BOOTMEM_ALLOC_ACCESSIBLE,
> + NUMA_NO_NODE);
> +}
erk. I prefer
static inline void * __init
memblock_virt_alloc(phys_addr_t size, phys_addr_t align);
to this. But not enough to bother changing it ;)
> +/**
> + * memblock_virt_alloc_internal - allocate boot memory block
> + * @size: size of memory block to be allocated in bytes
> + * @align: alignment of the region and block's size
> + * @min_addr: the lower bound of the memory region to allocate (phys address)
> + * @max_addr: the upper bound of the memory region to allocate (phys address)
> + * @nid: nid of the free area to find, %NUMA_NO_NODE for any node
> + *
> + * The @min_addr limit is dropped if it can not be satisfied and the allocation
> + * will fall back to memory below @min_addr. Also, allocation may fall back
> + * to any node in the system if the specified node can not
> + * hold the requested memory.
> + *
> + * The allocation is performed from memory region limited by
> + * memblock.current_limit if @max_addr == %BOOTMEM_ALLOC_ACCESSIBLE.
> + *
> + * The memory block is aligned on SMP_CACHE_BYTES if @align == 0.
> + *
> + * The phys address of allocated boot memory block is converted to virtual and
> + * allocated memory is reset to 0.
> + *
> + * In addition, function sets the min_count to 0 using kmemleak_alloc for
> + * allocated boot memory block, so that it is never reported as leaks.
> + *
> + * RETURNS:
> + * Virtual address of allocated memory block on success, NULL on failure.
> + */
> +static void * __init memblock_virt_alloc_internal(
> + phys_addr_t size, phys_addr_t align,
> + phys_addr_t min_addr, phys_addr_t max_addr,
> + int nid)
> +{
> + phys_addr_t alloc;
> + void *ptr;
> +
> + if (nid == MAX_NUMNODES)
> + pr_warn("%s: usage of MAX_NUMNODES is depricated. Use NUMA_NO_NODE\n",
> + __func__);
"deprecated". I'll fix this (three places).
> + if (WARN_ON_ONCE(slab_is_available()))
> + return kzalloc_node(size, GFP_NOWAIT, nid);
I don't know why this generates a warning. And I bet that if it
generates a warning for some other developer, they won't know either.
Please send a patch to add a suitable code comment here.
> +
> + /*
> + * The min_count is set to 0 so that bootmem allocated blocks
> + * are never reported as leaks.
> + */
> + kmemleak_alloc(ptr, size, 0, 0);
This is not a good comment - it explains "what" (which is fairly
obvious) but it doesn't explain "why". Unfreed bootmem can surely be
considered a leak in some situations so perhaps some people will want
them reported as such. Please send a patch which updates this comment,
fully explaining the reasoning behind this decision.
> + return ptr;
> +
> +error:
> + return NULL;
> +}
> +
> +/**
> + * memblock_virt_alloc_try_nid_nopanic - allocate boot memory block
> + * @size: size of memory block to be allocated in bytes
> + * @align: alignment of the region and block's size
> + * @min_addr: the lower bound of the memory region from where the allocation
> + * is preferred (phys address)
> + * @max_addr: the upper bound of the memory region from where the allocation
> + * is preferred (phys address), or %BOOTMEM_ALLOC_ACCESSIBLE to
> + * allocate only from memory limited by memblock.current_limit value
> + * @nid: nid of the free area to find, %NUMA_NO_NODE for any node
> + *
> + * Public version of _memblock_virt_alloc_try_nid_nopanic() which provides
> + * additional debug information (including caller info), if enabled.
> + *
> + * RETURNS:
> + * Virtual address of allocated memory block on success, NULL on failure.
> + */
> +void * __init memblock_virt_alloc_try_nid_nopanic(
> + phys_addr_t size, phys_addr_t align,
> + phys_addr_t min_addr, phys_addr_t max_addr,
> + int nid)
> +{
> + memblock_dbg("%s: %llu bytes align=0x%llx nid=%d from=0x%llx max_addr=0x%llx %pF\n",
> + __func__, (u64)size, (u64)align, nid, (u64)min_addr,
> + (u64)max_addr, (void *)_RET_IP_);
Maybe we should teach vsprintf() how to print phys_addr_t's. Similar
to
http://ozlabs.org/~akpm/mmots/broken-out/vsprintf-add-%25pad-extension-for-dma_addr_t-use.patch
Printing a single level of the call stack is often pretty useless.
Have you been using memblock_dbg() and have you found this _RET_IP_
information to be sufficient?
> + return memblock_virt_alloc_internal(size, align, min_addr,
> + max_addr, nid);
> +}
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2013-12-10 0:25 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-09 21:50 [PATCH v3 00/23] mm: Use memblock interface instead of bootmem Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 01/23] mm/memblock: debug: correct displaying of upper memory boundary Santosh Shilimkar
2013-12-09 21:56 ` Felipe Balbi
2013-12-09 22:39 ` Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 02/23] mm/memblock: debug: don't free reserved array if !ARCH_DISCARD_MEMBLOCK Santosh Shilimkar
2013-12-10 0:11 ` Andrew Morton
2013-12-10 16:44 ` Grygorii Strashko
2013-12-09 21:50 ` [PATCH v3 03/23] mm/bootmem: remove duplicated declaration of __free_pages_bootmem() Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 04/23] mm/memblock: remove unnecessary inclusions of bootmem.h Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 05/23] mm/memblock: drop WARN and use SMP_CACHE_BYTES as a default alignment Santosh Shilimkar
2013-12-13 21:21 ` Tejun Heo
2013-12-09 21:50 ` [PATCH v3 06/23] mm/memblock: reorder parameters of memblock_find_in_range_node Santosh Shilimkar
2013-12-13 21:22 ` Tejun Heo
2013-12-09 21:50 ` [PATCH v3 07/23] mm/memblock: switch to use NUMA_NO_NODE instead of MAX_NUMNODES Santosh Shilimkar
2013-12-13 21:29 ` Tejun Heo
2013-12-14 0:44 ` Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 08/23] mm/memblock: Add memblock memory allocation apis Santosh Shilimkar
2013-12-10 0:25 ` Andrew Morton [this message]
2013-12-10 16:04 ` Santosh Shilimkar
2013-12-13 21:37 ` Tejun Heo
2013-12-14 0:52 ` Santosh Shilimkar
2013-12-14 11:08 ` Tejun Heo
2013-12-14 19:48 ` Santosh Shilimkar
2013-12-20 22:30 ` Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 09/23] mm/init: Use memblock apis for early memory allocations Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 10/23] mm/printk: " Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 11/23] mm/page_alloc: " Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 12/23] mm/power: " Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 13/23] mm/lib/swiotlb: " Santosh Shilimkar
2013-12-13 1:08 ` Andrew Morton
2013-12-13 1:24 ` Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 14/23] mm/lib/cpumask: " Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 15/23] mm/sparse: " Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 16/23] mm/hugetlb: " Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 17/23] mm/page_cgroup: " Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 18/23] mm/percpu: " Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 19/23] mm/memory_hotplug: " Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 20/23] mm/firmware: " Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 21/23] mm/ARM: kernel: " Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 22/23] mm/ARM: mm: " Santosh Shilimkar
2013-12-09 21:50 ` [PATCH v3 23/23] mm/ARM: OMAP: " Santosh Shilimkar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131209162517.b259540cdd23bfacadc9d171@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=grygorii.strashko@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=santosh.shilimkar@ti.com \
--cc=tj@kernel.org \
--cc=yinghai@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox