diff options
author | Vinayak Menon <vinmenon@codeaurora.org> | 2016-02-22 19:15:44 +0530 |
---|---|---|
committer | Sasha Levin <sasha.levin@oracle.com> | 2016-04-18 08:49:23 -0400 |
commit | c0fd92c4a0cac1f210b5868cec69df5ccb4a3146 (patch) | |
tree | 76166b15bd2a37e600ece6e82cdae4f1d5972bc2 /drivers/of | |
parent | 08c198b51ee50d3c3b500eb5548d69d5835d2b52 (diff) | |
download | linux-stable-c0fd92c4a0cac1f210b5868cec69df5ccb4a3146.tar.gz linux-stable-c0fd92c4a0cac1f210b5868cec69df5ccb4a3146.tar.bz2 linux-stable-c0fd92c4a0cac1f210b5868cec69df5ccb4a3146.zip |
of: alloc anywhere from memblock if range not specified
[ Upstream commit e53b50c0cbe392c946807abf7d07615a3c588642 ]
early_init_dt_alloc_reserved_memory_arch passes end as 0 to
__memblock_alloc_base, when limits are not specified. But
__memblock_alloc_base takes end value of 0 as MEMBLOCK_ALLOC_ACCESSIBLE
and limits the end to memblock.current_limit. This results in regions
never being placed in HIGHMEM area, for e.g. CMA.
Let __memblock_alloc_base allocate from anywhere in memory if limits are
not specified.
Acked-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Vinayak Menon <vinmenon@codeaurora.org>
Cc: stable@vger.kernel.org
Signed-off-by: Rob Herring <robh@kernel.org>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Diffstat (limited to 'drivers/of')
-rw-r--r-- | drivers/of/of_reserved_mem.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c index dc566b38645f..2ede604ff17a 100644 --- a/drivers/of/of_reserved_mem.c +++ b/drivers/of/of_reserved_mem.c @@ -31,11 +31,13 @@ int __init __weak early_init_dt_alloc_reserved_memory_arch(phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end, bool nomap, phys_addr_t *res_base) { + phys_addr_t base; /* * We use __memblock_alloc_base() because memblock_alloc_base() * panic()s on allocation failure. */ - phys_addr_t base = __memblock_alloc_base(size, align, end); + end = !end ? MEMBLOCK_ALLOC_ANYWHERE : end; + base = __memblock_alloc_base(size, align, end); if (!base) return -ENOMEM; |