Module Name:    src
Committed By:   maxv
Date:           Sat Aug 12 07:07:53 UTC 2017

Modified Files:
        src/sys/arch/i386/i386: compat_13_machdep.c compat_16_machdep.c
            i386_trap.S machdep.c process_machdep.c spl.S trap.c
        src/sys/compat/freebsd: freebsd_machdep.c
        src/sys/compat/linux/arch/i386: linux_machdep.c

Log Message:
Remove vm86. Simplifies a number of critical places.

Pass 2.


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/sys/arch/i386/i386/compat_13_machdep.c
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/i386/i386/compat_16_machdep.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/i386/i386/i386_trap.S
cvs rdiff -u -r1.788 -r1.789 src/sys/arch/i386/i386/machdep.c
cvs rdiff -u -r1.89 -r1.90 src/sys/arch/i386/i386/process_machdep.c
cvs rdiff -u -r1.40 -r1.41 src/sys/arch/i386/i386/spl.S
cvs rdiff -u -r1.288 -r1.289 src/sys/arch/i386/i386/trap.c
cvs rdiff -u -r1.2 -r1.3 src/sys/compat/freebsd/freebsd_machdep.c
cvs rdiff -u -r1.163 -r1.164 src/sys/compat/linux/arch/i386/linux_machdep.c

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/i386/i386/compat_13_machdep.c
diff -u src/sys/arch/i386/i386/compat_13_machdep.c:1.25 src/sys/arch/i386/i386/compat_13_machdep.c:1.26
--- src/sys/arch/i386/i386/compat_13_machdep.c:1.25	Sat Nov 21 03:11:00 2009
+++ src/sys/arch/i386/i386/compat_13_machdep.c	Sat Aug 12 07:07:53 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_13_machdep.c,v 1.25 2009/11/21 03:11:00 rmind Exp $	*/
+/*	$NetBSD: compat_13_machdep.c,v 1.26 2017/08/12 07:07:53 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2000 The NetBSD Foundation, Inc.
@@ -30,11 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: compat_13_machdep.c,v 1.25 2009/11/21 03:11:00 rmind Exp $");
-
-#ifdef _KERNEL_OPT
-#include "opt_vm86.h"
-#endif
+__KERNEL_RCSID(0, "$NetBSD: compat_13_machdep.c,v 1.26 2017/08/12 07:07:53 maxv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -47,10 +43,6 @@ __KERNEL_RCSID(0, "$NetBSD: compat_13_ma
 #include <compat/sys/signal.h>
 #include <compat/sys/signalvar.h>
 
-#ifdef VM86
-#include <machine/vm86.h>
-#endif
-
 int
 compat_13_sys_sigreturn(struct lwp *l, const struct compat_13_sys_sigreturn_args *uap, register_t *retval)
 {
@@ -73,36 +65,24 @@ compat_13_sys_sigreturn(struct lwp *l, c
 
 	/* Restore register context. */
 	tf = l->l_md.md_regs;
-#ifdef VM86
-	if (context.sc_eflags & PSL_VM) {
-		void syscall_vm86(struct trapframe *);
-
-		tf->tf_vm86_gs = context.sc_gs;
-		tf->tf_vm86_fs = context.sc_fs;
-		tf->tf_vm86_es = context.sc_es;
-		tf->tf_vm86_ds = context.sc_ds;
-		set_vflags(l, context.sc_eflags);
-		p->p_md.md_syscall = syscall_vm86;
-	} else
-#endif
-	{
-		/*
-		 * Check for security violations.  If we're returning to
-		 * protected mode, the CPU will validate the segment registers
-		 * automatically and generate a trap on violations.  We handle
-		 * the trap, rather than doing all of the checking here.
-		 */
-		if (((context.sc_eflags ^ tf->tf_eflags) & PSL_USERSTATIC) != 0 ||
-		    !USERMODE(context.sc_cs, context.sc_eflags))
-			return (EINVAL);
-
-		tf->tf_gs = context.sc_gs;
-		tf->tf_fs = context.sc_fs;		
-		tf->tf_es = context.sc_es;
-		tf->tf_ds = context.sc_ds;
-		tf->tf_eflags &= ~PSL_USER;
-		tf->tf_eflags |= context.sc_eflags & PSL_USER;
-	}
+
+	/*
+	 * Check for security violations.  If we're returning to
+	 * protected mode, the CPU will validate the segment registers
+	 * automatically and generate a trap on violations.  We handle
+	 * the trap, rather than doing all of the checking here.
+	 */
+	if (((context.sc_eflags ^ tf->tf_eflags) & PSL_USERSTATIC) != 0 ||
+	    !USERMODE(context.sc_cs, context.sc_eflags))
+		return (EINVAL);
+
+	tf->tf_gs = context.sc_gs;
+	tf->tf_fs = context.sc_fs;		
+	tf->tf_es = context.sc_es;
+	tf->tf_ds = context.sc_ds;
+	tf->tf_eflags &= ~PSL_USER;
+	tf->tf_eflags |= context.sc_eflags & PSL_USER;
+
 	tf->tf_edi = context.sc_edi;
 	tf->tf_esi = context.sc_esi;
 	tf->tf_ebp = context.sc_ebp;

Index: src/sys/arch/i386/i386/compat_16_machdep.c
diff -u src/sys/arch/i386/i386/compat_16_machdep.c:1.28 src/sys/arch/i386/i386/compat_16_machdep.c:1.29
--- src/sys/arch/i386/i386/compat_16_machdep.c:1.28	Thu Aug 10 12:49:11 2017
+++ src/sys/arch/i386/i386/compat_16_machdep.c	Sat Aug 12 07:07:53 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_16_machdep.c,v 1.28 2017/08/10 12:49:11 maxv Exp $	*/
+/*	$NetBSD: compat_16_machdep.c,v 1.29 2017/08/12 07:07:53 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2000 The NetBSD Foundation, Inc.
@@ -30,10 +30,9 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: compat_16_machdep.c,v 1.28 2017/08/10 12:49:11 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: compat_16_machdep.c,v 1.29 2017/08/12 07:07:53 maxv Exp $");
 
 #ifdef _KERNEL_OPT
-#include "opt_vm86.h"
 #include "opt_compat_netbsd.h"
 #endif
 
@@ -46,10 +45,6 @@ __KERNEL_RCSID(0, "$NetBSD: compat_16_ma
 #include <sys/mount.h>
 #include <sys/syscallargs.h>
 
-#ifdef VM86
-#include <machine/mcontext.h>
-#include <machine/vm86.h>
-#endif
 #include <uvm/uvm_extern.h>
 
 #include <machine/pmap.h>
@@ -93,36 +88,24 @@ compat_16_sys___sigreturn14(struct lwp *
 
 	/* Restore register context. */
 	tf = l->l_md.md_regs;
-#ifdef VM86
-	if (context.sc_eflags & PSL_VM) {
-		void syscall_vm86(struct trapframe *);
-
-		tf->tf_vm86_gs = context.sc_gs;
-		tf->tf_vm86_fs = context.sc_fs;
-		tf->tf_vm86_es = context.sc_es;
-		tf->tf_vm86_ds = context.sc_ds;
-		set_vflags(l, context.sc_eflags);
-		p->p_md.md_syscall = syscall_vm86;
-	} else
-#endif
-	{
-		/*
-		 * Check for security violations.  If we're returning to
-		 * protected mode, the CPU will validate the segment registers
-		 * automatically and generate a trap on violations.  We handle
-		 * the trap, rather than doing all of the checking here.
-		 */
-		if (((context.sc_eflags ^ tf->tf_eflags) & PSL_USERSTATIC) != 0 ||
-		    !USERMODE(context.sc_cs, context.sc_eflags))
-			return (EINVAL);
-
-		tf->tf_gs = context.sc_gs;
-		tf->tf_fs = context.sc_fs;
-		tf->tf_es = context.sc_es;
-		tf->tf_ds = context.sc_ds;
-		tf->tf_eflags &= ~PSL_USER;
-		tf->tf_eflags |= context.sc_eflags & PSL_USER;
-	}
+
+	/*
+	 * Check for security violations.  If we're returning to
+	 * protected mode, the CPU will validate the segment registers
+	 * automatically and generate a trap on violations.  We handle
+	 * the trap, rather than doing all of the checking here.
+	 */
+	if (((context.sc_eflags ^ tf->tf_eflags) & PSL_USERSTATIC) != 0 ||
+	    !USERMODE(context.sc_cs, context.sc_eflags))
+		return (EINVAL);
+
+	tf->tf_gs = context.sc_gs;
+	tf->tf_fs = context.sc_fs;
+	tf->tf_es = context.sc_es;
+	tf->tf_ds = context.sc_ds;
+	tf->tf_eflags &= ~PSL_USER;
+	tf->tf_eflags |= context.sc_eflags & PSL_USER;
+
 	tf->tf_edi = context.sc_edi;
 	tf->tf_esi = context.sc_esi;
 	tf->tf_ebp = context.sc_ebp;
@@ -198,23 +181,12 @@ sendsig_sigcontext(const ksiginfo_t *ksi
 	frame.sf_scp = &fp->sf_sc;
 
 	/* Save register context. */
-#ifdef VM86
-	if (tf->tf_eflags & PSL_VM) {
-		frame.sf_sc.sc_gs = tf->tf_vm86_gs;
-		frame.sf_sc.sc_fs = tf->tf_vm86_fs;
-		frame.sf_sc.sc_es = tf->tf_vm86_es;
-		frame.sf_sc.sc_ds = tf->tf_vm86_ds;
-		frame.sf_sc.sc_eflags = get_vflags(l);
-		(*p->p_emul->e_syscall_intern)(p);
-	} else
-#endif
-	{
-		frame.sf_sc.sc_gs = tf->tf_gs;
-		frame.sf_sc.sc_fs = tf->tf_fs;
-		frame.sf_sc.sc_es = tf->tf_es;
-		frame.sf_sc.sc_ds = tf->tf_ds;
-		frame.sf_sc.sc_eflags = tf->tf_eflags;
-	}
+	frame.sf_sc.sc_gs = tf->tf_gs;
+	frame.sf_sc.sc_fs = tf->tf_fs;
+	frame.sf_sc.sc_es = tf->tf_es;
+	frame.sf_sc.sc_ds = tf->tf_ds;
+	frame.sf_sc.sc_eflags = tf->tf_eflags;
+
 	frame.sf_sc.sc_edi = tf->tf_edi;
 	frame.sf_sc.sc_esi = tf->tf_esi;
 	frame.sf_sc.sc_ebp = tf->tf_ebp;

Index: src/sys/arch/i386/i386/i386_trap.S
diff -u src/sys/arch/i386/i386/i386_trap.S:1.8 src/sys/arch/i386/i386/i386_trap.S:1.9
--- src/sys/arch/i386/i386/i386_trap.S:1.8	Wed Jun 14 17:21:04 2017
+++ src/sys/arch/i386/i386/i386_trap.S	Sat Aug 12 07:07:53 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: i386_trap.S,v 1.8 2017/06/14 17:21:04 maxv Exp $	*/
+/*	$NetBSD: i386_trap.S,v 1.9 2017/08/12 07:07:53 maxv Exp $	*/
 
 /*
  * Copyright 2002 (c) Wasabi Systems, Inc.
@@ -66,7 +66,7 @@
 
 #if 0
 #include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: i386_trap.S,v 1.8 2017/06/14 17:21:04 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i386_trap.S,v 1.9 2017/08/12 07:07:53 maxv Exp $");
 #endif
 
 /*
@@ -383,12 +383,7 @@ calltrap:
 _C_LABEL(trapreturn):	.globl	trapreturn
 	testb	$CHK_UPL,TF_CS(%esp)
 	jnz	.Lalltraps_checkast
-#ifdef VM86
-	testl	$PSL_VM,TF_EFLAGS(%esp)
-	jz	6f
-#else
 	jmp	6f
-#endif
 .Lalltraps_checkast:
 	/* Check for ASTs on exit to user mode. */
 	CLI(%eax)

Index: src/sys/arch/i386/i386/machdep.c
diff -u src/sys/arch/i386/i386/machdep.c:1.788 src/sys/arch/i386/i386/machdep.c:1.789
--- src/sys/arch/i386/i386/machdep.c:1.788	Thu Aug 10 12:49:11 2017
+++ src/sys/arch/i386/i386/machdep.c	Sat Aug 12 07:07:53 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.788 2017/08/10 12:49:11 maxv Exp $	*/
+/*	$NetBSD: machdep.c,v 1.789 2017/08/12 07:07:53 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2000, 2004, 2006, 2008, 2009
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.788 2017/08/10 12:49:11 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.789 2017/08/12 07:07:53 maxv Exp $");
 
 #include "opt_beep.h"
 #include "opt_compat_freebsd.h"
@@ -83,7 +83,6 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v 
 #include "opt_physmem.h"
 #include "opt_realmem.h"
 #include "opt_user_ldt.h"
-#include "opt_vm86.h"
 #include "opt_xen.h"
 #include "isa.h"
 #include "pci.h"
@@ -172,10 +171,6 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v 
 #include <ddb/db_extern.h>
 #endif
 
-#ifdef VM86
-#include <machine/vm86.h>
-#endif
-
 #include "acpica.h"
 #include "bioscall.h"
 
@@ -593,12 +588,7 @@ getframe(struct lwp *l, int sig, int *on
 	    && (SIGACTION(p, sig).sa_flags & SA_ONSTACK) != 0;
 	if (*onstack)
 		return (char *)l->l_sigstk.ss_sp + l->l_sigstk.ss_size;
-#ifdef VM86
-	if (tf->tf_eflags & PSL_VM)
-		return (void *)(tf->tf_esp + (tf->tf_ss << 4));
-	else
-#endif
-		return (void *)tf->tf_esp;
+	return (void *)tf->tf_esp;
 }
 
 /*
@@ -1458,22 +1448,12 @@ cpu_getmcontext(struct lwp *l, mcontext_
 	__greg_t ras_eip;
 
 	/* Save register context. */
-#ifdef VM86
-	if (tf->tf_eflags & PSL_VM) {
-		gr[_REG_GS]  = tf->tf_vm86_gs;
-		gr[_REG_FS]  = tf->tf_vm86_fs;
-		gr[_REG_ES]  = tf->tf_vm86_es;
-		gr[_REG_DS]  = tf->tf_vm86_ds;
-		gr[_REG_EFL] = get_vflags(l);
-	} else
-#endif
-	{
-		gr[_REG_GS]  = tf->tf_gs;
-		gr[_REG_FS]  = tf->tf_fs;
-		gr[_REG_ES]  = tf->tf_es;
-		gr[_REG_DS]  = tf->tf_ds;
-		gr[_REG_EFL] = tf->tf_eflags;
-	}
+	gr[_REG_GS]  = tf->tf_gs;
+	gr[_REG_FS]  = tf->tf_fs;
+	gr[_REG_ES]  = tf->tf_es;
+	gr[_REG_DS]  = tf->tf_ds;
+	gr[_REG_EFL] = tf->tf_eflags;
+
 	gr[_REG_EDI]    = tf->tf_edi;
 	gr[_REG_ESI]    = tf->tf_esi;
 	gr[_REG_EBP]    = tf->tf_ebp;
@@ -1545,32 +1525,18 @@ cpu_setmcontext(struct lwp *l, const mco
 
 	/* Restore register context, if any. */
 	if ((flags & _UC_CPU) != 0) {
-#ifdef VM86
-		if (gr[_REG_EFL] & PSL_VM) {
-			tf->tf_vm86_gs = gr[_REG_GS];
-			tf->tf_vm86_fs = gr[_REG_FS];
-			tf->tf_vm86_es = gr[_REG_ES];
-			tf->tf_vm86_ds = gr[_REG_DS];
-			set_vflags(l, gr[_REG_EFL]);
-			if (flags & _UC_VM) {
-				void syscall_vm86(struct trapframe *);
-				l->l_proc->p_md.md_syscall = syscall_vm86;
-			}
-		} else
-#endif
-		{
-			error = cpu_mcontext_validate(l, mcp);
-			if (error)
-				return error;
+		error = cpu_mcontext_validate(l, mcp);
+		if (error)
+			return error;
+
+		tf->tf_gs = gr[_REG_GS];
+		tf->tf_fs = gr[_REG_FS];
+		tf->tf_es = gr[_REG_ES];
+		tf->tf_ds = gr[_REG_DS];
+		/* Only change the user-alterable part of eflags */
+		tf->tf_eflags &= ~PSL_USER;
+		tf->tf_eflags |= (gr[_REG_EFL] & PSL_USER);
 
-			tf->tf_gs = gr[_REG_GS];
-			tf->tf_fs = gr[_REG_FS];
-			tf->tf_es = gr[_REG_ES];
-			tf->tf_ds = gr[_REG_DS];
-			/* Only change the user-alterable part of eflags */
-			tf->tf_eflags &= ~PSL_USER;
-			tf->tf_eflags |= (gr[_REG_EFL] & PSL_USER);
-		}
 		tf->tf_edi    = gr[_REG_EDI];
 		tf->tf_esi    = gr[_REG_ESI];
 		tf->tf_ebp    = gr[_REG_EBP];

Index: src/sys/arch/i386/i386/process_machdep.c
diff -u src/sys/arch/i386/i386/process_machdep.c:1.89 src/sys/arch/i386/i386/process_machdep.c:1.90
--- src/sys/arch/i386/i386/process_machdep.c:1.89	Thu Feb 23 03:34:22 2017
+++ src/sys/arch/i386/i386/process_machdep.c	Sat Aug 12 07:07:53 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: process_machdep.c,v 1.89 2017/02/23 03:34:22 kamil Exp $	*/
+/*	$NetBSD: process_machdep.c,v 1.90 2017/08/12 07:07:53 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2000, 2001, 2008 The NetBSD Foundation, Inc.
@@ -75,9 +75,8 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.89 2017/02/23 03:34:22 kamil Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.90 2017/08/12 07:07:53 maxv Exp $");
 
-#include "opt_vm86.h"
 #include "opt_ptrace.h"
 
 #include <sys/param.h>
@@ -97,10 +96,6 @@ __KERNEL_RCSID(0, "$NetBSD: process_mach
 #include <x86/dbregs.h>
 #include <x86/fpu.h>
 
-#ifdef VM86
-#include <machine/vm86.h>
-#endif
-
 static inline struct trapframe *
 process_frame(struct lwp *l)
 {
@@ -113,22 +108,12 @@ process_read_regs(struct lwp *l, struct 
 {
 	struct trapframe *tf = process_frame(l);
 
-#ifdef VM86
-	if (tf->tf_eflags & PSL_VM) {
-		regs->r_gs = tf->tf_vm86_gs;
-		regs->r_fs = tf->tf_vm86_fs;
-		regs->r_es = tf->tf_vm86_es;
-		regs->r_ds = tf->tf_vm86_ds;
-		regs->r_eflags = get_vflags(l);
-	} else
-#endif
-	{
-		regs->r_gs = tf->tf_gs & 0xffff;
-		regs->r_fs = tf->tf_fs & 0xffff;
-		regs->r_es = tf->tf_es & 0xffff;
-		regs->r_ds = tf->tf_ds & 0xffff;
-		regs->r_eflags = tf->tf_eflags;
-	}
+	regs->r_gs = tf->tf_gs & 0xffff;
+	regs->r_fs = tf->tf_fs & 0xffff;
+	regs->r_es = tf->tf_es & 0xffff;
+	regs->r_ds = tf->tf_ds & 0xffff;
+	regs->r_eflags = tf->tf_eflags;
+
 	regs->r_edi = tf->tf_edi;
 	regs->r_esi = tf->tf_esi;
 	regs->r_ebp = tf->tf_ebp;
@@ -168,41 +153,19 @@ process_write_regs(struct lwp *l, const 
 {
 	struct trapframe *tf = process_frame(l);
 
-#ifdef VM86
-	if (regs->r_eflags & PSL_VM) {
-		void syscall_vm86(struct trapframe *);
-
-		tf->tf_vm86_gs = regs->r_gs;
-		tf->tf_vm86_fs = regs->r_fs;
-		tf->tf_vm86_es = regs->r_es;
-		tf->tf_vm86_ds = regs->r_ds;
-		set_vflags(l, regs->r_eflags);
-		/*
-		 * Make sure that attempts at system calls from vm86
-		 * mode die horribly.
-		 */
-		l->l_proc->p_md.md_syscall = syscall_vm86;
-	} else
-#endif
-	{
-		/*
-		 * Check for security violations.
-		 */
-		if (((regs->r_eflags ^ tf->tf_eflags) & PSL_USERSTATIC) != 0 ||
-		    !USERMODE(regs->r_cs, regs->r_eflags))
-			return (EINVAL);
+	/*
+	 * Check for security violations.
+	 */
+	if (((regs->r_eflags ^ tf->tf_eflags) & PSL_USERSTATIC) != 0 ||
+	    !USERMODE(regs->r_cs, regs->r_eflags))
+		return (EINVAL);
+
+	tf->tf_gs = regs->r_gs;
+	tf->tf_fs = regs->r_fs;
+	tf->tf_es = regs->r_es;
+	tf->tf_ds = regs->r_ds;
+	tf->tf_eflags = regs->r_eflags;
 
-		tf->tf_gs = regs->r_gs;
-		tf->tf_fs = regs->r_fs;
-		tf->tf_es = regs->r_es;
-		tf->tf_ds = regs->r_ds;
-#ifdef VM86
-		/* Restore normal syscall handler */
-		if (tf->tf_eflags & PSL_VM)
-			(*l->l_proc->p_emul->e_syscall_intern)(l->l_proc);
-#endif
-		tf->tf_eflags = regs->r_eflags;
-	}
 	tf->tf_edi = regs->r_edi;
 	tf->tf_esi = regs->r_esi;
 	tf->tf_ebp = regs->r_ebp;

Index: src/sys/arch/i386/i386/spl.S
diff -u src/sys/arch/i386/i386/spl.S:1.40 src/sys/arch/i386/i386/spl.S:1.41
--- src/sys/arch/i386/i386/spl.S:1.40	Sat Jan 11 17:06:15 2014
+++ src/sys/arch/i386/i386/spl.S	Sat Aug 12 07:07:53 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: spl.S,v 1.40 2014/01/11 17:06:15 christos Exp $	*/
+/*	$NetBSD: spl.S,v 1.41 2017/08/12 07:07:53 maxv Exp $	*/
 
 /*
  * Copyright (c) 1998, 2007, 2008 The NetBSD Foundation, Inc.
@@ -30,9 +30,8 @@
  */
 
 #include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: spl.S,v 1.40 2014/01/11 17:06:15 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: spl.S,v 1.41 2017/08/12 07:07:53 maxv Exp $");
 
-#include "opt_vm86.h"
 #include "opt_ddb.h"
 #include "opt_spldebug.h"
 #include "opt_xen.h"
@@ -276,12 +275,7 @@ IDTVEC(doreti)
 5:
 	testb   $CHK_UPL,TF_CS(%esp)
 	jnz	doreti_checkast
-#ifdef VM86
-	testl	$PSL_VM,TF_EFLAGS(%esp)
-	jz	6f
-#else
 	jmp	6f
-#endif
 	.type	_C_LABEL(doreti_checkast), @function
 LABEL(doreti_checkast)
 	CHECK_ASTPENDING(%eax)
@@ -417,10 +411,6 @@ IDTVEC(preemptresume)
 	sti
 	testb   $CHK_UPL, TF_CS(%esp)
 	jnz	1f
-#ifdef VM86
-	testl	$PSL_VM,TF_EFLAGS(%esp)
-	jnz	1f
-#endif
 	movl	TF_EIP(%esp), %eax
 	pushl	%eax
 	call	_C_LABEL(kpreempt)		# from kernel

Index: src/sys/arch/i386/i386/trap.c
diff -u src/sys/arch/i386/i386/trap.c:1.288 src/sys/arch/i386/i386/trap.c:1.289
--- src/sys/arch/i386/i386/trap.c:1.288	Sat Jul  1 10:44:42 2017
+++ src/sys/arch/i386/i386/trap.c	Sat Aug 12 07:07:53 2017
@@ -1,5 +1,5 @@
 
-/*	$NetBSD: trap.c,v 1.288 2017/07/01 10:44:42 maxv Exp $	*/
+/*	$NetBSD: trap.c,v 1.289 2017/08/12 07:07:53 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2000, 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -69,13 +69,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.288 2017/07/01 10:44:42 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.289 2017/08/12 07:07:53 maxv Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
 #include "opt_lockdebug.h"
 #include "opt_multiprocessor.h"
-#include "opt_vm86.h"
 #include "opt_xen.h"
 #include "opt_dtrace.h"
 #include "opt_compat_netbsd.h"
@@ -465,12 +464,6 @@ kernelfault:
 			ksi.ksi_code = BUS_ADRALN;
 			break;
 		case T_PROTFLT|T_USER:
-#ifdef VM86
-			if (frame->tf_eflags & PSL_VM) {
-				vm86_gpfault(l, type & ~T_USER);
-				goto out;
-			}
-#endif
 			/*
 			 * If pmap_exec_fixup does something,
 			 * let's retry the trap.

Index: src/sys/compat/freebsd/freebsd_machdep.c
diff -u src/sys/compat/freebsd/freebsd_machdep.c:1.2 src/sys/compat/freebsd/freebsd_machdep.c:1.3
--- src/sys/compat/freebsd/freebsd_machdep.c:1.2	Tue Aug  8 08:04:06 2017
+++ src/sys/compat/freebsd/freebsd_machdep.c	Sat Aug 12 07:07:53 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: freebsd_machdep.c,v 1.2 2017/08/08 08:04:06 maxv Exp $	*/
+/*	$NetBSD: freebsd_machdep.c,v 1.3 2017/08/12 07:07:53 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
@@ -30,11 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: freebsd_machdep.c,v 1.2 2017/08/08 08:04:06 maxv Exp $");
-
-#if defined(_KERNEL_OPT)
-#include "opt_vm86.h"
-#endif
+__KERNEL_RCSID(0, "$NetBSD: freebsd_machdep.c,v 1.3 2017/08/12 07:07:53 maxv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -48,7 +44,6 @@ __KERNEL_RCSID(0, "$NetBSD: freebsd_mach
 #include <machine/cpufunc.h>
 #include <x86/fpu.h>
 #include <machine/reg.h>
-#include <machine/vm86.h>
 #include <machine/vmparam.h>
 #include <compat/freebsd/freebsd_machdep.h>
 
@@ -101,23 +96,12 @@ freebsd_sendsig(const ksiginfo_t *ksi, c
 	frame.sf_handler = catcher;
 
 	/* Save context. */
-#ifdef VM86
-	if (tf->tf_eflags & PSL_VM) {
-		frame.sf_sc.sc_gs = tf->tf_vm86_gs;
-		frame.sf_sc.sc_fs = tf->tf_vm86_fs;
-		frame.sf_sc.sc_es = tf->tf_vm86_es;
-		frame.sf_sc.sc_ds = tf->tf_vm86_ds;
-		frame.sf_sc.sc_efl = get_vflags(l);
-		(*p->p_emul->e_syscall_intern)(p);
-	} else
-#endif
-	{
-		frame.sf_sc.sc_gs = tf->tf_gs;
-		frame.sf_sc.sc_fs = tf->tf_fs;
-		frame.sf_sc.sc_es = tf->tf_es;
-		frame.sf_sc.sc_ds = tf->tf_ds;
-		frame.sf_sc.sc_efl = tf->tf_eflags;
-	}
+	frame.sf_sc.sc_gs = tf->tf_gs;
+	frame.sf_sc.sc_fs = tf->tf_fs;
+	frame.sf_sc.sc_es = tf->tf_es;
+	frame.sf_sc.sc_ds = tf->tf_ds;
+	frame.sf_sc.sc_efl = tf->tf_eflags;
+
 	frame.sf_sc.sc_edi = tf->tf_edi;
 	frame.sf_sc.sc_esi = tf->tf_esi;
 	frame.sf_sc.sc_ebp = tf->tf_ebp;
@@ -192,36 +176,24 @@ freebsd_sys_sigreturn(struct lwp *l, con
 
 	/* Restore register context. */
 	tf = l->l_md.md_regs;
-#ifdef VM86
-	if (context.sc_efl & PSL_VM) {
-		void syscall_vm86(struct trapframe *);
-
-		tf->tf_vm86_gs = context.sc_gs;
-		tf->tf_vm86_fs = context.sc_fs;
-		tf->tf_vm86_es = context.sc_es;
-		tf->tf_vm86_ds = context.sc_ds;
-		set_vflags(l, context.sc_efl);
-		p->p_md.md_syscall = syscall_vm86;
-	} else
-#endif
-	{
-		/*
-		 * Check for security violations.  If we're returning to
-		 * protected mode, the CPU will validate the segment registers
-		 * automatically and generate a trap on violations.  We handle
-		 * the trap, rather than doing all of the checking here.
-		 */
-		if (((context.sc_efl ^ tf->tf_eflags) & PSL_USERSTATIC) != 0 ||
-		    !USERMODE(context.sc_cs, context.sc_efl))
-			return (EINVAL);
-
-		tf->tf_gs = context.sc_gs;
-		tf->tf_fs = context.sc_fs;
-		tf->tf_es = context.sc_es;
-		tf->tf_ds = context.sc_ds;
-		tf->tf_eflags &= ~PSL_USER;
-		tf->tf_eflags |= context.sc_efl & PSL_USER;
-	}
+
+	/*
+	 * Check for security violations.  If we're returning to
+	 * protected mode, the CPU will validate the segment registers
+	 * automatically and generate a trap on violations.  We handle
+	 * the trap, rather than doing all of the checking here.
+	 */
+	if (((context.sc_efl ^ tf->tf_eflags) & PSL_USERSTATIC) != 0 ||
+	    !USERMODE(context.sc_cs, context.sc_efl))
+		return (EINVAL);
+
+	tf->tf_gs = context.sc_gs;
+	tf->tf_fs = context.sc_fs;
+	tf->tf_es = context.sc_es;
+	tf->tf_ds = context.sc_ds;
+	tf->tf_eflags &= ~PSL_USER;
+	tf->tf_eflags |= context.sc_efl & PSL_USER;
+
 	tf->tf_edi = context.sc_edi;
 	tf->tf_esi = context.sc_esi;
 	tf->tf_ebp = context.sc_ebp;

Index: src/sys/compat/linux/arch/i386/linux_machdep.c
diff -u src/sys/compat/linux/arch/i386/linux_machdep.c:1.163 src/sys/compat/linux/arch/i386/linux_machdep.c:1.164
--- src/sys/compat/linux/arch/i386/linux_machdep.c:1.163	Sun Feb  5 10:42:22 2017
+++ src/sys/compat/linux/arch/i386/linux_machdep.c	Sat Aug 12 07:07:53 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_machdep.c,v 1.163 2017/02/05 10:42:22 maxv Exp $	*/
+/*	$NetBSD: linux_machdep.c,v 1.164 2017/08/12 07:07:53 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1995, 2000, 2008, 2009 The NetBSD Foundation, Inc.
@@ -30,10 +30,9 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.163 2017/02/05 10:42:22 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.164 2017/08/12 07:07:53 maxv Exp $");
 
 #if defined(_KERNEL_OPT)
-#include "opt_vm86.h"
 #include "opt_user_ldt.h"
 #endif
 
@@ -82,7 +81,6 @@ __KERNEL_RCSID(0, "$NetBSD: linux_machde
 #include <machine/segments.h>
 #include <machine/specialreg.h>
 #include <machine/sysarch.h>
-#include <machine/vm86.h>
 #include <machine/vmparam.h>
 
 #include <x86/fpu.h>
@@ -194,22 +192,12 @@ linux_save_sigcontext(struct lwp *l, str
 	struct pcb *pcb = lwp_getpcb(l);
 
 	/* Save register context. */
-#ifdef VM86
-	if (tf->tf_eflags & PSL_VM) {
-		sc->sc_gs = tf->tf_vm86_gs;
-		sc->sc_fs = tf->tf_vm86_fs;
-		sc->sc_es = tf->tf_vm86_es;
-		sc->sc_ds = tf->tf_vm86_ds;
-		sc->sc_eflags = get_vflags(l);
-	} else
-#endif
-	{
-		sc->sc_gs = tf->tf_gs;
-		sc->sc_fs = tf->tf_fs;
-		sc->sc_es = tf->tf_es;
-		sc->sc_ds = tf->tf_ds;
-		sc->sc_eflags = tf->tf_eflags;
-	}
+	sc->sc_gs = tf->tf_gs;
+	sc->sc_fs = tf->tf_fs;
+	sc->sc_es = tf->tf_es;
+	sc->sc_ds = tf->tf_ds;
+	sc->sc_eflags = tf->tf_eflags;
+
 	sc->sc_edi = tf->tf_edi;
 	sc->sc_esi = tf->tf_esi;
 	sc->sc_esp = tf->tf_esp;
@@ -442,39 +430,22 @@ linux_restore_sigcontext(struct lwp *l, 
 	tf = l->l_md.md_regs;
 	DPRINTF(("sigreturn enter esp=0x%x eip=0x%x\n", tf->tf_esp, tf->tf_eip));
 
-#ifdef VM86
-	if (scp->sc_eflags & PSL_VM) {
-		void syscall_vm86(struct trapframe *);
-
-		tf->tf_vm86_gs = scp->sc_gs;
-		tf->tf_vm86_fs = scp->sc_fs;
-		tf->tf_vm86_es = scp->sc_es;
-		tf->tf_vm86_ds = scp->sc_ds;
-		set_vflags(l, scp->sc_eflags);
-		p->p_md.md_syscall = syscall_vm86;
-	} else
-#endif
-	{
-		/*
-		 * Check for security violations.  If we're returning to
-		 * protected mode, the CPU will validate the segment registers
-		 * automatically and generate a trap on violations.  We handle
-		 * the trap, rather than doing all of the checking here.
-		 */
-		if (((scp->sc_eflags ^ tf->tf_eflags) & PSL_USERSTATIC) != 0 ||
-		    !USERMODE(scp->sc_cs, scp->sc_eflags))
-			return EINVAL;
-
-		tf->tf_gs = scp->sc_gs;
-		tf->tf_fs = scp->sc_fs;
-		tf->tf_es = scp->sc_es;
-		tf->tf_ds = scp->sc_ds;
-#ifdef VM86
-		if (tf->tf_eflags & PSL_VM)
-			(*p->p_emul->e_syscall_intern)(p);
-#endif
-		tf->tf_eflags = scp->sc_eflags;
-	}
+	/*
+	 * Check for security violations.  If we're returning to
+	 * protected mode, the CPU will validate the segment registers
+	 * automatically and generate a trap on violations.  We handle
+	 * the trap, rather than doing all of the checking here.
+	 */
+	if (((scp->sc_eflags ^ tf->tf_eflags) & PSL_USERSTATIC) != 0 ||
+	    !USERMODE(scp->sc_cs, scp->sc_eflags))
+		return EINVAL;
+
+	tf->tf_gs = scp->sc_gs;
+	tf->tf_fs = scp->sc_fs;
+	tf->tf_es = scp->sc_es;
+	tf->tf_ds = scp->sc_ds;
+	tf->tf_eflags = scp->sc_eflags;
+
 	tf->tf_edi = scp->sc_edi;
 	tf->tf_esi = scp->sc_esi;
 	tf->tf_ebp = scp->sc_ebp;

Reply via email to