Module Name: src
Committed By: thorpej
Date: Fri Sep 4 02:54:56 UTC 2020
Modified Files:
src/sys/arch/alpha/alpha: lock_stubs.s locore.s
src/sys/arch/alpha/include: asm.h
Log Message:
- Make the GET_CURLWP actually return curlwp, not &curlwp.
- exception_return(): Use GET_CURLWP directly, rather than a dance
acount GET_CPUINFO.
- Introduce SET_CURLWP(), to set the curlwp value.
- Garbage-collect GET_FPCURLWP.
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/alpha/alpha/lock_stubs.s
cvs rdiff -u -r1.128 -r1.129 src/sys/arch/alpha/alpha/locore.s
cvs rdiff -u -r1.40 -r1.41 src/sys/arch/alpha/include/asm.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/alpha/alpha/lock_stubs.s
diff -u src/sys/arch/alpha/alpha/lock_stubs.s:1.3 src/sys/arch/alpha/alpha/lock_stubs.s:1.4
--- src/sys/arch/alpha/alpha/lock_stubs.s:1.3 Mon Apr 28 20:23:10 2008
+++ src/sys/arch/alpha/alpha/lock_stubs.s Fri Sep 4 02:54:56 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: lock_stubs.s,v 1.3 2008/04/28 20:23:10 martin Exp $ */
+/* $NetBSD: lock_stubs.s,v 1.4 2020/09/04 02:54:56 thorpej Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
#include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: lock_stubs.s,v 1.3 2008/04/28 20:23:10 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lock_stubs.s,v 1.4 2020/09/04 02:54:56 thorpej Exp $");
#include "assym.h"
@@ -74,7 +74,7 @@ LEAF(mutex_enter, 1)
LDGP(pv)
GET_CURLWP
1:
- ldq t1, 0(v0)
+ mov v0, t1
ldq_l t2, 0(a0)
bne t2, 2f
stq_c t1, 0(a0)
@@ -95,11 +95,10 @@ LEAF(mutex_exit, 1)
LDGP(pv)
MB
GET_CURLWP
- ldq t1, 0(v0)
mov zero, t3
1:
ldq_l t2, 0(a0)
- cmpeq t1, t2, t2
+ cmpeq v0, t2, t2
beq t2, 2f
stq_c t3, 0(a0)
beq t3, 3f
Index: src/sys/arch/alpha/alpha/locore.s
diff -u src/sys/arch/alpha/alpha/locore.s:1.128 src/sys/arch/alpha/alpha/locore.s:1.129
--- src/sys/arch/alpha/alpha/locore.s:1.128 Thu Sep 3 15:38:17 2020
+++ src/sys/arch/alpha/alpha/locore.s Fri Sep 4 02:54:56 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.s,v 1.128 2020/09/03 15:38:17 thorpej Exp $ */
+/* $NetBSD: locore.s,v 1.129 2020/09/04 02:54:56 thorpej Exp $ */
/*-
* Copyright (c) 1999, 2000, 2019 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
#include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: locore.s,v 1.128 2020/09/03 15:38:17 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: locore.s,v 1.129 2020/09/04 02:54:56 thorpej Exp $");
#include "assym.h"
@@ -258,17 +258,16 @@ LEAF(exception_return, 1) /* XXX shoul
beq t0, 5f /* no: just return */
/* yes */
- /* GET_CPUINFO clobbers v0, t0, t8...t11. */
-3: GET_CPUINFO
+ /* GET_CURLWP clobbers v0, t0, t8...t11. */
+3: GET_CURLWP
/* check for AST */
- ldq t1, CPU_INFO_CURLWP(v0)
- ldl t3, L_MD_ASTPENDING(t1) /* AST pending? */
+ ldl t3, L_MD_ASTPENDING(v0) /* AST pending? */
bne t3, 7f /* yes */
/* no: headed back to user space */
/* Enable the FPU based on whether MDLWP_FPACTIVE is set. */
-4: ldq t2, L_MD_FLAGS(t1)
+4: ldq t2, L_MD_FLAGS(v0)
cmplt t2, zero, a0
call_pal PAL_OSF1_wrfen
@@ -295,7 +294,7 @@ LEAF(exception_return, 1) /* XXX shoul
br 2b
/* We've got an AST */
-7: stl zero, L_MD_ASTPENDING(t1) /* no AST pending */
+7: stl zero, L_MD_ASTPENDING(v0) /* no AST pending */
ldiq a0, ALPHA_PSL_IPL_0 /* drop IPL to zero */
call_pal PAL_OSF1_swpipl
@@ -460,7 +459,7 @@ LEAF(exception_restore_regs, 0)
/* syscall number, passed in v0, is first arg, frame pointer second */
mov v0,a1
GET_CURLWP
- ldq a0,0(v0)
+ mov v0,a0
mov sp,a2 ; .loc 1 __LINE__
ldq t11,L_PROC(a0)
ldq t12,P_MD_SYSCALL(t11)
@@ -676,8 +675,7 @@ LEAF(cpu_switchto, 0)
ldq a0, L_MD_PCBPADDR(s2)
call_pal PAL_OSF1_swpctx /* clobbers a0, t0, t8-t11, a0 */
- GET_CPUINFO
- stq s2, CPU_INFO_CURLWP(v0) /* curlwp = l */
+ SET_CURLWP(s2) /* curlwp = l */
/*
* Now running on the new PCB.
@@ -786,15 +784,13 @@ NESTED(copyinstr, 4, 16, ra, IM_RA|IM_S0
mov v0, s0
lda v0, copyerr /* set up fault handler. */
.set noat
- ldq at_reg, 0(s0)
- ldq at_reg, L_PCB(at_reg)
+ ldq at_reg, L_PCB(s0)
stq v0, PCB_ONFAULT(at_reg)
.set at
CALL(alpha_copystr) /* do the copy. */
.set noat
- ldq at_reg, 0(s0) /* kill the fault handler. */
- ldq at_reg, L_PCB(at_reg)
- stq zero, PCB_ONFAULT(at_reg)
+ ldq at_reg, L_PCB(s0)
+ stq zero, PCB_ONFAULT(at_reg) /* kill the fault handler. */
.set at
ldq ra, (16-8)(sp) /* restore ra. */
ldq s0, (16-16)(sp) /* restore s0. */
@@ -815,15 +811,13 @@ NESTED(copyoutstr, 4, 16, ra, IM_RA|IM_S
mov v0, s0
lda v0, copyerr /* set up fault handler. */
.set noat
- ldq at_reg, 0(s0)
- ldq at_reg, L_PCB(at_reg)
+ ldq at_reg, L_PCB(s0)
stq v0, PCB_ONFAULT(at_reg)
.set at
CALL(alpha_copystr) /* do the copy. */
.set noat
- ldq at_reg, 0(s0) /* kill the fault handler. */
- ldq at_reg, L_PCB(at_reg)
- stq zero, PCB_ONFAULT(at_reg)
+ ldq at_reg, L_PCB(s0)
+ stq zero, PCB_ONFAULT(at_reg) /* kill the fault handler. */
.set at
ldq ra, (16-8)(sp) /* restore ra. */
ldq s0, (16-16)(sp) /* restore s0. */
@@ -853,7 +847,7 @@ NESTED(kcopy, 3, 32, ra, IM_RA|IM_S0|IM_
mov v0, a0
/* Note: GET_CURLWP clobbers v0, t0, t8...t11. */
GET_CURLWP
- ldq s1, 0(v0) /* s1 = curlwp */
+ mov v0, s1 /* s1 = curlwp */
lda v0, kcopyerr /* set up fault handler. */
.set noat
ldq at_reg, L_PCB(s1)
@@ -900,7 +894,7 @@ NESTED(copyin, 3, 16, ra, IM_RA|IM_S0, 0
mov v0, a0
/* Note: GET_CURLWP clobbers v0, t0, t8...t11. */
GET_CURLWP
- ldq s0, 0(v0) /* s0 = curlwp */
+ mov v0, s0 /* s0 = curlwp */
lda v0, copyerr /* set up fault handler. */
.set noat
ldq at_reg, L_PCB(s0)
@@ -932,7 +926,7 @@ NESTED(copyout, 3, 16, ra, IM_RA|IM_S0,
mov v0, a0
/* Note: GET_CURLWP clobbers v0, t0, t8...t11. */
GET_CURLWP
- ldq s0, 0(v0) /* s0 = curlwp */
+ mov v0, s0 /* s0 = curlwp */
lda v0, copyerr /* set up fault handler. */
.set noat
ldq at_reg, L_PCB(s0)
Index: src/sys/arch/alpha/include/asm.h
diff -u src/sys/arch/alpha/include/asm.h:1.40 src/sys/arch/alpha/include/asm.h:1.41
--- src/sys/arch/alpha/include/asm.h:1.40 Thu Sep 3 04:18:30 2020
+++ src/sys/arch/alpha/include/asm.h Fri Sep 4 02:54:56 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: asm.h,v 1.40 2020/09/03 04:18:30 thorpej Exp $ */
+/* $NetBSD: asm.h,v 1.41 2020/09/04 02:54:56 thorpej Exp $ */
/*
* Copyright (c) 1991,1990,1989,1994,1995,1996 Carnegie Mellon University
@@ -669,7 +669,11 @@ label: ASCIZ msg; \
#define GET_CURLWP \
call_pal PAL_OSF1_rdval ; \
- addq v0, CPU_INFO_CURLWP, v0
+ ldq v0, CPU_INFO_CURLWP(v0)
+
+#define SET_CURLWP(r) \
+ call_pal PAL_OSF1_rdval ; \
+ stq r, CPU_INFO_CURLWP(v0)
#define GET_FPCURLWP \
call_pal PAL_OSF1_rdval ; \
@@ -681,9 +685,12 @@ IMPORT(cpu_info_primary, CPU_INFO_SIZEOF
#define GET_CPUINFO lda v0, cpu_info_primary
-#define GET_CURLWP lda v0, cpu_info_primary + CPU_INFO_CURLWP
+#define GET_CURLWP lda v0, cpu_info_primary ; \
+ ldq v0, CPU_INFO_CURLWP(v0)
+
+#define SET_CURLWP(r) lda v0, cpu_info_primary ; \
+ stq r, CPU_INFO_CURLWP(v0)
-#define GET_FPCURLWP lda v0, cpu_info_primary + CPU_INFO_FPCURLWP
#endif /* MULTIPROCESSOR */
#else
#define RCSID(_s) __SECTIONSTRING(.ident, _s)