Patch "arm64: mm: use a 48-bit ID map when possible on 52-bit VA builds" has been added to the 5.11-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

    arm64: mm: use a 48-bit ID map when possible on 52-bit VA builds

to the 5.11-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:
     arm64-mm-use-a-48-bit-id-map-when-possible-on-52-bit.patch
and it can be found in the queue-5.11 subdirectory.

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



commit 5fb0a6b3ca7648ad7ee30f1ba95c9f9d1123c343
Author: Ard Biesheuvel <ardb@xxxxxxxxxx>
Date:   Wed Mar 10 18:15:11 2021 +0100

    arm64: mm: use a 48-bit ID map when possible on 52-bit VA builds
    
    [ Upstream commit 7ba8f2b2d652cd8d8a2ab61f4be66973e70f9f88 ]
    
    52-bit VA kernels can run on hardware that is only 48-bit capable, but
    configure the ID map as 52-bit by default. This was not a problem until
    recently, because the special T0SZ value for a 52-bit VA space was never
    programmed into the TCR register anwyay, and because a 52-bit ID map
    happens to use the same number of translation levels as a 48-bit one.
    
    This behavior was changed by commit 1401bef703a4 ("arm64: mm: Always update
    TCR_EL1 from __cpu_set_tcr_t0sz()"), which causes the unsupported T0SZ
    value for a 52-bit VA to be programmed into TCR_EL1. While some hardware
    simply ignores this, Mark reports that Amberwing systems choke on this,
    resulting in a broken boot. But even before that commit, the unsupported
    idmap_t0sz value was exposed to KVM and used to program TCR_EL2 incorrectly
    as well.
    
    Given that we already have to deal with address spaces being either 48-bit
    or 52-bit in size, the cleanest approach seems to be to simply default to
    a 48-bit VA ID map, and only switch to a 52-bit one if the placement of the
    kernel in DRAM requires it. This is guaranteed not to happen unless the
    system is actually 52-bit VA capable.
    
    Fixes: 90ec95cda91a ("arm64: mm: Introduce VA_BITS_MIN")
    Reported-by: Mark Salter <msalter@xxxxxxxxxx>
    Link: http://lore.kernel.org/r/20210310003216.410037-1-msalter@xxxxxxxxxx
    Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20210310171515.416643-2-ardb@xxxxxxxxxx
    Signed-off-by: Will Deacon <will@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h
index 0b3079fd28eb..1c364ec0ad31 100644
--- a/arch/arm64/include/asm/mmu_context.h
+++ b/arch/arm64/include/asm/mmu_context.h
@@ -65,10 +65,7 @@ extern u64 idmap_ptrs_per_pgd;
 
 static inline bool __cpu_uses_extended_idmap(void)
 {
-	if (IS_ENABLED(CONFIG_ARM64_VA_BITS_52))
-		return false;
-
-	return unlikely(idmap_t0sz != TCR_T0SZ(VA_BITS));
+	return unlikely(idmap_t0sz != TCR_T0SZ(vabits_actual));
 }
 
 /*
diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
index 7ec430e18f95..a0b3bfe67609 100644
--- a/arch/arm64/kernel/head.S
+++ b/arch/arm64/kernel/head.S
@@ -319,7 +319,7 @@ SYM_FUNC_START_LOCAL(__create_page_tables)
 	 */
 	adrp	x5, __idmap_text_end
 	clz	x5, x5
-	cmp	x5, TCR_T0SZ(VA_BITS)	// default T0SZ small enough?
+	cmp	x5, TCR_T0SZ(VA_BITS_MIN) // default T0SZ small enough?
 	b.ge	1f			// .. then skip VA range extension
 
 	adr_l	x6, idmap_t0sz
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index cb78343181db..6f0648777d34 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -40,7 +40,7 @@
 #define NO_BLOCK_MAPPINGS	BIT(0)
 #define NO_CONT_MAPPINGS	BIT(1)
 
-u64 idmap_t0sz = TCR_T0SZ(VA_BITS);
+u64 idmap_t0sz = TCR_T0SZ(VA_BITS_MIN);
 u64 idmap_ptrs_per_pgd = PTRS_PER_PGD;
 
 u64 __section(".mmuoff.data.write") vabits_actual;



[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