On Mon, 10 Feb 2014 12:27:45 -0500 Luiz Capitulino <lcapitul...@redhat.com> wrote:
> From: Luiz capitulino <lcapitul...@redhat.com> > > 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 from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/