Module Name: src
Committed By: dsl
Date: Sun Jan 26 19:16:17 UTC 2014
Modified Files:
src/sys/arch/i386/conf: ALL GENERIC GENERIC_PS2TINY GENERIC_TINY
INSTALL_FLOPPY INSTALL_TINY NET4501 XEN3_DOM0 XEN3_DOMU files.i386
src/sys/arch/i386/i386: autoconf.c i386_trap.S locore.S machdep.c
process_machdep.c trap.c vector.S
src/sys/arch/i386/include: npx.h
src/sys/arch/i386/isa: npx.c
src/sys/arch/i386/pnpbios: files.pnpbios
src/sys/arch/x86/acpi: acpi_wakeup.c
src/sys/arch/x86/include: cpu.h
src/sys/arch/x86/x86: cpu.c ipi.c vm_machdep.c
src/sys/arch/xen/conf: files.xen
src/sys/arch/xen/x86: cpu.c xen_ipi.c
src/sys/arch/xen/xen: hypervisor.c
src/sys/compat/linux/arch/i386: linux_machdep.c
Removed Files:
src/sys/arch/i386/acpi: npx_acpi.c
src/sys/arch/i386/isa: npx_isa.c npxvar.h
src/sys/arch/i386/pnpbios: npx_pnpbios.c
src/sys/arch/xen/i386: npx_hv.c
Log Message:
Remove support for 'external' floating point units and the MS-DOS
compatible method of handling floating point exceptions.
Make kernel support for teh fpu non-optional (486SX should still work).
Only 386 cpus support external fpu, and i386 support was removed years ago.
This means that the npx code no longer uses port 0xf0 or interupt 13.
All the "npx at isa" lines go from the configs, arch/i386/isa/npx.c
is now mandatory for all i386 kernels.
I've renamed npxinit() to fpuinit() and npxinit_cpu() to fpuinit_cpu()
to match the very similar amd64 functions.
The fpu of the boot cpu is now initialised by a direct call from
cpu_configure(), this enables FP emulation for a 486SX.
(for amd64 the cr0 values are set in locore.S and similar).
This fixes a long-standing bug in linux_setregs() - which did not
save the fpu regsiters if they were active.
I've test booted a single cpu i386 kernel (using anita).
amd64 builds - none of teh changes should affect it.
The i386 XEN kernels build, but I'm not sure where they set cr0, and
it might have got lost!
To generate a diff of this commit:
cvs rdiff -u -r1.19 -r0 src/sys/arch/i386/acpi/npx_acpi.c
cvs rdiff -u -r1.366 -r1.367 src/sys/arch/i386/conf/ALL
cvs rdiff -u -r1.1098 -r1.1099 src/sys/arch/i386/conf/GENERIC
cvs rdiff -u -r1.70 -r1.71 src/sys/arch/i386/conf/GENERIC_PS2TINY
cvs rdiff -u -r1.136 -r1.137 src/sys/arch/i386/conf/GENERIC_TINY
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/i386/conf/INSTALL_FLOPPY
cvs rdiff -u -r1.138 -r1.139 src/sys/arch/i386/conf/INSTALL_TINY
cvs rdiff -u -r1.82 -r1.83 src/sys/arch/i386/conf/NET4501
cvs rdiff -u -r1.80 -r1.81 src/sys/arch/i386/conf/XEN3_DOM0
cvs rdiff -u -r1.55 -r1.56 src/sys/arch/i386/conf/XEN3_DOMU
cvs rdiff -u -r1.371 -r1.372 src/sys/arch/i386/conf/files.i386
cvs rdiff -u -r1.98 -r1.99 src/sys/arch/i386/i386/autoconf.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/i386/i386/i386_trap.S
cvs rdiff -u -r1.109 -r1.110 src/sys/arch/i386/i386/locore.S
cvs rdiff -u -r1.742 -r1.743 src/sys/arch/i386/i386/machdep.c
cvs rdiff -u -r1.79 -r1.80 src/sys/arch/i386/i386/process_machdep.c
cvs rdiff -u -r1.268 -r1.269 src/sys/arch/i386/i386/trap.c
cvs rdiff -u -r1.63 -r1.64 src/sys/arch/i386/i386/vector.S
cvs rdiff -u -r1.31 -r1.32 src/sys/arch/i386/include/npx.h
cvs rdiff -u -r1.148 -r1.149 src/sys/arch/i386/isa/npx.c
cvs rdiff -u -r1.22 -r0 src/sys/arch/i386/isa/npx_isa.c
cvs rdiff -u -r1.8 -r0 src/sys/arch/i386/isa/npxvar.h
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/i386/pnpbios/files.pnpbios
cvs rdiff -u -r1.13 -r0 src/sys/arch/i386/pnpbios/npx_pnpbios.c
cvs rdiff -u -r1.34 -r1.35 src/sys/arch/x86/acpi/acpi_wakeup.c
cvs rdiff -u -r1.58 -r1.59 src/sys/arch/x86/include/cpu.h
cvs rdiff -u -r1.107 -r1.108 src/sys/arch/x86/x86/cpu.c
cvs rdiff -u -r1.20 -r1.21 src/sys/arch/x86/x86/ipi.c
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/x86/x86/vm_machdep.c
cvs rdiff -u -r1.129 -r1.130 src/sys/arch/xen/conf/files.xen
cvs rdiff -u -r1.10 -r0 src/sys/arch/xen/i386/npx_hv.c
cvs rdiff -u -r1.95 -r1.96 src/sys/arch/xen/x86/cpu.c
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/xen/x86/xen_ipi.c
cvs rdiff -u -r1.62 -r1.63 src/sys/arch/xen/xen/hypervisor.c
cvs rdiff -u -r1.155 -r1.156 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/conf/ALL
diff -u src/sys/arch/i386/conf/ALL:1.366 src/sys/arch/i386/conf/ALL:1.367
--- src/sys/arch/i386/conf/ALL:1.366 Sat Nov 23 23:36:34 2013
+++ src/sys/arch/i386/conf/ALL Sun Jan 26 19:16:16 2014
@@ -1,4 +1,4 @@
-# $NetBSD: ALL,v 1.366 2013/11/23 23:36:34 riz Exp $
+# $NetBSD: ALL,v 1.367 2014/01/26 19:16:16 dsl Exp $
# From NetBSD: GENERIC,v 1.787 2006/10/01 18:37:54 bouyer Exp
#
# ALL machine description file
@@ -17,7 +17,7 @@ include "arch/i386/conf/std.i386"
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
-#ident "ALL-$Revision: 1.366 $"
+#ident "ALL-$Revision: 1.367 $"
maxusers 64 # estimated number of users
@@ -388,7 +388,6 @@ hpet* at acpinodebus? # High Precision
joy* at acpi? # Joystick/Game port
lpt* at acpi? # Parallel port
mpu* at acpi? # Roland MPU-401 MIDI UART
-npx* at acpi? # Math coprocessor
pckbc* at acpi? # PC keyboard controller
pcppi* at acpi? # AT-style speaker sound
thinkpad* at acpi? # IBM/Lenovo Thinkpad hotkeys
@@ -437,7 +436,6 @@ lpt* at pnpbios? index ? # parallel por
pckbc* at pnpbios? index ? # PC keyboard/mouse controller
fdc* at pnpbios? index ? # floppy controller
-npx* at pnpbios? index ? # Math coprocessor
# IDE controller on Toshiba Portege 3000 series (crippled PCI device)
pciide* at pnpbios? index ?
@@ -557,12 +555,6 @@ cardslot* at cbb?
cardbus* at cardslot?
pcmcia* at cardslot?
-# Coprocessor Support
-
-# Math Coprocessor support
-npx0 at isa? port 0xf0 irq 13 # x86 math coprocessor
-
-
# Console Devices
# wscons
Index: src/sys/arch/i386/conf/GENERIC
diff -u src/sys/arch/i386/conf/GENERIC:1.1098 src/sys/arch/i386/conf/GENERIC:1.1099
--- src/sys/arch/i386/conf/GENERIC:1.1098 Sat Oct 26 09:16:20 2013
+++ src/sys/arch/i386/conf/GENERIC Sun Jan 26 19:16:16 2014
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.1098 2013/10/26 09:16:20 nonaka Exp $
+# $NetBSD: GENERIC,v 1.1099 2014/01/26 19:16:16 dsl Exp $
#
# GENERIC machine description file
#
@@ -22,7 +22,7 @@ include "arch/i386/conf/std.i386"
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
-#ident "GENERIC-$Revision: 1.1098 $"
+#ident "GENERIC-$Revision: 1.1099 $"
maxusers 64 # estimated number of users
@@ -364,7 +364,6 @@ hpet* at acpinodebus? # High Precision
joy* at acpi? # Joystick/Game port
#lpt* at acpi? # Parallel port
mpu* at acpi? # Roland MPU-401 MIDI UART
-npx* at acpi? # Math coprocessor
pckbc* at acpi? # PC keyboard controller
pcppi* at acpi? # AT-style speaker sound
sony* at acpi? # Sony Miscellaneous Controller
@@ -409,7 +408,6 @@ wsmouse* at spic?
#pckbc* at pnpbios? index ? # PC keyboard/mouse controller
#fdc* at pnpbios? index ? # floppy controller
-#npx* at pnpbios? index ? # Math coprocessor
# IDE controller on Toshiba Portege 3000 series (crippled PCI device)
#pciide* at pnpbios? index ?
@@ -525,12 +523,6 @@ cardslot* at cbb?
cardbus* at cardslot?
pcmcia* at cardslot?
-# Coprocessor Support
-
-# Math Coprocessor support
-npx0 at isa? port 0xf0 irq 13 # x86 math coprocessor
-
-
# Console Devices
# wscons
Index: src/sys/arch/i386/conf/GENERIC_PS2TINY
diff -u src/sys/arch/i386/conf/GENERIC_PS2TINY:1.70 src/sys/arch/i386/conf/GENERIC_PS2TINY:1.71
--- src/sys/arch/i386/conf/GENERIC_PS2TINY:1.70 Sun Jun 30 21:38:57 2013
+++ src/sys/arch/i386/conf/GENERIC_PS2TINY Sun Jan 26 19:16:16 2014
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC_PS2TINY,v 1.70 2013/06/30 21:38:57 rmind Exp $
+# $NetBSD: GENERIC_PS2TINY,v 1.71 2014/01/26 19:16:16 dsl Exp $
#
# GENERIC-style kernel config for IBM PS/2 with MCA bus. It only contains
# IBM PS/2 related stuff and has been generally trimmed down somewhat,
@@ -150,8 +150,6 @@ config netbsd root on ? type ?
mca0 at mainbus0
isa0 at mainbus0
-#npx0 at isa? port 0xf0 irq 13 # x86 math coprocessor
-
# wscons
pckbc0 at isa? # PC keyboard controller
options PCKBCDEBUG
Index: src/sys/arch/i386/conf/GENERIC_TINY
diff -u src/sys/arch/i386/conf/GENERIC_TINY:1.136 src/sys/arch/i386/conf/GENERIC_TINY:1.137
--- src/sys/arch/i386/conf/GENERIC_TINY:1.136 Sun Jun 30 21:38:57 2013
+++ src/sys/arch/i386/conf/GENERIC_TINY Sun Jan 26 19:16:16 2014
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC_TINY,v 1.136 2013/06/30 21:38:57 rmind Exp $
+# $NetBSD: GENERIC_TINY,v 1.137 2014/01/26 19:16:16 dsl Exp $
#
# GENERIC_TINY -- suitable default for 4M machines
# No EISA, PCI, or SCSI.
@@ -231,11 +231,6 @@ pcic1 at isa? port 0x3e2 iomem 0xd4000 i
# ISA Plug-and-Play PCMCIA controllers
#pcic* at isapnp?
-# Coprocessor Support
-
-# Math Coprocessor support
-npx0 at isa? port 0xf0 irq 13 # x86 math coprocessor
-
# Console Devices
# wscons
Index: src/sys/arch/i386/conf/INSTALL_FLOPPY
diff -u src/sys/arch/i386/conf/INSTALL_FLOPPY:1.21 src/sys/arch/i386/conf/INSTALL_FLOPPY:1.22
--- src/sys/arch/i386/conf/INSTALL_FLOPPY:1.21 Sun Jun 30 21:38:57 2013
+++ src/sys/arch/i386/conf/INSTALL_FLOPPY Sun Jan 26 19:16:16 2014
@@ -1,4 +1,4 @@
-# $NetBSD: INSTALL_FLOPPY,v 1.21 2013/06/30 21:38:57 rmind Exp $
+# $NetBSD: INSTALL_FLOPPY,v 1.22 2014/01/26 19:16:16 dsl Exp $
#
# INSTALL - Installation kernel.
#
@@ -240,11 +240,6 @@ isapnp0 at isa?
# ISA Plug-and-Play PCMCIA controllers
pcic* at isapnp?
-# Coprocessor Support
-
-# Math Coprocessor support
-npx0 at isa? port 0xf0 irq 13 # x86 math coprocessor
-
# Console Devices
Index: src/sys/arch/i386/conf/INSTALL_TINY
diff -u src/sys/arch/i386/conf/INSTALL_TINY:1.138 src/sys/arch/i386/conf/INSTALL_TINY:1.139
--- src/sys/arch/i386/conf/INSTALL_TINY:1.138 Sun Jun 30 21:38:57 2013
+++ src/sys/arch/i386/conf/INSTALL_TINY Sun Jan 26 19:16:16 2014
@@ -1,4 +1,4 @@
-# $NetBSD: INSTALL_TINY,v 1.138 2013/06/30 21:38:57 rmind Exp $
+# $NetBSD: INSTALL_TINY,v 1.139 2014/01/26 19:16:16 dsl Exp $
#
# This kernel should be derived from INSTALL (which is derived
# from GENERIC) with some features commented out.
@@ -221,11 +221,6 @@ isa0 at mainbus?
# ISA Plug-and-Play bus support
#isapnp0 at isa?
-# Coprocessor Support
-
-# Math Coprocessor support
-npx0 at isa? port 0xf0 irq 13 # x86 math coprocessor
-
# Console Devices
Index: src/sys/arch/i386/conf/NET4501
diff -u src/sys/arch/i386/conf/NET4501:1.82 src/sys/arch/i386/conf/NET4501:1.83
--- src/sys/arch/i386/conf/NET4501:1.82 Sun Jun 30 21:38:57 2013
+++ src/sys/arch/i386/conf/NET4501 Sun Jan 26 19:16:16 2014
@@ -1,4 +1,4 @@
-# $NetBSD: NET4501,v 1.82 2013/06/30 21:38:57 rmind Exp $
+# $NetBSD: NET4501,v 1.83 2014/01/26 19:16:16 dsl Exp $
#
# NET4501 -- kernel configuration for a Soekris Engineering net4501
# single-board computer.
@@ -10,7 +10,7 @@ include "arch/i386/conf/std.i386"
#options INCLUDE_CONFIG_FILE # embed config file in kernel binary
-#ident "NET4501-$Revision: 1.82 $"
+#ident "NET4501-$Revision: 1.83 $"
maxusers 32 # estimated number of users
@@ -204,11 +204,6 @@ atw* at cardbus? function ? # ADMtek ADM
ral* at cardbus? function ? # Ralink RT2x60 (802.11)
rtw* at cardbus? function ? # Realtek RTL8180 (802.11)
-# Coprocessor Support
-
-# Math Coprocessor support
-npx0 at isa? port 0xf0 irq 13 # x86 math coprocessor
-
# ISA serial interfaces
com0 at isa? port 0x3f8 irq 4 # Standard PC serial ports
com1 at isa? port 0x2f8 irq 3
Index: src/sys/arch/i386/conf/XEN3_DOM0
diff -u src/sys/arch/i386/conf/XEN3_DOM0:1.80 src/sys/arch/i386/conf/XEN3_DOM0:1.81
--- src/sys/arch/i386/conf/XEN3_DOM0:1.80 Wed Oct 23 17:26:08 2013
+++ src/sys/arch/i386/conf/XEN3_DOM0 Sun Jan 26 19:16:16 2014
@@ -1,4 +1,4 @@
-# $NetBSD: XEN3_DOM0,v 1.80 2013/10/23 17:26:08 matt Exp $
+# $NetBSD: XEN3_DOM0,v 1.81 2014/01/26 19:16:16 dsl Exp $
#
# XEN3_0: Xen 3.0 domain0 kernel
@@ -211,7 +211,6 @@ hypervisor* at mainbus? # Xen hyperviso
vcpu* at hypervisor? # Xen virtual CPUs
xenbus* at hypervisor? # Xen virtual bus
-npx0 at hypervisor? # x86 math coprocessor
xencons* at hypervisor? # Xen virtual console
#xennet* at hypervisor? # Xen virtual network interface
Index: src/sys/arch/i386/conf/XEN3_DOMU
diff -u src/sys/arch/i386/conf/XEN3_DOMU:1.55 src/sys/arch/i386/conf/XEN3_DOMU:1.56
--- src/sys/arch/i386/conf/XEN3_DOMU:1.55 Sun Jun 30 21:38:57 2013
+++ src/sys/arch/i386/conf/XEN3_DOMU Sun Jan 26 19:16:16 2014
@@ -1,4 +1,4 @@
-# $NetBSD: XEN3_DOMU,v 1.55 2013/06/30 21:38:57 rmind Exp $
+# $NetBSD: XEN3_DOMU,v 1.56 2014/01/26 19:16:16 dsl Exp $
include "arch/xen/conf/std.xen"
@@ -181,8 +181,6 @@ hypervisor* at mainbus? # Xen hyperviso
vcpu* at hypervisor? # Xen virtual CPUs
-npx0 at hypervisor? # x86 math coprocessor
-
xencons* at hypervisor? # Xen virtual console
xenbus* at hypervisor? # Xen virtual bus
Index: src/sys/arch/i386/conf/files.i386
diff -u src/sys/arch/i386/conf/files.i386:1.371 src/sys/arch/i386/conf/files.i386:1.372
--- src/sys/arch/i386/conf/files.i386:1.371 Wed Jul 17 21:26:28 2013
+++ src/sys/arch/i386/conf/files.i386 Sun Jan 26 19:16:16 2014
@@ -1,4 +1,4 @@
-# $NetBSD: files.i386,v 1.371 2013/07/17 21:26:28 soren Exp $
+# $NetBSD: files.i386,v 1.372 2014/01/26 19:16:16 dsl Exp $
#
# new style config file for i386 architecture
#
@@ -81,6 +81,7 @@ file arch/i386/i386/mtrr_k6.c mtrr
file arch/i386/i386/process_machdep.c
file arch/i386/i386/trap.c
file dev/cons.c
+file arch/i386/isa/npx.c
file arch/i386/i386/mptramp.S multiprocessor
@@ -250,13 +251,6 @@ device ptcd: gpiobus
attach ptcd at isa
file dev/isa/ptcd.c ptcd
-# Numeric Processing Extension; Math Co-processor
-device npx
-file arch/i386/isa/npx.c npx needs-flag
-
-attach npx at isa with npx_isa
-file arch/i386/isa/npx_isa.c npx_isa
-
# PC Mice: Logitech-style and Microsoft-style
device lms: wsmousedev
attach lms at isa
@@ -444,10 +438,6 @@ include "arch/i386/pnpbios/files.pnpbios
include "dev/acpi/files.acpi"
file arch/i386/acpi/acpi_wakeup_low.S acpi
-# Numeric Processing Extension; Math Co-processor
-attach npx at acpinodebus with npx_acpi
-file arch/i386/acpi/npx_acpi.c npx_acpi
-
# Obsolete vesabios/vesafb flags
obsolete defflag opt_vesabios.h VESABIOSVERBOSE
obsolete defparam opt_vesafb.h VESAFB_WIDTH VESAFB_HEIGHT VESAFB_DEPTH
Index: src/sys/arch/i386/i386/autoconf.c
diff -u src/sys/arch/i386/i386/autoconf.c:1.98 src/sys/arch/i386/i386/autoconf.c:1.99
--- src/sys/arch/i386/i386/autoconf.c:1.98 Wed Oct 3 18:58:31 2012
+++ src/sys/arch/i386/i386/autoconf.c Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: autoconf.c,v 1.98 2012/10/03 18:58:31 dsl Exp $ */
+/* $NetBSD: autoconf.c,v 1.99 2014/01/26 19:16:17 dsl Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@@ -46,7 +46,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.98 2012/10/03 18:58:31 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.99 2014/01/26 19:16:17 dsl Exp $");
#include "opt_compat_oldboot.h"
#include "opt_intrdebug.h"
@@ -64,6 +64,7 @@ __KERNEL_RCSID(0, "$NetBSD: autoconf.c,v
#include <machine/intr.h>
#include <machine/pcb.h>
#include <machine/cpufunc.h>
+#include <machine/npx.h>
#include "ioapic.h"
#include "lapic.h"
@@ -118,6 +119,7 @@ cpu_configure(void)
#if NIOAPIC > 0
ioapic_enable();
#endif
+ fpuinit(&cpu_info_primary);
/* resync cr0 after FPU configuration */
pcb = lwp_getpcb(&lwp0);
pcb->pcb_cr0 = rcr0() & ~CR0_TS;
Index: src/sys/arch/i386/i386/i386_trap.S
diff -u src/sys/arch/i386/i386/i386_trap.S:1.1 src/sys/arch/i386/i386/i386_trap.S:1.2
--- src/sys/arch/i386/i386/i386_trap.S:1.1 Tue Jun 25 00:27:22 2013
+++ src/sys/arch/i386/i386/i386_trap.S Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: i386_trap.S,v 1.1 2013/06/25 00:27:22 uebayasi Exp $ */
+/* $NetBSD: i386_trap.S,v 1.2 2014/01/26 19:16:17 dsl 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.1 2013/06/25 00:27:22 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i386_trap.S,v 1.2 2014/01/26 19:16:17 dsl Exp $");
#endif
/*
@@ -156,7 +156,6 @@ IDTVEC(trap06)
IDTVEC_END(trap06)
#endif
IDTVEC(trap07)
-#if NNPX > 0
pushl $0 # dummy error code
pushl $T_DNA
INTRENTRY
@@ -169,12 +168,6 @@ IDTVEC(trap07)
testl %eax,%eax
jz calltrap
jmp _C_LABEL(trapreturn)
-#else
-#ifndef XEN
- sti
-#endif
- ZTRAP(T_DNA)
-#endif
IDTVEC_END(trap07)
IDTVEC(trap08)
TRAP(T_DOUBLEFLT)
@@ -234,7 +227,6 @@ IDTVEC_END(trap0f)
IDTVEC_END(intrspurious)
IDTVEC(trap10)
-#if NNPX > 0
/*
* Handle like an interrupt so that we can call npxintr to clear the
* error. It would be better to handle npx interrupts as traps but
@@ -252,10 +244,6 @@ IDTVEC(trap10)
call _C_LABEL(npxintr)
addl $12,%esp
jmp _C_LABEL(trapreturn)
-#else
- sti
- ZTRAP(T_ARITHTRAP)
-#endif
IDTVEC_END(trap10)
IDTVEC(trap11)
TRAP(T_ALIGNFLT)
Index: src/sys/arch/i386/i386/locore.S
diff -u src/sys/arch/i386/i386/locore.S:1.109 src/sys/arch/i386/i386/locore.S:1.110
--- src/sys/arch/i386/i386/locore.S:1.109 Sat Jan 11 17:05:17 2014
+++ src/sys/arch/i386/i386/locore.S Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.S,v 1.109 2014/01/11 17:05:17 christos Exp $ */
+/* $NetBSD: locore.S,v 1.110 2014/01/26 19:16:17 dsl Exp $ */
/*
* Copyright-o-rama!
@@ -129,7 +129,7 @@
*/
#include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.109 2014/01/11 17:05:17 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.110 2014/01/26 19:16:17 dsl Exp $");
#include "opt_compat_oldboot.h"
#include "opt_ddb.h"
@@ -139,7 +139,6 @@ __KERNEL_RCSID(0, "$NetBSD: locore.S,v 1
#include "opt_vm86.h"
#include "opt_xen.h"
-#include "npx.h"
#include "assym.h"
#include "lapic.h"
#include "ioapic.h"
@@ -1288,41 +1287,10 @@ IDTVEC(svr4_fasttrap)
cli
jmp 2b
-#if NNPX > 0
-/*
- * Special interrupt handlers. Someday intr0-intr15 will be used to count
- * interrupts. We'll still need a special exception 16 handler. The busy
- * latch stuff in probintr() can be moved to npxprobe().
- */
-
-/*
- * void probeintr(void)
- */
-NENTRY(probeintr)
- ss
- incl _C_LABEL(npx_intrs_while_probing)
- pushl %eax
- movb $0x20,%al # EOI (asm in strings loses cpp features)
- outb %al,$0xa0 # IO_ICU2
- outb %al,$0x20 # IO_ICU1
- movb $0,%al
- outb %al,$0xf0 # clear BUSY# latch
- popl %eax
- iret
-END(probeintr)
-
-/*
- * void probetrap(void)
- */
-NENTRY(probetrap)
- ss
- incl _C_LABEL(npx_traps_while_probing)
- fnclex
- iret
-END(probetrap)
-
/*
* int npx586bug1(int a, int b)
+ * Used when checking for the FDIV bug on first generations pentiums.
+ * Anything 120MHz or above is fine.
*/
NENTRY(npx586bug1)
fildl 4(%esp) # x
@@ -1336,7 +1304,6 @@ NENTRY(npx586bug1)
popl %eax
ret
END(npx586bug1)
-#endif /* NNPX > 0 */
/*
* void sse2_idlezero_page(void *pg)
Index: src/sys/arch/i386/i386/machdep.c
diff -u src/sys/arch/i386/i386/machdep.c:1.742 src/sys/arch/i386/i386/machdep.c:1.743
--- src/sys/arch/i386/i386/machdep.c:1.742 Sun Jan 19 14:30:37 2014
+++ src/sys/arch/i386/i386/machdep.c Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.742 2014/01/19 14:30:37 dsl Exp $ */
+/* $NetBSD: machdep.c,v 1.743 2014/01/26 19:16:17 dsl 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.742 2014/01/19 14:30:37 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.743 2014/01/26 19:16:17 dsl Exp $");
#include "opt_beep.h"
#include "opt_compat_ibcs2.h"
@@ -191,7 +191,6 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v
#include "isa.h"
#include "isadma.h"
-#include "npx.h"
#include "ksyms.h"
#include "cardbus.h"
@@ -869,12 +868,9 @@ setregs(struct lwp *l, struct exec_packa
struct trapframe *tf;
uint16_t control;
-#if NNPX > 0
/* If we were using the FPU, forget about it. */
- if (pcb->pcb_fpcpu != NULL) {
- npxsave_lwp(l, false);
- }
-#endif
+ if (pcb->pcb_fpcpu != NULL)
+ fpusave_lwp(l, false);
#ifdef USER_LDT
pmap_ldt_cleanup(l);
@@ -1641,16 +1637,13 @@ cpu_getmcontext(struct lwp *l, mcontext_
/* Save floating point register context, if any. */
if ((l->l_md.md_flags & MDL_USEDFPU) != 0) {
struct pcb *pcb = lwp_getpcb(l);
-#if NNPX > 0
/*
* If this process is the current FP owner, dump its
* context to the PCB first.
*/
- if (pcb->pcb_fpcpu) {
- npxsave_lwp(l, true);
- }
-#endif
+ if (pcb->pcb_fpcpu)
+ fpusave_lwp(l, true);
if (i386_use_fxsave) {
memcpy(&mcp->__fpregs.__fp_reg_set.__fp_xmm_state.__fp_xmm,
&pcb->pcb_savefpu.sv_xmm,
@@ -1742,14 +1735,11 @@ cpu_setmcontext(struct lwp *l, const mco
if ((flags & _UC_TLSBASE) != 0)
lwp_setprivate(l, (void *)(uintptr_t)mcp->_mc_tlsbase);
-#if NNPX > 0
/*
* If we were using the FPU, forget that we were.
*/
- if (pcb->pcb_fpcpu != NULL) {
- npxsave_lwp(l, false);
- }
-#endif
+ if (pcb->pcb_fpcpu != NULL)
+ fpusave_lwp(l, false);
/* Restore floating point register context, if any. */
if ((flags & _UC_FPU) != 0) {
Index: src/sys/arch/i386/i386/process_machdep.c
diff -u src/sys/arch/i386/i386/process_machdep.c:1.79 src/sys/arch/i386/i386/process_machdep.c:1.80
--- src/sys/arch/i386/i386/process_machdep.c:1.79 Sat Jan 25 20:12:53 2014
+++ src/sys/arch/i386/i386/process_machdep.c Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: process_machdep.c,v 1.79 2014/01/25 20:12:53 dsl Exp $ */
+/* $NetBSD: process_machdep.c,v 1.80 2014/01/26 19:16:17 dsl Exp $ */
/*-
* Copyright (c) 1998, 2000, 2001, 2008 The NetBSD Foundation, Inc.
@@ -52,11 +52,10 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.79 2014/01/25 20:12:53 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.80 2014/01/26 19:16:17 dsl Exp $");
#include "opt_vm86.h"
#include "opt_ptrace.h"
-#include "npx.h"
#include <sys/param.h>
#include <sys/systm.h>
@@ -250,9 +249,7 @@ process_read_fpregs(struct lwp *l, struc
union savefpu *frame = process_fpframe(l);
if (l->l_md.md_flags & MDL_USEDFPU) {
-#if NNPX > 0
- npxsave_lwp(l, true);
-#endif
+ fpusave_lwp(l, true);
} else {
/*
* Fake a FNINIT.
@@ -353,9 +350,7 @@ process_write_fpregs(struct lwp *l, cons
union savefpu *frame = process_fpframe(l);
if (l->l_md.md_flags & MDL_USEDFPU) {
-#if NNPX > 0
- npxsave_lwp(l, false);
-#endif
+ fpusave_lwp(l, false);
} else {
l->l_md.md_flags |= MDL_USEDFPU;
}
@@ -404,13 +399,11 @@ process_machdep_read_xmmregs(struct lwp
return (EINVAL);
if (l->l_md.md_flags & MDL_USEDFPU) {
-#if NNPX > 0
struct pcb *pcb = lwp_getpcb(l);
if (pcb->pcb_fpcpu != NULL) {
- npxsave_lwp(l, true);
+ fpusave_lwp(l, true);
}
-#endif
} else {
/*
* Fake a FNINIT.
@@ -443,14 +436,12 @@ process_machdep_write_xmmregs(struct lwp
return (EINVAL);
if (l->l_md.md_flags & MDL_USEDFPU) {
-#if NNPX > 0
struct pcb *pcb = lwp_getpcb(l);
/* If we were using the FPU, drop it. */
if (pcb->pcb_fpcpu != NULL) {
- npxsave_lwp(l, false);
+ fpusave_lwp(l, false);
}
-#endif
} else {
l->l_md.md_flags |= MDL_USEDFPU;
}
Index: src/sys/arch/i386/i386/trap.c
diff -u src/sys/arch/i386/i386/trap.c:1.268 src/sys/arch/i386/i386/trap.c:1.269
--- src/sys/arch/i386/i386/trap.c:1.268 Sun Jan 19 14:30:37 2014
+++ src/sys/arch/i386/i386/trap.c Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: trap.c,v 1.268 2014/01/19 14:30:37 dsl Exp $ */
+/* $NetBSD: trap.c,v 1.269 2014/01/26 19:16:17 dsl Exp $ */
/*-
* Copyright (c) 1998, 2000, 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.268 2014/01/19 14:30:37 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.269 2014/01/26 19:16:17 dsl Exp $");
#include "opt_ddb.h"
#include "opt_kgdb.h"
@@ -112,8 +112,6 @@ __KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.2
#include <sys/kgdb.h>
-#include "npx.h"
-
#ifdef KDTRACE_HOOKS
#include <sys/dtrace_bsd.h>
@@ -586,11 +584,9 @@ kernelfault:
case T_DIVIDE|T_USER:
ksi.ksi_code = FPE_INTDIV;
break;
-#if NNPX > 0
case T_ARITHTRAP|T_USER:
ksi.ksi_code = npxtrap(l);
break;
-#endif
default:
ksi.ksi_code = 0;
break;
Index: src/sys/arch/i386/i386/vector.S
diff -u src/sys/arch/i386/i386/vector.S:1.63 src/sys/arch/i386/i386/vector.S:1.64
--- src/sys/arch/i386/i386/vector.S:1.63 Fri Nov 22 01:09:11 2013
+++ src/sys/arch/i386/i386/vector.S Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: vector.S,v 1.63 2013/11/22 01:09:11 riz Exp $ */
+/* $NetBSD: vector.S,v 1.64 2014/01/26 19:16:17 dsl Exp $ */
/*
* Copyright 2002 (c) Wasabi Systems, Inc.
@@ -65,7 +65,7 @@
*/
#include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: vector.S,v 1.63 2013/11/22 01:09:11 riz Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vector.S,v 1.64 2014/01/26 19:16:17 dsl Exp $");
#include "opt_ddb.h"
#include "opt_multiprocessor.h"
@@ -88,7 +88,6 @@ __KERNEL_RCSID(0, "$NetBSD: vector.S,v 1
#include "ioapic.h"
#include "lapic.h"
-#include "npx.h"
#include "assym.h"
/*
Index: src/sys/arch/i386/include/npx.h
diff -u src/sys/arch/i386/include/npx.h:1.31 src/sys/arch/i386/include/npx.h:1.32
--- src/sys/arch/i386/include/npx.h:1.31 Sat Jan 25 20:12:53 2014
+++ src/sys/arch/i386/include/npx.h Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: npx.h,v 1.31 2014/01/25 20:12:53 dsl Exp $ */
+/* $NetBSD: npx.h,v 1.32 2014/01/26 19:16:17 dsl Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@@ -193,10 +193,8 @@ union savefpu {
#ifdef _KERNEL
-void probeintr(void);
-void probetrap(void);
int npx586bug1(int, int);
-void npxinit(struct cpu_info *);
+void fpuinit(struct cpu_info *);
void process_xmm_to_s87(const struct fxsave *, struct save87 *);
void process_s87_to_xmm(const struct save87 *, struct fxsave *);
struct lwp;
Index: src/sys/arch/i386/isa/npx.c
diff -u src/sys/arch/i386/isa/npx.c:1.148 src/sys/arch/i386/isa/npx.c:1.149
--- src/sys/arch/i386/isa/npx.c:1.148 Sun Jan 19 14:30:37 2014
+++ src/sys/arch/i386/isa/npx.c Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: npx.c,v 1.148 2014/01/19 14:30:37 dsl Exp $ */
+/* $NetBSD: npx.c,v 1.149 2014/01/26 19:16:17 dsl Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -96,7 +96,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npx.c,v 1.148 2014/01/19 14:30:37 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npx.c,v 1.149 2014/01/26 19:16:17 dsl Exp $");
#if 0
#define IPRINTF(x) printf x
@@ -111,33 +111,21 @@ __KERNEL_RCSID(0, "$NetBSD: npx.c,v 1.14
#include <sys/systm.h>
#include <sys/conf.h>
#include <sys/cpu.h>
-#include <sys/file.h>
-#include <sys/proc.h>
-#include <sys/ioctl.h>
-#include <sys/device.h>
-#include <sys/vmmeter.h>
#include <sys/kernel.h>
-#include <sys/bus.h>
#include <sys/cpu.h>
-#include <sys/intr.h>
-
-#include <uvm/uvm_extern.h>
#include <machine/cpufunc.h>
#include <machine/cpuvar.h>
#include <machine/pcb.h>
-#include <machine/trap.h>
#include <machine/specialreg.h>
-#include <machine/pio.h>
-#include <machine/i8259.h>
-
-#include <dev/isa/isareg.h>
-#include <dev/isa/isavar.h>
-#include <i386/isa/npxvar.h>
/*
- * 387 and 287 Numeric Coprocessor Extension (NPX) Driver.
+ * 387 Numeric Coprocessor Extension (NPX) Driver.
+ *
+ * Note that we only support 486 and later cpus, these do not support
+ * an external fpu, only the one that is part of the cpu fabric.
+ * A 486 might not have an fpu, but the 487 is a full 486.
*
* We do lazy initialization and switching using the TS bit in cr0 and the
* MDL_USEDFPU bit in mdlwp.
@@ -164,7 +152,6 @@ static int npxdna(struct cpu_info *);
#define stts() HYPERVISOR_fpu_taskswitch(1)
#endif
-static enum npx_type npx_type;
volatile u_int npx_intrs_while_probing;
volatile u_int npx_traps_while_probing;
@@ -187,172 +174,42 @@ fpu_save(union savefpu *addr)
fnsave(&addr->sv_87);
}
-static int
-npxdna_empty(struct cpu_info *ci)
-{
-
- panic("npxdna vector not initialized");
- return 0;
-}
-
-
-int (*npxdna_func)(struct cpu_info *) = npxdna_empty;
+int (*npxdna_func)(struct cpu_info *) = npxdna;
-#ifndef XEN
-/*
- * This calls i8259_* directly, but currently we can count on systems
- * having a i8259 compatible setup all the time. Maybe have to change
- * that in the future.
- */
-enum npx_type
-npxprobe1(bus_space_tag_t iot, bus_space_handle_t ioh, int irq)
+void
+fpuinit(struct cpu_info *ci)
{
- struct gate_descriptor save_idt_npxintr;
- struct gate_descriptor save_idt_npxtrap;
- enum npx_type rv = NPX_NONE;
- u_long save_eflags;
- int control;
- int status;
- unsigned irqmask;
-
- if (cpu_feature[0] & CPUID_FPU) {
- i386_fpu_exception = 1;
- return NPX_CPUID;
- }
- save_eflags = x86_read_psl();
- x86_disable_intr();
- save_idt_npxintr = idt[NRSVIDT + irq];
- save_idt_npxtrap = idt[16];
- setgate(&idt[NRSVIDT + irq], probeintr, 0, SDT_SYS386IGT, SEL_KPL,
- GSEL(GCODE_SEL, SEL_KPL));
- setgate(&idt[16], probetrap, 0, SDT_SYS386TGT, SEL_KPL,
- GSEL(GCODE_SEL, SEL_KPL));
-
- irqmask = i8259_setmask(~((1 << IRQ_SLAVE) | (1 << irq)));
-
- /*
- * Partially reset the coprocessor, if any. Some BIOS's don't reset
- * it after a warm boot.
- */
- /* full reset on some systems, NOP on others */
- bus_space_write_1(iot, ioh, 1, 0);
- delay(1000);
- /* clear BUSY# latch */
- bus_space_write_1(iot, ioh, 0, 0);
+ uint16_t control;
+ uint32_t cr0;
- /*
- * We set CR0 in locore to trap all ESC and WAIT instructions.
- * We have to turn off the CR0_EM bit temporarily while probing.
- */
- lcr0(rcr0() & ~(CR0_EM|CR0_TS));
- x86_enable_intr();
-
- /*
- * Finish resetting the coprocessor, if any. If there is an error
- * pending, then we may get a bogus IRQ13, but probeintr() will handle
- * it OK. Bogus halts have never been observed, but we enabled
- * IRQ13 and cleared the BUSY# latch early to handle them anyway.
- */
+ /* Assume we have an FPU */
+ cr0 = rcr0();
+ cr0 &= ~(CR0_EM | CR0_TS);
+ cr0 |= CR0_NE | CR0_MP;
+ lcr0(cr0);
+ /* Read back the default contol word */
fninit();
- delay(1000); /* wait for any IRQ13 (fwait might hang) */
+ fnstcw(&control);
- /*
- * Check for a status of mostly zero.
- */
- status = 0x5a5a;
- fnstsw(&status);
- if ((status & 0xb8ff) == 0) {
- /*
- * Good, now check for a proper control word.
- */
- control = 0x5a5a;
- fnstcw(&control);
- if ((control & 0x1f3f) == 0x033f) {
- /*
- * We have an npx, now divide by 0 to see if exception
- * 16 works.
- */
- control &= ~(1 << 2); /* enable divide by 0 trap */
- fldcw(&control);
- npx_traps_while_probing = npx_intrs_while_probing = 0;
- fp_divide_by_0();
- if (npx_traps_while_probing != 0) {
- /*
- * Good, exception 16 works.
- */
- rv = NPX_EXCEPTION;
- i386_fpu_exception = 1;
- } else if (npx_intrs_while_probing != 0) {
- /*
- * Bad, we are stuck with IRQ13.
- */
- rv = NPX_INTERRUPT;
- } else {
- /*
- * Worse, even IRQ13 is broken. Use emulator.
- */
- rv = NPX_BROKEN;
- }
- }
+ if (control != __INITIAL_NPXCW__) {
+ /* Must be a 486SX, emulate FP instructions */
+ lcr0((cr0 & ~CR0_MP) | CR0_EM);
+ aprint_normal_dev(ci->ci_dev, "no fpu\n");
+ return;
}
- x86_disable_intr();
- lcr0(rcr0() | (CR0_EM|CR0_TS));
-
- irqmask = i8259_setmask(irqmask);
-
- idt[NRSVIDT + irq] = save_idt_npxintr;
-
- idt[16] = save_idt_npxtrap;
- x86_write_psl(save_eflags);
-
- return (rv);
-}
+ /* We have a valid FPU */
+ i386_fpu_present = 1;
-void npxinit(struct cpu_info *ci)
-{
- lcr0(rcr0() & ~(CR0_EM|CR0_TS));
- fninit();
if (npx586bug1(4195835, 3145727) != 0) {
+ /* NB 120+MHz cpus are not affected */
i386_fpu_fdivbug = 1;
aprint_normal_dev(ci->ci_dev,
"WARNING: Pentium FDIV bug detected!\n");
}
- lcr0(rcr0() | (CR0_TS));
-}
-#endif
-
-/*
- * Common attach routine.
- */
-void
-npxattach(struct npx_softc *sc)
-{
-
- npx_softc = sc;
- npx_type = sc->sc_type;
-
-#ifndef XEN
- npxinit(&cpu_info_primary);
-#endif
- i386_fpu_present = 1;
- npxdna_func = npxdna;
- if (!pmf_device_register(sc->sc_dev, NULL, NULL))
- aprint_error_dev(sc->sc_dev, "couldn't establish power handler\n");
-}
-
-int
-npxdetach(device_t self, int flags)
-{
- struct npx_softc *sc = device_private(self);
-
- if (sc->sc_type == NPX_INTERRUPT)
- return EBUSY;
-
- pmf_device_deregister(self);
-
- return 0;
+ /* Set TS so first fp instruction faults */
+ lcr0(cr0 | CR0_TS);
}
/*
@@ -367,9 +224,10 @@ npxdetach(device_t self, int flags)
* a status code! So there is no way to have a non-naive SIGFPE handler. At
* best a handler could do an fninit followed by an fldcw of a static value.
* fnclex would be of little use because it would leave junk on the FPU stack.
- * Returning from the handler would be even less safe than usual because
- * IRQ13 exception handling makes exceptions even less precise than usual.
+ *
+ * Only called dircetly from i386_trap.S
*/
+int npxintr(void *, struct intrframe *);
int
npxintr(void *arg, struct intrframe *frame)
{
@@ -379,7 +237,6 @@ npxintr(void *arg, struct intrframe *fra
struct pcb *pcb;
ksiginfo_t ksi;
-
kpreempt_disable();
#ifndef XEN
KASSERT((x86_read_psl() & PSL_I) == 0);
@@ -389,15 +246,6 @@ npxintr(void *arg, struct intrframe *fra
curcpu()->ci_data.cpu_ntrap++;
IPRINTF(("%s: fp intr\n", device_xname(ci->ci_dev)));
-#ifndef XEN
- struct npx_softc *sc = npx_softc;
- /*
- * Clear the interrupt latch.
- */
- if (sc->sc_type == NPX_INTERRUPT)
- bus_space_write_1(sc->sc_iot, sc->sc_ioh, 0, 0);
-#endif
-
/*
* If we're saving, ignore the interrupt. The FPU will generate
* another one when we restore the state later.
@@ -407,9 +255,9 @@ npxintr(void *arg, struct intrframe *fra
return (1);
}
- if (l == NULL || npx_type == NPX_NONE) {
- printf("npxintr: l = %p, curproc = %p, npx_type = %d\n",
- l, curproc, npx_type);
+ if (l == NULL || !i386_fpu_present) {
+ printf("npxintr: l = %p, curproc = %p, fpu_present = %d\n",
+ l, curproc, i386_fpu_present);
printf("npxintr: came from nowhere");
kpreempt_enable();
return 1;
@@ -496,18 +344,7 @@ npxintr(void *arg, struct intrframe *fra
trapsignal(l, &ksi);
} else {
- /*
- * This is a nested interrupt. This should only happen when
- * an IRQ13 occurs at the same time as a higher-priority
- * interrupt.
- *
- * XXX
- * Currently, we treat this like an asynchronous interrupt, but
- * this has disadvantages.
- */
- mutex_enter(proc_lock);
- psignal(l->l_proc, SIGFPE);
- mutex_exit(proc_lock);
+ panic("fpu trap from kernel\n");
}
kpreempt_enable();
@@ -582,7 +419,7 @@ npxdna(struct cpu_info *ci)
return 1;
}
KASSERT(fl != l);
- npxsave_cpu(true);
+ fpusave_cpu(true);
KASSERT(ci->ci_fpcurlwp == NULL);
}
@@ -591,7 +428,7 @@ npxdna(struct cpu_info *ci)
/* Explicitly disable preemption before dropping spl. */
KPREEMPT_DISABLE(l);
splx(s);
- npxsave_lwp(l, true);
+ fpusave_lwp(l, true);
KASSERT(pcb->pcb_fpcpu == NULL);
s = splhigh();
KPREEMPT_ENABLE(l);
@@ -649,7 +486,7 @@ npxdna(struct cpu_info *ci)
* Save current CPU's FPU state. Must be called at IPL_HIGH.
*/
void
-npxsave_cpu(bool save)
+fpusave_cpu(bool save)
{
struct cpu_info *ci;
struct lwp *l;
@@ -694,7 +531,7 @@ npxsave_cpu(bool save)
* may race against it.
*/
void
-npxsave_lwp(struct lwp *l, bool save)
+fpusave_lwp(struct lwp *l, bool save)
{
struct cpu_info *oci;
struct pcb *pcb;
@@ -712,7 +549,7 @@ npxsave_lwp(struct lwp *l, bool save)
}
if (oci == curcpu()) {
KASSERT(oci->ci_fpcurlwp == l);
- npxsave_cpu(save);
+ fpusave_cpu(save);
splx(s);
break;
}
@@ -731,7 +568,7 @@ npxsave_lwp(struct lwp *l, bool save)
spins++;
}
if (spins > 100000000) {
- panic("npxsave_lwp: did not");
+ panic("fpusave_lwp: did not");
}
}
@@ -937,8 +774,8 @@ npxtrap(struct lwp *l)
struct lwp *fl = ci->ci_fpcurlwp;
if (!i386_fpu_present) {
- printf("%s: fpcurthread = %p, curthread = %p, npx_type = %d\n",
- __func__, fl, l, npx_type);
+ printf("%s: fpcurthread = %p, curthread = %p\n",
+ __func__, fl, l);
panic("npxtrap from nowhere");
}
kpreempt_disable();
Index: src/sys/arch/i386/pnpbios/files.pnpbios
diff -u src/sys/arch/i386/pnpbios/files.pnpbios:1.17 src/sys/arch/i386/pnpbios/files.pnpbios:1.18
--- src/sys/arch/i386/pnpbios/files.pnpbios:1.17 Sat Dec 9 22:45:26 2006
+++ src/sys/arch/i386/pnpbios/files.pnpbios Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-# $NetBSD: files.pnpbios,v 1.17 2006/12/09 22:45:26 uwe Exp $
+# $NetBSD: files.pnpbios,v 1.18 2014/01/26 19:16:17 dsl Exp $
defflag opt_pnpbios.h PNPBIOSVERBOSE
defflag opt_pnpbios.h PNPBIOSDEBUG
@@ -44,8 +44,5 @@ file arch/i386/pnpbios/pckbc_pnpbios.c p
attach fdc at pnpbios with fdc_pnpbios
file arch/i386/pnpbios/fdc_pnpbios.c fdc_pnpbios
-attach npx at pnpbios with npx_pnpbios
-file arch/i386/pnpbios/npx_pnpbios.c npx_pnpbios
-
attach joy at pnpbios with joy_pnpbios
file arch/i386/pnpbios/joy_pnpbios.c joy_pnpbios
Index: src/sys/arch/x86/acpi/acpi_wakeup.c
diff -u src/sys/arch/x86/acpi/acpi_wakeup.c:1.34 src/sys/arch/x86/acpi/acpi_wakeup.c:1.35
--- src/sys/arch/x86/acpi/acpi_wakeup.c:1.34 Sun Dec 1 01:05:16 2013
+++ src/sys/arch/x86/acpi/acpi_wakeup.c Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_wakeup.c,v 1.34 2013/12/01 01:05:16 christos Exp $ */
+/* $NetBSD: acpi_wakeup.c,v 1.35 2014/01/26 19:16:17 dsl Exp $ */
/*-
* Copyright (c) 2002, 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_wakeup.c,v 1.34 2013/12/01 01:05:16 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_wakeup.c,v 1.35 2014/01/26 19:16:17 dsl Exp $");
/*-
* Copyright (c) 2001 Takanori Watanabe <[email protected]>
@@ -62,7 +62,7 @@ __KERNEL_RCSID(0, "$NetBSD: acpi_wakeup.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_wakeup.c,v 1.34 2013/12/01 01:05:16 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_wakeup.c,v 1.35 2014/01/26 19:16:17 dsl Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -268,12 +268,10 @@ acpi_cpu_sleep(struct cpu_info *ci)
return;
/* Execute Wakeup */
-#ifdef __i386__
- npxinit(ci);
-#else
+#ifndef __i386__
cpu_init_msrs(ci, false);
- fpuinit(ci);
#endif
+ fpuinit(ci);
#if NLAPIC > 0
lapic_enable();
lapic_set_lvt();
@@ -309,11 +307,7 @@ acpi_md_sleep(int state)
AcpiSetFirmwareWakingVector(acpi_wakeup_paddr);
s = splhigh();
-#ifdef __i386__
- npxsave_cpu(true);
-#else
fpusave_cpu(true);
-#endif
x86_disable_intr();
#ifdef MULTIPROCESSOR
@@ -329,12 +323,10 @@ acpi_md_sleep(int state)
goto out;
/* Execute Wakeup */
-#ifdef __i386__
- npxinit(&cpu_info_primary);
-#else
+#ifndef __i386__
cpu_init_msrs(&cpu_info_primary, false);
- fpuinit(&cpu_info_primary);
#endif
+ fpuinit(&cpu_info_primary);
i8259_reinit();
#if NLAPIC > 0
lapic_enable();
Index: src/sys/arch/x86/include/cpu.h
diff -u src/sys/arch/x86/include/cpu.h:1.58 src/sys/arch/x86/include/cpu.h:1.59
--- src/sys/arch/x86/include/cpu.h:1.58 Sun Dec 1 01:05:16 2013
+++ src/sys/arch/x86/include/cpu.h Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.h,v 1.58 2013/12/01 01:05:16 christos Exp $ */
+/* $NetBSD: cpu.h,v 1.59 2014/01/26 19:16:17 dsl Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@@ -426,8 +426,8 @@ void i8254_initclocks(void);
void cpu_probe_features(struct cpu_info *);
/* npx.c */
-void npxsave_lwp(struct lwp *, bool);
-void npxsave_cpu(bool);
+void fpusave_lwp(struct lwp *, bool);
+void fpusave_cpu(bool);
/* vm_machdep.c */
paddr_t kvtop(void *);
Index: src/sys/arch/x86/x86/cpu.c
diff -u src/sys/arch/x86/x86/cpu.c:1.107 src/sys/arch/x86/x86/cpu.c:1.108
--- src/sys/arch/x86/x86/cpu.c:1.107 Sun Dec 1 01:05:16 2013
+++ src/sys/arch/x86/x86/cpu.c Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.c,v 1.107 2013/12/01 01:05:16 christos Exp $ */
+/* $NetBSD: cpu.c,v 1.108 2014/01/26 19:16:17 dsl Exp $ */
/*-
* Copyright (c) 2000-2012 NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.107 2013/12/01 01:05:16 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.108 2014/01/26 19:16:17 dsl Exp $");
#include "opt_ddb.h"
#include "opt_mpbios.h" /* for MPDEBUG */
@@ -72,10 +72,6 @@ __KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.10
#include "lapic.h"
#include "ioapic.h"
-#ifdef i386
-#include "npx.h"
-#endif
-
#include <sys/param.h>
#include <sys/proc.h>
#include <sys/systm.h>
@@ -849,13 +845,7 @@ cpu_hatch(void *v)
lapic_set_lvt();
lapic_initclocks();
-#ifdef i386
-#if NNPX > 0
- npxinit(ci);
-#endif
-#else
fpuinit(ci);
-#endif
lldt(GSYSSEL(GLDT_SEL, SEL_KPL));
ltr(ci->ci_tss_sel);
@@ -1123,13 +1113,7 @@ cpu_offline_md(void)
int s;
s = splhigh();
-#ifdef i386
-#if NNPX > 0
- npxsave_cpu(true);
-#endif
-#else
fpusave_cpu(true);
-#endif
splx(s);
}
Index: src/sys/arch/x86/x86/ipi.c
diff -u src/sys/arch/x86/x86/ipi.c:1.20 src/sys/arch/x86/x86/ipi.c:1.21
--- src/sys/arch/x86/x86/ipi.c:1.20 Sun Dec 1 01:05:16 2013
+++ src/sys/arch/x86/x86/ipi.c Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: ipi.c,v 1.20 2013/12/01 01:05:16 christos Exp $ */
+/* $NetBSD: ipi.c,v 1.21 2014/01/26 19:16:17 dsl Exp $ */
/*-
* Copyright (c) 2000, 2008, 2009 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ipi.c,v 1.20 2013/12/01 01:05:16 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipi.c,v 1.21 2014/01/26 19:16:17 dsl Exp $");
#include "opt_mtrr.h"
@@ -58,16 +58,6 @@ __KERNEL_RCSID(0, "$NetBSD: ipi.c,v 1.20
#ifdef __x86_64__
#include <machine/fpu.h>
-static void x86_ipi_synch_fpu(struct cpu_info *);
-#else
-/* XXXfpu */
-#include "npx.h"
-#if NNPX > 0
-static void x86_ipi_synch_fpu(struct cpu_info *);
-#define fpusave_cpu(x) npxsave_cpu(x)
-#else
-#define x86_ipi_synch_fpu NULL
-#endif
#endif
static void x86_ipi_halt(struct cpu_info *);
@@ -86,6 +76,8 @@ void acpi_cpu_sleep(struct cpu_info *);
#define acpi_cpu_sleep NULL
#endif
+static void x86_ipi_synch_fpu(struct cpu_info *);
+
void (*ipifunc[X86_NIPI])(struct cpu_info *) =
{
x86_ipi_halt,
@@ -180,14 +172,12 @@ x86_ipi_halt(struct cpu_info *ci)
}
}
-#if defined(__x86_64__) || NNPX > 0 /* XXXfpu */
static void
x86_ipi_synch_fpu(struct cpu_info *ci)
{
fpusave_cpu(true);
}
-#endif
#ifdef MTRR
static void
Index: src/sys/arch/x86/x86/vm_machdep.c
diff -u src/sys/arch/x86/x86/vm_machdep.c:1.19 src/sys/arch/x86/x86/vm_machdep.c:1.20
--- src/sys/arch/x86/x86/vm_machdep.c:1.19 Sat Jan 11 17:14:00 2014
+++ src/sys/arch/x86/x86/vm_machdep.c Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: vm_machdep.c,v 1.19 2014/01/11 17:14:00 christos Exp $ */
+/* $NetBSD: vm_machdep.c,v 1.20 2014/01/26 19:16:17 dsl Exp $ */
/*-
* Copyright (c) 1982, 1986 The Regents of the University of California.
@@ -80,7 +80,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.19 2014/01/11 17:14:00 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.20 2014/01/26 19:16:17 dsl Exp $");
#include "opt_mtrr.h"
@@ -105,13 +105,6 @@ __KERNEL_RCSID(0, "$NetBSD: vm_machdep.c
#ifdef __x86_64__
#include <machine/fpu.h>
-#else
-#include "npx.h"
-#if NNPX > 0
-#define fpusave_lwp(x, y) npxsave_lwp(x, y)
-#else
-#define fpusave_lwp(x, y)
-#endif
#endif
void
Index: src/sys/arch/xen/conf/files.xen
diff -u src/sys/arch/xen/conf/files.xen:1.129 src/sys/arch/xen/conf/files.xen:1.130
--- src/sys/arch/xen/conf/files.xen:1.129 Wed Oct 3 18:58:32 2012
+++ src/sys/arch/xen/conf/files.xen Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-# $NetBSD: files.xen,v 1.129 2012/10/03 18:58:32 dsl Exp $
+# $NetBSD: files.xen,v 1.130 2014/01/26 19:16:17 dsl Exp $
# NetBSD: files.x86,v 1.10 2003/10/08 17:30:00 bouyer Exp
# NetBSD: files.i386,v 1.254 2004/03/25 23:32:10 jmc Exp
@@ -55,6 +55,8 @@ file arch/i386/i386/process_machdep.c
file arch/i386/i386/trap.c
file arch/i386/i386/lock_stubs.S
+file arch/i386/isa/npx.c
+
file arch/i386/i386/pmc.c perfctrs
@@ -183,15 +185,6 @@ file arch/xen/xenbus/xenbus_dev.c xenbus
file arch/xen/xenbus/xenbus_probe.c xenbus needs-flag
file arch/xen/xenbus/xenbus_xs.c xenbus needs-flag
-ifdef i386
-# Numeric Processing Extension; Math Co-processor
-device npx
-file arch/i386/isa/npx.c npx needs-flag
-
-attach npx at xendevbus with npx_hv
-file arch/xen/i386/npx_hv.c npx_hv
-endif
-
# Xen console support
device xencons: tty
attach xencons at xendevbus
Index: src/sys/arch/xen/x86/cpu.c
diff -u src/sys/arch/xen/x86/cpu.c:1.95 src/sys/arch/xen/x86/cpu.c:1.96
--- src/sys/arch/xen/x86/cpu.c:1.95 Sun Dec 1 01:05:16 2013
+++ src/sys/arch/xen/x86/cpu.c Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.c,v 1.95 2013/12/01 01:05:16 christos Exp $ */
+/* $NetBSD: cpu.c,v 1.96 2014/01/26 19:16:17 dsl Exp $ */
/* NetBSD: cpu.c,v 1.18 2004/02/20 17:35:01 yamt Exp */
/*-
@@ -66,7 +66,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.95 2013/12/01 01:05:16 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.96 2014/01/26 19:16:17 dsl Exp $");
#include "opt_ddb.h"
#include "opt_multiprocessor.h"
@@ -1059,11 +1059,7 @@ cpu_offline_md(void)
int s;
s = splhigh();
-#ifdef __i386__
- npxsave_cpu(true);
-#else
fpusave_cpu(true);
-#endif
splx(s);
}
Index: src/sys/arch/xen/x86/xen_ipi.c
diff -u src/sys/arch/xen/x86/xen_ipi.c:1.14 src/sys/arch/xen/x86/xen_ipi.c:1.15
--- src/sys/arch/xen/x86/xen_ipi.c:1.14 Sun Dec 1 01:05:16 2013
+++ src/sys/arch/xen/x86/xen_ipi.c Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: xen_ipi.c,v 1.14 2013/12/01 01:05:16 christos Exp $ */
+/* $NetBSD: xen_ipi.c,v 1.15 2014/01/26 19:16:17 dsl Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -33,10 +33,10 @@
/*
* Based on: x86/ipi.c
- * __KERNEL_RCSID(0, "$NetBSD: xen_ipi.c,v 1.14 2013/12/01 01:05:16 christos Exp $");
+ * __KERNEL_RCSID(0, "$NetBSD: xen_ipi.c,v 1.15 2014/01/26 19:16:17 dsl Exp $");
*/
-__KERNEL_RCSID(0, "$NetBSD: xen_ipi.c,v 1.14 2013/12/01 01:05:16 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xen_ipi.c,v 1.15 2014/01/26 19:16:17 dsl Exp $");
#include <sys/types.h>
@@ -222,11 +222,7 @@ xen_ipi_synch_fpu(struct cpu_info *ci, s
KASSERT(ci != NULL);
KASSERT(intrf != NULL);
-#ifdef __x86_64__
fpusave_cpu(true);
-#else
- npxsave_cpu(true);
-#endif /* __x86_64__ */
}
static void
Index: src/sys/arch/xen/xen/hypervisor.c
diff -u src/sys/arch/xen/xen/hypervisor.c:1.62 src/sys/arch/xen/xen/hypervisor.c:1.63
--- src/sys/arch/xen/xen/hypervisor.c:1.62 Fri Apr 6 03:20:43 2012
+++ src/sys/arch/xen/xen/hypervisor.c Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: hypervisor.c,v 1.62 2012/04/06 03:20:43 riz Exp $ */
+/* $NetBSD: hypervisor.c,v 1.63 2014/01/26 19:16:17 dsl Exp $ */
/*
* Copyright (c) 2005 Manuel Bouyer.
@@ -53,7 +53,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hypervisor.c,v 1.62 2012/04/06 03:20:43 riz Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hypervisor.c,v 1.63 2014/01/26 19:16:17 dsl Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -62,11 +62,6 @@ __KERNEL_RCSID(0, "$NetBSD: hypervisor.c
#include "xenbus.h"
#include "xencons.h"
-#ifndef __x86_64__
-#include "npx.h"
-#else
-#define NNPX 0
-#endif /* __x86_64__ */
#include "isa.h"
#include "pci.h"
#include "acpica.h"
@@ -143,9 +138,6 @@ union hypervisor_attach_cookie {
#if NXBD_HYPERVISOR > 0
struct xbd_attach_args hac_xbd;
#endif
-#if NNPX > 0
- struct xen_npx_attach_args hac_xennpx;
-#endif
#if NPCI > 0
struct pcibus_attach_args hac_pba;
#if defined(DOM0OPS) && NISA > 0
@@ -264,11 +256,6 @@ hypervisor_attach(device_t parent, devic
hac.hac_xencons.xa_device = "xencons";
config_found_ia(self, "xendevbus", &hac.hac_xencons, hypervisor_print);
#endif
-#if NNPX > 0
- memset(&hac, 0, sizeof(hac));
- hac.hac_xennpx.xa_device = "npx";
- config_found_ia(self, "xendevbus", &hac.hac_xennpx, hypervisor_print);
-#endif
#ifdef DOM0OPS
#if NPCI > 0
#if NACPICA > 0
Index: src/sys/compat/linux/arch/i386/linux_machdep.c
diff -u src/sys/compat/linux/arch/i386/linux_machdep.c:1.155 src/sys/compat/linux/arch/i386/linux_machdep.c:1.156
--- src/sys/compat/linux/arch/i386/linux_machdep.c:1.155 Sun Jan 19 14:30:38 2014
+++ src/sys/compat/linux/arch/i386/linux_machdep.c Sun Jan 26 19:16:17 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_machdep.c,v 1.155 2014/01/19 14:30:38 dsl Exp $ */
+/* $NetBSD: linux_machdep.c,v 1.156 2014/01/26 19:16:17 dsl Exp $ */
/*-
* Copyright (c) 1995, 2000, 2008, 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.155 2014/01/19 14:30:38 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.156 2014/01/26 19:16:17 dsl Exp $");
#if defined(_KERNEL_OPT)
#include "opt_vm86.h"
@@ -129,11 +129,10 @@ linux_setregs(struct lwp *l, struct exec
struct pcb *pcb = lwp_getpcb(l);
struct trapframe *tf;
-#if NNPX > 0
/* If we were using the FPU, forget about it. */
- if (npxproc == l)
- npxdrop();
-#endif
+ if (pcb->pcb_fpcpu != NULL)
+ fpusave_lwp(l, false);
+
#ifdef USER_LDT
pmap_ldt_cleanup(l);