Module Name: src Committed By: ad Date: Wed Jan 8 17:38:43 UTC 2020
Modified Files: src/sys/arch/aarch64/aarch64: cpuswitch.S genassym.cf src/sys/arch/amd64/amd64: genassym.cf locore.S spl.S src/sys/arch/arm/arm32: cpuswitch.S genassym.cf src/sys/arch/hppa/hppa: genassym.cf src/sys/arch/i386/i386: genassym.cf locore.S spl.S src/sys/arch/mips/mips: genassym.cf locore.S mips_softint.c src/sys/arch/powerpc/powerpc: genassym.cf locore_subr.S softint_machdep.c src/sys/arch/riscv/riscv: genassym.cf locore.S src/sys/arch/sparc64/sparc64: genassym.cf locore.s src/sys/arch/vax/vax: genassym.cf pmap.c subr.S src/sys/ddb: db_proc.c src/sys/kern: init_main.c kern_exec.c kern_exit.c kern_idle.c kern_kthread.c kern_lwp.c kern_resource.c kern_runq.c kern_sleepq.c kern_softint.c kern_synch.c src/sys/rump/librump/rumpkern: lwproc.c scheduler.c src/sys/sys: lwp.h src/tests/rump/rumpkern: t_lwproc.c Log Message: Hopefully fix some problems seen with MP support on non-x86, in particular where curcpu() is defined as curlwp->l_cpu: - mi_switch(): undo the ~2007ish optimisation to unlock curlwp before calling cpu_switchto(). It's not safe to let other actors mess with the LWP (in particular l->l_cpu) while it's still context switching. This removes l->l_ctxswtch. - Move the LP_RUNNING flag into l->l_flag and rename to LW_RUNNING since it's now covered by the LWP's lock. - Ditch lwp_exit_switchaway() and just call mi_switch() instead. Everything is in cache anyway so it wasn't buying much by trying to avoid saving old state. This means cpu_switchto() will never be called with prevlwp == NULL. - Remove some KERNEL_LOCK handling which hasn't been needed for years. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/arch/aarch64/aarch64/cpuswitch.S cvs rdiff -u -r1.17 -r1.18 src/sys/arch/aarch64/aarch64/genassym.cf cvs rdiff -u -r1.80 -r1.81 src/sys/arch/amd64/amd64/genassym.cf cvs rdiff -u -r1.195 -r1.196 src/sys/arch/amd64/amd64/locore.S cvs rdiff -u -r1.42 -r1.43 src/sys/arch/amd64/amd64/spl.S cvs rdiff -u -r1.95 -r1.96 src/sys/arch/arm/arm32/cpuswitch.S cvs rdiff -u -r1.82 -r1.83 src/sys/arch/arm/arm32/genassym.cf cvs rdiff -u -r1.1 -r1.2 src/sys/arch/hppa/hppa/genassym.cf cvs rdiff -u -r1.117 -r1.118 src/sys/arch/i386/i386/genassym.cf cvs rdiff -u -r1.174 -r1.175 src/sys/arch/i386/i386/locore.S cvs rdiff -u -r1.49 -r1.50 src/sys/arch/i386/i386/spl.S cvs rdiff -u -r1.67 -r1.68 src/sys/arch/mips/mips/genassym.cf cvs rdiff -u -r1.220 -r1.221 src/sys/arch/mips/mips/locore.S cvs rdiff -u -r1.7 -r1.8 src/sys/arch/mips/mips/mips_softint.c cvs rdiff -u -r1.11 -r1.12 src/sys/arch/powerpc/powerpc/genassym.cf cvs rdiff -u -r1.57 -r1.58 src/sys/arch/powerpc/powerpc/locore_subr.S cvs rdiff -u -r1.3 -r1.4 src/sys/arch/powerpc/powerpc/softint_machdep.c cvs rdiff -u -r1.6 -r1.7 src/sys/arch/riscv/riscv/genassym.cf cvs rdiff -u -r1.9 -r1.10 src/sys/arch/riscv/riscv/locore.S cvs rdiff -u -r1.82 -r1.83 src/sys/arch/sparc64/sparc64/genassym.cf cvs rdiff -u -r1.421 -r1.422 src/sys/arch/sparc64/sparc64/locore.s cvs rdiff -u -r1.53 -r1.54 src/sys/arch/vax/vax/genassym.cf cvs rdiff -u -r1.187 -r1.188 src/sys/arch/vax/vax/pmap.c cvs rdiff -u -r1.36 -r1.37 src/sys/arch/vax/vax/subr.S cvs rdiff -u -r1.8 -r1.9 src/sys/ddb/db_proc.c cvs rdiff -u -r1.517 -r1.518 src/sys/kern/init_main.c cvs rdiff -u -r1.485 -r1.486 src/sys/kern/kern_exec.c cvs rdiff -u -r1.278 -r1.279 src/sys/kern/kern_exit.c cvs rdiff -u -r1.29 -r1.30 src/sys/kern/kern_idle.c cvs rdiff -u -r1.44 -r1.45 src/sys/kern/kern_kthread.c cvs rdiff -u -r1.217 -r1.218 src/sys/kern/kern_lwp.c cvs rdiff -u -r1.183 -r1.184 src/sys/kern/kern_resource.c cvs rdiff -u -r1.55 -r1.56 src/sys/kern/kern_runq.c cvs rdiff -u -r1.56 -r1.57 src/sys/kern/kern_sleepq.c \ src/sys/kern/kern_softint.c cvs rdiff -u -r1.334 -r1.335 src/sys/kern/kern_synch.c cvs rdiff -u -r1.42 -r1.43 src/sys/rump/librump/rumpkern/lwproc.c cvs rdiff -u -r1.48 -r1.49 src/sys/rump/librump/rumpkern/scheduler.c cvs rdiff -u -r1.192 -r1.193 src/sys/sys/lwp.h cvs rdiff -u -r1.9 -r1.10 src/tests/rump/rumpkern/t_lwproc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.