Module Name: src Committed By: ryo Date: Thu Oct 15 08:37:20 UTC 2020
Modified Files: src/sys/arch/aarch64/aarch64: vectors.S Log Message: slightly optimized loop for trap_doast() calls To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 src/sys/arch/aarch64/aarch64/vectors.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/vectors.S diff -u src/sys/arch/aarch64/aarch64/vectors.S:1.20 src/sys/arch/aarch64/aarch64/vectors.S:1.21 --- src/sys/arch/aarch64/aarch64/vectors.S:1.20 Tue Oct 6 06:26:46 2020 +++ src/sys/arch/aarch64/aarch64/vectors.S Thu Oct 15 08:37:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: vectors.S,v 1.20 2020/10/06 06:26:46 skrll Exp $ */ +/* $NetBSD: vectors.S,v 1.21 2020/10/15 08:37:20 ryo Exp $ */ #include <aarch64/asm.h> #include <aarch64/locore.h> @@ -10,7 +10,7 @@ #include "opt_ddb.h" #include "opt_dtrace.h" -RCSID("$NetBSD: vectors.S,v 1.20 2020/10/06 06:26:46 skrll Exp $") +RCSID("$NetBSD: vectors.S,v 1.21 2020/10/15 08:37:20 ryo Exp $") ARMV8_DEFINE_OPTIONS @@ -255,26 +255,26 @@ ENTRY_NP(el0_trap) nop /* dummy for DDB backtrace (for lr-4) */ #endif ENTRY_NP(el0_trap_exit) - DISABLE_INTERRUPT /* make sure I|F marked */ + + adr lr, 1f /* return address from trap_doast */ 1: /* while (curlwp->l_md.md_astpending != 0) { */ - mrs x8, tpidr_el1 - ldr w9, [x8, #L_MD_ASTPENDING] - cbz w9, 9f + DISABLE_INTERRUPT /* make sure I|F marked */ + mrs x9, tpidr_el1 + ldr w8, [x9, #L_MD_ASTPENDING] + cbz w8, 9f /* curlwp->l_md.md_astpending = 0; */ - str xzr, [x8, #L_MD_ASTPENDING] + str xzr, [x9, #L_MD_ASTPENDING] /* trap_doast(tf); */ ENABLE_INTERRUPT mov x0, sp - bl _C_LABEL(trap_doast) - DISABLE_INTERRUPT - b 1b + b _C_LABEL(trap_doast) /* tail call (return to 1b) */ /* } */ 9: - mrs x9, tpidr_el1 + /* x9 is tpidr_el1 */ ldr x23, [x9, #L_MD_CPACR] msr cpacr_el1, x23 /* FP unit EL0 handover */ isb /* necessary? */