Patch "riscv: Fix P4D_SHIFT definition for 3-level page table mode" has been added to the 6.1-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 P4D_SHIFT definition for 3-level page table mode

to the 6.1-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-p4d_shift-definition-for-3-level-page-tabl.patch
and it can be found in the queue-6.1 subdirectory.

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



commit 1677c97670044f94e648e061b909efccd31f4312
Author: Alexandre Ghiti <alexghiti@xxxxxxxxxxxx>
Date:   Thu Dec 1 14:51:28 2022 +0100

    riscv: Fix P4D_SHIFT definition for 3-level page table mode
    
    [ Upstream commit 71fc3621efc38ace9640ee6a0db3300900689592 ]
    
    RISC-V kernels support 3,4,5-level page tables at runtime by folding
    upper levels.
    
    In case of a 3-level page table, PGDIR is folded into P4D which in turn
    is folded into PUD: PGDIR_SHIFT value is correctly set to the same value
    as PUD_SHIFT, but P4D_SHIFT is not, then any use of P4D_SHIFT will access
    invalid address bits (all set to 1).
    
    Fix this by dynamically defining P4D_SHIFT value, like we already do for
    PGDIR_SHIFT.
    
    Fixes: d10efa21a937 ("riscv: mm: Control p4d's folding by pgtable_l5_enabled")
    Signed-off-by: Alexandre Ghiti <alexghiti@xxxxxxxxxxxx>
    Reviewed-by: Palmer Dabbelt <palmer@xxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20221201135128.1482189-2-alexghiti@xxxxxxxxxxxx
    Signed-off-by: Palmer Dabbelt <palmer@xxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/riscv/include/asm/pgtable-64.h b/arch/riscv/include/asm/pgtable-64.h
index dc42375c2357..42a042c0e13e 100644
--- a/arch/riscv/include/asm/pgtable-64.h
+++ b/arch/riscv/include/asm/pgtable-64.h
@@ -25,7 +25,11 @@ extern bool pgtable_l5_enabled;
 #define PGDIR_MASK      (~(PGDIR_SIZE - 1))
 
 /* p4d is folded into pgd in case of 4-level page table */
-#define P4D_SHIFT      39
+#define P4D_SHIFT_L3   30
+#define P4D_SHIFT_L4   39
+#define P4D_SHIFT_L5   39
+#define P4D_SHIFT      (pgtable_l5_enabled ? P4D_SHIFT_L5 : \
+		(pgtable_l4_enabled ? P4D_SHIFT_L4 : P4D_SHIFT_L3))
 #define P4D_SIZE       (_AC(1, UL) << P4D_SHIFT)
 #define P4D_MASK       (~(P4D_SIZE - 1))
 



[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