Commit 1513c33d authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman

powerpc/powernv: Remove real mode access limit for early allocations

This removes the RMA limit on powernv platform, which constrains
early allocations such as PACAs and stacks. There are still other
restrictions that must be followed, such as bolted SLB limits, but
real mode addressing has no constraints.
Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent d4748276
...@@ -1848,16 +1848,22 @@ void hash__setup_initial_memory_limit(phys_addr_t first_memblock_base, ...@@ -1848,16 +1848,22 @@ void hash__setup_initial_memory_limit(phys_addr_t first_memblock_base,
*/ */
BUG_ON(first_memblock_base != 0); BUG_ON(first_memblock_base != 0);
/* On LPAR systems, the first entry is our RMA region, /*
* non-LPAR 64-bit hash MMU systems don't have a limitation * On virtualized systems the first entry is our RMA region aka VRMA,
* on real mode access, but using the first entry works well * non-virtualized 64-bit hash MMU systems don't have a limitation
* enough. We also clamp it to 1G to avoid some funky things * on real mode access.
*
* We also clamp it to 1G to avoid some funky things
* such as RTAS bugs etc... * such as RTAS bugs etc...
*/ */
if (!early_cpu_has_feature(CPU_FTR_HVMODE)) {
ppc64_rma_size = min_t(u64, first_memblock_size, 0x40000000); ppc64_rma_size = min_t(u64, first_memblock_size, 0x40000000);
/* Finally limit subsequent allocations */ /* Finally limit subsequent allocations */
memblock_set_current_limit(ppc64_rma_size); memblock_set_current_limit(ppc64_rma_size);
} else {
ppc64_rma_size = ULONG_MAX;
}
} }
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
......
...@@ -628,6 +628,8 @@ void radix__setup_initial_memory_limit(phys_addr_t first_memblock_base, ...@@ -628,6 +628,8 @@ void radix__setup_initial_memory_limit(phys_addr_t first_memblock_base,
* physical on those processors * physical on those processors
*/ */
BUG_ON(first_memblock_base != 0); BUG_ON(first_memblock_base != 0);
if (!early_cpu_has_feature(CPU_FTR_HVMODE)) {
/* /*
* We limit the allocation that depend on ppc64_rma_size * We limit the allocation that depend on ppc64_rma_size
* to first_memblock_size. We also clamp it to 1GB to * to first_memblock_size. We also clamp it to 1GB to
...@@ -644,6 +646,9 @@ void radix__setup_initial_memory_limit(phys_addr_t first_memblock_base, ...@@ -644,6 +646,9 @@ void radix__setup_initial_memory_limit(phys_addr_t first_memblock_base,
* we even limit at all ? * we even limit at all ?
*/ */
memblock_set_current_limit(first_memblock_base + first_memblock_size); memblock_set_current_limit(first_memblock_base + first_memblock_size);
} else {
ppc64_rma_size = ULONG_MAX;
}
} }
#ifdef CONFIG_MEMORY_HOTPLUG #ifdef CONFIG_MEMORY_HOTPLUG
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment