Module Name:    src
Committed By:   ryo
Date:           Thu Aug  6 06:49:55 UTC 2020

Modified Files:
        src/sys/arch/aarch64/aarch64: copyinout.S cpuswitch.S fault.c fusu.S
            genassym.cf
        src/sys/arch/aarch64/include: frame.h machdep.h

Log Message:
revert the changes of 
http://mail-index.netbsd.org/source-changes/2020/08/03/msg120183.html

This change is overengineered.
bus_space_{peek,poke}_N does not have to be reentrant nor available for 
interrupt context.

requested by skrll@


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/aarch64/aarch64/copyinout.S
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/aarch64/aarch64/cpuswitch.S
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/aarch64/aarch64/fault.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/aarch64/aarch64/fusu.S
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/aarch64/aarch64/genassym.cf
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/aarch64/include/frame.h
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/aarch64/include/machdep.h

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/copyinout.S
diff -u src/sys/arch/aarch64/aarch64/copyinout.S:1.13 src/sys/arch/aarch64/aarch64/copyinout.S:1.14
--- src/sys/arch/aarch64/aarch64/copyinout.S:1.13	Mon Aug  3 06:29:59 2020
+++ src/sys/arch/aarch64/aarch64/copyinout.S	Thu Aug  6 06:49:55 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: copyinout.S,v 1.13 2020/08/03 06:29:59 ryo Exp $ */
+/* $NetBSD: copyinout.S,v 1.14 2020/08/06 06:49:55 ryo Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
 #include <aarch64/asm.h>
 #include "assym.h"
 
-RCSID("$NetBSD: copyinout.S,v 1.13 2020/08/03 06:29:59 ryo Exp $");
+RCSID("$NetBSD: copyinout.S,v 1.14 2020/08/06 06:49:55 ryo Exp $");
 
 #ifdef ARMV81_PAN
 #define PAN_ENABLE	\
@@ -63,7 +63,7 @@ RCSID("$NetBSD: copyinout.S,v 1.13 2020/
 	mov	x19, x0			/* x19 = arg0 */
 	mov	x20, x1			/* x20 = arg1 */
 
-	/* if (cpu_set_onfault(fb) != 0) return error */
+	/* if (cpu_set_onfault(fb) != 0) return -1 */
 	sub	sp, sp, #FB_T_SIZE	/* allocate struct faultbuf */
 	mov	x0, sp			/* x0 = faultbuf */
 	stp	x2, x3, [sp, #-16]!	/* save x2, x3 */
@@ -79,8 +79,10 @@ RCSID("$NetBSD: copyinout.S,v 1.13 2020/
 	.endm
 
 	.macro exit_cpu_onfault
-	bl	cpu_unset_onfault
-	mov	x8, xzr
+	/* curlwp->l_md.md_onfault = NULL */
+	mrs	x0, tpidr_el1			/* curcpu */
+	ldr	x0, [x0, #CI_CURLWP]		/* x0 = curlwp */
+	str	xzr, [x0, #L_MD_ONFAULT]	/* lwp->l_md_onfault = NULL */
 9:
 	PAN_ENABLE				/* enable PAN */
 	add	sp, sp, #FB_T_SIZE		/* pop stack */

Index: src/sys/arch/aarch64/aarch64/cpuswitch.S
diff -u src/sys/arch/aarch64/aarch64/cpuswitch.S:1.23 src/sys/arch/aarch64/aarch64/cpuswitch.S:1.24
--- src/sys/arch/aarch64/aarch64/cpuswitch.S:1.23	Mon Aug  3 05:56:50 2020
+++ src/sys/arch/aarch64/aarch64/cpuswitch.S	Thu Aug  6 06:49:55 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: cpuswitch.S,v 1.23 2020/08/03 05:56:50 ryo Exp $ */
+/* $NetBSD: cpuswitch.S,v 1.24 2020/08/06 06:49:55 ryo Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
 #include "opt_ddb.h"
 #include "opt_kasan.h"
 
-RCSID("$NetBSD: cpuswitch.S,v 1.23 2020/08/03 05:56:50 ryo Exp $")
+RCSID("$NetBSD: cpuswitch.S,v 1.24 2020/08/06 06:49:55 ryo Exp $")
 
 	ARMV8_DEFINE_OPTIONS
 
@@ -447,40 +447,22 @@ END(cpu_Debugger)
  */
 ENTRY_NP(cpu_set_onfault)
 	mrs	x3, tpidr_el1
-	ldr	x2, [x3, #CI_CURLWP]	/* x2 = curcpu()->ci_curlwp */
-	ldr	x1, [x2, #L_MD_ONFAULT]
-	str	x1, [x0, #FB_OLD]	/* fb->fb_old = curlwp->l_md.md_onfault */
-	ldr	w1, [x3, #CI_INTR_DEPTH]
-	str	w1, [x0, #FB_IDEPTH]	/* fb->fb_idepth = curcpu()->ci_intr_depth */
+	ldr	x2, [x3, #CI_CURLWP]	/* curlwp = curcpu()->ci_curlwp */
 	str	x0, [x2, #L_MD_ONFAULT] /* l_md.md_onfault = fb */
 
-	stp	x19, x20, [x0, #FB_REG_X19]
-	stp	x21, x22, [x0, #FB_REG_X21]
-	stp	x23, x24, [x0, #FB_REG_X23]
-	stp	x25, x26, [x0, #FB_REG_X25]
-	stp	x27, x28, [x0, #FB_REG_X27]
-	stp	x29, x30, [x0, #FB_REG_X29]
+	stp	x19, x20, [x0, #(FB_X19 * 8)]
+	stp	x21, x22, [x0, #(FB_X21 * 8)]
+	stp	x23, x24, [x0, #(FB_X23 * 8)]
+	stp	x25, x26, [x0, #(FB_X25 * 8)]
+	stp	x27, x28, [x0, #(FB_X27 * 8)]
+	stp	x29, x30, [x0, #(FB_X29 * 8)]
 	mov	x1, sp
-	str	x1, [x0, #FB_REG_SP]
+	str	x1, [x0, #(FB_SP * 8)]
 	mov	x0, #0
 	ret
 END(cpu_set_onfault)
 
 /*
- * void cpu_unset_onfault(void)
- */
-ENTRY_NP(cpu_unset_onfault)
-	mrs	x3, tpidr_el1
-	ldr	x2, [x3, #CI_CURLWP]	/* curlwp = curcpu()->ci_curlwp */
-	ldr	x0, [x2, #L_MD_ONFAULT]	/* x0 = curlwp->l_md.md_onfault */
-	cbz	x0, 1f
-	ldr	x0, [x0, #FB_OLD]	/* restore old faultbuf */
-	str	x0, [x2, #L_MD_ONFAULT]
-1:
-	ret
-END(cpu_unset_onfault)
-
-/*
  * setjmp(9)
  * int setjmp(label_t *label);
  * void longjmp(label_t *label);

Index: src/sys/arch/aarch64/aarch64/fault.c
diff -u src/sys/arch/aarch64/aarch64/fault.c:1.16 src/sys/arch/aarch64/aarch64/fault.c:1.17
--- src/sys/arch/aarch64/aarch64/fault.c:1.16	Mon Aug  3 05:56:50 2020
+++ src/sys/arch/aarch64/aarch64/fault.c	Thu Aug  6 06:49:55 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fault.c,v 1.16 2020/08/03 05:56:50 ryo Exp $	*/
+/*	$NetBSD: fault.c,v 1.17 2020/08/06 06:49:55 ryo Exp $	*/
 
 /*
  * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fault.c,v 1.16 2020/08/03 05:56:50 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fault.c,v 1.17 2020/08/06 06:49:55 ryo Exp $");
 
 #include "opt_compat_netbsd32.h"
 #include "opt_ddb.h"
@@ -220,18 +220,11 @@ data_abort_handler(struct trapframe *tf,
 		return;
 	}
 
+
  do_fault:
 	/* faultbail path? */
-	fb = l->l_md.md_onfault;
-	if (fb != NULL && fb->fb_idepth == curcpu()->ci_intr_depth) {
-		cpu_unset_onfault();
-#ifdef DEBUG_DUMP_ON_FAULTBAIL
-		printf("fault in failtbail[%p]: "
-		    "fb_sp=%016lx, fb_lr=%016lx, fb_idepth=%u, fb_old=%p\n",
-		    fb, fb->fb_reg[FB_SP], fb->fb_reg[FB_LR],
-		    fb->fb_idepth, fb->fb_old);
-		dump_trapframe(tf, printf);
-#endif
+	fb = cpu_disable_onfault();
+	if (fb != NULL) {
 		cpu_jump_onfault(tf, fb, EFAULT);
 		return;
 	}

Index: src/sys/arch/aarch64/aarch64/fusu.S
diff -u src/sys/arch/aarch64/aarch64/fusu.S:1.8 src/sys/arch/aarch64/aarch64/fusu.S:1.9
--- src/sys/arch/aarch64/aarch64/fusu.S:1.8	Mon Aug  3 05:56:50 2020
+++ src/sys/arch/aarch64/aarch64/fusu.S	Thu Aug  6 06:49:55 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fusu.S,v 1.8 2020/08/03 05:56:50 ryo Exp $	*/
+/*	$NetBSD: fusu.S,v 1.9 2020/08/06 06:49:55 ryo Exp $	*/
 
 /*-
  * Copyright (c) 2014, 2019 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
 #include <aarch64/asm.h>
 #include "assym.h"
 
-RCSID("$NetBSD: fusu.S,v 1.8 2020/08/03 05:56:50 ryo Exp $");
+RCSID("$NetBSD: fusu.S,v 1.9 2020/08/06 06:49:55 ryo Exp $");
 
 #ifdef ARMV81_PAN
 #define PAN_ENABLE	\
@@ -72,8 +72,10 @@ RCSID("$NetBSD: fusu.S,v 1.8 2020/08/03 
 	.endm
 
 	.macro exit_cpu_onfault
-	bl	cpu_unset_onfault
-	mov	x0, xzr
+	/* curlwp->l_md.md_onfault = NULL */
+	mrs	x1, tpidr_el1			/* curcpu */
+	ldr	x1, [x1, #CI_CURLWP]		/* x1 = curlwp */
+	str	xzr, [x1, #L_MD_ONFAULT]	/* lwp->l_md_onfault = NULL */
 9:
 	PAN_ENABLE				/* enable PAN */
 	add	sp, sp, #FB_T_SIZE		/* pop stack */

Index: src/sys/arch/aarch64/aarch64/genassym.cf
diff -u src/sys/arch/aarch64/aarch64/genassym.cf:1.28 src/sys/arch/aarch64/aarch64/genassym.cf:1.29
--- src/sys/arch/aarch64/aarch64/genassym.cf:1.28	Mon Aug  3 06:29:59 2020
+++ src/sys/arch/aarch64/aarch64/genassym.cf	Thu Aug  6 06:49:55 2020
@@ -1,4 +1,4 @@
-# $NetBSD: genassym.cf,v 1.28 2020/08/03 06:29:59 ryo Exp $
+# $NetBSD: genassym.cf,v 1.29 2020/08/06 06:49:55 ryo Exp $
 #-
 # Copyright (c) 2014 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -162,21 +162,20 @@ define	L_MD_DB_USER		offsetof(struct lwp
 define	L_MD_GA_USER		offsetof(struct lwp, l_md.md_ga_user)
 define	LW_SYSTEM		LW_SYSTEM
 
-define	FB_REG_X19		offsetof(struct faultbuf, fb_reg[FB_X19])
-define	FB_REG_X20		offsetof(struct faultbuf, fb_reg[FB_X20])
-define	FB_REG_X21		offsetof(struct faultbuf, fb_reg[FB_X21])
-define	FB_REG_X22		offsetof(struct faultbuf, fb_reg[FB_X22])
-define	FB_REG_X23		offsetof(struct faultbuf, fb_reg[FB_X23])
-define	FB_REG_X24		offsetof(struct faultbuf, fb_reg[FB_X24])
-define	FB_REG_X25		offsetof(struct faultbuf, fb_reg[FB_X25])
-define	FB_REG_X26		offsetof(struct faultbuf, fb_reg[FB_X26])
-define	FB_REG_X27		offsetof(struct faultbuf, fb_reg[FB_X27])
-define	FB_REG_X28		offsetof(struct faultbuf, fb_reg[FB_X28])
-define	FB_REG_X29		offsetof(struct faultbuf, fb_reg[FB_X29])
-define	FB_REG_LR		offsetof(struct faultbuf, fb_reg[FB_LR])
-define	FB_REG_SP		offsetof(struct faultbuf, fb_reg[FB_SP])
-define	FB_OLD			offsetof(struct faultbuf, fb_old)
-define	FB_IDEPTH		offsetof(struct faultbuf, fb_idepth)
+define	FB_X19			FB_X19
+define	FB_X20			FB_X20
+define	FB_X21			FB_X21
+define	FB_X22			FB_X22
+define	FB_X23			FB_X23
+define	FB_X24			FB_X24
+define	FB_X25			FB_X25
+define	FB_X26			FB_X26
+define	FB_X27			FB_X27
+define	FB_X28			FB_X28
+define	FB_X29			FB_X29
+define	FB_LR			FB_LR
+define	FB_SP			FB_SP
+define	FB_MAX			FB_MAX
 define	FB_T_SIZE		roundup(sizeof(struct faultbuf), 16)
 
 define	LBL_X19			LBL_X19

Index: src/sys/arch/aarch64/include/frame.h
diff -u src/sys/arch/aarch64/include/frame.h:1.4 src/sys/arch/aarch64/include/frame.h:1.5
--- src/sys/arch/aarch64/include/frame.h:1.4	Mon Aug  3 05:56:50 2020
+++ src/sys/arch/aarch64/include/frame.h	Thu Aug  6 06:49:55 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: frame.h,v 1.4 2020/08/03 05:56:50 ryo Exp $ */
+/* $NetBSD: frame.h,v 1.5 2020/08/06 06:49:55 ryo Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -70,8 +70,6 @@ __CTASSERT((sizeof(struct trapframe) & 1
 #define FB_MAX	13
 struct faultbuf {
 	register_t fb_reg[FB_MAX];
-	struct faultbuf *fb_old;
-	u_int fb_idepth;
 };
 
 #define	lwp_trapframe(l)		((l)->l_md.md_utf)

Index: src/sys/arch/aarch64/include/machdep.h
diff -u src/sys/arch/aarch64/include/machdep.h:1.15 src/sys/arch/aarch64/include/machdep.h:1.16
--- src/sys/arch/aarch64/include/machdep.h:1.15	Mon Aug  3 05:56:50 2020
+++ src/sys/arch/aarch64/include/machdep.h	Thu Aug  6 06:49:55 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.h,v 1.15 2020/08/03 05:56:50 ryo Exp $	*/
+/*	$NetBSD: machdep.h,v 1.16 2020/08/06 06:49:55 ryo Exp $	*/
 
 /*
  * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org>
@@ -113,11 +113,16 @@ void interrupt(struct trapframe *);
 
 /* cpu_onfault */
 int cpu_set_onfault(struct faultbuf *) __returns_twice;
-void cpu_unset_onfault(void);
 void cpu_jump_onfault(struct trapframe *, const struct faultbuf *, int);
 
 #if defined(_KERNEL)
 static inline void
+cpu_unset_onfault(void)
+{
+	curlwp->l_md.md_onfault = NULL;
+}
+
+static inline void
 cpu_enable_onfault(struct faultbuf *fb)
 {
 	curlwp->l_md.md_onfault = fb;

Reply via email to