Patch "riscv: Fix loading 64-bit NOMMU kernels past the start of RAM" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    riscv: Fix loading 64-bit NOMMU kernels past the start of RAM

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     riscv-fix-loading-64-bit-nommu-kernels-past-the-star.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 4ed76ea1f0f1cc1b03d61cde70fc70c72e13aeeb
Author: Samuel Holland <samuel.holland@xxxxxxxxxx>
Date:   Mon Feb 26 16:34:47 2024 -0800

    riscv: Fix loading 64-bit NOMMU kernels past the start of RAM
    
    [ Upstream commit aea702dde7e9876fb00571a2602f25130847bf0f ]
    
    commit 3335068f8721 ("riscv: Use PUD/P4D/PGD pages for the linear
    mapping") added logic to allow using RAM below the kernel load address.
    However, this does not work for NOMMU, where PAGE_OFFSET is fixed to the
    kernel load address. Since that range of memory corresponds to PFNs
    below ARCH_PFN_OFFSET, mm initialization runs off the beginning of
    mem_map and corrupts adjacent kernel memory. Fix this by restoring the
    previous behavior for NOMMU kernels.
    
    Fixes: 3335068f8721 ("riscv: Use PUD/P4D/PGD pages for the linear mapping")
    Signed-off-by: Samuel Holland <samuel.holland@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240227003630.3634533-3-samuel.holland@xxxxxxxxxx
    Signed-off-by: Palmer Dabbelt <palmer@xxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.h
index 57e887bfa34cb..94b3d6930fc37 100644
--- a/arch/riscv/include/asm/page.h
+++ b/arch/riscv/include/asm/page.h
@@ -89,7 +89,7 @@ typedef struct page *pgtable_t;
 #define PTE_FMT "%08lx"
 #endif
 
-#ifdef CONFIG_64BIT
+#if defined(CONFIG_64BIT) && defined(CONFIG_MMU)
 /*
  * We override this value as its generic definition uses __pa too early in
  * the boot process (before kernel_map.va_pa_offset is set).
diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
index b50faa232b5e9..ec02ea86aa39f 100644
--- a/arch/riscv/mm/init.c
+++ b/arch/riscv/mm/init.c
@@ -230,7 +230,7 @@ static void __init setup_bootmem(void)
 	 * In 64-bit, any use of __va/__pa before this point is wrong as we
 	 * did not know the start of DRAM before.
 	 */
-	if (IS_ENABLED(CONFIG_64BIT))
+	if (IS_ENABLED(CONFIG_64BIT) && IS_ENABLED(CONFIG_MMU))
 		kernel_map.va_pa_offset = PAGE_OFFSET - phys_ram_base;
 
 	/*




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux