diff mbox series

[v2] powerpc: Fix preserved memory size for int-vectors

Message ID 20240113080509.1598290-1-guozihua@huawei.com (mailing list archive)
State Accepted
Commit 473e2311f31fdcae8e3f4410d119dbfece656edc
Headers show
Series [v2] powerpc: Fix preserved memory size for int-vectors | expand

Checks

Context Check Description
snowpatch_ozlabs/github-powerpc_selftests success Successfully ran 8 jobs.

Commit Message

GUO Zihua Jan. 13, 2024, 8:05 a.m. UTC
The first 32k of memory is reserved for interrupt vectors, however for
powerpc64 this might not be enough. Fix this by reserving the maximum
size between 32k and the real size of interrupt vectors.

Signed-off-by: GUO Zihua <guozihua@huawei.com>
---

v2:
  Eliminate the unneccessary casting and changed type of int_vector_size
into phys_addr_t.

---
 arch/powerpc/kernel/prom.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

Comments

Michael Ellerman May 8, 2024, 1:39 p.m. UTC | #1
On Sat, 13 Jan 2024 08:05:09 +0000, GUO Zihua wrote:
> The first 32k of memory is reserved for interrupt vectors, however for
> powerpc64 this might not be enough. Fix this by reserving the maximum
> size between 32k and the real size of interrupt vectors.
> 
> 

Applied to powerpc/next.

[1/1] powerpc: Fix preserved memory size for int-vectors
      https://git.kernel.org/powerpc/c/473e2311f31fdcae8e3f4410d119dbfece656edc

cheers
diff mbox series

Patch

diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index 0b5878c3125b..cec5ec320ba3 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -757,7 +757,7 @@  static inline void save_fscr_to_task(void) {}
 
 void __init early_init_devtree(void *params)
 {
-	phys_addr_t limit;
+	phys_addr_t limit, int_vector_size;
 
 	DBG(" -> early_init_devtree(%px)\n", params);
 
@@ -810,9 +810,16 @@  void __init early_init_devtree(void *params)
 	setup_initial_memory_limit(memstart_addr, first_memblock_size);
 	/* Reserve MEMBLOCK regions used by kernel, initrd, dt, etc... */
 	memblock_reserve(PHYSICAL_START, __pa(_end) - PHYSICAL_START);
+#ifdef CONFIG_PPC64
+	/* If relocatable, reserve at least 32k for interrupt vectors etc. */
+	int_vector_size = __end_interrupts - _stext;
+	int_vector_size = max_t(phys_addr_t, SZ_32K, int_vector_size);
+#else
 	/* If relocatable, reserve first 32k for interrupt vectors etc. */
+	int_vector_size = SZ_32K;
+#endif
 	if (PHYSICAL_START > MEMORY_START)
-		memblock_reserve(MEMORY_START, 0x8000);
+		memblock_reserve(MEMORY_START, int_vector_size);
 	reserve_kdump_trampoline();
 #if defined(CONFIG_FA_DUMP) || defined(CONFIG_PRESERVE_FA_DUMP)
 	/*