Module Name: src Committed By: ad Date: Thu Nov 21 19:24:02 UTC 2019
Modified Files: src/sys/arch/aarch64/aarch64: trap.c src/sys/arch/aarch64/include: cpu.h src/sys/arch/alpha/alpha: trap.c src/sys/arch/amd64/amd64: cpufunc.S trap.c src/sys/arch/amd64/include: cpu.h src/sys/arch/amiga/amiga: trap.c src/sys/arch/arm/arm: ast.c src/sys/arch/arm/include: cpu.h src/sys/arch/atari/atari: trap.c src/sys/arch/cesfic/cesfic: trap.c src/sys/arch/hp300/hp300: trap.c src/sys/arch/hppa/hppa: trap.c src/sys/arch/i386/i386: cpufunc.S trap.c src/sys/arch/i386/include: cpu.h src/sys/arch/luna68k/luna68k: trap.c src/sys/arch/mac68k/mac68k: trap.c src/sys/arch/mips/include: cpu.h src/sys/arch/mvme68k/mvme68k: trap.c src/sys/arch/news68k/news68k: trap.c src/sys/arch/next68k/next68k: trap.c src/sys/arch/or1k/include: cpu.h src/sys/arch/riscv/include: cpu.h src/sys/arch/riscv/riscv: trap.c src/sys/arch/sh3/sh3: exception.c src/sys/arch/sparc/include: userret.h src/sys/arch/sparc64/sparc64: trap.c src/sys/arch/sun2/sun2: trap.c src/sys/arch/sun3/sun3: trap.c src/sys/arch/usermode/usermode: trap.c src/sys/arch/vax/vax: trap.c src/sys/arch/x68k/x68k: trap.c src/sys/sys: userret.h Log Message: mi_userret(): take care of calling preempt(), set spc_curpriority directly, and remove MD code that does the same. To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 src/sys/arch/aarch64/aarch64/trap.c cvs rdiff -u -r1.14 -r1.15 src/sys/arch/aarch64/include/cpu.h cvs rdiff -u -r1.134 -r1.135 src/sys/arch/alpha/alpha/trap.c cvs rdiff -u -r1.48 -r1.49 src/sys/arch/amd64/amd64/cpufunc.S cvs rdiff -u -r1.124 -r1.125 src/sys/arch/amd64/amd64/trap.c cvs rdiff -u -r1.65 -r1.66 src/sys/arch/amd64/include/cpu.h cvs rdiff -u -r1.137 -r1.138 src/sys/arch/amiga/amiga/trap.c cvs rdiff -u -r1.30 -r1.31 src/sys/arch/arm/arm/ast.c cvs rdiff -u -r1.101 -r1.102 src/sys/arch/arm/include/cpu.h cvs rdiff -u -r1.115 -r1.116 src/sys/arch/atari/atari/trap.c cvs rdiff -u -r1.59 -r1.60 src/sys/arch/cesfic/cesfic/trap.c cvs rdiff -u -r1.153 -r1.154 src/sys/arch/hp300/hp300/trap.c cvs rdiff -u -r1.111 -r1.112 src/sys/arch/hppa/hppa/trap.c cvs rdiff -u -r1.37 -r1.38 src/sys/arch/i386/i386/cpufunc.S cvs rdiff -u -r1.302 -r1.303 src/sys/arch/i386/i386/trap.c cvs rdiff -u -r1.181 -r1.182 src/sys/arch/i386/include/cpu.h cvs rdiff -u -r1.71 -r1.72 src/sys/arch/luna68k/luna68k/trap.c cvs rdiff -u -r1.149 -r1.150 src/sys/arch/mac68k/mac68k/trap.c cvs rdiff -u -r1.126 -r1.127 src/sys/arch/mips/include/cpu.h cvs rdiff -u -r1.110 -r1.111 src/sys/arch/mvme68k/mvme68k/trap.c cvs rdiff -u -r1.71 -r1.72 src/sys/arch/news68k/news68k/trap.c cvs rdiff -u -r1.90 -r1.91 src/sys/arch/next68k/next68k/trap.c cvs rdiff -u -r1.2 -r1.3 src/sys/arch/or1k/include/cpu.h cvs rdiff -u -r1.5 -r1.6 src/sys/arch/riscv/include/cpu.h cvs rdiff -u -r1.3 -r1.4 src/sys/arch/riscv/riscv/trap.c cvs rdiff -u -r1.67 -r1.68 src/sys/arch/sh3/sh3/exception.c cvs rdiff -u -r1.8 -r1.9 src/sys/arch/sparc/include/userret.h cvs rdiff -u -r1.191 -r1.192 src/sys/arch/sparc64/sparc64/trap.c cvs rdiff -u -r1.45 -r1.46 src/sys/arch/sun2/sun2/trap.c cvs rdiff -u -r1.145 -r1.146 src/sys/arch/sun3/sun3/trap.c cvs rdiff -u -r1.70 -r1.71 src/sys/arch/usermode/usermode/trap.c cvs rdiff -u -r1.135 -r1.136 src/sys/arch/vax/vax/trap.c cvs rdiff -u -r1.108 -r1.109 src/sys/arch/x68k/x68k/trap.c cvs rdiff -u -r1.28 -r1.29 src/sys/sys/userret.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/aarch64/aarch64/trap.c diff -u src/sys/arch/aarch64/aarch64/trap.c:1.19 src/sys/arch/aarch64/aarch64/trap.c:1.20 --- src/sys/arch/aarch64/aarch64/trap.c:1.19 Sat Sep 28 07:06:50 2019 +++ src/sys/arch/aarch64/aarch64/trap.c Thu Nov 21 19:23:58 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.19 2019/09/28 07:06:50 skrll Exp $ */ +/* $NetBSD: trap.c,v 1.20 2019/11/21 19:23:58 ad Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: trap.c,v 1.19 2019/09/28 07:06:50 skrll Exp $"); +__KERNEL_RCSID(1, "$NetBSD: trap.c,v 1.20 2019/11/21 19:23:58 ad Exp $"); #include "opt_arm_intr_impl.h" #include "opt_compat_netbsd32.h" @@ -158,7 +158,6 @@ trap_doast(struct trapframe *tf) ci->ci_data.cpu_ntrap++; KDASSERT(ci->ci_cpl == IPL_NONE); - const int want_resched = ci->ci_want_resched; #ifdef __HAVE_PREEMPTION kpreempt_enable(); #endif @@ -168,9 +167,6 @@ trap_doast(struct trapframe *tf) ADDUPROF(l); } - /* Allow a forced task switch. */ - if (want_resched) - preempt(); userret(l); } Index: src/sys/arch/aarch64/include/cpu.h diff -u src/sys/arch/aarch64/include/cpu.h:1.14 src/sys/arch/aarch64/include/cpu.h:1.15 --- src/sys/arch/aarch64/include/cpu.h:1.14 Sat Oct 19 18:04:26 2019 +++ src/sys/arch/aarch64/include/cpu.h Thu Nov 21 19:23:58 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.h,v 1.14 2019/10/19 18:04:26 jmcneill Exp $ */ +/* $NetBSD: cpu.h,v 1.15 2019/11/21 19:23:58 ad Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -118,7 +118,6 @@ curcpu(void) #define setsoftast(ci) atomic_or_uint(&(ci)->ci_astpending, __BIT(0)) #define cpu_signotify(l) setsoftast((l)->l_cpu) -void cpu_set_curpri(int); void cpu_proc_fork(struct proc *, struct proc *); void cpu_need_proftick(struct lwp *l); void cpu_boot_secondary_processors(void); Index: src/sys/arch/alpha/alpha/trap.c diff -u src/sys/arch/alpha/alpha/trap.c:1.134 src/sys/arch/alpha/alpha/trap.c:1.135 --- src/sys/arch/alpha/alpha/trap.c:1.134 Sat Apr 6 03:06:24 2019 +++ src/sys/arch/alpha/alpha/trap.c Thu Nov 21 19:23:58 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.134 2019/04/06 03:06:24 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.135 2019/11/21 19:23:58 ad Exp $ */ /*- * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc. @@ -93,7 +93,7 @@ #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.134 2019/04/06 03:06:24 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.135 2019/11/21 19:23:58 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -603,13 +603,6 @@ ast(struct trapframe *framep) ADDUPROF(l); } - if (curcpu()->ci_want_resched) { - /* - * We are being preempted. - */ - preempt(); - } - userret(l); } Index: src/sys/arch/amd64/amd64/cpufunc.S diff -u src/sys/arch/amd64/amd64/cpufunc.S:1.48 src/sys/arch/amd64/amd64/cpufunc.S:1.49 --- src/sys/arch/amd64/amd64/cpufunc.S:1.48 Fri Nov 15 09:03:26 2019 +++ src/sys/arch/amd64/amd64/cpufunc.S Thu Nov 21 19:23:58 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: cpufunc.S,v 1.48 2019/11/15 09:03:26 maxv Exp $ */ +/* $NetBSD: cpufunc.S,v 1.49 2019/11/21 19:23:58 ad Exp $ */ /* * Copyright (c) 1998, 2007, 2008 The NetBSD Foundation, Inc. @@ -251,11 +251,6 @@ ENTRY(x86_curlwp) ret END(x86_curlwp) -ENTRY(cpu_set_curpri) - movl %edi, %gs:(CPU_INFO_CURPRIORITY) - ret -END(cpu_set_curpri) - ENTRY(__byte_swap_u32_variable) movl %edi, %eax bswapl %eax Index: src/sys/arch/amd64/amd64/trap.c diff -u src/sys/arch/amd64/amd64/trap.c:1.124 src/sys/arch/amd64/amd64/trap.c:1.125 --- src/sys/arch/amd64/amd64/trap.c:1.124 Wed Sep 18 20:18:27 2019 +++ src/sys/arch/amd64/amd64/trap.c Thu Nov 21 19:23:58 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.124 2019/09/18 20:18:27 kamil Exp $ */ +/* $NetBSD: trap.c,v 1.125 2019/11/21 19:23:58 ad Exp $ */ /* * Copyright (c) 1998, 2000, 2017 The NetBSD Foundation, Inc. @@ -64,7 +64,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.124 2019/09/18 20:18:27 kamil Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.125 2019/11/21 19:23:58 ad Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -426,10 +426,6 @@ trap(struct trapframe *frame) l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - /* Allow a forced task switch. */ - if (curcpu()->ci_want_resched) { - preempt(); - } goto out; case T_BOUND|T_USER: Index: src/sys/arch/amd64/include/cpu.h diff -u src/sys/arch/amd64/include/cpu.h:1.65 src/sys/arch/amd64/include/cpu.h:1.66 --- src/sys/arch/amd64/include/cpu.h:1.65 Thu Nov 14 16:23:52 2019 +++ src/sys/arch/amd64/include/cpu.h Thu Nov 21 19:23:58 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.h,v 1.65 2019/11/14 16:23:52 maxv Exp $ */ +/* $NetBSD: cpu.h,v 1.66 2019/11/21 19:23:58 ad Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -82,21 +82,9 @@ x86_curlwp(void) (*(struct cpu_info * const *)offsetof(struct cpu_info, ci_curlwp))); return l; } - -__inline static void __unused -cpu_set_curpri(int pri) -{ - - __asm volatile( - "movl %1, %%gs:%0" : - "=m" (*(struct cpu_info *)offsetof(struct cpu_info, ci_schedstate.spc_curpriority)) : - "r" (pri) - ); -} #else struct cpu_info *x86_curcpu(void); lwp_t *x86_curlwp(void); -void cpu_set_curpri(int); #endif #endif /* __GNUC__ && !_MODULE */ Index: src/sys/arch/amiga/amiga/trap.c diff -u src/sys/arch/amiga/amiga/trap.c:1.137 src/sys/arch/amiga/amiga/trap.c:1.138 --- src/sys/arch/amiga/amiga/trap.c:1.137 Sat Apr 6 03:06:24 2019 +++ src/sys/arch/amiga/amiga/trap.c Thu Nov 21 19:23:58 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.137 2019/04/06 03:06:24 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.138 2019/11/21 19:23:58 ad Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -45,7 +45,7 @@ #include "opt_m68k_arch.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.137 2019/04/06 03:06:24 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.138 2019/11/21 19:23:58 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -691,9 +691,6 @@ trap(struct frame *fp, int type, u_int c l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - if (curcpu()->ci_want_resched) - preempt(); - userret(l, fp->f_pc, sticks); return; /* Index: src/sys/arch/arm/arm/ast.c diff -u src/sys/arch/arm/arm/ast.c:1.30 src/sys/arch/arm/arm/ast.c:1.31 --- src/sys/arch/arm/arm/ast.c:1.30 Wed Jan 24 09:04:44 2018 +++ src/sys/arch/arm/arm/ast.c Thu Nov 21 19:23:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: ast.c,v 1.30 2018/01/24 09:04:44 skrll Exp $ */ +/* $NetBSD: ast.c,v 1.31 2019/11/21 19:23:59 ad Exp $ */ /* * Copyright (c) 1994,1995 Mark Brinicombe @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ast.c,v 1.30 2018/01/24 09:04:44 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ast.c,v 1.31 2019/11/21 19:23:59 ad Exp $"); #include "opt_ddb.h" @@ -119,7 +119,6 @@ ast(struct trapframe *tf) ci->ci_data.cpu_ntrap++; KDASSERT(ci->ci_cpl == IPL_NONE); - const int want_resched = ci->ci_want_resched; #ifdef __HAVE_PREEMPTION kpreempt_enable(); #endif @@ -129,8 +128,5 @@ ast(struct trapframe *tf) ADDUPROF(l); } - /* Allow a forced task switch. */ - if (want_resched) - preempt(); userret(l); } Index: src/sys/arch/arm/include/cpu.h diff -u src/sys/arch/arm/include/cpu.h:1.101 src/sys/arch/arm/include/cpu.h:1.102 --- src/sys/arch/arm/include/cpu.h:1.101 Sat Oct 19 18:04:26 2019 +++ src/sys/arch/arm/include/cpu.h Thu Nov 21 19:23:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.h,v 1.101 2019/10/19 18:04:26 jmcneill Exp $ */ +/* $NetBSD: cpu.h,v 1.102 2019/11/21 19:23:59 ad Exp $ */ /* * Copyright (c) 1994-1996 Mark Brinicombe. @@ -315,9 +315,6 @@ void cpu_proc_fork(struct proc *, struct #define cpu_need_proftick(l) ((l)->l_pflag |= LP_OWEUPC, \ setsoftast((l)->l_cpu)) -/* for preeemption. */ -void cpu_set_curpri(int); - /* * We've already preallocated the stack for the idlelwps for additional CPUs. * This hook allows to return them. Index: src/sys/arch/atari/atari/trap.c diff -u src/sys/arch/atari/atari/trap.c:1.115 src/sys/arch/atari/atari/trap.c:1.116 --- src/sys/arch/atari/atari/trap.c:1.115 Sat Apr 6 03:06:25 2019 +++ src/sys/arch/atari/atari/trap.c Thu Nov 21 19:23:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.115 2019/04/06 03:06:25 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.116 2019/11/21 19:23:59 ad Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.115 2019/04/06 03:06:25 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.116 2019/11/21 19:23:59 ad Exp $"); #include "opt_ddb.h" #include "opt_execfmt.h" @@ -545,8 +545,6 @@ trap(struct frame *fp, int type, u_int c l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - if (curcpu()->ci_want_resched) - preempt(); goto out; /* * Kernel/User page fault Index: src/sys/arch/cesfic/cesfic/trap.c diff -u src/sys/arch/cesfic/cesfic/trap.c:1.59 src/sys/arch/cesfic/cesfic/trap.c:1.60 --- src/sys/arch/cesfic/cesfic/trap.c:1.59 Sat Apr 6 03:06:25 2019 +++ src/sys/arch/cesfic/cesfic/trap.c Thu Nov 21 19:23:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.59 2019/04/06 03:06:25 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.60 2019/11/21 19:23:59 ad Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.59 2019/04/06 03:06:25 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.60 2019/11/21 19:23:59 ad Exp $"); #include "opt_ddb.h" #include "opt_execfmt.h" @@ -503,8 +503,6 @@ trap(struct frame *fp, int type, unsigne l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - if (curcpu()->ci_want_resched) - preempt(); goto out; case T_MMUFLT: /* kernel mode page fault */ Index: src/sys/arch/hp300/hp300/trap.c diff -u src/sys/arch/hp300/hp300/trap.c:1.153 src/sys/arch/hp300/hp300/trap.c:1.154 --- src/sys/arch/hp300/hp300/trap.c:1.153 Sat Apr 6 03:06:25 2019 +++ src/sys/arch/hp300/hp300/trap.c Thu Nov 21 19:24:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.153 2019/04/06 03:06:25 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.154 2019/11/21 19:24:00 ad Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.153 2019/04/06 03:06:25 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.154 2019/11/21 19:24:00 ad Exp $"); #include "opt_ddb.h" #include "opt_execfmt.h" @@ -525,8 +525,6 @@ trap(struct frame *fp, int type, u_int c l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - if (curcpu()->ci_want_resched) - preempt(); goto out; case T_MMUFLT: /* kernel mode page fault */ Index: src/sys/arch/hppa/hppa/trap.c diff -u src/sys/arch/hppa/hppa/trap.c:1.111 src/sys/arch/hppa/hppa/trap.c:1.112 --- src/sys/arch/hppa/hppa/trap.c:1.111 Mon Apr 15 20:45:08 2019 +++ src/sys/arch/hppa/hppa/trap.c Thu Nov 21 19:24:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.111 2019/04/15 20:45:08 skrll Exp $ */ +/* $NetBSD: trap.c,v 1.112 2019/11/21 19:24:00 ad Exp $ */ /*- * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc. @@ -58,7 +58,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.111 2019/04/15 20:45:08 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.112 2019/11/21 19:24:00 ad Exp $"); /* #define INTRDEBUG */ /* #define TRAPDEBUG */ @@ -202,13 +202,8 @@ userret(struct lwp *l, register_t pc, u_ { struct proc *p = l->l_proc; - if (l->l_md.md_astpending) { - l->l_md.md_astpending = 0; - //curcpu()->ci_data.cpu_nast++; - - if (curcpu()->ci_want_resched) - preempt(); - } + l->l_md.md_astpending = 0; + //curcpu()->ci_data.cpu_nast++; mi_userret(l); Index: src/sys/arch/i386/i386/cpufunc.S diff -u src/sys/arch/i386/i386/cpufunc.S:1.37 src/sys/arch/i386/i386/cpufunc.S:1.38 --- src/sys/arch/i386/i386/cpufunc.S:1.37 Fri Nov 15 09:03:26 2019 +++ src/sys/arch/i386/i386/cpufunc.S Thu Nov 21 19:24:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: cpufunc.S,v 1.37 2019/11/15 09:03:26 maxv Exp $ */ +/* $NetBSD: cpufunc.S,v 1.38 2019/11/21 19:24:00 ad Exp $ */ /*- * Copyright (c) 1998, 2007 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ #include <sys/errno.h> #include <machine/asm.h> -__KERNEL_RCSID(0, "$NetBSD: cpufunc.S,v 1.37 2019/11/15 09:03:26 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cpufunc.S,v 1.38 2019/11/21 19:24:00 ad Exp $"); #include "opt_xen.h" @@ -156,12 +156,6 @@ ENTRY(x86_curlwp) ret END(x86_curlwp) -ENTRY(cpu_set_curpri) - movl 4(%esp), %eax - movl %eax, %fs:(CPU_INFO_CURPRIORITY) - ret -END(cpu_set_curpri) - ENTRY(__byte_swap_u32_variable) movl 4(%esp), %eax bswapl %eax Index: src/sys/arch/i386/i386/trap.c diff -u src/sys/arch/i386/i386/trap.c:1.302 src/sys/arch/i386/i386/trap.c:1.303 --- src/sys/arch/i386/i386/trap.c:1.302 Sat Jul 13 17:04:21 2019 +++ src/sys/arch/i386/i386/trap.c Thu Nov 21 19:24:00 2019 @@ -1,5 +1,5 @@ -/* $NetBSD: trap.c,v 1.302 2019/07/13 17:04:21 mlelstv Exp $ */ +/* $NetBSD: trap.c,v 1.303 2019/11/21 19:24:00 ad Exp $ */ /*- * Copyright (c) 1998, 2000, 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc. @@ -69,7 +69,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.302 2019/07/13 17:04:21 mlelstv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.303 2019/11/21 19:24:00 ad Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -537,10 +537,6 @@ kernelfault: l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - /* Allow a forced task switch. */ - if (curcpu()->ci_want_resched) { - preempt(); - } goto out; case T_BOUND|T_USER: Index: src/sys/arch/i386/include/cpu.h diff -u src/sys/arch/i386/include/cpu.h:1.181 src/sys/arch/i386/include/cpu.h:1.182 --- src/sys/arch/i386/include/cpu.h:1.181 Mon Feb 11 14:59:32 2019 +++ src/sys/arch/i386/include/cpu.h Thu Nov 21 19:24:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.h,v 1.181 2019/02/11 14:59:32 cherry Exp $ */ +/* $NetBSD: cpu.h,v 1.182 2019/11/21 19:24:00 ad Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -68,17 +68,6 @@ x86_curlwp(void) (*(struct cpu_info * const *)offsetof(struct cpu_info, ci_curlwp))); return l; } - -__inline static void __unused -cpu_set_curpri(int pri) -{ - - __asm volatile( - "movl %1, %%fs:%0" : - "=m" (*(struct cpu_info *)offsetof(struct cpu_info, ci_schedstate.spc_curpriority)) : - "r" (pri) - ); -} #endif #ifdef XENPV Index: src/sys/arch/luna68k/luna68k/trap.c diff -u src/sys/arch/luna68k/luna68k/trap.c:1.71 src/sys/arch/luna68k/luna68k/trap.c:1.72 --- src/sys/arch/luna68k/luna68k/trap.c:1.71 Sat Apr 6 03:06:25 2019 +++ src/sys/arch/luna68k/luna68k/trap.c Thu Nov 21 19:24:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.71 2019/04/06 03:06:25 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.72 2019/11/21 19:24:00 ad Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.71 2019/04/06 03:06:25 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.72 2019/11/21 19:24:00 ad Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -453,8 +453,6 @@ trap(struct frame *fp, int type, unsigne l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - if (curcpu()->ci_want_resched) - preempt(); goto out; case T_MMUFLT: /* kernel mode page fault */ Index: src/sys/arch/mac68k/mac68k/trap.c diff -u src/sys/arch/mac68k/mac68k/trap.c:1.149 src/sys/arch/mac68k/mac68k/trap.c:1.150 --- src/sys/arch/mac68k/mac68k/trap.c:1.149 Sat Apr 6 03:06:26 2019 +++ src/sys/arch/mac68k/mac68k/trap.c Thu Nov 21 19:24:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.149 2019/04/06 03:06:26 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.150 2019/11/21 19:24:00 ad Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.149 2019/04/06 03:06:26 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.150 2019/11/21 19:24:00 ad Exp $"); #include "opt_ddb.h" #include "opt_execfmt.h" @@ -490,8 +490,6 @@ copyfault: l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - if (curcpu()->ci_want_resched) - preempt(); goto out; case T_MMUFLT: /* Kernel mode page fault */ Index: src/sys/arch/mips/include/cpu.h diff -u src/sys/arch/mips/include/cpu.h:1.126 src/sys/arch/mips/include/cpu.h:1.127 --- src/sys/arch/mips/include/cpu.h:1.126 Sun Sep 16 09:25:46 2018 +++ src/sys/arch/mips/include/cpu.h Thu Nov 21 19:24:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.h,v 1.126 2018/09/16 09:25:46 skrll Exp $ */ +/* $NetBSD: cpu.h,v 1.127 2019/11/21 19:24:00 ad Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -251,11 +251,6 @@ struct pcb; struct reg; /* - * Preempt the current process if in interrupt from user mode, - * or after the current trap/syscall if in system mode. - */ -void cpu_need_resched(struct cpu_info *, int); -/* * Notify the current lwp (l) that it has a signal pending, * process as soon as possible. */ @@ -267,7 +262,6 @@ void cpu_signotify(struct lwp *); * through trap, marking the proc as needing a profiling tick. */ void cpu_need_proftick(struct lwp *); -void cpu_set_curpri(int); /* VM related hooks */ void cpu_boot_secondary_processors(void); Index: src/sys/arch/mvme68k/mvme68k/trap.c diff -u src/sys/arch/mvme68k/mvme68k/trap.c:1.110 src/sys/arch/mvme68k/mvme68k/trap.c:1.111 --- src/sys/arch/mvme68k/mvme68k/trap.c:1.110 Sat Apr 6 03:06:26 2019 +++ src/sys/arch/mvme68k/mvme68k/trap.c Thu Nov 21 19:24:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.110 2019/04/06 03:06:26 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.111 2019/11/21 19:24:00 ad Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.110 2019/04/06 03:06:26 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.111 2019/11/21 19:24:00 ad Exp $"); #include "opt_ddb.h" #include "opt_execfmt.h" @@ -515,8 +515,6 @@ trap(struct frame *fp, int type, unsigne l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - if (curcpu()->ci_want_resched) - preempt(); goto out; case T_MMUFLT: /* kernel mode page fault */ Index: src/sys/arch/news68k/news68k/trap.c diff -u src/sys/arch/news68k/news68k/trap.c:1.71 src/sys/arch/news68k/news68k/trap.c:1.72 --- src/sys/arch/news68k/news68k/trap.c:1.71 Sat Apr 6 03:06:26 2019 +++ src/sys/arch/news68k/news68k/trap.c Thu Nov 21 19:24:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.71 2019/04/06 03:06:26 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.72 2019/11/21 19:24:00 ad Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.71 2019/04/06 03:06:26 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.72 2019/11/21 19:24:00 ad Exp $"); #include "opt_ddb.h" #include "opt_execfmt.h" @@ -468,8 +468,6 @@ trap(struct frame *fp, int type, u_int c l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - if (curcpu()->ci_want_resched) - preempt(); goto out; case T_MMUFLT: /* kernel mode page fault */ Index: src/sys/arch/next68k/next68k/trap.c diff -u src/sys/arch/next68k/next68k/trap.c:1.90 src/sys/arch/next68k/next68k/trap.c:1.91 --- src/sys/arch/next68k/next68k/trap.c:1.90 Sat Apr 6 03:06:26 2019 +++ src/sys/arch/next68k/next68k/trap.c Thu Nov 21 19:24:01 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.90 2019/04/06 03:06:26 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.91 2019/11/21 19:24:01 ad Exp $ */ /* * This file was taken from mvme68k/mvme68k/trap.c @@ -46,7 +46,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.90 2019/04/06 03:06:26 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.91 2019/11/21 19:24:01 ad Exp $"); #include "opt_ddb.h" #include "opt_execfmt.h" @@ -506,8 +506,6 @@ trap(struct frame *fp, int type, unsigne l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - if (curcpu()->ci_want_resched) - preempt(); goto out; case T_MMUFLT: /* kernel mode page fault */ Index: src/sys/arch/or1k/include/cpu.h diff -u src/sys/arch/or1k/include/cpu.h:1.2 src/sys/arch/or1k/include/cpu.h:1.3 --- src/sys/arch/or1k/include/cpu.h:1.2 Thu Apr 19 21:50:07 2018 +++ src/sys/arch/or1k/include/cpu.h Thu Nov 21 19:24:01 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.h,v 1.2 2018/04/19 21:50:07 christos Exp $ */ +/* $NetBSD: cpu.h,v 1.3 2019/11/21 19:24:01 ad Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -84,7 +84,6 @@ cpu_number(void) #endif } -void cpu_set_curpri(int); void cpu_proc_fork(struct proc *, struct proc *); void cpu_signotify(struct lwp *); void cpu_need_proftick(struct lwp *l); Index: src/sys/arch/riscv/include/cpu.h diff -u src/sys/arch/riscv/include/cpu.h:1.5 src/sys/arch/riscv/include/cpu.h:1.6 --- src/sys/arch/riscv/include/cpu.h:1.5 Sat Jun 1 12:42:28 2019 +++ src/sys/arch/riscv/include/cpu.h Thu Nov 21 19:24:01 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.h,v 1.5 2019/06/01 12:42:28 maxv Exp $ */ +/* $NetBSD: cpu.h,v 1.6 2019/11/21 19:24:01 ad Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -103,7 +103,6 @@ cpu_number(void) #endif } -void cpu_set_curpri(int); void cpu_proc_fork(struct proc *, struct proc *); void cpu_signotify(struct lwp *); void cpu_need_proftick(struct lwp *l); Index: src/sys/arch/riscv/riscv/trap.c diff -u src/sys/arch/riscv/riscv/trap.c:1.3 src/sys/arch/riscv/riscv/trap.c:1.4 --- src/sys/arch/riscv/riscv/trap.c:1.3 Sun Jun 16 07:42:52 2019 +++ src/sys/arch/riscv/riscv/trap.c Thu Nov 21 19:24:01 2019 @@ -32,7 +32,7 @@ #define __PMAP_PRIVATE #define __UFETCHSTORE_PRIVATE -__RCSID("$NetBSD: trap.c,v 1.3 2019/06/16 07:42:52 maxv Exp $"); +__RCSID("$NetBSD: trap.c,v 1.4 2019/11/21 19:24:01 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -446,10 +446,6 @@ cpu_ast(struct trapframe *tf) curlwp->l_pflag &= ~LP_OWEUPC; ADDUPROF(curlwp); } - - if (ci->ci_want_resched) { - preempt(); - } } void Index: src/sys/arch/sh3/sh3/exception.c diff -u src/sys/arch/sh3/sh3/exception.c:1.67 src/sys/arch/sh3/sh3/exception.c:1.68 --- src/sys/arch/sh3/sh3/exception.c:1.67 Sat Apr 6 03:06:27 2019 +++ src/sys/arch/sh3/sh3/exception.c Thu Nov 21 19:24:01 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: exception.c,v 1.67 2019/04/06 03:06:27 thorpej Exp $ */ +/* $NetBSD: exception.c,v 1.68 2019/11/21 19:24:01 ad Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. All rights reserved. @@ -79,7 +79,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: exception.c,v 1.67 2019/04/06 03:06:27 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: exception.c,v 1.68 2019/11/21 19:24:01 ad Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -480,11 +480,6 @@ ast(struct lwp *l, struct trapframe *tf) ADDUPROF(l); } - if (l->l_cpu->ci_want_resched) { - /* We are being preempted. */ - preempt(); - } - userret(l); } } Index: src/sys/arch/sparc/include/userret.h diff -u src/sys/arch/sparc/include/userret.h:1.8 src/sys/arch/sparc/include/userret.h:1.9 --- src/sys/arch/sparc/include/userret.h:1.8 Mon Nov 5 20:37:48 2007 +++ src/sys/arch/sparc/include/userret.h Thu Nov 21 19:24:01 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: userret.h,v 1.8 2007/11/05 20:37:48 ad Exp $ */ +/* $NetBSD: userret.h,v 1.9 2019/11/21 19:24:01 ad Exp $ */ /* * Copyright (c) 1996 @@ -63,7 +63,6 @@ userret(struct lwp *l, int pc, u_quad_t { struct proc *p = l->l_proc; - again: mi_userret(l); if (cpuinfo.ci_want_ast) { @@ -73,13 +72,6 @@ userret(struct lwp *l, int pc, u_quad_t ADDUPROF(l); } } - if (cpuinfo.ci_want_resched) { - /* - * We are being preempted. - */ - preempt(); - goto again; - } /* * If profiling, charge recent system time to the trapped pc. Index: src/sys/arch/sparc64/sparc64/trap.c diff -u src/sys/arch/sparc64/sparc64/trap.c:1.191 src/sys/arch/sparc64/sparc64/trap.c:1.192 --- src/sys/arch/sparc64/sparc64/trap.c:1.191 Fri Feb 15 16:36:33 2019 +++ src/sys/arch/sparc64/sparc64/trap.c Thu Nov 21 19:24:01 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.191 2019/02/15 16:36:33 hannken Exp $ */ +/* $NetBSD: trap.c,v 1.192 2019/11/21 19:24:01 ad Exp $ */ /* * Copyright (c) 1996-2002 Eduardo Horvath. All rights reserved. @@ -50,7 +50,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.191 2019/02/15 16:36:33 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.192 2019/11/21 19:24:01 ad Exp $"); #include "opt_ddb.h" #include "opt_multiprocessor.h" @@ -613,8 +613,6 @@ dopanic: l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - if (want_resched) - preempt(); break; case T_INST_EXCEPT: Index: src/sys/arch/sun2/sun2/trap.c diff -u src/sys/arch/sun2/sun2/trap.c:1.45 src/sys/arch/sun2/sun2/trap.c:1.46 --- src/sys/arch/sun2/sun2/trap.c:1.45 Sat Apr 6 03:06:27 2019 +++ src/sys/arch/sun2/sun2/trap.c Thu Nov 21 19:24:01 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.45 2019/04/06 03:06:27 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.46 2019/11/21 19:24:01 ad Exp $ */ /* * Copyright (c) 1982, 1986, 1990, 1993 @@ -78,7 +78,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.45 2019/04/06 03:06:27 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.46 2019/11/21 19:24:01 ad Exp $"); #include "opt_ddb.h" #include "opt_execfmt.h" @@ -138,7 +138,6 @@ void straytrap(struct trapframe); static void userret(struct lwp *, struct trapframe *, u_quad_t); int astpending; -int want_resched; const char *trap_type[] = { "Bus error", @@ -455,8 +454,6 @@ trap(struct trapframe *tf, int type, u_i l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - if (curcpu()->ci_want_resched) - preempt(); goto douret; case T_MMUFLT: /* kernel mode page fault */ Index: src/sys/arch/sun3/sun3/trap.c diff -u src/sys/arch/sun3/sun3/trap.c:1.145 src/sys/arch/sun3/sun3/trap.c:1.146 --- src/sys/arch/sun3/sun3/trap.c:1.145 Sat Apr 6 03:06:28 2019 +++ src/sys/arch/sun3/sun3/trap.c Thu Nov 21 19:24:01 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.145 2019/04/06 03:06:28 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.146 2019/11/21 19:24:01 ad Exp $ */ /* * Copyright (c) 1982, 1986, 1990, 1993 @@ -78,7 +78,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.145 2019/04/06 03:06:28 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.146 2019/11/21 19:24:01 ad Exp $"); #include "opt_ddb.h" #include "opt_execfmt.h" @@ -463,8 +463,6 @@ trap(struct trapframe *tf, int type, u_i l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - if (curcpu()->ci_want_resched) - preempt(); goto douret; case T_MMUFLT: /* kernel mode page fault */ Index: src/sys/arch/usermode/usermode/trap.c diff -u src/sys/arch/usermode/usermode/trap.c:1.70 src/sys/arch/usermode/usermode/trap.c:1.71 --- src/sys/arch/usermode/usermode/trap.c:1.70 Wed Aug 1 09:44:31 2018 +++ src/sys/arch/usermode/usermode/trap.c Thu Nov 21 19:24:02 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.70 2018/08/01 09:44:31 reinoud Exp $ */ +/* $NetBSD: trap.c,v 1.71 2019/11/21 19:24:02 ad Exp $ */ /*- * Copyright (c) 2011 Reinoud Zandijk <rein...@netbsd.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.70 2018/08/01 09:44:31 reinoud Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.71 2019/11/21 19:24:02 ad Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -202,12 +202,6 @@ ast(struct lwp *l) } #endif - /* allow a forced task switch */ - if (curcpu()->ci_want_resched) { - curcpu()->ci_want_resched = 0; - preempt(); - /* returns here! */ - } KASSERT(l == curlwp); KASSERT(l); pcb = lwp_getpcb(l); KASSERT(pcb); mi_userret(l); Index: src/sys/arch/vax/vax/trap.c diff -u src/sys/arch/vax/vax/trap.c:1.135 src/sys/arch/vax/vax/trap.c:1.136 --- src/sys/arch/vax/vax/trap.c:1.135 Mon May 22 16:53:05 2017 +++ src/sys/arch/vax/vax/trap.c Thu Nov 21 19:24:02 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.135 2017/05/22 16:53:05 ragge Exp $ */ +/* $NetBSD: trap.c,v 1.136 2019/11/21 19:24:02 ad Exp $ */ /* * Copyright (c) 1994 Ludd, University of Lule}, Sweden. @@ -28,7 +28,7 @@ /* All bugs are subject to removal without further notice */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.135 2017/05/22 16:53:05 ragge Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.136 2019/11/21 19:24:02 ad Exp $"); #include "opt_ddb.h" #include "opt_multiprocessor.h" @@ -317,8 +317,6 @@ if(faultdebug)printf("trap accflt type % case T_ASTFLT|T_USER: mtpr(AST_NO,PR_ASTLVL); trapsig = false; - if (curcpu()->ci_want_resched) - preempt(); break; #ifdef DDB Index: src/sys/arch/x68k/x68k/trap.c diff -u src/sys/arch/x68k/x68k/trap.c:1.108 src/sys/arch/x68k/x68k/trap.c:1.109 --- src/sys/arch/x68k/x68k/trap.c:1.108 Sat Apr 6 03:06:28 2019 +++ src/sys/arch/x68k/x68k/trap.c Thu Nov 21 19:24:02 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.108 2019/04/06 03:06:28 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.109 2019/11/21 19:24:02 ad Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.108 2019/04/06 03:06:28 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.109 2019/11/21 19:24:02 ad Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -522,8 +522,6 @@ trap(struct frame *fp, int type, unsigne l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l); } - if (curcpu()->ci_want_resched) - preempt(); goto out; case T_MMUFLT: /* kernel mode page fault */ Index: src/sys/sys/userret.h diff -u src/sys/sys/userret.h:1.28 src/sys/sys/userret.h:1.29 --- src/sys/sys/userret.h:1.28 Fri May 17 03:34:27 2019 +++ src/sys/sys/userret.h Thu Nov 21 19:24:02 2019 @@ -1,7 +1,7 @@ -/* $NetBSD: userret.h,v 1.28 2019/05/17 03:34:27 ozaki-r Exp $ */ +/* $NetBSD: userret.h,v 1.29 2019/11/21 19:24:02 ad Exp $ */ /*- - * Copyright (c) 1998, 2000, 2003, 2006, 2008 The NetBSD Foundation, Inc. + * Copyright (c) 1998, 2000, 2003, 2006, 2008, 2019 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation @@ -70,48 +70,39 @@ #include <sys/psref.h> /* - * Define the MI code needed before returning to user mode, for - * trap and syscall. + * Define the MI code needed before returning to user mode, for trap and + * syscall. + * + * We handle "exceptional" events: pending signals, stop/exit actions, etc. + * Note that the event must be flagged BEFORE any AST is posted as we are + * reading unlocked. */ static __inline void mi_userret(struct lwp *l) { -#ifndef __HAVE_PREEMPTION struct cpu_info *ci; -#endif + KPREEMPT_DISABLE(l); + ci = l->l_cpu; KASSERT(l->l_blcnt == 0); -#ifndef __HAVE_PREEMPTION - KASSERT(curcpu()->ci_biglock_count == 0); -#endif - - /* - * Handle "exceptional" events: pending signals, stop/exit actions, - * etc. Note that the event must be flagged BEFORE any AST is - * posted as we are reading unlocked. - */ -#ifdef __HAVE_PREEMPTION - if (__predict_false(l->l_flag & LW_USERRET)) { - lwp_userret(l); + KASSERT(ci->ci_biglock_count == 0); + if (__predict_false(ci->ci_want_resched)) { + preempt(); + ci = l->l_cpu; } - l->l_kpriority = false; - /* - * cpu_set_curpri(prio) is a MD optimized version of: - * - * kpreempt_disable(); - * curcpu()->ci_schedstate.spc_curpriority = prio; - * kpreempt_enable(); - */ - cpu_set_curpri(l->l_priority); /* XXX this needs to die */ +#ifdef __HAVE_FAST_SOFTINTS + if (__predict_false(l->l_flag & LW_USERRET)) { #else - ci = l->l_cpu; if (((l->l_flag & LW_USERRET) | ci->ci_data.cpu_softints) != 0) { +#endif + KPREEMPT_ENABLE(l); lwp_userret(l); + KPREEMPT_DISABLE(l); ci = l->l_cpu; } l->l_kpriority = false; ci->ci_schedstate.spc_curpriority = l->l_priority; -#endif + KPREEMPT_ENABLE(l); LOCKDEBUG_BARRIER(NULL, 0); KASSERT(l->l_nopreempt == 0);