oldlwp is always non-NULL in cpu_switchto so remove the test for NULL.
This commit is contained in:
parent
cb88287373
commit
c88f2c1a4e
@ -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) */
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
||||
/*
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user