On Fri, 8 Nov 2013 18:41:45 -0500 Santosh Shilimkar <santosh.shilimkar@xxxxxx> 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. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>