| From 8475d8fe21ec9c7eb2faca555fbc5b68cf0d2597 Mon Sep 17 00:00:00 2001 |
| From: Helge Deller <deller@gmx.de> |
| Date: Wed, 4 Mar 2026 22:24:18 +0100 |
| Subject: parisc: Fix initial page table creation for boot |
| |
| From: Helge Deller <deller@gmx.de> |
| |
| commit 8475d8fe21ec9c7eb2faca555fbc5b68cf0d2597 upstream. |
| |
| The KERNEL_INITIAL_ORDER value defines the initial size (usually 32 or |
| 64 MB) of the page table during bootup. Up until now the whole area was |
| initialized with PTE entries, but there was no check if we filled too |
| many entries. Change the code to fill up with so many entries that the |
| "_end" symbol can be reached by the kernel, but not more entries than |
| actually fit into the initial PTE tables. |
| |
| Signed-off-by: Helge Deller <deller@gmx.de> |
| Cc: <stable@vger.kernel.org> # v6.0+ |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/parisc/kernel/head.S | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/arch/parisc/kernel/head.S |
| +++ b/arch/parisc/kernel/head.S |
| @@ -55,6 +55,7 @@ ENTRY(parisc_kernel_start) |
| |
| .import __bss_start,data |
| .import __bss_stop,data |
| + .import __end,data |
| |
| load32 PA(__bss_start),%r3 |
| load32 PA(__bss_stop),%r4 |
| @@ -148,7 +149,11 @@ $cpu_ok: |
| * everything ... it will get remapped correctly later */ |
| ldo 0+_PAGE_KERNEL_RWX(%r0),%r3 /* Hardwired 0 phys addr start */ |
| load32 (1<<(KERNEL_INITIAL_ORDER-PAGE_SHIFT)),%r11 /* PFN count */ |
| - load32 PA(pg0),%r1 |
| + load32 PA(_end),%r1 |
| + SHRREG %r1,PAGE_SHIFT,%r1 /* %r1 is PFN count for _end symbol */ |
| + cmpb,<<,n %r11,%r1,1f |
| + copy %r1,%r11 /* %r1 PFN count smaller than %r11 */ |
| +1: load32 PA(pg0),%r1 |
| |
| $pgt_fill_loop: |
| STREGM %r3,ASM_PTE_ENTRY_SIZE(%r1) |