On Mon, 10 Feb 2014 12:27:45 -0500 Luiz Capitulino <lcapitulino@xxxxxxxxxx> wrote: > From: Luiz capitulino <lcapitulino@xxxxxxxxxx> > > If an allocation from the node specified by the nid argument fails, > memblock_virt_alloc_internal() automatically tries to allocate memory > from other nodes. > > This is fine is the caller don't care which node is going to allocate > the memory. However, there are cases where the caller wants memory to > be allocated from the specified node only. If that's not possible, then > memblock_virt_alloc_internal() should just fail. > > This commit adds a new flags argument to memblock_virt_alloc_internal() > where the caller can control this behavior. > > ... > > --- a/mm/memblock.c > +++ b/mm/memblock.c > @@ -1028,6 +1028,8 @@ phys_addr_t __init memblock_alloc_try_nid(phys_addr_t size, phys_addr_t align, i > return memblock_alloc_base(size, align, MEMBLOCK_ALLOC_ACCESSIBLE); > } > > +#define ALLOC_SPECIFIED_NODE_ONLY 0x1 > + > /** > * memblock_virt_alloc_internal - allocate boot memory block > * @size: size of memory block to be allocated in bytes > @@ -1058,7 +1060,7 @@ phys_addr_t __init memblock_alloc_try_nid(phys_addr_t size, phys_addr_t align, i > 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) > + int nid, unsigned int flags) > { > phys_addr_t alloc; > void *ptr; > @@ -1085,6 +1087,8 @@ again: > nid); > if (alloc) > goto done; > + else if (flags & ALLOC_SPECIFIED_NODE_ONLY) > + goto error; "else" is unneeded. > if (nid != NUMA_NO_NODE) { > alloc = memblock_find_in_range_node(size, align, min_addr, > > ... > -- 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>