Module Name: src
Committed By: jmcneill
Date: Sat Jan 9 15:07:42 UTC 2021
Modified Files:
src/sys/arch/aarch64/aarch64: locore.S
Log Message:
Avoid mismatched memory attributes for kernel and page table memory.
The initial page table code enters mappings first through an identity
mapped normal-NC mapping. Then later on, additional mappings are added
through a KVA-mapped normal-WB mapping. There is a warning about this
in the Armv8 ARM:
Bytes written without the Write-Back cacheable attribute within the
same Write-Back granule as bytes written with the Write-Back cacheable
attribute might have their values reverted to the old values as a result
of cache Write-Back.
Change the identity mapping attributes to match the KVA-mapping. This
fixes an issue where the kernel often doesn't start under ESXi-Arm Fling.
To generate a diff of this commit:
cvs rdiff -u -r1.75 -r1.76 src/sys/arch/aarch64/aarch64/locore.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/aarch64/aarch64/locore.S
diff -u src/sys/arch/aarch64/aarch64/locore.S:1.75 src/sys/arch/aarch64/aarch64/locore.S:1.76
--- src/sys/arch/aarch64/aarch64/locore.S:1.75 Sat Dec 26 00:55:26 2020
+++ src/sys/arch/aarch64/aarch64/locore.S Sat Jan 9 15:07:42 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.S,v 1.75 2020/12/26 00:55:26 jmcneill Exp $ */
+/* $NetBSD: locore.S,v 1.76 2021/01/09 15:07:42 jmcneill Exp $ */
/*
* Copyright (c) 2017 Ryo Shimizu <[email protected]>
@@ -38,7 +38,7 @@
#include <aarch64/hypervisor.h>
#include "assym.h"
-RCSID("$NetBSD: locore.S,v 1.75 2020/12/26 00:55:26 jmcneill Exp $")
+RCSID("$NetBSD: locore.S,v 1.76 2021/01/09 15:07:42 jmcneill Exp $")
#ifdef AARCH64_DEVICE_MEM_STRONGLY_ORDERED
#define MAIR_DEVICE_MEM MAIR_DEVICE_nGnRnE
@@ -865,7 +865,8 @@ init_mmutable:
sub x2, x2, x1 /* size = _end - start */
add x2, x2, #PMAPBOOT_PAGEALLOCMAX /* for pmapboot_pagealloc() */
mov x3, #L2_SIZE /* blocksize */
- mov x4, #LX_BLKPAG_ATTR_NORMAL_NC | LX_BLKPAG_AP_RW /* attr */
+ mov x4, #LX_BLKPAG_ATTR_NORMAL_WB | LX_BLKPAG_AP_RW /* attr */
+ orr x4, x4, #LX_BLKPAG_UXN
mov x5, x26 /* pr func */
bl pmapboot_enter
cbnz x0, init_mmutable_error
@@ -879,7 +880,7 @@ init_mmutable:
mov x1, x8 /* pa */
mov x2, #L2_SIZE /* size */
mov x3, #L2_SIZE /* blocksize */
- mov x4, #LX_BLKPAG_ATTR_NORMAL_NC | LX_BLKPAG_AP_RW
+ mov x4, #LX_BLKPAG_ATTR_NORMAL_WB | LX_BLKPAG_AP_RW
orr x4, x4, #LX_BLKPAG_UXN | LX_BLKPAG_PXN /* attr */
mov x5, x26 /* pr func */
bl pmapboot_enter