oldlwp is always non-NULL in cpu_switchto so remove the test for NULL.

This commit is contained in:
skrll 2020-01-08 20:59:18 +00:00
parent cb88287373
commit c88f2c1a4e
12 changed files with 28 additions and 86 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: cpuswitch.S,v 1.14 2020/01/08 17:38:41 ad Exp $ */
/* $NetBSD: cpuswitch.S,v 1.15 2020/01/08 20:59:18 skrll Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@ -37,18 +37,16 @@
#include "opt_ddb.h"
#include "opt_kasan.h"
RCSID("$NetBSD: cpuswitch.S,v 1.14 2020/01/08 17:38:41 ad Exp $")
RCSID("$NetBSD: cpuswitch.S,v 1.15 2020/01/08 20:59:18 skrll Exp $")
/*
* At IPL_SCHED:
* x0 = oldlwp (maybe be NULL)
* x0 = oldlwp
* x1 = newlwp
* x2 = returning
* returns x0-x2 unchanged
*/
ENTRY_NP(cpu_switchto)
cbz x0, .Lrestore_lwp
/*
* Store the callee saved register on the stack.
*/
@ -72,7 +70,6 @@ ENTRY_NP(cpu_switchto)
/* We are done with the old lwp */
.Lrestore_lwp:
DISABLE_INTERRUPT
ldr x6, [x1, #L_PCB] /* x6 = lwp_getpcb(newlwp) */
ldr x4, [x6, #PCB_TF] /* get trapframe ptr (aka SP) */

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.s,v 1.123 2019/04/06 03:06:24 thorpej Exp $ */
/* $NetBSD: locore.s,v 1.124 2020/01/08 20:59:18 skrll 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.123 2019/04/06 03:06:24 thorpej Exp $");
__KERNEL_RCSID(0, "$NetBSD: locore.s,v 1.124 2020/01/08 20:59:18 skrll Exp $");
#include "assym.h"
@ -663,8 +663,6 @@ LEAF(savectx, 1)
LEAF(cpu_switchto, 0)
LDGP(pv)
beq a0, 1f
/*
* do an inline savectx(), to save old context
*/
@ -679,7 +677,6 @@ LEAF(cpu_switchto, 0)
stq s6, PCB_CONTEXT+(6 * 8)(a2)
stq ra, PCB_CONTEXT+(7 * 8)(a2) /* store ra */
1:
mov a0, s4 /* save old curlwp */
mov a1, s2 /* save new lwp */
ldq a0, L_MD_PCBPADDR(s2) /* save new pcbpaddr */

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.S,v 1.196 2020/01/08 17:38:41 ad Exp $ */
/* $NetBSD: locore.S,v 1.197 2020/01/08 20:59:18 skrll Exp $ */
/*
* Copyright-o-rama!
@ -1819,8 +1819,8 @@ END(dumpsys)
* struct lwp *cpu_switchto(struct lwp *oldlwp, struct lwp *newlwp,
* bool returning)
*
* 1. if (oldlwp != NULL), save its context.
* 2. then, restore context of newlwp.
* 1. save context of oldlwp.
* 2. restore context of newlwp.
*
* Note that the stack frame layout is known to "struct switchframe" in
* <machine/frame.h> and to the code in cpu_lwp_fork() which initializes

View File

@ -1,4 +1,4 @@
/* $NetBSD: cpuswitch.S,v 1.96 2020/01/08 17:38:41 ad Exp $ */
/* $NetBSD: cpuswitch.S,v 1.97 2020/01/08 20:59:18 skrll Exp $ */
/*
* Copyright 2003 Wasabi Systems, Inc.
@ -87,7 +87,7 @@
#include <arm/asm.h>
#include <arm/locore.h>
RCSID("$NetBSD: cpuswitch.S,v 1.96 2020/01/08 17:38:41 ad Exp $")
RCSID("$NetBSD: cpuswitch.S,v 1.97 2020/01/08 20:59:18 skrll Exp $")
/* LINTSTUB: include <sys/param.h> */
@ -128,7 +128,7 @@
* Switch to the specified next LWP
* Arguments:
*
* r0 'struct lwp *' of the current LWP (or NULL if exiting)
* r0 'struct lwp *' of the current LWP
* r1 'struct lwp *' of the LWP to switch to
* r2 returning
*/
@ -151,20 +151,6 @@ ENTRY(cpu_switchto)
/* rem: r6 = new lwp */
/* rem: interrupts are enabled */
/*
* If the old lwp on entry to cpu_switchto was zero then the
* process that called it was exiting. This means that we do
* not need to save the current context. Instead we can jump
* straight to restoring the context for the new process.
*/
teq r4, #0
beq .Ldo_switch
/* rem: r4 = old lwp */
/* rem: r5 = curcpu() */
/* rem: r6 = new lwp */
/* rem: interrupts are enabled */
/* Save old context */
/* Get the user structure for the old lwp. */
@ -192,14 +178,8 @@ ENTRY(cpu_switchto)
* them for the new process.
*/
/* rem: r4 = old lwp */
/* rem: r5 = curcpu() */
/* rem: r6 = new lwp */
/* rem: interrupts are enabled */
/* Restore saved context */
.Ldo_switch:
/* rem: r4 = old lwp */
/* rem: r5 = curcpu() */
/* rem: r6 = new lwp */

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.S,v 1.3 2019/04/16 20:33:36 skrll Exp $ */
/* $NetBSD: locore.S,v 1.4 2020/01/08 20:59:18 skrll Exp $ */
/* $OpenBSD: locore.S,v 1.158 2008/07/28 19:08:46 miod Exp $ */
/*
@ -836,9 +836,6 @@ switch_diag:
kstack_ok:
#endif
/* If old LWP exited, don't bother saving anything. */
comb,=,n %r0, %arg0, switch_exited
/*
* save old LWP context
*
@ -876,7 +873,6 @@ kstack_ok:
* arg0: old LWP (oldl)
* arg1: new LWP (newl)
*/
switch_exited:
ldw L_MD(%arg1), %t1
ldw L_PCB(%arg1), %t3
ldw PCB_KSP(%t3), %sp /* restore stack of newl */

View File

@ -1,4 +1,4 @@
/* $NetBSD: switch_subr.s,v 1.33 2018/10/02 18:37:31 mrg Exp $ */
/* $NetBSD: switch_subr.s,v 1.34 2020/01/08 20:59:18 skrll Exp $ */
/*
* Copyright (c) 2001 The NetBSD Foundation.
@ -89,14 +89,6 @@ GLOBAL(_Idle) /* For sun2/sun3's clock.c ... */
*/
ENTRY(cpu_switchto)
movl 4(%sp),%a1 | fetch `current' lwp
#ifdef M68010
movl %a1,%d0
tstl %d0
#else
tstl %a1 | Old LWP exited?
#endif
jeq .Lcpu_switch_noctxsave | Yup. Don't bother saving context
/*
* Save state of previous process in its pcb.
*/
@ -140,7 +132,6 @@ ENTRY(cpu_switchto)
#endif /* FPCOPROC */
#endif /* !_M68K_CUSTOM_FPU_CTX */
.Lcpu_switch_noctxsave:
movl 8(%sp),%a0 | get newlwp
movl %a0,_C_LABEL(curlwp)
movl L_PCB(%a0),%a1 | get its pcb

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.S,v 1.221 2020/01/08 17:38:42 ad Exp $ */
/* $NetBSD: locore.S,v 1.222 2020/01/08 20:59:19 skrll Exp $ */
/*
* Copyright (c) 1992, 1993
@ -63,7 +63,7 @@
#include <mips/trap.h>
#include <mips/locore.h>
RCSID("$NetBSD: locore.S,v 1.221 2020/01/08 17:38:42 ad Exp $")
RCSID("$NetBSD: locore.S,v 1.222 2020/01/08 20:59:19 skrll Exp $")
#include "assym.h"
@ -244,10 +244,8 @@ NESTED(cpu_switchto, CALLFRAME_SIZ, ra)
#endif
#endif /* PARANOIA */
/*
* Save old context, unless the LWP is exiting.
* Save old context
*/
beq a0, zero, 1f
nop
PTR_L a2, L_PCB(a0) # a2 = pcb of old lwp
mfc0 t0, MIPS_COP_0_STATUS
REG_PROLOGUE
@ -268,7 +266,7 @@ NESTED(cpu_switchto, CALLFRAME_SIZ, ra)
REG_S gp, PCB_CONTEXT+SF_REG_GP(a2)
#endif
REG_EPILOGUE
1:
#if defined(PARANOID_SPL)
/*
* Verify interrupt configuration matches IPL_SCHED

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore_subr.S,v 1.58 2020/01/08 17:38:42 ad Exp $ */
/* $NetBSD: locore_subr.S,v 1.59 2020/01/08 20:59:19 skrll Exp $ */
/*
* Copyright (c) 2001 Wasabi Systems, Inc.
@ -156,7 +156,7 @@ GLOBAL(powersave)
* struct lwp *
* cpu_switchto(struct lwp *current, struct lwp *new)
* switch to the indicated new LWP.
* r3 - current LWP (maybe NULL, if so don't save state)
* r3 - current LWP
* r4 - LWP to switch to
* scheduler lock held
* SPL is IPL_SCHED.
@ -179,12 +179,6 @@ ENTRY(cpu_switchto)
tweqi %r0,0
#endif
/*
* If the oldlwp was null, don't bother saving the switch state.
*/
cmpwi %r30,0
beq switchto_restore
#if defined (PPC_OEA) || defined (PPC_OEA64_BRIDGE)
mfsr %r10,USER_SR /* save USER_SR for copyin/copyout */
#else
@ -202,7 +196,6 @@ ENTRY(cpu_switchto)
streg %r9,PCB_USPRG0(%r4) /* save in PCB, not switchframe. */
#endif
switchto_restore:
/* Lock the scheduler. */
#if defined(PPC_IBM4XX) || defined(PPC_BOOKE)
wrteei 0 /* disable interrupts while

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.S,v 1.10 2020/01/08 17:38:42 ad Exp $ */
/* $NetBSD: locore.S,v 1.11 2020/01/08 20:59:19 skrll Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
* All rights reserved.
@ -167,8 +167,6 @@ END(start)
ENTRY_NP(cpu_switchto)
addi sp, sp, -TF_LEN // allocate trapframe
beqz a0, .Lswitchto_newlwp // can skip saving oldl state?
REG_S ra, TF_RA(sp) // save return address
REG_S s0, TF_S0(sp) // save callee saved address
REG_S s1, TF_S1(sp) // save callee saved address
@ -186,7 +184,7 @@ ENTRY_NP(cpu_switchto)
REG_S t4, TF_SR(sp) // save it
REG_S sp, L_MD_KTF(a0) // record trapframe pointer
.Lswitchto_newlwp:
csrrci t0, sstatus, SR_EI // # disable interrupts
move tp, a1 // # put the new lwp in thread pointer

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore_subr.S,v 1.57 2019/04/06 03:06:27 thorpej Exp $ */
/* $NetBSD: locore_subr.S,v 1.58 2020/01/08 20:59:19 skrll Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@ -40,7 +40,7 @@
#include <sh3/mmu_sh3.h>
#include <sh3/mmu_sh4.h>
__KERNEL_RCSID(0, "$NetBSD: locore_subr.S,v 1.57 2019/04/06 03:06:27 thorpej Exp $")
__KERNEL_RCSID(0, "$NetBSD: locore_subr.S,v 1.58 2020/01/08 20:59:19 skrll Exp $")
/*
@ -86,13 +86,10 @@ __KERNEL_RCSID(0, "$NetBSD: locore_subr.S,v 1.57 2019/04/06 03:06:27 thorpej Exp
* Return olwp (in the nlwp context).
*/
ENTRY(cpu_switchto)
tst r4, r4 ! olwp can be NULL
bt .L_saved
!! save old lwp's context to switchframe
mov.l @(L_MD_PCB, r4), r1 ! olwp->l_md.md_pcb
SAVEPCB(r1)
.L_saved:
!! free to use callee-save registers now
mov.l .L_curlwp, r2

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.s,v 1.275 2019/12/30 22:13:47 ad Exp $ */
/* $NetBSD: locore.s,v 1.276 2020/01/08 20:59:19 skrll Exp $ */
/*
* Copyright (c) 1996 Paul Kranenburg
@ -4863,9 +4863,7 @@ ENTRY(cpu_switchto)
sethi %hi(cpcb), %l6
tst %i0 ! if (oldlwp == NULL)
bz Lnosaveoldlwp
rd %psr, %l1 ! psr = %psr;
rd %psr, %l1 ! psr = %psr;
ld [%l6 + %lo(cpcb)], %o0
@ -4881,7 +4879,6 @@ ENTRY(cpu_switchto)
Lwb1: SAVE; SAVE; SAVE; SAVE; SAVE; SAVE; /* 6 of each: */
restore; restore; restore; restore; restore; restore
Lnosaveoldlwp:
andn %l1, PSR_PIL, %l1 ! oldpsr &= ~PSR_PIL;
/*

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.s,v 1.422 2020/01/08 17:38:42 ad Exp $ */
/* $NetBSD: locore.s,v 1.423 2020/01/08 20:59:20 skrll Exp $ */
/*
* Copyright (c) 2006-2010 Matthew R. Green
@ -6536,8 +6536,7 @@ ENTRY(cpu_switchto)
wrpr %g0, PSTATE_KERN, %pstate ! make sure we're on normal globals
! with traps turned off
brz,pn %i0, 1f
sethi %hi(CPCB), %l6
sethi %hi(CPCB), %l6
rdpr %pstate, %o1 ! oldpstate = %pstate;
LDPTR [%i0 + L_PCB], %l5
@ -6549,7 +6548,6 @@ ENTRY(cpu_switchto)
rdpr %cwp, %o2 ! Useless
stb %o2, [%l5 + PCB_CWP]
1:
sethi %hi(CURLWP), %l7
LDPTR [%i1 + L_PCB], %l1 ! newpcb = l->l_pcb;