9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit c32c2be34af08d1916382f329931866548e5cded
parent aff04880be7d7c5e6ee9efcfec213d12148c99bd
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Sat, 24 Oct 2020 09:25:07 +0200

os9/arm64: Improve break-before-make

This implementation ensures the correct break-before-make.

Change-Id: I2c7b79bc6b583e0c4890b7981da8727b6876994c

Diffstat:
Msrc/os9/arch/arm64/arch.s | 1-
Msrc/os9/arch/arm64/mmu.c | 6+++---
2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/os9/arch/arm64/arch.s b/src/os9/arch/arm64/arch.s @@ -39,7 +39,6 @@ invtlb: LSR X9,X0,#12 DSB ISHST TLBI VAE1,X9 -// DC CVAU,X0 // FIXME: line commented because it generates an exception DSB ISH RET diff --git a/src/os9/arch/arm64/mmu.c b/src/os9/arch/arm64/mmu.c @@ -183,6 +183,7 @@ vmap(phyaddr_t pa, uintptr_t va, int perm) attr |= EL0; /* + * TODO: It does not need locking, it needs a exclusive load * locking is needed if we are in a system * with SMMUv3 and page tables are shared. */ @@ -195,13 +196,12 @@ vmap(phyaddr_t pa, uintptr_t va, int perm) * in multi processor systems. */ *p = INVALID; + invtlb(va); barrier(DATA); + barrier(CODE); *p = MASK(pa) | attr; barrier(DATA); - barrier(CODE); - - invtlb(va); unlock(&m); dbg("page %p: %llx\n", p, MASK(pa) | attr);