All of lore.kernel.org
 help / color / mirror / Atom feed
From: santosh.shilimkar@ti.com (Santosh Shilimkar)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 09/24] mm/memblock: Add memblock memory allocation apis
Date: Mon, 2 Dec 2013 19:48:47 -0500	[thread overview]
Message-ID: <529D2A6F.5050607@ti.com> (raw)
In-Reply-To: <20131202163136.f31f39c5940c0ba6d20f4a00@linux-foundation.org>

On Monday 02 December 2013 07:31 PM, Andrew Morton wrote:
> On Fri, 8 Nov 2013 18:41:45 -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 interfaces and other which still uses bootmem, these new
>> APIs just fallback to exiting bootmem APIs. So no functional change as
>> such.
>>
>> In long run, once all the achitectures 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 void * __init _memblock_virt_alloc_try_nid_nopanic(
>> +				phys_addr_t size, phys_addr_t align,
>> +				phys_addr_t from, phys_addr_t max_addr,
>> +				int nid)
>> +{
>> +	phys_addr_t alloc;
>> +	void *ptr;
>> +
>> +	if (WARN_ON_ONCE(slab_is_available())) {
>> +		if (nid == MAX_NUMNODES)
>> +			return kzalloc(size, GFP_NOWAIT);
>> +		else
>> +			return kzalloc_node(size, GFP_NOWAIT, nid);
>> +	}
> 
> The use of MAX_NUMNODES is a bit unconventional here.  I *think* we
> generally use NUMA_NO_NODE to indicate "don't care".  I Also *think*
> that if this code did s/MAX_NUMNODES/NUMA_NO_NODE/g then the above
> simply becomes
> 
> 	return kzalloc_node(size, GFP_NOWAIT, nid);
> 
> and kzalloc_node() handles NUMA_NO_NODE appropriately.
> 
> I *think* ;)  Please check all this.
> 
I guess same comment was given by Tejun as well. We didn't
address that in this series mainly because when NO_BOOTMEM
are not enabled, all calls of the new APIs will
be redirected to bootmem  where MAX_NUMNODES is used.

Also, memblock core APIs __next_free_mem_range_rev() and
__next_free_mem_range() would need to be updated, and as result
we will need to re-check/update all direct calls of
memblock_alloc_xxx() APIs (including nobootmem).

So to keep behavior consistent with and without NO_BOOTMEM, we
used MAX_NUMNODES. Once we get a stage where we can remove
the bootmem.c, it should be easy to update the code
to use NUMA_NO_NODE without too much churn.

Regards,
Santosh

WARNING: multiple messages have this Message-ID (diff)
From: Santosh Shilimkar <santosh.shilimkar@ti.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: tj@kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	linux-arm-kernel@lists.infradead.org,
	Yinghai Lu <yinghai@kernel.org>,
	Grygorii Strashko <grygorii.strashko@ti.com>
Subject: Re: [PATCH 09/24] mm/memblock: Add memblock memory allocation apis
Date: Mon, 2 Dec 2013 19:48:47 -0500	[thread overview]
Message-ID: <529D2A6F.5050607@ti.com> (raw)
In-Reply-To: <20131202163136.f31f39c5940c0ba6d20f4a00@linux-foundation.org>

On Monday 02 December 2013 07:31 PM, Andrew Morton wrote:
> On Fri, 8 Nov 2013 18:41:45 -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 interfaces and other which still uses bootmem, these new
>> APIs just fallback to exiting bootmem APIs. So no functional change as
>> such.
>>
>> In long run, once all the achitectures 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 void * __init _memblock_virt_alloc_try_nid_nopanic(
>> +				phys_addr_t size, phys_addr_t align,
>> +				phys_addr_t from, phys_addr_t max_addr,
>> +				int nid)
>> +{
>> +	phys_addr_t alloc;
>> +	void *ptr;
>> +
>> +	if (WARN_ON_ONCE(slab_is_available())) {
>> +		if (nid == MAX_NUMNODES)
>> +			return kzalloc(size, GFP_NOWAIT);
>> +		else
>> +			return kzalloc_node(size, GFP_NOWAIT, nid);
>> +	}
> 
> The use of MAX_NUMNODES is a bit unconventional here.  I *think* we
> generally use NUMA_NO_NODE to indicate "don't care".  I Also *think*
> that if this code did s/MAX_NUMNODES/NUMA_NO_NODE/g then the above
> simply becomes
> 
> 	return kzalloc_node(size, GFP_NOWAIT, nid);
> 
> and kzalloc_node() handles NUMA_NO_NODE appropriately.
> 
> I *think* ;)  Please check all this.
> 
I guess same comment was given by Tejun as well. We didn't
address that in this series mainly because when NO_BOOTMEM
are not enabled, all calls of the new APIs will
be redirected to bootmem  where MAX_NUMNODES is used.

Also, memblock core APIs __next_free_mem_range_rev() and
__next_free_mem_range() would need to be updated, and as result
we will need to re-check/update all direct calls of
memblock_alloc_xxx() APIs (including nobootmem).

So to keep behavior consistent with and without NO_BOOTMEM, we
used MAX_NUMNODES. Once we get a stage where we can remove
the bootmem.c, it should be easy to update the code
to use NUMA_NO_NODE without too much churn.

Regards,
Santosh

--
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>

WARNING: multiple messages have this Message-ID (diff)
From: Santosh Shilimkar <santosh.shilimkar@ti.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: <tj@kernel.org>, <linux-kernel@vger.kernel.org>,
	<linux-mm@kvack.org>, <linux-arm-kernel@lists.infradead.org>,
	Yinghai Lu <yinghai@kernel.org>,
	Grygorii Strashko <grygorii.strashko@ti.com>
Subject: Re: [PATCH 09/24] mm/memblock: Add memblock memory allocation apis
Date: Mon, 2 Dec 2013 19:48:47 -0500	[thread overview]
Message-ID: <529D2A6F.5050607@ti.com> (raw)
In-Reply-To: <20131202163136.f31f39c5940c0ba6d20f4a00@linux-foundation.org>

On Monday 02 December 2013 07:31 PM, Andrew Morton wrote:
> On Fri, 8 Nov 2013 18:41:45 -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 interfaces and other which still uses bootmem, these new
>> APIs just fallback to exiting bootmem APIs. So no functional change as
>> such.
>>
>> In long run, once all the achitectures 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 void * __init _memblock_virt_alloc_try_nid_nopanic(
>> +				phys_addr_t size, phys_addr_t align,
>> +				phys_addr_t from, phys_addr_t max_addr,
>> +				int nid)
>> +{
>> +	phys_addr_t alloc;
>> +	void *ptr;
>> +
>> +	if (WARN_ON_ONCE(slab_is_available())) {
>> +		if (nid == MAX_NUMNODES)
>> +			return kzalloc(size, GFP_NOWAIT);
>> +		else
>> +			return kzalloc_node(size, GFP_NOWAIT, nid);
>> +	}
> 
> The use of MAX_NUMNODES is a bit unconventional here.  I *think* we
> generally use NUMA_NO_NODE to indicate "don't care".  I Also *think*
> that if this code did s/MAX_NUMNODES/NUMA_NO_NODE/g then the above
> simply becomes
> 
> 	return kzalloc_node(size, GFP_NOWAIT, nid);
> 
> and kzalloc_node() handles NUMA_NO_NODE appropriately.
> 
> I *think* ;)  Please check all this.
> 
I guess same comment was given by Tejun as well. We didn't
address that in this series mainly because when NO_BOOTMEM
are not enabled, all calls of the new APIs will
be redirected to bootmem  where MAX_NUMNODES is used.

Also, memblock core APIs __next_free_mem_range_rev() and
__next_free_mem_range() would need to be updated, and as result
we will need to re-check/update all direct calls of
memblock_alloc_xxx() APIs (including nobootmem).

So to keep behavior consistent with and without NO_BOOTMEM, we
used MAX_NUMNODES. Once we get a stage where we can remove
the bootmem.c, it should be easy to update the code
to use NUMA_NO_NODE without too much churn.

Regards,
Santosh

  reply	other threads:[~2013-12-03  0:48 UTC|newest]

Thread overview: 108+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-08 23:41 [PATCH 00/24] mm: Use memblock interface instead of bootmem Santosh Shilimkar
2013-11-08 23:41 ` Santosh Shilimkar
2013-11-08 23:41 ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 01/24] mm/memblock: debug: correct displaying of upper memory boundary Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 02/24] mm/memblock: debug: don't free reserved array if !ARCH_DISCARD_MEMBLOCK Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 03/24] mm/bootmem: remove duplicated declaration of __free_pages_bootmem() Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 04/24] mm/block: remove unnecessary inclusion of bootmem.h Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-13  2:09   ` Jens Axboe
2013-11-13  2:09     ` Jens Axboe
2013-11-13  2:09     ` Jens Axboe
2013-11-13 23:10     ` Santosh Shilimkar
2013-11-13 23:10       ` Santosh Shilimkar
2013-11-13 23:10       ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 05/24] mm/memory_hotplug: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 06/24] mm/staging: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 07/24] mm/char: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 08/24] mm/memblock: drop WARN and use SMP_CACHE_BYTES as a default alignment Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 09/24] mm/memblock: Add memblock memory allocation apis Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-12-03  0:31   ` Andrew Morton
2013-12-03  0:31     ` Andrew Morton
2013-12-03  0:31     ` Andrew Morton
2013-12-03  0:48     ` Santosh Shilimkar [this message]
2013-12-03  0:48       ` Santosh Shilimkar
2013-12-03  0:48       ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 10/24] mm/init: Use memblock apis for early memory allocations Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 11/24] mm/printk: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 12/24] mm/page_alloc: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 13/24] mm/power: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-09  1:30   ` Rafael J. Wysocki
2013-11-09  1:30     ` Rafael J. Wysocki
2013-11-09  1:30     ` Rafael J. Wysocki
2013-11-09 19:08     ` Santosh Shilimkar
2013-11-09 19:08       ` Santosh Shilimkar
2013-11-09 19:08       ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 14/24] mm/lib/swiotlb: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-09 16:55   ` Konrad Rzeszutek Wilk
2013-11-09 16:55     ` Konrad Rzeszutek Wilk
2013-11-09 16:55     ` Konrad Rzeszutek Wilk
2013-11-09 19:07     ` Santosh Shilimkar
2013-11-09 19:07       ` Santosh Shilimkar
2013-11-09 19:07       ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 15/24] mm/lib/cpumask: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 16/24] mm/sparse: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 17/24] mm/hugetlb: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 18/24] mm/page_cgroup: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 19/24] mm/percpu: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 20/24] mm/memory_hotplug: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 21/24] mm/firmware: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 22/24] mm/ARM: kernel: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41 ` [PATCH 23/24] mm/ARM: mm: " Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:41   ` Santosh Shilimkar
2013-11-08 23:42 ` [PATCH 24/24] mm/ARM: OMAP: " Santosh Shilimkar
2013-11-08 23:42   ` Santosh Shilimkar
2013-11-08 23:42   ` Santosh Shilimkar
2013-11-29 16:50 ` [PATCH 00/24] mm: Use memblock interface instead of bootmem Santosh Shilimkar
2013-11-29 16:50   ` Santosh Shilimkar
2013-11-29 16:50   ` Santosh Shilimkar
2013-12-03  0:32   ` Andrew Morton
2013-12-03  0:32     ` Andrew Morton
2013-12-03  0:32     ` Andrew Morton
2013-12-03  0:40     ` Santosh Shilimkar
2013-12-03  0:40       ` Santosh Shilimkar
2013-12-03  0:40       ` 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=529D2A6F.5050607@ti.com \
    --to=santosh.shilimkar@ti.com \
    --cc=linux-arm-kernel@lists.infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.