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);

Reply via email to