Module Name:    src
Committed By:   jmcneill
Date:           Sun Oct 31 15:32:14 UTC 2021

Modified Files:
        src/sys/arch/arm/cortex: gic_splfuncs_armv8.S

Log Message:
Reload tpidr_el1 into x3 and re-test newipl vs cpl on restart.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/cortex/gic_splfuncs_armv8.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/arm/cortex/gic_splfuncs_armv8.S
diff -u src/sys/arch/arm/cortex/gic_splfuncs_armv8.S:1.2 src/sys/arch/arm/cortex/gic_splfuncs_armv8.S:1.3
--- src/sys/arch/arm/cortex/gic_splfuncs_armv8.S:1.2	Sat Oct 30 20:23:12 2021
+++ src/sys/arch/arm/cortex/gic_splfuncs_armv8.S	Sun Oct 31 15:32:14 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: gic_splfuncs_armv8.S,v 1.2 2021/10/30 20:23:12 jmcneill Exp $ */
+/* $NetBSD: gic_splfuncs_armv8.S,v 1.3 2021/10/31 15:32:14 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2021 Jared McNeill <jmcne...@invisible.ca>
@@ -29,7 +29,7 @@
 #include <machine/asm.h>
 #include "assym.h"
 
-RCSID("$NetBSD: gic_splfuncs_armv8.S,v 1.2 2021/10/30 20:23:12 jmcneill Exp $")
+RCSID("$NetBSD: gic_splfuncs_armv8.S,v 1.3 2021/10/31 15:32:14 jmcneill Exp $")
 
 #ifdef __HAVE_PREEMPTION
 #define	DISABLE_PREEMPTION			\
@@ -84,12 +84,12 @@ ENTRY_NP(gic_splx)
 	DISABLE_PREEMPTION
 	ldr	x1, [x3, #L_CPU]		/* get curcpu */
 
+.Lagain:
 	/* If newipl >= cpl, just return */
 	ldr	w2, [x1, #CI_CPL]
 	cmp	w0, w2
 	b.hs	.Ldone
 
-.Lagain:
 	/* Slow path if ci_intr_depth != 0 */
 	ldr	w2, [x1, #CI_INTR_DEPTH]
 	cbnz	w2, .Lslow
@@ -120,9 +120,9 @@ ENTRY_NP(gic_splx)
 	ret
 
 .Lrestart:
-	/* Reload w0 and x1 */
-	mrs	x1, tpidr_el1			/* get curlwp */
-	ldr	x1, [x1, #L_CPU]		/* get curcpu */
+	/* Reload registers */
+	mrs	x3, tpidr_el1			/* get curlwp */
+	ldr	x1, [x3, #L_CPU]		/* get curcpu */
 	ldr	w0, [x1, #CI_SPLX_SAVEDIPL]	/* get newipl */
 	b	.Lagain
 	

Reply via email to