Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/aarch64 revert the changes of http://mail-index.net...
details: https://anonhg.NetBSD.org/src/rev/0639402fc4e8
branches: trunk
changeset: 937027:0639402fc4e8
user: ryo <ryo%NetBSD.org@localhost>
date: Thu Aug 06 06:49:55 2020 +0000
description:
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@
diffstat:
sys/arch/aarch64/aarch64/copyinout.S | 12 ++++++----
sys/arch/aarch64/aarch64/cpuswitch.S | 38 +++++++++--------------------------
sys/arch/aarch64/aarch64/fault.c | 17 ++++-----------
sys/arch/aarch64/aarch64/fusu.S | 10 +++++---
sys/arch/aarch64/aarch64/genassym.cf | 31 ++++++++++++++---------------
sys/arch/aarch64/include/frame.h | 4 +--
sys/arch/aarch64/include/machdep.h | 9 ++++++-
7 files changed, 51 insertions(+), 70 deletions(-)
diffs (268 lines):
diff -r 6b6e7aed4711 -r 0639402fc4e8 sys/arch/aarch64/aarch64/copyinout.S
--- a/sys/arch/aarch64/aarch64/copyinout.S Thu Aug 06 05:52:45 2020 +0000
+++ b/sys/arch/aarch64/aarch64/copyinout.S Thu Aug 06 06:49:55 2020 +0000
@@ -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 @@
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 @@
.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 */
diff -r 6b6e7aed4711 -r 0639402fc4e8 sys/arch/aarch64/aarch64/cpuswitch.S
--- a/sys/arch/aarch64/aarch64/cpuswitch.S Thu Aug 06 05:52:45 2020 +0000
+++ b/sys/arch/aarch64/aarch64/cpuswitch.S Thu Aug 06 06:49:55 2020 +0000
@@ -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 @@
*/
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);
diff -r 6b6e7aed4711 -r 0639402fc4e8 sys/arch/aarch64/aarch64/fault.c
--- a/sys/arch/aarch64/aarch64/fault.c Thu Aug 06 05:52:45 2020 +0000
+++ b/sys/arch/aarch64/aarch64/fault.c Thu Aug 06 06:49:55 2020 +0000
@@ -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 <ryo%nerv.org@localhost>
@@ -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 @@
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;
}
diff -r 6b6e7aed4711 -r 0639402fc4e8 sys/arch/aarch64/aarch64/fusu.S
--- a/sys/arch/aarch64/aarch64/fusu.S Thu Aug 06 05:52:45 2020 +0000
+++ b/sys/arch/aarch64/aarch64/fusu.S Thu Aug 06 06:49:55 2020 +0000
@@ -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 @@
.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 */
diff -r 6b6e7aed4711 -r 0639402fc4e8 sys/arch/aarch64/aarch64/genassym.cf
--- a/sys/arch/aarch64/aarch64/genassym.cf Thu Aug 06 05:52:45 2020 +0000
+++ b/sys/arch/aarch64/aarch64/genassym.cf Thu Aug 06 06:49:55 2020 +0000
@@ -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_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
diff -r 6b6e7aed4711 -r 0639402fc4e8 sys/arch/aarch64/include/frame.h
--- a/sys/arch/aarch64/include/frame.h Thu Aug 06 05:52:45 2020 +0000
+++ b/sys/arch/aarch64/include/frame.h Thu Aug 06 06:49:55 2020 +0000
@@ -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 @@
#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)
diff -r 6b6e7aed4711 -r 0639402fc4e8 sys/arch/aarch64/include/machdep.h
--- a/sys/arch/aarch64/include/machdep.h Thu Aug 06 05:52:45 2020 +0000
+++ b/sys/arch/aarch64/include/machdep.h Thu Aug 06 06:49:55 2020 +0000
@@ -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 <ryo%nerv.org@localhost>
@@ -113,11 +113,16 @@
/* 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;
Home |
Main Index |
Thread Index |
Old Index