i386 removal, part 9/x: Remove the 32 bit vkernel platform code.
authorSascha Wildner <saw@online.de>
Tue, 23 Jun 2015 20:41:44 +0000 (22:41 +0200)
committerSascha Wildner <saw@online.de>
Tue, 23 Jun 2015 20:41:44 +0000 (22:41 +0200)
60 files changed:
sys/Makefile.modules
sys/conf/kern.paths.mk
sys/conf/kern.post.mk
sys/conf/kern.pre.mk
sys/platform/vkernel/Makefile.inc [deleted file]
sys/platform/vkernel/conf/Makefile [deleted file]
sys/platform/vkernel/conf/files [deleted file]
sys/platform/vkernel/conf/kern.mk [deleted file]
sys/platform/vkernel/conf/ldscript.i386 [deleted file]
sys/platform/vkernel/conf/options [deleted file]
sys/platform/vkernel/i386/autoconf.c [deleted file]
sys/platform/vkernel/i386/cpu_regs.c [deleted file]
sys/platform/vkernel/i386/db_interface.c [deleted file]
sys/platform/vkernel/i386/db_trace.c [deleted file]
sys/platform/vkernel/i386/exception.c [deleted file]
sys/platform/vkernel/i386/fork_tramp.s [deleted file]
sys/platform/vkernel/i386/genassym.c [deleted file]
sys/platform/vkernel/i386/global.s [deleted file]
sys/platform/vkernel/i386/locore.s [deleted file]
sys/platform/vkernel/i386/mp.c [deleted file]
sys/platform/vkernel/i386/npx.c [deleted file]
sys/platform/vkernel/i386/procfs_machdep.c [deleted file]
sys/platform/vkernel/i386/swtch.s [deleted file]
sys/platform/vkernel/i386/tls.c [deleted file]
sys/platform/vkernel/i386/trap.c [deleted file]
sys/platform/vkernel/i386/userldt.c [deleted file]
sys/platform/vkernel/i386/vm_machdep.c [deleted file]
sys/platform/vkernel/include/clock.h [deleted file]
sys/platform/vkernel/include/cothread.h [deleted file]
sys/platform/vkernel/include/cpu.h [deleted file]
sys/platform/vkernel/include/cpufunc.h [deleted file]
sys/platform/vkernel/include/globaldata.h [deleted file]
sys/platform/vkernel/include/lock.h [deleted file]
sys/platform/vkernel/include/md_var.h [deleted file]
sys/platform/vkernel/include/param.h [deleted file]
sys/platform/vkernel/include/pcb.h [deleted file]
sys/platform/vkernel/include/pcb_ext.h [deleted file]
sys/platform/vkernel/include/pmap.h [deleted file]
sys/platform/vkernel/include/pmap_inval.h [deleted file]
sys/platform/vkernel/include/proc.h [deleted file]
sys/platform/vkernel/include/ptrace.h [deleted file]
sys/platform/vkernel/include/smp.h [deleted file]
sys/platform/vkernel/include/thread.h [deleted file]
sys/platform/vkernel/include/types.h [deleted file]
sys/platform/vkernel/include/vmm.h [deleted file]
sys/platform/vkernel/include/vmparam.h [deleted file]
sys/platform/vkernel/platform/busdma_machdep.c [deleted file]
sys/platform/vkernel/platform/console.c [deleted file]
sys/platform/vkernel/platform/copyio.c [deleted file]
sys/platform/vkernel/platform/cothread.c [deleted file]
sys/platform/vkernel/platform/globaldata.c [deleted file]
sys/platform/vkernel/platform/init.c [deleted file]
sys/platform/vkernel/platform/ipl_funcs.c [deleted file]
sys/platform/vkernel/platform/kqueue.c [deleted file]
sys/platform/vkernel/platform/machintr.c [deleted file]
sys/platform/vkernel/platform/pmap.c [deleted file]
sys/platform/vkernel/platform/pmap_inval.c [deleted file]
sys/platform/vkernel/platform/shutdown.c [deleted file]
sys/platform/vkernel/platform/sysarch.c [deleted file]
sys/platform/vkernel/platform/systimer.c [deleted file]

index 8bfa7aa..dfada64 100644 (file)
@@ -4,7 +4,7 @@
 .if defined(MODULES_OVERRIDE)
 SUBDIR=${MODULES_OVERRIDE}
 .else
-.if ${MACHINE_PLATFORM} != "vkernel" && ${MACHINE_PLATFORM} != "vkernel64"
+.if ${MACHINE_PLATFORM} != "vkernel64"
 SUBDIR=bus
 .endif
 SUBDIR+=crypto emulation dev gnu kern net netbt netproto vfs
index c78a560..9bdb998 100644 (file)
@@ -17,6 +17,6 @@ OLDMODULESDIR?=               /boot/modules
 
 # Set DESTDIR to /var/vkernel by default for vkernel platform so as
 # not to shoot the real kernel installation.
-.if ${MACHINE_PLATFORM} == vkernel || ${MACHINE_PLATFORM} == vkernel64
+.if ${MACHINE_PLATFORM} == vkernel64
 DESTDIR?=              /var/vkernel
 .endif
index 8bfb66e..597873e 100644 (file)
@@ -158,7 +158,7 @@ kernel-installable:
                /usr/bin/false; \
        fi
 # Skip this step for vkernels
-.if ${MACHINE_PLATFORM} != vkernel && ${MACHINE_PLATFORM} != vkernel64
+.if ${MACHINE_PLATFORM} != vkernel64
        @if [ ! -f ${DESTDIR}/boot/dloader.rc ]; then \
                echo "You need to install a new ${DESTDIR}/boot before you"; \
                echo "can install a new kernel, kernels are now installed"; \
index 8a66a93..6077e4e 100644 (file)
@@ -108,8 +108,6 @@ SYSTEM_LD= @${LD} -Bdynamic -T $S/platform/$P/conf/ldscript.$M \
 #
 .if ${P} == "pc64" || ${P} == "vkernel64"
 SYSTEM_LD+= -z max-page-size=0x200000
-.elif ${P} == "pc32" || ${P} == "vkernel"
-SYSTEM_LD+= -z max-page-size=0x1000
 .endif
 
 SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \
diff --git a/sys/platform/vkernel/Makefile.inc b/sys/platform/vkernel/Makefile.inc
deleted file mode 100644 (file)
index d7ab0b0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# Used by the device build to check for device support
-#
-
-DEV_SUPPORT=   virtual/vkernel
diff --git a/sys/platform/vkernel/conf/Makefile b/sys/platform/vkernel/conf/Makefile
deleted file mode 100644 (file)
index eb78ae8..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# Which version of config(8) is required.
-#
-%VERSREQ=      400026
-
-.if !defined(S)
-.if exists(./@/.)
-S=     ./@
-.else
-S=     ../..
-.endif
-.endif
-
-.include "$S/conf/kern.pre.mk"
-
-# Override the normal kernel link and link as a normal user program
-#
-SYSTEM_LD= @${CC} ${DEBUG} ${PROF} -export-dynamic -o ${.TARGET} ${SYSTEM_OBJS} vers.o -pthread
-
-%BEFORE_DEPEND
-
-%OBJS
-
-%CFILES
-
-%SFILES
-
-%MFILES
-
-%CLEAN
-
-.include "$S/conf/kern.post.mk"
-
-%RULES
-
-# DO NOT DELETE THIS LINE -- make depend uses it
diff --git a/sys/platform/vkernel/conf/files b/sys/platform/vkernel/conf/files
deleted file mode 100644 (file)
index 4d3db4c..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-# This file tells config what files go into building a kernel,
-# files marked standard are always included.
-#
-bf_enc.o                       optional        ipsec ipsec_esp         \
-       dependency      "$S/crypto/blowfish/arch/i386/bf_enc.S $S/crypto/blowfish/arch/i386/bf_enc_586.S $S/crypto/blowfish/arch/i386/bf_enc_686.S"             \
-       compile-with    "${CC} -c -I$S/crypto/blowfish/arch/i386 ${ASM_CFLAGS} ${WERROR} ${.IMPSRC}"    \
-       no-implicit-rule
-crypto/des/arch/i386/des_enc.S         optional        ipsec ipsec_esp
-crypto/des/des_ecb.c                   optional        netsmbcrypto
-crypto/des/arch/i386/des_enc.S         optional        netsmbcrypto
-crypto/des/des_setkey.c                        optional        netsmbcrypto
-bf_enc.o                       optional        crypto          \
-       dependency      "$S/crypto/blowfish/arch/i386/bf_enc.S $S/crypto/blowfish/arch/i386/bf_enc_586.S $S/crypto/blowfish/arch/i386/bf_enc_686.S"             \
-       compile-with    "${CC} -c -I$S/crypto/blowfish/arch/i386 ${ASM_CFLAGS} ${WERROR} ${.IMPSRC}"    \
-       no-implicit-rule
-crypto/des/arch/i386/des_enc.S         optional        crypto
-crypto/des/des_ecb.c                   optional        crypto
-crypto/des/des_setkey.c                        optional        crypto
-emulation/dragonfly12/dfbsd12_getdirentries.c  optional        compat_df12
-emulation/dragonfly12/dfbsd12_stat.c           optional        compat_df12
-emulation/linux/i386/linprocfs/linprocfs_misc.c                optional        linprocfs
-emulation/linux/i386/linprocfs/linprocfs_subr.c                optional        linprocfs
-emulation/linux/i386/linprocfs/linprocfs_vfsops.c      optional        linprocfs
-emulation/linux/i386/linprocfs/linprocfs_vnops.c       optional        linprocfs
-vfs/smbfs/smbfs_io.c           optional        smbfs
-vfs/smbfs/smbfs_node.c         optional        smbfs
-vfs/smbfs/smbfs_smb.c          optional        smbfs
-vfs/smbfs/smbfs_subr.c         optional        smbfs
-vfs/smbfs/smbfs_vfsops.c       optional        smbfs
-vfs/smbfs/smbfs_vnops.c                optional        smbfs
-cpu/i386/misc/atomic.c         standard                                \
-       compile-with    "${CC} -c ${CFLAGS} ${WERROR} ${DEFINED_PROF:S/^$/-fomit-frame-pointer/} ${.IMPSRC}"
-platform/vkernel/i386/autoconf.c       standard
-platform/vkernel/i386/mp.c             standard                        \
-       compile-with    "${CC} -c -pthread ${CFLAGS} ${WERROR} -I/usr/include ${.IMPSRC}"
-#
-# DDB XXX
-cpu/i386/misc/elf_machdep.c            standard
-cpu/i386/misc/lwbuf.c                  standard
-cpu/i386/misc/in_cksum2.s              optional        inet
-cpu/i386/misc/in_cksum2.s              optional        inet6
-cpu/i386/misc/monitor.s                        standard
-cpu/i386/misc/ktr.c                    optional        ktr
-cpu/i386/misc/db_disasm.c              optional        ddb
-cpu/i386/misc/i386-gdbstub.c           optional        ddb
-cpu/i386/misc/bzeront.s                        standard
-#
-# DOS mbr and gpt
-kern/subr_diskmbr.c                    standard
-kern/subr_diskgpt.c                    standard
-
-# DEVICES
-#
-dev/virtual/vkernel/cdrom/vcd.c                optional        vcd
-dev/virtual/vkernel/disk/vdisk.c       optional        vkd
-dev/virtual/vkernel/net/if_vke.c       optional        vke
-vfs/dirfs/dirfs_vnops.c                        optional        dirfs
-vfs/dirfs/dirfs_vfsops.c               optional        dirfs
-vfs/dirfs/dirfs_subr.c         optional        dirfs
-
-# PLATFORM FILES
-#
-platform/vkernel/i386/global.s         standard
-platform/vkernel/i386/swtch.s          standard
-platform/vkernel/i386/npx.c            mandatory       npx
-platform/vkernel/i386/db_interface.c   optional        ddb
-platform/vkernel/i386/db_trace.c       optional        ddb
-platform/vkernel/i386/vm_machdep.c     standard
-platform/vkernel/i386/cpu_regs.c       standard
-platform/vkernel/i386/userldt.c                standard
-platform/vkernel/i386/tls.c            standard
-platform/vkernel/i386/trap.c           standard
-platform/vkernel/i386/exception.c      standard
-platform/vkernel/i386/procfs_machdep.c standard
-platform/vkernel/i386/fork_tramp.s     standard
-platform/vkernel/platform/init.c       standard
-platform/vkernel/platform/globaldata.c standard
-platform/vkernel/platform/kqueue.c     standard
-platform/vkernel/platform/shutdown.c   standard
-platform/vkernel/platform/machintr.c   standard
-platform/vkernel/platform/copyio.c     standard
-platform/vkernel/platform/pmap.c       standard
-platform/vkernel/platform/pmap_inval.c standard
-platform/vkernel/platform/busdma_machdep.c standard
-platform/vkernel/platform/sysarch.c    standard
-platform/vkernel/platform/systimer.c   standard
-platform/vkernel/platform/console.c    standard
-platform/vkernel/platform/ipl_funcs.c  standard
-platform/vkernel/platform/cothread.c   standard
diff --git a/sys/platform/vkernel/conf/kern.mk b/sys/platform/vkernel/conf/kern.mk
deleted file mode 100644 (file)
index 8ceb4d7..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# On the i386, do not align the stack to 16-byte boundaries.  Otherwise GCC
-# adds code to the entry and exit point of every function to align the
-# stack to 16-byte boundaries -- thus wasting approximately 12 bytes of stack
-# per function call.  While the 16-byte alignment may benefit micro benchmarks, 
-# it is probably an overall loss as it makes the code bigger (less efficient
-# use of code cache tag lines) and uses more stack (less efficient use of data
-# cache tag lines)
-#
-# Prohibit the use of FP registers in the kernel.  The user FP state is
-# only saved and restored under strictly managed conditions and mainline
-# kernel code cannot safely use the FP system.
-#
-.if ${CCVER:Mgcc*}
-CFLAGS+=       -mpreferred-stack-boundary=2
-.endif
-CFLAGS+=       -fno-stack-protector
-CFLAGS+=       -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3
-CFLAGS+=       -D_KERNEL_VIRTUAL
-
-# Remove the dynamic library hack for now
-#
-SYSTEM_OBJS:= ${SYSTEM_OBJS:Nhack.So}
-
-INLINE_LIMIT=  8000
diff --git a/sys/platform/vkernel/conf/ldscript.i386 b/sys/platform/vkernel/conf/ldscript.i386
deleted file mode 100644 (file)
index a0db817..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-/* Default linker script, for normal executables */
-OUTPUT_FORMAT("elf32-i386", "elf32-i386",
-             "elf32-i386")
-OUTPUT_ARCH(i386)
-ENTRY(btext)
-SEARCH_DIR(/usr/lib);
-
-PHDRS
-{
-  headers PT_PHDR PHDRS ;
-  interp PT_INTERP ;
-  text PT_LOAD FILEHDR PHDRS ;
-  data PT_LOAD ;
-  dynamic PT_DYNAMIC ;
-}
-
-SECTIONS
-{
-  /* Read-only sections, merged into text segment: */
-  kernphys = 0x100000;
-  kernmxps = CONSTANT (MAXPAGESIZE);
-  kernpage = CONSTANT (COMMONPAGESIZE);
-  . = kernbase + kernphys + SIZEOF_HEADERS;
-  .interp         : { *(.interp) } :text :interp
-  .note.gnu.build-id : { *(.note.gnu.build-id) } :text
-  .hash           : { *(.hash) }
-  .gnu.hash       : { *(.gnu.hash) }
-  .dynsym         : { *(.dynsym) }
-  .dynstr         : { *(.dynstr) }
-  .gnu.version    : { *(.gnu.version) }
-  .gnu.version_d  : { *(.gnu.version_d) }
-  .gnu.version_r  : { *(.gnu.version_r) }
-  .rel.init       : { *(.rel.init) }
-  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
-  .rel.fini       : { *(.rel.fini) }
-  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
-  .rel.data.rel.ro   : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
-  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
-  .rel.tdata     : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
-  .rel.tbss      : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
-  .rel.ctors      : { *(.rel.ctors) }
-  .rel.dtors      : { *(.rel.dtors) }
-  .rel.got        : { *(.rel.got) }
-  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
-  .rel.ifunc      : { *(.rel.ifunc) }
-  .rel.plt        :
-    {
-      *(.rel.plt)
-      PROVIDE_HIDDEN (__rel_iplt_start = .);
-      *(.rel.iplt)
-      PROVIDE_HIDDEN (__rel_iplt_end = .);
-    }
-  .init           :
-  {
-    KEEP (*(.init))
-  } =0x90909090
-  .plt            : { *(.plt) *(.iplt) }
-  .text           :
-  {
-    *(.text.unlikely .text.*_unlikely)
-    *(.text.exit .text.exit.*)
-    *(.text.startup .text.startup.*)
-    *(.text.hot .text.hot.*)
-    *(.text .stub .text.* .gnu.linkonce.t.*)
-    /* .gnu.warning sections are handled specially by elf32.em.  */
-    *(.gnu.warning)
-  } =0x90909090
-  .fini           :
-  {
-    KEEP (*(.fini))
-  } =0x90909090
-  PROVIDE (__etext = .);
-  PROVIDE (_etext = .);
-  PROVIDE (etext = .);
-  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
-  .rodata1        : { *(.rodata1) }
-  .eh_frame_hdr : { *(.eh_frame_hdr) }
-  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table
-  .gcc_except_table.*) }
-  /* These sections are generated by the Sun/Oracle C++ compiler.  */
-  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges
-  .exception_ranges*) }
-  /* Adjust the address for the data segment.  We want to adjust up to
-     the same address within the page on the next page up.  */
-  . = ALIGN (kernmxps) - ((kernmxps - .) & (kernmxps - 1));
-  . = DATA_SEGMENT_ALIGN (kernmxps, kernpage);
-  /* Exception handling  */
-  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
-  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
-  /* Thread Local Storage sections  */
-  .tdata         : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-  .tbss                  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
-  .preinit_array     :
-  {
-    PROVIDE_HIDDEN (__preinit_array_start = .);
-    KEEP (*(.preinit_array))
-    PROVIDE_HIDDEN (__preinit_array_end = .);
-  }
-  .init_array     :
-  {
-     PROVIDE_HIDDEN (__init_array_start = .);
-     KEEP (*(SORT(.init_array.*)))
-     KEEP (*(.init_array))
-     PROVIDE_HIDDEN (__init_array_end = .);
-  }
-  .fini_array     :
-  {
-    PROVIDE_HIDDEN (__fini_array_start = .);
-    KEEP (*(SORT(.fini_array.*)))
-    KEEP (*(.fini_array))
-    PROVIDE_HIDDEN (__fini_array_end = .);
-  }
-  _start_ctors = .;
-  PROVIDE (start_ctors = .);
-  .ctors          :
-  {
-    /* gcc uses crtbegin.o to find the start of
-       the constructors, so we make sure it is
-       first.  Because this is a wildcard, it
-       doesn't matter if the user does not
-       actually link against crtbegin.o; the
-       linker won't look for a file to match a
-       wildcard.  The wildcard also means that it
-       doesn't matter which directory crtbegin.o
-       is in.  */
-    KEEP (*crtbegin.o(.ctors))
-    KEEP (*crtbegin?.o(.ctors))
-    /* We don't want to include the .ctor section from
-       the crtend.o file until after the sorted ctors.
-       The .ctor section from the crtend file contains the
-       end of ctors marker and it must be last */
-    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
-    KEEP (*(SORT(.ctors.*)))
-    KEEP (*(.ctors))
-  }
-  _stop_ctors = .;
-  PROVIDE (stop_ctors = .);
-  .dtors          :
-  {
-    KEEP (*crtbegin.o(.dtors))
-    KEEP (*crtbegin?.o(.dtors))
-    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
-    KEEP (*(SORT(.dtors.*)))
-    KEEP (*(.dtors))
-  }
-  .jcr            : { KEEP (*(.jcr)) }
-  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) } :data
-  .dynamic        : { *(.dynamic) } :data :dynamic
-  .got            : { *(.got) *(.igot) } :data
-  . = DATA_SEGMENT_RELRO_END (12, .);
-  .got.plt        : { *(.got.plt)  *(.igot.plt) }
-  .data           :
-  {
-    *(.data .data.* .gnu.linkonce.d.*)
-    SORT(CONSTRUCTORS)
-  }
-  .data1          : { *(.data1) }
-  _edata = .; PROVIDE (edata = .);
-  __bss_start = .;
-  .bss            :
-  {
-   *(.dynbss)
-   *(.bss .bss.* .gnu.linkonce.b.*)
-   *(COMMON)
-   /* Align here to ensure that the .bss section occupies space up to
-      _end.  Align after .bss to ensure correct alignment even if the
-      .bss section disappears because there are no input sections.
-      FIXME: Why do we need it? When there is no .bss section, we don't
-      pad the .data section.  */
-   . = ALIGN(. != 0 ? 32 / 8 : 1);
-  }
-  . = ALIGN(32 / 8);
-  . = ALIGN(32 / 8);
-  _end = .; PROVIDE (end = .);
-  . = DATA_SEGMENT_END (.);
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-  .comment       0 : { *(.comment) }
-  /* DWARF debug sections.
-     Symbols in the DWARF debugging sections are relative to the beginning
-     of the section so we begin them at 0.  */
-  /* DWARF 1 */
-  .debug          0 : { *(.debug) }
-  .line           0 : { *(.line) }
-  /* GNU DWARF 1 extensions */
-  .debug_srcinfo  0 : { *(.debug_srcinfo) }
-  .debug_sfnames  0 : { *(.debug_sfnames) }
-  /* DWARF 1.1 and DWARF 2 */
-  .debug_aranges  0 : { *(.debug_aranges) }
-  .debug_pubnames 0 : { *(.debug_pubnames) }
-  /* DWARF 2 */
-  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
-  .debug_abbrev   0 : { *(.debug_abbrev) }
-  .debug_line     0 : { *(.debug_line) }
-  .debug_frame    0 : { *(.debug_frame) }
-  .debug_str      0 : { *(.debug_str) }
-  .debug_loc      0 : { *(.debug_loc) }
-  .debug_macinfo  0 : { *(.debug_macinfo) }
-  /* SGI/MIPS DWARF 2 extensions */
-  .debug_weaknames 0 : { *(.debug_weaknames) }
-  .debug_funcnames 0 : { *(.debug_funcnames) }
-  .debug_typenames 0 : { *(.debug_typenames) }
-  .debug_varnames  0 : { *(.debug_varnames) }
-  /* DWARF 3 */
-  .debug_pubtypes 0 : { *(.debug_pubtypes) }
-  .debug_ranges   0 : { *(.debug_ranges) }
-  .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
-  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
-}
diff --git a/sys/platform/vkernel/conf/options b/sys/platform/vkernel/conf/options
deleted file mode 100644 (file)
index 77a7d72..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# The cpu type
-#
-I586_CPU                opt_global.h
-I686_CPU                opt_global.h
-
-COMPAT_DF12            opt_compatdf12.h
-
-# Static filesystems
-DIRFS           opt_dontuse.h
-
-# KTR options
-KTR_DIRFS       opt_ktr.h
diff --git a/sys/platform/vkernel/i386/autoconf.c b/sys/platform/vkernel/i386/autoconf.c
deleted file mode 100644 (file)
index 2cff1b1..0000000
+++ /dev/null
@@ -1,559 +0,0 @@
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     from: @(#)autoconf.c    7.1 (Berkeley) 5/9/91
- * $FreeBSD: src/sys/i386/i386/autoconf.c,v 1.146.2.2 2001/06/07 06:05:58 dd Exp $
- */
-
-/*
- * Setup the system to run on the current machine.
- *
- * Configure() is called at boot time and initializes the vba
- * device tables and the memory controller monitoring.  Available
- * devices are determined (from possibilities mentioned in ioconf.c),
- * and the drivers are initialized.
- */
-#include "opt_bootp.h"
-#include "opt_ffs.h"
-#include "opt_cd9660.h"
-#include "opt_nfs.h"
-#include "opt_nfsroot.h"
-#include "opt_rootdevname.h"
-
-#include "use_isa.h"
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bootmaj.h>
-#include <sys/bus.h>
-#include <sys/buf.h>
-#include <sys/conf.h>
-#include <sys/diskslice.h>
-#include <sys/reboot.h>
-#include <sys/kernel.h>
-#include <sys/malloc.h>
-#include <sys/mount.h>
-#include <sys/cons.h>
-#include <sys/thread.h>
-#include <sys/device.h>
-#include <sys/machintr.h>
-
-#include <vm/pmap.h>
-#include <vm/vm_kern.h>
-#include <vm/vm_extern.h>
-#include <vm/vm_pager.h>
-
-#if 0
-#include <machine/pcb.h>
-#include <machine/pcb_ext.h>
-#include <machine/vm86.h>
-#endif
-#include <machine/smp.h>
-#include <machine/globaldata.h>
-#include <machine/md_var.h>
-
-#if NISA > 0
-#include <bus/isa/isavar.h>
-
-device_t isa_bus_device = NULL;
-#endif
-
-static void cpu_startup (void *);
-static void configure_first (void *);
-static void configure (void *);
-static void configure_final (void *);
-
-#if defined(FFS) && defined(FFS_ROOT)
-static void    setroot (void);
-#endif
-
-#if defined(NFS) && defined(NFS_ROOT)
-#if !defined(BOOTP_NFSROOT)
-static void    pxe_setup_nfsdiskless(void);
-#endif
-#endif
-
-SYSINIT(cpu, SI_BOOT2_START_CPU, SI_ORDER_FIRST, cpu_startup, NULL);
-SYSINIT(configure1, SI_SUB_CONFIGURE, SI_ORDER_FIRST, configure_first, NULL);
-/* SI_ORDER_SECOND is hookable */
-SYSINIT(configure2, SI_SUB_CONFIGURE, SI_ORDER_THIRD, configure, NULL);
-/* SI_ORDER_MIDDLE is hookable */
-SYSINIT(configure3, SI_SUB_CONFIGURE, SI_ORDER_ANY, configure_final, NULL);
-
-cdev_t rootdev = NULL;
-cdev_t dumpdev = NULL;
-
-/*
- * 
- */
-static void
-cpu_startup(void *dummy)
-{
-       vm_offset_t buffer_sva;
-       vm_offset_t buffer_eva;
-       vm_offset_t pager_sva;
-       vm_offset_t pager_eva;
-
-       kprintf("%s", version);
-       kprintf("real memory = %ju (%ju MB)\n",
-               (uintmax_t)ptoa(Maxmem),
-               (uintmax_t)ptoa(Maxmem) / 1024 / 1024);
-
-       if (nbuf == 0) {
-               int factor = 4 * BKVASIZE / 1024;
-               int kbytes = Maxmem * (PAGE_SIZE / 1024);
-
-               nbuf = 50;
-               if (kbytes > 4096)
-                       nbuf += min((kbytes - 4096) / factor, 65536 / factor);
-               if (kbytes > 65536)
-                       nbuf += (kbytes - 65536) * 2 / (factor * 5);
-               if (maxbcache && nbuf > maxbcache / BKVASIZE)
-                       nbuf = maxbcache / BKVASIZE;
-       }
-       if (nbuf > (virtual_end - virtual_start) / (BKVASIZE * 2)) {
-               nbuf = (virtual_end - virtual_start) / (BKVASIZE * 2);
-               kprintf("Warning: nbufs capped at %ld\n", nbuf);
-       }
-
-       nswbuf = lmax(lmin(nbuf / 4, 256), 16);
-#ifdef NSWBUF_MIN
-       if (nswbuf < NSWBUF_MIN)
-               nswbuf = NSWBUF_MIN;
-#endif
-
-       /*
-        * Allocate memory for the buffer cache
-        */
-       buf = (void *)kmem_alloc(&kernel_map, nbuf * sizeof(struct buf));
-       swbuf = (void *)kmem_alloc(&kernel_map, nswbuf * sizeof(struct buf));
-
-
-#ifdef DIRECTIO
-        ffs_rawread_setup();
-#endif
-       kmem_suballoc(&kernel_map, &clean_map, &clean_sva, &clean_eva,
-                     (nbuf*BKVASIZE) + (nswbuf*MAXPHYS) + pager_map_size);
-       kmem_suballoc(&clean_map, &buffer_map, &buffer_sva, &buffer_eva,
-                     (nbuf*BKVASIZE));
-       buffer_map.system_map = 1;
-       kmem_suballoc(&clean_map, &pager_map, &pager_sva, &pager_eva,
-                     (nswbuf*MAXPHYS) + pager_map_size);
-       pager_map.system_map = 1;
-#if defined(USERCONFIG)
-        userconfig();
-       cninit();               /* the preferred console may have changed */
-#endif
-       kprintf("avail memory = %ju (%ju MB)\n",
-               (uintmax_t)ptoa(vmstats.v_free_count),
-               (uintmax_t)ptoa(vmstats.v_free_count) / 1024 / 1024);
-       mp_start();
-       mp_announce();
-       cpu_setregs();
-}
-
-/*
- * Determine i/o configuration for a machine.
- */
-static void
-configure_first(void *dummy)
-{
-}
-
-static void
-configure(void *dummy)
-{
-        /*
-        * Final interrupt support acviation, then enable hardware interrupts.
-        */
-       MachIntrABI.finalize();
-       cpu_enable_intr();
-
-       /*
-        * This will configure all devices, generally starting with the
-        * nexus (i386/i386/nexus.c).  The nexus ISA code explicitly
-        * dummies up the attach in order to delay legacy initialization
-        * until after all other busses/subsystems have had a chance
-        * at those resources.
-        */
-       root_bus_configure();
-
-#if NISA > 0
-       /*
-        * Explicitly probe and attach ISA last.  The isa bus saves
-        * it's device node at attach time for us here.
-        */
-       if (isa_bus_device)
-               isa_probe_children(isa_bus_device);
-#endif
-
-       /*
-        * Allow lowering of the ipl to the lowest kernel level if we
-        * panic (or call tsleep() before clearing `cold').  No level is
-        * completely safe (since a panic may occur in a critical region
-        * at splhigh()), but we want at least bio interrupts to work.
-        */
-       safepri = TDPRI_KERN_USER;
-}
-
-static void
-configure_final(void *dummy)
-{
-       cninit_finish();
-
-       if (bootverbose)
-               kprintf("Device configuration finished.\n");
-}
-
-#ifdef BOOTP
-void bootpc_init(void);
-#endif
-/*
- * Do legacy root filesystem discovery.
- */
-void
-cpu_rootconf(void)
-{
-#ifdef BOOTP
-        bootpc_init();
-#endif
-#if defined(NFS) && defined(NFS_ROOT)
-#if !defined(BOOTP_NFSROOT)
-       pxe_setup_nfsdiskless();
-       if (nfs_diskless_valid)
-#endif
-               rootdevnames[0] = "nfs:";
-#endif
-#if defined(FFS) && defined(FFS_ROOT)
-        if (!rootdevnames[0])
-                setroot();
-#endif
-}
-SYSINIT(cpu_rootconf, SI_SUB_ROOT_CONF, SI_ORDER_FIRST, cpu_rootconf, NULL);
-
-u_long bootdev = 0;            /* not a cdev_t - encoding is different */
-
-#if defined(FFS) && defined(FFS_ROOT)
-
-/*
- * The boot code uses old block device major numbers to pass bootdev to
- * us.  We have to translate these to character device majors because
- * we don't have block devices any more.
- */
-static int
-boot_translate_majdev(int bmajor)
-{
-       static int conv[] = { BOOTMAJOR_CONVARY };
-
-       if (bmajor >= 0 && bmajor < NELEM(conv))
-               return(conv[bmajor]);
-       return(-1);
-}
-
-/*
- * Attempt to find the device from which we were booted.
- * If we can do so, and not instructed not to do so,
- * set rootdevs[] and rootdevnames[] to correspond to the
- * boot device(s).
- *
- * This code survives in order to allow the system to be 
- * booted from legacy environments that do not correctly
- * populate the kernel environment. There are significant
- * restrictions on the bootability of the system in this
- * situation; it can only be mounting root from a 'da'
- * 'wd' or 'fd' device, and the root filesystem must be ufs.
- */
-static void
-setroot(void)
-{
-       int majdev, mindev, unit, slice, part;
-       cdev_t newrootdev, dev;
-       char partname[2];
-       char *sname;
-
-       if ((bootdev & B_MAGICMASK) != B_DEVMAGIC) {
-               kprintf("no B_DEVMAGIC (bootdev=%#lx)\n", bootdev);
-               return;
-       }
-       majdev = boot_translate_majdev(B_TYPE(bootdev));
-       if (bootverbose) {
-               kprintf("bootdev: %08lx type=%ld unit=%ld "
-                       "slice=%ld part=%ld major=%d\n",
-                       bootdev, B_TYPE(bootdev), B_UNIT(bootdev),
-                       B_SLICE(bootdev), B_PARTITION(bootdev), majdev);
-       }
-       dev = udev2dev(makeudev(majdev, 0), 0);
-       if (!dev_is_good(dev))
-               return;
-       unit = B_UNIT(bootdev);
-       slice = B_SLICE(bootdev);
-       if (slice == WHOLE_DISK_SLICE)
-               slice = COMPATIBILITY_SLICE;
-       if (slice < 0 || slice >= MAX_SLICES) {
-               kprintf("bad slice\n");
-               return;
-       }
-
-       part = B_PARTITION(bootdev);
-       mindev = dkmakeminor(unit, slice, part);
-       newrootdev = udev2dev(makeudev(majdev, mindev), 0);
-       if (!dev_is_good(newrootdev))
-               return;
-       sname = dsname(newrootdev, unit, slice, part, partname);
-       rootdevnames[0] = kmalloc(strlen(sname) + 6, M_DEVBUF, M_WAITOK);
-       ksprintf(rootdevnames[0], "ufs:%s%s", sname, partname);
-
-       /*
-        * For properly dangerously dedicated disks (ones with a historical
-        * bogus partition table), the boot blocks will give slice = 4, but
-        * the kernel will only provide the compatibility slice since it
-        * knows that slice 4 is not a real slice.  Arrange to try mounting
-        * the compatibility slice as root if mounting the slice passed by
-        * the boot blocks fails.  This handles the dangerously dedicated
-        * case and perhaps others.
-        */
-       if (slice == COMPATIBILITY_SLICE)
-               return;
-       slice = COMPATIBILITY_SLICE;
-       sname = dsname(newrootdev, unit, slice, part, partname);
-       rootdevnames[1] = kmalloc(strlen(sname) + 6, M_DEVBUF, M_WAITOK);
-       ksprintf(rootdevnames[1], "ufs:%s%s", sname, partname);
-}
-#endif
-
-#if defined(NFS) && defined(NFS_ROOT)
-#if !defined(BOOTP_NFSROOT)
-
-#include <sys/socket.h>
-#include <net/if.h>
-#include <net/if_dl.h>
-#include <net/if_types.h>
-#include <net/if_var.h>
-#include <net/ethernet.h>
-#include <netinet/in.h>
-#include <vfs/nfs/rpcv2.h>
-#include <vfs/nfs/nfsproto.h>
-#include <vfs/nfs/nfs.h>
-#include <vfs/nfs/nfsdiskless.h>
-
-extern struct nfs_diskless     nfs_diskless;
-
-/*
- * Convert a kenv variable to a sockaddr.  If the kenv variable does not
- * exist the sockaddr will remain zerod out (callers typically just check
- * sin_len).  A network address of 0.0.0.0 is equivalent to failure.
- */
-static int
-inaddr_to_sockaddr(char *ev, struct sockaddr_in *sa)
-{
-       u_int32_t       a[4];
-       char            *cp;
-
-       bzero(sa, sizeof(*sa));
-
-       if ((cp = kgetenv(ev)) == NULL)
-               return(1);
-       if (ksscanf(cp, "%d.%d.%d.%d", &a[0], &a[1], &a[2], &a[3]) != 4)
-               return(1);
-       if (a[0] == 0 && a[1] == 0 && a[2] == 0 && a[3] == 0)
-               return(1);
-       /* XXX is this ordering correct? */
-       sa->sin_addr.s_addr = (a[3] << 24) + (a[2] << 16) + (a[1] << 8) + a[0];
-       sa->sin_len = sizeof(*sa);
-       sa->sin_family = AF_INET;
-       return(0);
-}
-
-static int
-hwaddr_to_sockaddr(char *ev, struct sockaddr_dl *sa)
-{
-       char            *cp;
-       u_int32_t       a[6];
-
-       bzero(sa, sizeof(*sa));
-       sa->sdl_len = sizeof(*sa);
-       sa->sdl_family = AF_LINK;
-       sa->sdl_type = IFT_ETHER;
-       sa->sdl_alen = ETHER_ADDR_LEN;
-       if ((cp = kgetenv(ev)) == NULL)
-               return(1);
-       if (ksscanf(cp, "%x:%x:%x:%x:%x:%x", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]) != 6)
-               return(1);
-       sa->sdl_data[0] = a[0];
-       sa->sdl_data[1] = a[1];
-       sa->sdl_data[2] = a[2];
-       sa->sdl_data[3] = a[3];
-       sa->sdl_data[4] = a[4];
-       sa->sdl_data[5] = a[5];
-       return(0);
-}
-
-static int
-decode_nfshandle(char *ev, u_char *fh) 
-{
-       u_char  *cp;
-       int     len, val;
-
-       if (((cp = kgetenv(ev)) == NULL) || (strlen(cp) < 2) || (*cp != 'X'))
-               return(0);
-       len = 0;
-       cp++;
-       for (;;) {
-               if (*cp == 'X')
-                       return(len);
-               if ((ksscanf(cp, "%2x", &val) != 1) || (val > 0xff))
-                       return(0);
-               *(fh++) = val;
-               len++;
-               cp += 2;
-               if (len > NFSX_V2FH)
-                   return(0);
-       }
-}
-
-/*
- * Populate the essential fields in the nfsv3_diskless structure.
- *
- * The loader is expected to export the following environment variables:
- *
- * boot.netif.ip               IP address on boot interface
- * boot.netif.netmask          netmask on boot interface
- * boot.netif.gateway          default gateway (optional)
- * boot.netif.hwaddr           hardware address of boot interface
- * boot.netif.name             name of boot interface (instead of hw addr)
- * boot.nfsroot.server         IP address of root filesystem server
- * boot.nfsroot.path           path of the root filesystem on server
- * boot.nfsroot.nfshandle      NFS handle for root filesystem on server
- */
-static void
-pxe_setup_nfsdiskless(void)
-{
-       struct nfs_diskless     *nd = &nfs_diskless;
-       struct ifnet            *ifp;
-       struct ifaddr           *ifa;
-       struct sockaddr_dl      *sdl, ourdl;
-       struct sockaddr_in      myaddr, netmask;
-       char                    *cp;
-
-       /* set up interface */
-       if (inaddr_to_sockaddr("boot.netif.ip", &myaddr))
-               return;
-       if (inaddr_to_sockaddr("boot.netif.netmask", &netmask)) {
-               kprintf("PXE: no netmask\n");
-               return;
-       }
-       bcopy(&myaddr, &nd->myif.ifra_addr, sizeof(myaddr));
-       bcopy(&myaddr, &nd->myif.ifra_broadaddr, sizeof(myaddr));
-       ((struct sockaddr_in *) &nd->myif.ifra_broadaddr)->sin_addr.s_addr =
-               myaddr.sin_addr.s_addr | ~ netmask.sin_addr.s_addr;
-       bcopy(&netmask, &nd->myif.ifra_mask, sizeof(netmask));
-
-       if ((cp = kgetenv("boot.netif.name")) != NULL) {
-               ifnet_lock();
-               ifp = ifunit(cp);
-               if (ifp) {
-                       strlcpy(nd->myif.ifra_name, ifp->if_xname,
-                           sizeof(nd->myif.ifra_name));
-                       ifnet_unlock();
-                       goto match_done;
-               }
-               ifnet_unlock();
-               kprintf("PXE: cannot find interface %s\n", cp);
-               return;
-       }
-
-       if (hwaddr_to_sockaddr("boot.netif.hwaddr", &ourdl)) {
-               kprintf("PXE: no hardware address\n");
-               return;
-       }
-       ifa = NULL;
-       ifnet_lock();
-       TAILQ_FOREACH(ifp, &ifnetlist, if_link) {
-               struct ifaddr_container *ifac;
-
-               TAILQ_FOREACH(ifac, &ifp->if_addrheads[mycpuid], ifa_link) {
-                       ifa = ifac->ifa;
-
-                       if ((ifa->ifa_addr->sa_family == AF_LINK) &&
-                           (sdl = ((struct sockaddr_dl *)ifa->ifa_addr))) {
-                               if ((sdl->sdl_type == ourdl.sdl_type) &&
-                                   (sdl->sdl_alen == ourdl.sdl_alen) &&
-                                   !bcmp(sdl->sdl_data + sdl->sdl_nlen,
-                                         ourdl.sdl_data + ourdl.sdl_nlen, 
-                                         sdl->sdl_alen)) {
-                                       strlcpy(nd->myif.ifra_name,
-                                           ifp->if_xname,
-                                           sizeof(nd->myif.ifra_name));
-                                       ifnet_unlock();
-                                       goto match_done;
-                               }
-                       }
-               }
-       }
-       ifnet_unlock();
-       kprintf("PXE: no interface\n");
-       return; /* no matching interface */
-match_done:
-       /* set up gateway */
-       inaddr_to_sockaddr("boot.netif.gateway", &nd->mygateway);
-
-       /* XXX set up swap? */
-
-       /* set up root mount */
-       nd->root_args.rsize = 8192;             /* XXX tunable? */
-       nd->root_args.wsize = 8192;
-       nd->root_args.sotype = SOCK_STREAM;
-       nd->root_args.flags = NFSMNT_WSIZE | NFSMNT_RSIZE | NFSMNT_RESVPORT;
-       if (inaddr_to_sockaddr("boot.nfsroot.server", &nd->root_saddr)) {
-               kprintf("PXE: no server\n");
-               return;
-       }
-       nd->root_saddr.sin_port = htons(NFS_PORT);
-
-       /*
-        * A tftp-only loader may pass NFS path information without a 
-        * root handle.  Generate a warning but continue configuring.
-        */
-       if (decode_nfshandle("boot.nfsroot.nfshandle", &nd->root_fh[0]) == 0) {
-               kprintf("PXE: Warning, no NFS handle passed from loader\n");
-       }
-       if ((cp = kgetenv("boot.nfsroot.path")) != NULL)
-               strncpy(nd->root_hostnam, cp, MNAMELEN - 1);
-
-       nfs_diskless_valid = 1;
-}
-
-#endif
-#endif
diff --git a/sys/platform/vkernel/i386/cpu_regs.c b/sys/platform/vkernel/i386/cpu_regs.c
deleted file mode 100644 (file)
index b21e5d3..0000000
+++ /dev/null
@@ -1,935 +0,0 @@
-/*-
- * Copyright (c) 1992 Terrence R. Lambert.
- * Copyright (C) 1994, David Greenman
- * Copyright (c) 1982, 1987, 1990, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     from: @(#)machdep.c     7.4 (Berkeley) 6/3/91
- * $FreeBSD: src/sys/i386/i386/machdep.c,v 1.385.2.30 2003/05/31 08:48:05 alc Exp $
- */
-
-#include "use_npx.h"
-#include "opt_compat.h"
-#include "opt_ddb.h"
-#include "opt_directio.h"
-#include "opt_inet.h"
-#include "opt_msgbuf.h"
-#include "opt_swap.h"
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/sysproto.h>
-#include <sys/signalvar.h>
-#include <sys/kernel.h>
-#include <sys/linker.h>
-#include <sys/malloc.h>
-#include <sys/proc.h>
-#include <sys/buf.h>
-#include <sys/reboot.h>
-#include <sys/mbuf.h>
-#include <sys/msgbuf.h>
-#include <sys/sysent.h>
-#include <sys/sysctl.h>
-#include <sys/vmmeter.h>
-#include <sys/bus.h>
-#include <sys/usched.h>
-#include <sys/reg.h>
-
-#include <vm/vm.h>
-#include <vm/vm_param.h>
-#include <sys/lock.h>
-#include <vm/vm_kern.h>
-#include <vm/vm_object.h>
-#include <vm/vm_page.h>
-#include <vm/vm_map.h>
-#include <vm/vm_pager.h>
-#include <vm/vm_extern.h>
-
-#include <sys/thread2.h>
-#include <sys/mplock2.h>
-
-#include <sys/user.h>
-#include <sys/exec.h>
-#include <sys/cons.h>
-
-#include <ddb/ddb.h>
-
-#include <machine/cpu.h>
-#include <machine/clock.h>
-#include <machine/specialreg.h>
-#include <machine/md_var.h>
-#include <machine/pcb_ext.h>           /* pcb.h included via sys/user.h */
-#include <machine/globaldata.h>                /* CPU_prvspace */
-#include <machine/smp.h>
-#ifdef PERFMON
-#include <machine/perfmon.h>
-#endif
-#include <machine/cputypes.h>
-
-#include <bus/isa/rtc.h>
-#include <machine/vm86.h>
-#include <sys/random.h>
-#include <sys/ptrace.h>
-#include <machine/sigframe.h>
-#include <unistd.h>            /* umtx_* functions */
-#include <pthread.h>           /* pthread_yield */
-
-extern void dblfault_handler (void);
-
-#ifndef CPU_DISABLE_SSE
-static void set_fpregs_xmm (struct save87 *, struct savexmm *);
-static void fill_fpregs_xmm (struct savexmm *, struct save87 *);
-#endif /* CPU_DISABLE_SSE */
-#ifdef DIRECTIO
-extern void ffs_rawread_setup(void);
-#endif /* DIRECTIO */
-
-int64_t tsc_offsets[MAXCPU];
-
-#if defined(SWTCH_OPTIM_STATS)
-extern int swtch_optim_stats;
-SYSCTL_INT(_debug, OID_AUTO, swtch_optim_stats,
-       CTLFLAG_RD, &swtch_optim_stats, 0, "");
-SYSCTL_INT(_debug, OID_AUTO, tlb_flush_count,
-       CTLFLAG_RD, &tlb_flush_count, 0, "");
-#endif
-
-static int
-sysctl_hw_physmem(SYSCTL_HANDLER_ARGS)
-{
-       u_long pmem = ctob(physmem);
-
-       int error = sysctl_handle_long(oidp, &pmem, 0, req);
-       return (error);
-}
-
-SYSCTL_PROC(_hw, HW_PHYSMEM, physmem, CTLTYPE_ULONG|CTLFLAG_RD,
-       0, 0, sysctl_hw_physmem, "LU", "Total system memory in bytes (number of pages * page size)");
-
-static int
-sysctl_hw_usermem(SYSCTL_HANDLER_ARGS)
-{
-       int error = sysctl_handle_int(oidp, 0,
-               ctob((int)Maxmem - vmstats.v_wire_count), req);
-       return (error);
-}
-
-SYSCTL_PROC(_hw, HW_USERMEM, usermem, CTLTYPE_INT|CTLFLAG_RD,
-       0, 0, sysctl_hw_usermem, "IU", "");
-
-SYSCTL_ULONG(_hw, OID_AUTO, availpages, CTLFLAG_RD, &Maxmem, 0, "");
-
-/*
- * Send an interrupt to process.
- *
- * Stack is set up to allow sigcode stored
- * at top to call routine, followed by kcall
- * to sigreturn routine below.  After sigreturn
- * resets the signal mask, the stack, and the
- * frame pointer, it returns to the user
- * specified pc, psl.
- */
-void
-sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
-{
-       struct lwp *lp = curthread->td_lwp;
-       struct proc *p = lp->lwp_proc;
-       struct trapframe *regs;
-       struct sigacts *psp = p->p_sigacts;
-       struct sigframe sf, *sfp;
-       int oonstack;
-
-       regs = lp->lwp_md.md_regs;
-       oonstack = (lp->lwp_sigstk.ss_flags & SS_ONSTACK) ? 1 : 0;
-
-       /* save user context */
-       bzero(&sf, sizeof(struct sigframe));
-       sf.sf_uc.uc_sigmask = *mask;
-       sf.sf_uc.uc_stack = lp->lwp_sigstk;
-       sf.sf_uc.uc_mcontext.mc_onstack = oonstack;
-       bcopy(regs, &sf.sf_uc.uc_mcontext.mc_gs, sizeof(struct trapframe));
-
-       /* make the size of the saved context visible to userland */
-       sf.sf_uc.uc_mcontext.mc_len = sizeof(sf.sf_uc.uc_mcontext); 
-
-       /* Allocate and validate space for the signal handler context. */
-        if ((lp->lwp_flags & LWP_ALTSTACK) != 0 && !oonstack &&
-           SIGISMEMBER(psp->ps_sigonstack, sig)) {
-               sfp = (struct sigframe *)(lp->lwp_sigstk.ss_sp +
-                   lp->lwp_sigstk.ss_size - sizeof(struct sigframe));
-               lp->lwp_sigstk.ss_flags |= SS_ONSTACK;
-       }
-       else
-               sfp = (struct sigframe *)regs->tf_esp - 1;
-
-       /* Translate the signal is appropriate */
-       if (p->p_sysent->sv_sigtbl) {
-               if (sig <= p->p_sysent->sv_sigsize)
-                       sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)];
-       }
-
-       /* Build the argument list for the signal handler. */
-       sf.sf_signum = sig;
-       sf.sf_ucontext = (register_t)&sfp->sf_uc;
-       if (SIGISMEMBER(psp->ps_siginfo, sig)) {
-               /* Signal handler installed with SA_SIGINFO. */
-               sf.sf_siginfo = (register_t)&sfp->sf_si;
-               sf.sf_ahu.sf_action = (__siginfohandler_t *)catcher;
-
-               /* fill siginfo structure */
-               sf.sf_si.si_signo = sig;
-               sf.sf_si.si_code = code;
-               sf.sf_si.si_addr = (void*)regs->tf_err;
-       }
-       else {
-               /* Old FreeBSD-style arguments. */
-               sf.sf_siginfo = code;
-               sf.sf_addr = regs->tf_err;
-               sf.sf_ahu.sf_handler = catcher;
-       }
-
-#if 0
-       /*
-        * If we're a vm86 process, we want to save the segment registers.
-        * We also change eflags to be our emulated eflags, not the actual
-        * eflags.
-        */
-       if (regs->tf_eflags & PSL_VM) {
-               struct trapframe_vm86 *tf = (struct trapframe_vm86 *)regs;
-               struct vm86_kernel *vm86 = &lp->lwp_thread->td_pcb->pcb_ext->ext_vm86;
-
-               sf.sf_uc.uc_mcontext.mc_gs = tf->tf_vm86_gs;
-               sf.sf_uc.uc_mcontext.mc_fs = tf->tf_vm86_fs;
-               sf.sf_uc.uc_mcontext.mc_es = tf->tf_vm86_es;
-               sf.sf_uc.uc_mcontext.mc_ds = tf->tf_vm86_ds;
-
-               if (vm86->vm86_has_vme == 0)
-                       sf.sf_uc.uc_mcontext.mc_eflags =
-                           (tf->tf_eflags & ~(PSL_VIF | PSL_VIP)) |
-                           (vm86->vm86_eflags & (PSL_VIF | PSL_VIP));
-
-               /*
-                * Clear PSL_NT to inhibit T_TSSFLT faults on return from
-                * syscalls made by the signal handler.  This just avoids
-                * wasting time for our lazy fixup of such faults.  PSL_NT
-                * does nothing in vm86 mode, but vm86 programs can set it
-                * almost legitimately in probes for old cpu types.
-                */
-               tf->tf_eflags &= ~(PSL_VM | PSL_NT | PSL_VIF | PSL_VIP);
-       }
-#endif
-       
-       /*
-        * Save the FPU state and reinit the FP unit
-        */
-       npxpush(&sf.sf_uc.uc_mcontext);
-
-       /*
-        * Copy the sigframe out to the user's stack.
-        */
-       if (copyout(&sf, sfp, sizeof(struct sigframe)) != 0) {
-               /*
-                * Something is wrong with the stack pointer.
-                * ...Kill the process.
-                */
-               sigexit(lp, SIGILL);
-       }
-
-       regs->tf_esp = (int)sfp;
-       regs->tf_eip = PS_STRINGS - *(p->p_sysent->sv_szsigcode);
-
-       /*
-        * i386 abi specifies that the direction flag must be cleared
-        * on function entry
-        */
-       regs->tf_eflags &= ~(PSL_T|PSL_D);
-
-       regs->tf_cs = _ucodesel;
-       regs->tf_ds = _udatasel;
-       regs->tf_es = _udatasel;
-       if (regs->tf_trapno == T_PROTFLT) {
-               regs->tf_fs = _udatasel;
-               regs->tf_gs = _udatasel;
-       }
-       regs->tf_ss = _udatasel;
-}
-
-/*
- * Sanitize the trapframe for a virtual kernel passing control to a custom
- * VM context.
- *
- * Allow userland to set or maintain PSL_RF, the resume flag.  This flag
- * basically controls whether the return PC should skip the first instruction
- * (as in an explicit system call) or re-execute it (as in an exception).
- */
-int
-cpu_sanitize_frame(struct trapframe *frame)
-{
-       frame->tf_cs = _ucodesel;
-       frame->tf_ds = _udatasel;
-       frame->tf_es = _udatasel;
-#if 0
-       frame->tf_fs = _udatasel;
-       frame->tf_gs = _udatasel;
-#endif
-       frame->tf_ss = _udatasel;
-       frame->tf_eflags &= (PSL_RF | PSL_USERCHANGE);
-       frame->tf_eflags |= PSL_RESERVED_DEFAULT | PSL_I;
-       return(0);
-}
-
-int
-cpu_sanitize_tls(struct savetls *tls)
-{
-        struct segment_descriptor *desc;
-        int i;
-
-        for (i = 0; i < NGTLS; ++i) {
-               desc = &tls->tls[i];
-               if (desc->sd_dpl == 0 && desc->sd_type == 0)
-                       continue;
-               if (desc->sd_def32 == 0)
-                       return(ENXIO);
-               if (desc->sd_type != SDT_MEMRWA)
-                       return(ENXIO);
-               if (desc->sd_dpl != SEL_UPL)
-                       return(ENXIO);
-               if (desc->sd_xx != 0 || desc->sd_p != 1)
-                       return(ENXIO);
-        }
-        return(0);
-}
-
-/*
- * sigreturn(ucontext_t *sigcntxp)
- *
- * System call to cleanup state after a signal
- * has been taken.  Reset signal mask and
- * stack state from context left by sendsig (above).
- * Return to previous pc and psl as specified by
- * context left by sendsig. Check carefully to
- * make sure that the user has not modified the
- * state to gain improper privileges.
- *
- * MPSAFE
- */
-#define        EFL_SECURE(ef, oef)     ((((ef) ^ (oef)) & ~PSL_USERCHANGE) == 0)
-#define        CS_SECURE(cs)           (ISPL(cs) == SEL_UPL)
-
-int
-sys_sigreturn(struct sigreturn_args *uap)
-{
-       struct lwp *lp = curthread->td_lwp;
-       struct trapframe *regs;
-       ucontext_t ucp;
-       int cs;
-       int eflags;
-       int error;
-
-       error = copyin(uap->sigcntxp, &ucp, sizeof(ucp));
-       if (error)
-               return (error);
-
-       regs = lp->lwp_md.md_regs;
-       eflags = ucp.uc_mcontext.mc_eflags;
-
-#if 0
-       if (eflags & PSL_VM) {
-               struct trapframe_vm86 *tf = (struct trapframe_vm86 *)regs;
-               struct vm86_kernel *vm86;
-
-               /*
-                * if pcb_ext == 0 or vm86_inited == 0, the user hasn't
-                * set up the vm86 area, and we can't enter vm86 mode.
-                */
-               if (lp->lwp_thread->td_pcb->pcb_ext == 0)
-                       return (EINVAL);
-               vm86 = &lp->lwp_thread->td_pcb->pcb_ext->ext_vm86;
-               if (vm86->vm86_inited == 0)
-                       return (EINVAL);
-
-               /* go back to user mode if both flags are set */
-               if ((eflags & PSL_VIP) && (eflags & PSL_VIF))
-                       trapsignal(lp->lwp_proc, SIGBUS, 0);
-
-               if (vm86->vm86_has_vme) {
-                       eflags = (tf->tf_eflags & ~VME_USERCHANGE) |
-                           (eflags & VME_USERCHANGE) | PSL_VM;
-               } else {
-                       vm86->vm86_eflags = eflags;     /* save VIF, VIP */
-                       eflags = (tf->tf_eflags & ~VM_USERCHANGE) |                                         (eflags & VM_USERCHANGE) | PSL_VM;
-               }
-               bcopy(&ucp.uc_mcontext.mc_gs, tf, sizeof(struct trapframe));
-               tf->tf_eflags = eflags;
-               tf->tf_vm86_ds = tf->tf_ds;
-               tf->tf_vm86_es = tf->tf_es;
-               tf->tf_vm86_fs = tf->tf_fs;
-               tf->tf_vm86_gs = tf->tf_gs;
-               tf->tf_ds = _udatasel;
-               tf->tf_es = _udatasel;
-#if 0
-               tf->tf_fs = _udatasel;
-               tf->tf_gs = _udatasel;
-#endif
-       } else 
-#endif
-       {
-               /*
-                * Don't allow users to change privileged or reserved flags.
-                */
-               /*
-                * XXX do allow users to change the privileged flag PSL_RF.
-                * The cpu sets PSL_RF in tf_eflags for faults.  Debuggers
-                * should sometimes set it there too.  tf_eflags is kept in
-                * the signal context during signal handling and there is no
-                * other place to remember it, so the PSL_RF bit may be
-                * corrupted by the signal handler without us knowing.
-                * Corruption of the PSL_RF bit at worst causes one more or
-                * one less debugger trap, so allowing it is fairly harmless.
-                */
-               if (!EFL_SECURE(eflags & ~PSL_RF, regs->tf_eflags & ~PSL_RF)) {
-                       kprintf("sigreturn: eflags = 0x%x\n", eflags);
-                       return(EINVAL);
-               }
-
-               /*
-                * Don't allow users to load a valid privileged %cs.  Let the
-                * hardware check for invalid selectors, excess privilege in
-                * other selectors, invalid %eip's and invalid %esp's.
-                */
-               cs = ucp.uc_mcontext.mc_cs;
-               if (!CS_SECURE(cs)) {
-                       kprintf("sigreturn: cs = 0x%x\n", cs);
-                       trapsignal(lp, SIGBUS, T_PROTFLT);
-                       return(EINVAL);
-               }
-               bcopy(&ucp.uc_mcontext.mc_gs, regs, sizeof(struct trapframe));
-       }
-
-       /*
-        * Restore the FPU state from the frame
-        */
-       crit_enter();
-       npxpop(&ucp.uc_mcontext);
-
-       if (ucp.uc_mcontext.mc_onstack & 1)
-               lp->lwp_sigstk.ss_flags |= SS_ONSTACK;
-       else
-               lp->lwp_sigstk.ss_flags &= ~SS_ONSTACK;
-
-       lp->lwp_sigmask = ucp.uc_sigmask;
-       SIG_CANTMASK(lp->lwp_sigmask);
-       crit_exit();
-       return(EJUSTRETURN);
-}
-
-/*
- * cpu_idle() represents the idle LWKT.  You cannot return from this function
- * (unless you want to blow things up!).  Instead we look for runnable threads
- * and loop or halt as appropriate.  Giant is not held on entry to the thread.
- *
- * The main loop is entered with a critical section held, we must release
- * the critical section before doing anything else.  lwkt_switch() will
- * check for pending interrupts due to entering and exiting its own 
- * critical section.
- *
- * Note on cpu_idle_hlt:  On an SMP system we rely on a scheduler IPI
- * to wake a HLTed cpu up.
- */
-static int     cpu_idle_hlt = 1;
-static int     cpu_idle_hltcnt;
-static int     cpu_idle_spincnt;
-SYSCTL_INT(_machdep, OID_AUTO, cpu_idle_hlt, CTLFLAG_RW,
-    &cpu_idle_hlt, 0, "Idle loop HLT enable");
-SYSCTL_INT(_machdep, OID_AUTO, cpu_idle_hltcnt, CTLFLAG_RW,
-    &cpu_idle_hltcnt, 0, "Idle loop entry halts");
-SYSCTL_INT(_machdep, OID_AUTO, cpu_idle_spincnt, CTLFLAG_RW,
-    &cpu_idle_spincnt, 0, "Idle loop entry spins");
-
-void
-cpu_idle(void)
-{
-       struct thread *td = curthread;
-       struct mdglobaldata *gd = mdcpu;
-       int reqflags;
-
-       crit_exit();
-       KKASSERT(td->td_critcount == 0);
-       cpu_enable_intr();
-       for (;;) {
-               /*
-                * See if there are any LWKTs ready to go.
-                */
-               lwkt_switch();
-
-               /*
-                * The idle loop halts only if no threads are scheduleable
-                * and no signals have occured.
-                */
-               if (cpu_idle_hlt &&
-                   (td->td_gd->gd_reqflags & RQF_IDLECHECK_WK_MASK) == 0) {
-                       splz();
-                       KKASSERT(MP_LOCK_HELD() == 0);
-                       if ((td->td_gd->gd_reqflags & RQF_IDLECHECK_WK_MASK) == 0) {
-#ifdef DEBUGIDLE
-                               struct timeval tv1, tv2;
-                               gettimeofday(&tv1, NULL);
-#endif
-                               reqflags = gd->mi.gd_reqflags &
-                                          ~RQF_IDLECHECK_WK_MASK;
-                               umtx_sleep(&gd->mi.gd_reqflags, reqflags,
-                                          1000000);
-#ifdef DEBUGIDLE
-                               gettimeofday(&tv2, NULL);
-                               if (tv2.tv_usec - tv1.tv_usec +
-                                   (tv2.tv_sec - tv1.tv_sec) * 1000000 
-                                   > 500000) {
-                                       kprintf("cpu %d idlelock %08x %08x\n",
-                                               gd->mi.gd_cpuid,
-                                               gd->mi.gd_reqflags,
-                                               gd->gd_fpending);
-                               }
-#endif
-                       }
-                       ++cpu_idle_hltcnt;
-               } else {
-                       splz();
-                       __asm __volatile("pause");
-                       ++cpu_idle_spincnt;
-               }
-       }
-}
-
-/*
- * Called by the spinlock code with or without a critical section held
- * when a spinlock is found to be seriously constested.
- *
- * We need to enter a critical section to prevent signals from recursing
- * into pthreads.
- */
-void
-cpu_spinlock_contested(void)
-{
-       cpu_pause();
-}
-
-/*
- * Clear registers on exec
- */
-void
-exec_setregs(u_long entry, u_long stack, u_long ps_strings)
-{
-       struct thread *td = curthread;
-       struct lwp *lp = td->td_lwp;
-       struct trapframe *regs = lp->lwp_md.md_regs;
-       struct pcb *pcb = lp->lwp_thread->td_pcb;
-
-       /* was i386_user_cleanup() in NetBSD */
-       user_ldt_free(pcb);
-  
-       bzero((char *)regs, sizeof(struct trapframe));
-       regs->tf_eip = entry;
-       regs->tf_esp = stack;
-       regs->tf_eflags = PSL_USER | (regs->tf_eflags & PSL_T);
-       regs->tf_ss = 0;
-       regs->tf_ds = 0;
-       regs->tf_es = 0;
-       regs->tf_fs = 0;
-       regs->tf_gs = 0;
-       regs->tf_cs = 0;
-
-       /* PS_STRINGS value for BSD/OS binaries.  It is 0 for non-BSD/OS. */
-       regs->tf_ebx = ps_strings;
-
-        /*
-         * Reset the hardware debug registers if they were in use.
-         * They won't have any meaning for the newly exec'd process.  
-         */
-        if (pcb->pcb_flags & PCB_DBREGS) {
-                pcb->pcb_dr0 = 0;
-                pcb->pcb_dr1 = 0;
-                pcb->pcb_dr2 = 0;
-                pcb->pcb_dr3 = 0;
-                pcb->pcb_dr6 = 0;
-                pcb->pcb_dr7 = 0;
-                if (pcb == td->td_pcb) {
-                       /*
-                        * Clear the debug registers on the running
-                        * CPU, otherwise they will end up affecting
-                        * the next process we switch to.
-                        */
-                       reset_dbregs();
-                }
-                pcb->pcb_flags &= ~PCB_DBREGS;
-        }
-
-       /*
-        * Initialize the math emulator (if any) for the current process.
-        * Actually, just clear the bit that says that the emulator has
-        * been initialized.  Initialization is delayed until the process
-        * traps to the emulator (if it is done at all) mainly because
-        * emulators don't provide an entry point for initialization.
-        */
-       pcb->pcb_flags &= ~FP_SOFTFP;
-
-       /*
-        * note: do not set CR0_TS here.  npxinit() must do it after clearing
-        * gd_npxthread.  Otherwise a preemptive interrupt thread may panic
-        * in npxdna().
-        */
-       crit_enter();
-#if 0
-       load_cr0(rcr0() | CR0_MP);
-#endif
-
-#if NNPX > 0
-       /* Initialize the npx (if any) for the current process. */
-       npxinit();
-#endif
-       crit_exit();
-
-       /*
-        * note: linux emulator needs edx to be 0x0 on entry, which is
-        * handled in execve simply by setting the 64 bit syscall
-        * return value to 0.
-        */
-}
-
-void
-cpu_setregs(void)
-{
-#if 0
-       unsigned int cr0;
-
-       cr0 = rcr0();
-       cr0 |= CR0_NE;                  /* Done by npxinit() */
-       cr0 |= CR0_MP | CR0_TS;         /* Done at every execve() too. */
-       cr0 |= CR0_WP | CR0_AM;
-       load_cr0(cr0);
-       load_gs(_udatasel);
-#endif
-}
-
-static int
-sysctl_machdep_adjkerntz(SYSCTL_HANDLER_ARGS)
-{
-       int error;
-       error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2,
-               req);
-       if (!error && req->newptr)
-               resettodr();
-       return (error);
-}
-
-SYSCTL_PROC(_machdep, CPU_ADJKERNTZ, adjkerntz, CTLTYPE_INT|CTLFLAG_RW,
-       &adjkerntz, 0, sysctl_machdep_adjkerntz, "I", "");
-
-extern u_long bootdev;         /* not a cdev_t - encoding is different */
-SYSCTL_ULONG(_machdep, OID_AUTO, guessed_bootdev,
-       CTLFLAG_RD, &bootdev, 0, "Boot device (not in cdev_t format)");
-
-/*
- * Initialize 386 and configure to run kernel
- */
-
-/*
- * Initialize segments & interrupt table
- */
-
-extern  struct user *proc0paddr;
-
-#if 0
-
-extern inthand_t
-       IDTVEC(div), IDTVEC(dbg), IDTVEC(nmi), IDTVEC(bpt), IDTVEC(ofl),
-       IDTVEC(bnd), IDTVEC(ill), IDTVEC(dna), IDTVEC(fpusegm),
-       IDTVEC(tss), IDTVEC(missing), IDTVEC(stk), IDTVEC(prot),
-       IDTVEC(page), IDTVEC(mchk), IDTVEC(fpu), IDTVEC(align),
-       IDTVEC(xmm), IDTVEC(syscall),
-       IDTVEC(rsvd0);
-extern inthand_t
-       IDTVEC(int0x80_syscall);
-
-#endif
-
-#ifdef DEBUG_INTERRUPTS
-extern inthand_t *Xrsvdary[256];
-#endif
-
-int
-ptrace_set_pc(struct lwp *lp, unsigned long addr)
-{
-       lp->lwp_md.md_regs->tf_eip = addr;
-       return (0);
-}
-
-int
-ptrace_single_step(struct lwp *lp)
-{
-       lp->lwp_md.md_regs->tf_eflags |= PSL_T;
-       return (0);
-}
-
-int
-fill_regs(struct lwp *lp, struct reg *regs)
-{
-       struct trapframe *tp;
-
-       if ((tp = lp->lwp_md.md_regs) == NULL)
-               return EINVAL;
-       regs->r_gs = tp->tf_gs;
-       regs->r_fs = tp->tf_fs;
-       regs->r_es = tp->tf_es;
-       regs->r_ds = tp->tf_ds;
-       regs->r_edi = tp->tf_edi;
-       regs->r_esi = tp->tf_esi;
-       regs->r_ebp = tp->tf_ebp;
-       regs->r_ebx = tp->tf_ebx;
-       regs->r_edx = tp->tf_edx;
-       regs->r_ecx = tp->tf_ecx;
-       regs->r_eax = tp->tf_eax;
-       regs->r_eip = tp->tf_eip;
-       regs->r_cs = tp->tf_cs;
-       regs->r_eflags = tp->tf_eflags;
-       regs->r_esp = tp->tf_esp;
-       regs->r_ss = tp->tf_ss;
-       return (0);
-}
-
-int
-set_regs(struct lwp *lp, struct reg *regs)
-{
-       struct trapframe *tp;
-
-       tp = lp->lwp_md.md_regs;
-       if (!EFL_SECURE(regs->r_eflags, tp->tf_eflags) ||
-           !CS_SECURE(regs->r_cs))
-               return (EINVAL);
-       tp->tf_gs = regs->r_gs;
-       tp->tf_fs = regs->r_fs;
-       tp->tf_es = regs->r_es;
-       tp->tf_ds = regs->r_ds;
-       tp->tf_edi = regs->r_edi;
-       tp->tf_esi = regs->r_esi;
-       tp->tf_ebp = regs->r_ebp;
-       tp->tf_ebx = regs->r_ebx;
-       tp->tf_edx = regs->r_edx;
-       tp->tf_ecx = regs->r_ecx;
-       tp->tf_eax = regs->r_eax;
-       tp->tf_eip = regs->r_eip;
-       tp->tf_cs = regs->r_cs;
-       tp->tf_eflags = regs->r_eflags;
-       tp->tf_esp = regs->r_esp;
-       tp->tf_ss = regs->r_ss;
-       return (0);
-}
-
-#ifndef CPU_DISABLE_SSE
-static void
-fill_fpregs_xmm(struct savexmm *sv_xmm, struct save87 *sv_87)
-{
-       struct env87 *penv_87 = &sv_87->sv_env;
-       struct envxmm *penv_xmm = &sv_xmm->sv_env;
-       int i;
-
-       /* FPU control/status */
-       penv_87->en_cw = penv_xmm->en_cw;
-       penv_87->en_sw = penv_xmm->en_sw;
-       penv_87->en_tw = penv_xmm->en_tw;
-       penv_87->en_fip = penv_xmm->en_fip;
-       penv_87->en_fcs = penv_xmm->en_fcs;
-       penv_87->en_opcode = penv_xmm->en_opcode;
-       penv_87->en_foo = penv_xmm->en_foo;
-       penv_87->en_fos = penv_xmm->en_fos;
-
-       /* FPU registers */
-       for (i = 0; i < 8; ++i)
-               sv_87->sv_ac[i] = sv_xmm->sv_fp[i].fp_acc;
-}
-
-static void
-set_fpregs_xmm(struct save87 *sv_87, struct savexmm *sv_xmm)
-{
-       struct env87 *penv_87 = &sv_87->sv_env;
-       struct envxmm *penv_xmm = &sv_xmm->sv_env;
-       int i;
-
-       /* FPU control/status */
-       penv_xmm->en_cw = penv_87->en_cw;
-       penv_xmm->en_sw = penv_87->en_sw;
-       penv_xmm->en_tw = penv_87->en_tw;
-       penv_xmm->en_fip = penv_87->en_fip;
-       penv_xmm->en_fcs = penv_87->en_fcs;
-       penv_xmm->en_opcode = penv_87->en_opcode;
-       penv_xmm->en_foo = penv_87->en_foo;
-       penv_xmm->en_fos = penv_87->en_fos;
-
-       /* FPU registers */
-       for (i = 0; i < 8; ++i)
-               sv_xmm->sv_fp[i].fp_acc = sv_87->sv_ac[i];
-}
-#endif /* CPU_DISABLE_SSE */
-
-int
-fill_fpregs(struct lwp *lp, struct fpreg *fpregs)
-{
-       if (lp->lwp_thread == NULL || lp->lwp_thread->td_pcb == NULL)
-               return EINVAL;
-#ifndef CPU_DISABLE_SSE
-       if (cpu_fxsr) {
-               fill_fpregs_xmm(&lp->lwp_thread->td_pcb->pcb_save.sv_xmm,
-                               (struct save87 *)fpregs);
-               return (0);
-       }
-#endif /* CPU_DISABLE_SSE */
-       bcopy(&lp->lwp_thread->td_pcb->pcb_save.sv_87, fpregs, sizeof *fpregs);
-       return (0);
-}
-
-int
-set_fpregs(struct lwp *lp, struct fpreg *fpregs)
-{
-#ifndef CPU_DISABLE_SSE
-       if (cpu_fxsr) {
-               set_fpregs_xmm((struct save87 *)fpregs,
-                              &lp->lwp_thread->td_pcb->pcb_save.sv_xmm);
-               return (0);
-       }
-#endif /* CPU_DISABLE_SSE */
-       bcopy(fpregs, &lp->lwp_thread->td_pcb->pcb_save.sv_87, sizeof *fpregs);
-       return (0);
-}
-
-int
-fill_dbregs(struct lwp *lp, struct dbreg *dbregs)
-{
-       return (ENOSYS);
-}
-
-int
-set_dbregs(struct lwp *lp, struct dbreg *dbregs)
-{
-       return (ENOSYS);
-}
-
-#if 0
-/*
- * Return > 0 if a hardware breakpoint has been hit, and the
- * breakpoint was in user space.  Return 0, otherwise.
- */
-int
-user_dbreg_trap(void)
-{
-        u_int32_t dr7, dr6; /* debug registers dr6 and dr7 */
-        u_int32_t bp;       /* breakpoint bits extracted from dr6 */
-        int nbp;            /* number of breakpoints that triggered */
-        caddr_t addr[4];    /* breakpoint addresses */
-        int i;
-        
-        dr7 = rdr7();
-        if ((dr7 & 0x000000ff) == 0) {
-                /*
-                 * all GE and LE bits in the dr7 register are zero,
-                 * thus the trap couldn't have been caused by the
-                 * hardware debug registers
-                 */
-                return 0;
-        }
-
-        nbp = 0;
-        dr6 = rdr6();
-        bp = dr6 & 0x0000000f;
-
-        if (!bp) {
-                /*
-                 * None of the breakpoint bits are set meaning this
-                 * trap was not caused by any of the debug registers
-                 */
-                return 0;
-        }
-
-        /*
-         * at least one of the breakpoints were hit, check to see
-         * which ones and if any of them are user space addresses
-         */
-
-        if (bp & 0x01) {
-                addr[nbp++] = (caddr_t)rdr0();
-        }
-        if (bp & 0x02) {
-                addr[nbp++] = (caddr_t)rdr1();
-        }
-        if (bp & 0x04) {
-                addr[nbp++] = (caddr_t)rdr2();
-        }
-        if (bp & 0x08) {
-                addr[nbp++] = (caddr_t)rdr3();
-        }
-
-        for (i=0; i<nbp; i++) {
-                if (addr[i] <
-                    (caddr_t)VM_MAX_USER_ADDRESS) {
-                        /*
-                         * addr[i] is in user space
-                         */
-                        return nbp;
-                }
-        }
-
-        /*
-         * None of the breakpoints are in user space.
-         */
-        return 0;
-}
-
-#endif
-
-void
-identcpu(void)
-{
-       int regs[4];
-
-       do_cpuid(1, regs);
-       cpu_feature = regs[3];
-}
-
-
-#ifndef DDB
-void
-Debugger(const char *msg)
-{
-       kprintf("Debugger(\"%s\") called.\n", msg);
-}
-#endif /* no DDB */
-
diff --git a/sys/platform/vkernel/i386/db_interface.c b/sys/platform/vkernel/i386/db_interface.c
deleted file mode 100644 (file)
index 7c3118f..0000000
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- *
- * $FreeBSD: src/sys/i386/i386/db_interface.c,v 1.48.2.1 2000/07/07 00:38:46 obrien Exp $
- */
-
-/*
- * Interface to new debugger.
- */
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/reboot.h>
-#include <sys/cons.h>
-#include <sys/vkernel.h>
-#include <sys/thread.h>
-
-#include <machine/cpu.h>
-#include <machine/smp.h>
-#include <machine/globaldata.h>
-#include <machine/md_var.h>
-
-#include <vm/vm.h>
-#include <vm/pmap.h>
-
-#include <sys/thread2.h>
-
-#include <ddb/ddb.h>
-
-#include <setjmp.h>
-
-static jmp_buf *db_nofault = NULL;
-extern jmp_buf db_jmpbuf;
-
-extern void    gdb_handle_exception (db_regs_t *, int, int);
-
-int    db_active;
-db_regs_t ddb_regs;
-
-static jmp_buf db_global_jmpbuf;
-static int     db_global_jmpbuf_valid;
-
-#ifdef __GNUC__
-#define        rss() ({u_short ss; __asm __volatile("mov %%ss,%0" : "=r" (ss)); ss;})
-#endif
-
-/*
- *  kdb_trap - field a TRACE or BPT trap
- */
-int
-kdb_trap(int type, int code, struct i386_saved_state *regs)
-{
-       volatile int ddb_mode = !(boothowto & RB_GDB);
-
-       /*
-        * XXX try to do nothing if the console is in graphics mode.
-        * Handle trace traps (and hardware breakpoints...) by ignoring
-        * them except for forgetting about them.  Return 0 for other
-        * traps to say that we haven't done anything.  The trap handler
-        * will usually panic.  We should handle breakpoint traps for
-        * our breakpoints by disarming our breakpoints and fixing up
-        * %eip.
-        */
-       if (cons_unavail && ddb_mode) {
-           if (type == T_TRCTRAP) {
-               regs->tf_eflags &= ~PSL_T;
-               return (1);
-           }
-           return (0);
-       }
-
-       switch (type) {
-           case T_BPTFLT:      /* breakpoint */
-           case T_TRCTRAP:     /* debug exception */
-               break;
-
-           default:
-               /*
-                * XXX this is almost useless now.  In most cases,
-                * trap_fatal() has already printed a much more verbose
-                * message.  However, it is dangerous to print things in
-                * trap_fatal() - kprintf() might be reentered and trap.
-                * The debugger should be given control first.
-                */
-               if (ddb_mode)
-                   db_printf("kernel: type %d trap, code=%x\n", type, code);
-
-               if (db_nofault) {
-                   jmp_buf *no_fault = db_nofault;
-                   db_nofault = NULL;
-                   longjmp(*no_fault, 1);
-               }
-       }
-
-       /*
-        * This handles unexpected traps in ddb commands, including calls to
-        * non-ddb functions.  db_nofault only applies to memory accesses by
-        * internal ddb commands.
-        */
-       if (db_global_jmpbuf_valid)
-           longjmp(db_global_jmpbuf, 1);
-
-       /*
-        * XXX We really should switch to a local stack here.
-        */
-       ddb_regs = *regs;
-
-       /*
-        * If in kernel mode, esp and ss are not saved, so dummy them up.
-        */
-       if (ISPL(regs->tf_cs) == 0) {
-           ddb_regs.tf_esp = (int)&regs->tf_esp;
-           ddb_regs.tf_ss = rss();
-       }
-
-       crit_enter();
-       db_printf("\nCPU%d stopping CPUs: 0x%08x\n", 
-           mycpu->gd_cpuid, mycpu->gd_other_cpus);
-
-       /* We stop all CPUs except ourselves (obviously) */
-       stop_cpus(mycpu->gd_other_cpus);
-
-       db_printf(" stopped\n");
-
-       setjmp(db_global_jmpbuf);
-       db_global_jmpbuf_valid = TRUE;
-       db_active++;
-       vcons_set_mode(1);
-       if (ddb_mode) {
-           cndbctl(TRUE);
-           db_trap(type, code);
-           cndbctl(FALSE);
-       } else
-           gdb_handle_exception(&ddb_regs, type, code);
-       db_active--;
-       vcons_set_mode(0);
-       db_global_jmpbuf_valid = FALSE;
-
-       db_printf("\nCPU%d restarting CPUs: 0x%016jx\n",
-           mycpu->gd_cpuid, (uintmax_t)stopped_cpus);
-
-       /* Restart all the CPUs we previously stopped */
-       if (stopped_cpus != mycpu->gd_other_cpus) {
-               db_printf("whoa, other_cpus: 0x%08x, stopped_cpus: 0x%016jx\n",
-                         mycpu->gd_other_cpus, (uintmax_t)stopped_cpus);
-               panic("stop_cpus() failed");
-       }
-       restart_cpus(stopped_cpus);
-
-       db_printf(" restarted\n");
-       crit_exit();
-
-       regs->tf_eip    = ddb_regs.tf_eip;
-       regs->tf_eflags = ddb_regs.tf_eflags;
-       regs->tf_eax    = ddb_regs.tf_eax;
-       regs->tf_ecx    = ddb_regs.tf_ecx;
-       regs->tf_edx    = ddb_regs.tf_edx;
-       regs->tf_ebx    = ddb_regs.tf_ebx;
-
-       /*
-        * If in user mode, the saved ESP and SS were valid, restore them.
-        */
-       if (ISPL(regs->tf_cs)) {
-           regs->tf_esp = ddb_regs.tf_esp;
-           regs->tf_ss  = ddb_regs.tf_ss & 0xffff;
-       }
-
-       regs->tf_ebp    = ddb_regs.tf_ebp;
-       regs->tf_esi    = ddb_regs.tf_esi;
-       regs->tf_edi    = ddb_regs.tf_edi;
-       regs->tf_es     = ddb_regs.tf_es & 0xffff;
-       regs->tf_fs     = ddb_regs.tf_fs & 0xffff;
-       regs->tf_gs     = ddb_regs.tf_gs & 0xffff;
-       regs->tf_cs     = ddb_regs.tf_cs & 0xffff;
-       regs->tf_ds     = ddb_regs.tf_ds & 0xffff;
-       return (1);
-}
-
-/*
- * Read bytes from kernel address space for debugger.
- */
-void
-db_read_bytes(vm_offset_t addr, size_t size, char *data)
-{
-       char    *src;
-
-       db_nofault = &db_jmpbuf;
-
-       src = (char *)addr;
-       while (size-- > 0)
-           *data++ = *src++;
-
-       db_nofault = NULL;
-}
-
-/*
- * Write bytes to kernel address space for debugger.
- */
-void
-db_write_bytes(vm_offset_t addr, size_t size, char *data)
-{
-       char    *dst;
-#if 0
-       vpte_t  *ptep0 = NULL;
-       vpte_t  oldmap0 = 0;
-       vm_offset_t     addr1;
-       vpte_t  *ptep1 = NULL;
-       vpte_t  oldmap1 = 0;
-#endif
-
-       db_nofault = &db_jmpbuf;
-#if 0
-       if (addr > trunc_page((vm_offset_t)btext) - size &&
-           addr < round_page((vm_offset_t)etext)) {
-
-           ptep0 = pmap_kpte(addr);
-           oldmap0 = *ptep0;
-           *ptep0 |= VPTE_RW;
-
-           /* Map another page if the data crosses a page boundary. */
-           if ((*ptep0 & PG_PS) == 0) {
-               addr1 = trunc_page(addr + size - 1);
-               if (trunc_page(addr) != addr1) {
-                   ptep1 = pmap_kpte(addr1);
-                   oldmap1 = *ptep1;
-                   *ptep1 |= VPTE_RW;
-               }
-           } else {
-               addr1 = trunc_4mpage(addr + size - 1);
-               if (trunc_4mpage(addr) != addr1) {
-                   ptep1 = pmap_kpte(addr1);
-                   oldmap1 = *ptep1;
-                   *ptep1 |= VPTE_RW;
-               }
-           }
-
-           cpu_invltlb();
-       }
-#endif
-
-       dst = (char *)addr;
-
-       while (size-- > 0)
-           *dst++ = *data++;
-
-       db_nofault = NULL;
-
-#if 0
-       if (ptep0) {
-           *ptep0 = oldmap0;
-
-           if (ptep1)
-               *ptep1 = oldmap1;
-
-           cpu_invltlb();
-       }
-#endif
-}
-
-/*
- * The debugger sometimes needs to know the actual KVM address represented
- * by the instruction pointer, stack pointer, or base pointer.  Normally
- * the actual KVM address is simply the contents of the register.  However,
- * if the debugger is entered from the BIOS or VM86 we need to figure out
- * the offset from the segment register.
- */
-db_addr_t
-PC_REGS(db_regs_t *regs)
-{
-    return(regs->tf_eip);
-}
-
-db_addr_t
-SP_REGS(db_regs_t *regs)
-{
-    return(regs->tf_esp);
-}
-
-db_addr_t
-BP_REGS(db_regs_t *regs)
-{
-    return(regs->tf_ebp);
-}
-
-/*
- * XXX
- * Move this to machdep.c and allow it to be called if any debugger is
- * installed.
- */
-void
-Debugger(const char *msg)
-{
-       static volatile u_char in_Debugger;
-
-       /*
-        * XXX
-        * Do nothing if the console is in graphics mode.  This is
-        * OK if the call is for the debugger hotkey but not if the call
-        * is a weak form of panicing.
-        */
-       if (cons_unavail && !(boothowto & RB_GDB))
-           return;
-
-       if (!in_Debugger) {
-           in_Debugger = 1;
-           db_printf("Debugger(\"%s\")\n", msg);
-           breakpoint();
-           in_Debugger = 0;
-       }
-}
diff --git a/sys/platform/vkernel/i386/db_trace.c b/sys/platform/vkernel/i386/db_trace.c
deleted file mode 100644 (file)
index 8501d0f..0000000
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- *
- * $FreeBSD: src/sys/i386/i386/db_trace.c,v 1.35.2.3 2002/02/21 22:31:25 silby Exp $
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/linker_set.h>
-#include <sys/lock.h>
-#include <sys/proc.h>
-#include <sys/reg.h>
-
-#include <machine/cpu.h>
-#include <machine/md_var.h>
-
-#include <vm/vm.h>
-#include <vm/vm_param.h>
-#include <vm/pmap.h>
-#include <vm/vm_map.h>
-#include <ddb/ddb.h>
-#include <dlfcn.h>     /* DLL */
-
-#include <sys/user.h>
-
-#include <ddb/db_access.h>
-#include <ddb/db_sym.h>
-#include <ddb/db_variables.h>
-
-static int db_dr(struct db_variable *vp, db_expr_t *valuep, int op);
-
-/*
- * Machine register set.
- */
-struct db_variable db_regs[] = {
-       { "cs",         &ddb_regs.tf_cs,     NULL },
-       { "ds",         &ddb_regs.tf_ds,     NULL },
-       { "es",         &ddb_regs.tf_es,     NULL },
-       { "fs",         &ddb_regs.tf_fs,     NULL },
-       { "gs",         &ddb_regs.tf_gs,     NULL },
-       { "ss",         &ddb_regs.tf_ss,     NULL },
-       { "eax",        &ddb_regs.tf_eax,    NULL },
-       { "ecx",        &ddb_regs.tf_ecx,    NULL },
-       { "edx",        &ddb_regs.tf_edx,    NULL },
-       { "ebx",        &ddb_regs.tf_ebx,    NULL },
-       { "esp",        &ddb_regs.tf_esp,    NULL },
-       { "ebp",        &ddb_regs.tf_ebp,    NULL },
-       { "esi",        &ddb_regs.tf_esi,    NULL },
-       { "edi",        &ddb_regs.tf_edi,    NULL },
-       { "eip",        &ddb_regs.tf_eip,    NULL },
-       { "efl",        &ddb_regs.tf_eflags, NULL },
-       { "dr0",        NULL,                db_dr },
-       { "dr1",        NULL,                db_dr },
-       { "dr2",        NULL,                db_dr },
-       { "dr3",        NULL,                db_dr },
-       { "dr4",        NULL,                db_dr },
-       { "dr5",        NULL,                db_dr },
-       { "dr6",        NULL,                db_dr },
-       { "dr7",        NULL,                db_dr },
-};
-struct db_variable *db_eregs = db_regs + NELEM(db_regs);
-
-/*
- * Stack trace.
- */
-#define        INKERNEL(va)    (((vm_offset_t)(va)) >= USRSTACK)
-
-struct i386_frame {
-       struct i386_frame       *f_frame;
-       int                     f_retaddr;
-       int                     f_arg0;
-};
-
-#define NORMAL         0
-#define        TRAP            1
-#define        INTERRUPT       2
-#define        SYSCALL         3
-
-static void    db_nextframe(struct i386_frame **, db_addr_t *);
-static int     db_numargs(struct i386_frame *);
-static void    db_print_stack_entry(const char *, int, char **, int *, db_addr_t);
-static void    dl_symbol_values(int callpc, const char **name);
-
-
-int            db_md_set_watchpoint(db_expr_t addr, db_expr_t size);
-int            db_md_clr_watchpoint(db_expr_t addr, db_expr_t size);
-void           db_md_list_watchpoints(void);
-
-
-/*
- * Figure out how many arguments were passed into the frame at "fp".
- */
-static int
-db_numargs(struct i386_frame *fp)
-{
-       int     args;
-#if 0
-       int     *argp;
-       int     inst;
-
-       argp = (int *)db_get_value((int)&fp->f_retaddr, 4, FALSE);
-       /*
-        * XXX etext is wrong for LKMs.  We should attempt to interpret
-        * the instruction at the return address in all cases.  This
-        * may require better fault handling.
-        */
-       if (argp < (int *)btext || argp >= (int *)etext) {
-               args = 5;
-       } else {
-               inst = db_get_value((int)argp, 4, FALSE);
-               if ((inst & 0xff) == 0x59)      /* popl %ecx */
-                       args = 1;
-               else if ((inst & 0xffff) == 0xc483)     /* addl $Ibs, %esp */
-                       args = ((inst >> 16) & 0xff) / 4;
-               else
-                       args = 5;
-       }
-#endif
-       args = 5;
-       return(args);
-}
-
-static void
-db_print_stack_entry(const char *name, int narg, char **argnp, int *argp,
-                    db_addr_t callpc)
-{
-       db_printf("%s(", name);
-       while (narg) {
-               if (argnp)
-                       db_printf("%s=", *argnp++);
-               db_printf("%r", db_get_value((int)argp, 4, FALSE));
-               argp++;
-               if (--narg != 0)
-                       db_printf(",");
-       }
-       db_printf(") at ");
-       db_printsym(callpc, DB_STGY_PROC);
-       db_printf("\n");
-}
-
-/*
- * Figure out the next frame up in the call stack.
- */
-static void
-db_nextframe(struct i386_frame **fp, db_addr_t *ip)
-{
-       struct trapframe *tf;
-       int frame_type;
-       int eip, esp, ebp;
-       db_expr_t offset;
-       const char *sym, *name;
-
-       eip = db_get_value((int) &(*fp)->f_retaddr, 4, FALSE);
-       ebp = db_get_value((int) &(*fp)->f_frame, 4, FALSE);
-
-       /*
-        * Figure out frame type.
-        */
-
-       frame_type = NORMAL;
-
-       sym = db_search_symbol(eip, DB_STGY_ANY, &offset);
-       db_symbol_values(sym, &name, NULL);
-       dl_symbol_values(eip, &name);
-       if (name != NULL) {
-               if (!strcmp(name, "calltrap")) {
-                       frame_type = TRAP;
-               } else if (!strncmp(name, "Xresume", 7)) {
-                       frame_type = INTERRUPT;
-               } else if (!strcmp(name, "_Xsyscall")) {
-                       frame_type = SYSCALL;
-               }
-       }
-
-       /*
-        * Normal frames need no special processing.
-        */
-       if (frame_type == NORMAL) {
-               *ip = (db_addr_t) eip;
-               *fp = (struct i386_frame *) ebp;
-               return;
-       }
-
-       db_print_stack_entry(name, 0, 0, 0, eip);
-
-       /*
-        * Point to base of trapframe which is just above the
-        * current frame.
-        */
-       tf = (struct trapframe *) ((int)*fp + 8);
-
-#if 0
-       esp = (ISPL(tf->tf_cs) == SEL_UPL) ?  tf->tf_esp : (int)&tf->tf_esp;
-#endif
-       esp = (int)&tf->tf_esp;
-
-       switch (frame_type) {
-       case TRAP:
-               {
-                       eip = tf->tf_eip;
-                       ebp = tf->tf_ebp;
-                       db_printf(
-                   "--- trap %#r, eip = %#r, esp = %#r, ebp = %#r ---\n",
-                           tf->tf_trapno, eip, esp, ebp);
-               }
-               break;
-       case SYSCALL:
-               {
-                       eip = tf->tf_eip;
-                       ebp = tf->tf_ebp;
-                       db_printf(
-                   "--- syscall %#r, eip = %#r, esp = %#r, ebp = %#r ---\n",
-                           tf->tf_eax, eip, esp, ebp);
-               }
-               break;
-       case INTERRUPT:
-               tf = (struct trapframe *)((int)*fp + 16);
-               {
-                       eip = tf->tf_eip;
-                       ebp = tf->tf_ebp;
-                       db_printf(
-                   "--- interrupt, eip = %#r, esp = %#r, ebp = %#r ---\n",
-                           eip, esp, ebp);
-               }
-               break;
-       default:
-               break;
-       }
-
-       *ip = (db_addr_t) eip;
-       *fp = (struct i386_frame *) ebp;
-}
-
-void
-db_stack_trace_cmd(db_expr_t addr, boolean_t have_addr, db_expr_t count,
-                  char *modif)
-{
-       struct i386_frame *frame;
-       int *argp;
-       db_addr_t callpc;
-       boolean_t first;
-       int i;
-
-       if (count == -1)
-               count = 1024;
-
-       if (!have_addr) {
-               frame = (struct i386_frame *)BP_REGS(&ddb_regs);
-               if (frame == NULL)
-                       frame = (struct i386_frame *)(SP_REGS(&ddb_regs) - 4);
-               callpc = PC_REGS(&ddb_regs);
-       } else {
-               /*
-                * Look for something that might be a frame pointer, just as
-                * a convenience.
-                */
-               frame = (struct i386_frame *)addr;
-               for (i = 0; i < 4096; i += 4) {
-                       struct i386_frame *check;
-
-                       check = (struct i386_frame *)db_get_value((int)((char *)&frame->f_frame + i), 4, FALSE);
-                       if ((char *)check - (char *)frame >= 0 &&
-                           (char *)check - (char *)frame < 4096
-                       ) {
-                               break;
-                       }
-                       db_printf("%p does not look like a stack frame, skipping\n", (char *)&frame->f_frame + i);
-               }
-               if (i == 4096) {
-                       db_printf("Unable to find anything that looks like a stack frame\n");
-                       return;
-               }
-               frame = (void *)((char *)frame + i);
-               db_printf("Trace beginning at frame %p\n", frame);
-               callpc = (db_addr_t)db_get_value((int)&frame->f_retaddr, 4, FALSE);
-       }
-
-       first = TRUE;
-       while (count--) {
-               struct i386_frame *actframe;
-               int             narg;
-               const char *    name;
-               db_expr_t       offset;
-               c_db_sym_t      sym;
-#define MAXNARG        16
-               char    *argnames[MAXNARG], **argnp = NULL;
-
-               sym = db_search_symbol(callpc, DB_STGY_ANY, &offset);
-               db_symbol_values(sym, &name, NULL);
-               dl_symbol_values(callpc, &name);
-
-               /*
-                * Attempt to determine a (possibly fake) frame that gives
-                * the caller's pc.  It may differ from `frame' if the
-                * current function never sets up a standard frame or hasn't
-                * set one up yet or has just discarded one.  The last two
-                * cases can be guessed fairly reliably for code generated
-                * by gcc.  The first case is too much trouble to handle in
-                * general because the amount of junk on the stack depends
-                * on the pc (the special handling of "calltrap", etc. in
-                * db_nextframe() works because the `next' pc is special).
-                */
-               actframe = frame;
-               if (first) {
-                       if (!have_addr) {
-                               int instr;
-
-                               instr = db_get_value(callpc, 4, FALSE);
-                               if ((instr & 0x00ffffff) == 0x00e58955) {
-                                       /* pushl %ebp; movl %esp, %ebp */
-                                       actframe = (struct i386_frame *)
-                                           (SP_REGS(&ddb_regs) - 4);
-                               } else if ((instr & 0x0000ffff) == 0x0000e589) {
-                                       /* movl %esp, %ebp */
-                                       actframe = (struct i386_frame *)
-                                           SP_REGS(&ddb_regs);
-                                       if (ddb_regs.tf_ebp == 0) {
-                                               /* Fake caller's frame better. */
-                                               frame = actframe;
-                                       }
-                               } else if ((instr & 0x000000ff) == 0x000000c3) {
-                                       /* ret */
-                                       actframe = (struct i386_frame *)
-                                           (SP_REGS(&ddb_regs) - 4);
-                               } else if (offset == 0) {
-                                       /* Probably a symbol in assembler code. */
-                                       actframe = (struct i386_frame *)
-                                           (SP_REGS(&ddb_regs) - 4);
-                               }
-                       } else if (name != NULL &&
-                                  strcmp(name, "fork_trampoline") == 0) {
-                               /*
-                                * Don't try to walk back on a stack for a
-                                * process that hasn't actually been run yet.
-                                */
-                               db_print_stack_entry(name, 0, 0, 0, callpc);
-                               break;
-                       }
-                       first = FALSE;
-               }
-
-               argp = &actframe->f_arg0;
-               narg = MAXNARG;
-               if (sym != NULL && db_sym_numargs(sym, &narg, argnames)) {
-                       argnp = argnames;
-               } else {
-                       narg = db_numargs(frame);
-               }
-
-               db_print_stack_entry(name, narg, argnp, argp, callpc);
-
-               if (actframe != frame) {
-                       /* `frame' belongs to caller. */
-                       callpc = (db_addr_t)
-                           db_get_value((int)&actframe->f_retaddr, 4, FALSE);
-                       continue;
-               }
-
-               db_nextframe(&frame, &callpc);
-               if (frame == NULL)
-                       break;
-       }
-}
-
-void
-print_backtrace(int count)
-{
-       register_t  ebp;
-
-       __asm __volatile("movl %%ebp, %0" : "=r" (ebp));
-       db_stack_trace_cmd(ebp, 1, count, NULL);
-}
-
-static int
-db_dr(struct db_variable *vp, db_expr_t *valuep, int op)
-{
-       if (op == DB_VAR_GET)
-               *valuep = 0;
-       return(-1);
-}
-
-int
-db_md_set_watchpoint(db_expr_t addr, db_expr_t size)
-{
-       return(-1);
-}
-
-int
-db_md_clr_watchpoint(db_expr_t addr, db_expr_t size)
-{
-       return(-1);
-}
-
-void
-db_md_list_watchpoints(void)
-{
-       /* no hardware watchpoints in vkernel */
-}
-
-/*
- * See if dladdr() can get the symbol name via the standard dynamic loader.
- */
-static
-void
-dl_symbol_values(int callpc, const char **name)
-{
-       Dl_info info;
-
-       if (*name == NULL) {
-               if (dladdr((const void *)callpc, &info) != 0) {
-                       if (info.dli_saddr <= (const void *)callpc)
-                               *name = info.dli_sname;
-               }
-       }
-}
-
diff --git a/sys/platform/vkernel/i386/exception.c b/sys/platform/vkernel/i386/exception.c
deleted file mode 100644 (file)
index 54994c0..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-
-/*
- * Copyright (c) 2006 The DragonFly Project.  All rights reserved.
- * 
- * This code is derived from software contributed to The DragonFly Project
- * by Matthew Dillon <dillon@backplane.com>
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include "opt_ddb.h"
-#include <sys/types.h>
-#include <sys/systm.h>
-#include <sys/reboot.h>
-#include <sys/kernel.h>
-#include <sys/kthread.h>
-#include <ddb/ddb.h>
-
-#include <sys/thread2.h>
-
-#include <machine/trap.h>
-#include <machine/md_var.h>
-#include <machine/segments.h>
-#include <machine/cpu.h>
-#include <machine/smp.h>
-
-#include <err.h>
-#include <signal.h>
-#include <stdio.h>
-#include <unistd.h>
-
-int _ucodesel = LSEL(LUCODE_SEL, SEL_UPL);
-int _udatasel = LSEL(LUDATA_SEL, SEL_UPL);
-
-static void exc_segfault(int signo, siginfo_t *info, void *ctx);
-#ifdef DDB
-static void exc_debugger(int signo, siginfo_t *info, void *ctx);
-#endif
-
-/*
- * IPIs are 'fast' interrupts, so we deal with them directly from our
- * signal handler.
- *
- * WARNING: Signals are not physically disabled here so we have to enter
- * our critical section before bumping gd_intr_nesting_level or another
- * interrupt can come along and get really confused.
- */
-static
-void
-ipisig(int nada, siginfo_t *info, void *ctxp)
-{
-       if (curthread->td_critcount == 0) {
-               ++curthread->td_critcount;
-               ++mycpu->gd_intr_nesting_level;
-               lwkt_process_ipiq();
-               --mycpu->gd_intr_nesting_level;
-               --curthread->td_critcount;
-       } else {
-               need_ipiq();
-       }
-}
-
-/*
- * Unconditionally stop or restart a cpu.
- *
- * Note: cpu_mask_all_signals() masks all signals except SIGXCPU itself.
- * SIGXCPU itself is blocked on entry to stopsig() by the signal handler
- * itself.
- *
- * WARNING: Signals are not physically disabled here so we have to enter
- * our critical section before bumping gd_intr_nesting_level or another
- * interrupt can come along and get really confused.
- */
-static
-void
-stopsig(int nada, siginfo_t *info, void *ctxp)
-{
-       sigset_t ss;
-
-       sigemptyset(&ss);
-       sigaddset(&ss, SIGALRM);
-       sigaddset(&ss, SIGIO);
-       sigaddset(&ss, SIGQUIT);
-       sigaddset(&ss, SIGUSR1);
-       sigaddset(&ss, SIGUSR2);
-       sigaddset(&ss, SIGTERM);
-       sigaddset(&ss, SIGWINCH);
-
-       ++curthread->td_critcount;
-       ++mycpu->gd_intr_nesting_level;
-       while (CPUMASK_TESTMASK(stopped_cpus, mycpu->gd_cpumask)) {
-               sigsuspend(&ss);
-       }
-       --mycpu->gd_intr_nesting_level;
-       --curthread->td_critcount;
-}
-
-#if 0
-
-/*
- * SIGIO is used by cothreads to signal back into the virtual kernel.
- */
-static
-void
-iosig(int nada, siginfo_t *info, void *ctxp)
-{
-       signalintr(4);
-}
-
-#endif
-
-static
-void
-infosig(int nada, siginfo_t *info, void *ctxp)
-{
-       ucontext_t *ctx = ctxp;
-       char buf[256];
-
-       snprintf(buf, sizeof(buf), "lwp %d pc=%p sp=%p\n",
-               (int)lwp_gettid(),
-               (void *)(intptr_t)ctx->uc_mcontext.mc_eip,
-               (void *)(intptr_t)ctx->uc_mcontext.mc_esp);
-       write(2, buf, strlen(buf));
-}
-
-void
-init_exceptions(void)
-{
-       struct sigaction sa;
-
-       bzero(&sa, sizeof(sa));
-       sa.sa_sigaction = exc_segfault;
-       sa.sa_flags |= SA_SIGINFO | SA_NODEFER;
-       sigemptyset(&sa.sa_mask);
-       sigaction(SIGBUS, &sa, NULL);
-       sigaction(SIGSEGV, &sa, NULL);
-       sigaction(SIGTRAP, &sa, NULL);
-       sigaction(SIGFPE, &sa, NULL);
-
-       sa.sa_flags &= ~SA_NODEFER;
-
-#ifdef DDB
-       sa.sa_sigaction = exc_debugger;
-       sigaction(SIGQUIT, &sa, NULL);
-#endif
-       sa.sa_sigaction = ipisig;
-       sigaction(SIGUSR1, &sa, NULL);
-       sa.sa_sigaction = stopsig;
-       sigaction(SIGXCPU, &sa, NULL);
-#if 0
-       sa.sa_sigaction = iosig;
-       sigaction(SIGIO, &sa, NULL);
-#endif
-       sa.sa_sigaction = infosig;
-       sigaction(SIGINFO, &sa, NULL);
-}
-
-/*
- * This function handles a segmentation fault.  
- *
- * XXX We assume that trapframe is a subset of ucontext.  It is as of
- *     this writing.
- */
-static void
-exc_segfault(int signo, siginfo_t *info, void *ctxp)
-{
-       ucontext_t *ctx = ctxp;
-
-#if 0
-       kprintf("CAUGHT SEGFAULT EIP %08x ERR %08x TRAPNO %d err %d\n",
-               ctx->uc_mcontext.mc_eip,
-               ctx->uc_mcontext.mc_err,
-               ctx->uc_mcontext.mc_trapno & 0xFFFF,
-               ctx->uc_mcontext.mc_trapno >> 16);
-#endif
-       kern_trap((struct trapframe *)&ctx->uc_mcontext.mc_gs);
-       splz();
-}
-
-#ifdef DDB
-
-static void
-exc_debugger(int signo, siginfo_t *info, void *ctx)
-{
-       Debugger("interrupt from console");
-}
-
-#endif
diff --git a/sys/platform/vkernel/i386/fork_tramp.s b/sys/platform/vkernel/i386/fork_tramp.s
deleted file mode 100644 (file)
index a21a7a9..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/i386/i386/exception.s,v 1.65.2.3 2001/08/15 01:23:49 peter Exp $
- */
-
-#include <machine/asmacros.h>
-#include <machine/segments.h>
-#include <machine/lock.h>
-#include <machine/psl.h>
-#include <machine/trap.h>
-
-#include "assym.s"
-
-       .text
-
-       .globl  lwkt_switch_return
-
-/*
- * This function is what cpu_heavy_restore jumps to after a new process
- * is created.  The LWKT subsystem switches while holding a critical
- * section and we maintain that abstraction here (e.g. because 
- * cpu_heavy_restore needs it due to PCB_*() manipulation), then get out of
- * it before calling the initial function (typically fork_return()) and/or
- * returning to user mode.
- *
- * The MP lock is not held at any point but the critcount is bumped
- * on entry to prevent interruption of the trampoline at a bad point.
- *
- * This is effectively what td->td_switch() returns to.  It 'returns' the
- * old thread in %eax and since this is not returning to a td->td_switch()
- * call from lwkt_switch() we must handle the cleanup for the old thread
- * by calling lwkt_switch_return().
- *
- * fork_trampoline(%eax:otd, %esi:func, %ebx:arg)
- */
-ENTRY(fork_trampoline)
-       pushl   %eax
-       call    lwkt_switch_return
-       addl    $4,%esp
-       movl    PCPU(curthread),%eax
-       decl    TD_CRITCOUNT(%eax)
-
-       /*
-        * cpu_set_fork_handler intercepts this function call to
-        * have this call a non-return function to stay in kernel mode.
-        *
-        * initproc has its own fork handler, start_init(), which DOES
-        * return.
-        *
-        * The function (set in pcb_esi) gets passed two arguments,
-        * the primary parameter set in pcb_ebx and a pointer to the
-        * trapframe.
-        *   void (func)(int arg, struct trapframe *frame);
-        */
-       pushl   %esp                    /* pass frame by reference */
-       pushl   %ebx                    /* arg1 */
-       call    *%esi                   /* function */
-       addl    $8,%esp
-       /* cut from syscall */
-
-       call    splz
-
-       /*
-        * Return via doreti to handle ASTs.
-        */
-       MEXITCOUNT
-       pushl   $0              /* if_ppl */
-       pushl   $0              /* if_vec */
-       pushl   %esp            /* pass by reference */
-       call    go_user
-       /* NOT REACHED */
-
-
diff --git a/sys/platform/vkernel/i386/genassym.c b/sys/platform/vkernel/i386/genassym.c
deleted file mode 100644 (file)
index 09df35b..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/*-
- * Copyright (c) 1982, 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     from: @(#)genassym.c    5.11 (Berkeley) 5/10/91
- * $FreeBSD: src/sys/i386/i386/genassym.c,v 1.86.2.3 2002/03/03 05:42:49 nyan Exp $
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/assym.h>
-#include <sys/interrupt.h>
-#include <sys/buf.h>
-#include <sys/proc.h>
-#include <sys/errno.h>
-#include <sys/mount.h>
-#include <sys/socket.h>
-#include <sys/lock.h>
-#include <sys/resourcevar.h>
-#include <machine/frame.h>
-/*#include <machine/bootinfo.h>*/
-#include <machine/tss.h>
-#include <sys/vmmeter.h>
-#include <sys/machintr.h>
-#include <vm/vm.h>
-#include <vm/vm_param.h>
-#include <vm/pmap.h>
-#include <vm/vm_map.h>
-#include <sys/user.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <vfs/nfs/nfsv2.h>
-#include <vfs/nfs/rpcv2.h>
-#include <vfs/nfs/nfs.h>
-#include <vfs/nfs/nfsdiskless.h>
-
-#include <machine/segments.h>
-#include <machine/sigframe.h>
-#include <machine/vm86.h>
-#include <machine/globaldata.h>
-#include <machine/pmap.h>
-
-ASSYM(P_VMSPACE, offsetof(struct proc, p_vmspace));
-ASSYM(VM_PMAP, offsetof(struct vmspace, vm_pmap));
-ASSYM(PM_ACTIVE, offsetof(struct pmap, pm_active));
-ASSYM(PM_ACTIVE_LOCK, offsetof(struct pmap, pm_active_lock));
-
-ASSYM(LWP_VMSPACE, offsetof(struct lwp, lwp_vmspace));
-
-ASSYM(TD_PROC, offsetof(struct thread, td_proc));
-ASSYM(TD_LWP, offsetof(struct thread, td_lwp));
-ASSYM(TD_PCB, offsetof(struct thread, td_pcb));
-ASSYM(TD_SP, offsetof(struct thread, td_sp));
-ASSYM(TD_PRI, offsetof(struct thread, td_pri));
-ASSYM(TD_CRITCOUNT, offsetof(struct thread, td_critcount));
-ASSYM(TD_MACH, offsetof(struct thread, td_mach));
-ASSYM(TD_WCHAN, offsetof(struct thread, td_wchan));
-ASSYM(TD_NEST_COUNT, offsetof(struct thread, td_nest_count));
-ASSYM(TD_FLAGS, offsetof(struct thread, td_flags));
-ASSYM(TDF_RUNNING, TDF_RUNNING);
-
-ASSYM(TD_SAVEFPU, offsetof(struct thread, td_mach) + offsetof(struct md_thread, mtd_savefpu));
-
-ASSYM(TDPRI_INT_SUPPORT, TDPRI_INT_SUPPORT);
-ASSYM(CPULOCK_EXCLBIT, CPULOCK_EXCLBIT);
-ASSYM(CPULOCK_EXCL, CPULOCK_EXCL);
-ASSYM(CPULOCK_INCR, CPULOCK_INCR);
-ASSYM(CPULOCK_CNTMASK, CPULOCK_CNTMASK);
-
-ASSYM(V_TRAP, offsetof(struct vmmeter, v_trap));
-ASSYM(V_SYSCALL, offsetof(struct vmmeter, v_syscall));
-ASSYM(V_SENDSYS, offsetof(struct vmmeter, v_sendsys));
-ASSYM(V_WAITSYS, offsetof(struct vmmeter, v_waitsys));
-ASSYM(V_INTR, offsetof(struct vmmeter, v_intr));
-ASSYM(V_FORWARDED_INTS, offsetof(struct vmmeter, v_forwarded_ints));
-ASSYM(V_FORWARDED_HITS, offsetof(struct vmmeter, v_forwarded_hits));
-ASSYM(V_FORWARDED_MISSES, offsetof(struct vmmeter, v_forwarded_misses));
-
-ASSYM(PAGE_SIZE, PAGE_SIZE);
-ASSYM(PAGE_SHIFT, PAGE_SHIFT);
-ASSYM(PAGE_MASK, PAGE_MASK);
-ASSYM(USRSTACK, USRSTACK);
-ASSYM(VM_MAX_USER_ADDRESS, VM_MAX_USER_ADDRESS);
-ASSYM(MCLBYTES, MCLBYTES);
-
-/* PCB_CR3 */
-ASSYM(PCB_EDI, offsetof(struct pcb, pcb_edi));
-ASSYM(PCB_ESI, offsetof(struct pcb, pcb_esi));
-ASSYM(PCB_EBP, offsetof(struct pcb, pcb_ebp));
-ASSYM(PCB_ESP, offsetof(struct pcb, pcb_esp));
-ASSYM(PCB_EBX, offsetof(struct pcb, pcb_ebx));
-ASSYM(PCB_EIP, offsetof(struct pcb, pcb_eip));
-ASSYM(TSS_ESP0, offsetof(struct i386tss, tss_esp0));
-
-/*ASSYM(PCB_USERLDT, offsetof(struct pcb, pcb_ldt));*/
-
-#if 1
-ASSYM(PCB_DR0, offsetof(struct pcb, pcb_dr0));
-ASSYM(PCB_DR1, offsetof(struct pcb, pcb_dr1));
-ASSYM(PCB_DR2, offsetof(struct pcb, pcb_dr2));
-ASSYM(PCB_DR3, offsetof(struct pcb, pcb_dr3));
-ASSYM(PCB_DR6, offsetof(struct pcb, pcb_dr6));
-ASSYM(PCB_DR7, offsetof(struct pcb, pcb_dr7));
-ASSYM(PCB_DBREGS, PCB_DBREGS);
-ASSYM(PCB_EXT, offsetof(struct pcb, pcb_ext));
-#endif
-
-ASSYM(PCB_SPARE, offsetof(struct pcb, __pcb_spare));
-ASSYM(PCB_FLAGS, offsetof(struct pcb, pcb_flags));
-ASSYM(PCB_SAVEFPU, offsetof(struct pcb, pcb_save));
-ASSYM(PCB_SAVEFPU_SIZE, sizeof(union savefpu));
-ASSYM(PCB_SAVE87_SIZE, sizeof(struct save87));
-ASSYM(PCB_ONFAULT, offsetof(struct pcb, pcb_onfault));
-
-ASSYM(PCB_SIZE, sizeof(struct pcb));
-
-ASSYM(TF_TRAPNO, offsetof(struct trapframe, tf_trapno));
-ASSYM(TF_XFLAGS, offsetof(struct trapframe, tf_xflags));
-ASSYM(TF_ERR, offsetof(struct trapframe, tf_err));
-ASSYM(TF_CS, offsetof(struct trapframe, tf_cs));
-ASSYM(TF_EFLAGS, offsetof(struct trapframe, tf_eflags));
-ASSYM(SIGF_HANDLER, offsetof(struct sigframe, sf_ahu.sf_handler));
-ASSYM(SIGF_UC, offsetof(struct sigframe, sf_uc));
-ASSYM(UC_EFLAGS, offsetof(ucontext_t, uc_mcontext.mc_eflags));
-ASSYM(ENOENT, ENOENT);
-ASSYM(EFAULT, EFAULT);
-ASSYM(ENAMETOOLONG, ENAMETOOLONG);
-ASSYM(MAXPATHLEN, MAXPATHLEN);
-
-#if 0
-ASSYM(BOOTINFO_SIZE, sizeof(struct bootinfo));
-ASSYM(BI_VERSION, offsetof(struct bootinfo, bi_version));
-ASSYM(BI_KERNELNAME, offsetof(struct bootinfo, bi_kernelname));
-ASSYM(BI_NFS_DISKLESS, offsetof(struct bootinfo, bi_nfs_diskless));
-ASSYM(BI_ENDCOMMON, offsetof(struct bootinfo, bi_endcommon));
-ASSYM(NFSDISKLESS_SIZE, sizeof(struct nfs_diskless));
-ASSYM(BI_SIZE, offsetof(struct bootinfo, bi_size));
-ASSYM(BI_SYMTAB, offsetof(struct bootinfo, bi_symtab));
-ASSYM(BI_ESYMTAB, offsetof(struct bootinfo, bi_esymtab));
-ASSYM(BI_KERNEND, offsetof(struct bootinfo, bi_kernend));
-#endif
-
-ASSYM(GD_CURTHREAD, offsetof(struct mdglobaldata, mi.gd_curthread));
-ASSYM(GD_CPUID, offsetof(struct mdglobaldata, mi.gd_cpuid));
-ASSYM(GD_CPUMASK, offsetof(struct mdglobaldata, mi.gd_cpumask));
-ASSYM(GD_CNT, offsetof(struct mdglobaldata, mi.gd_cnt));
-ASSYM(GD_INTR_NESTING_LEVEL, offsetof(struct mdglobaldata, mi.gd_intr_nesting_level));
-ASSYM(GD_REQFLAGS, offsetof(struct mdglobaldata, mi.gd_reqflags));
-
-ASSYM(GD_CURRENTLDT, offsetof(struct mdglobaldata, gd_currentldt));
-
-ASSYM(RQF_IPIQ, RQF_IPIQ);
-ASSYM(RQF_INTPEND, RQF_INTPEND);
-ASSYM(RQF_AST_OWEUPC, RQF_AST_OWEUPC);
-ASSYM(RQF_AST_SIGNAL, RQF_AST_SIGNAL);
-ASSYM(RQF_AST_USER_RESCHED, RQF_AST_USER_RESCHED);
-ASSYM(RQF_AST_LWKT_RESCHED, RQF_AST_LWKT_RESCHED);
-ASSYM(RQF_AST_MASK, RQF_AST_MASK);
-
-ASSYM(FIRST_SOFTINT, FIRST_SOFTINT);
-ASSYM(MDGLOBALDATA_BASEALLOC_PAGES, MDGLOBALDATA_BASEALLOC_PAGES);
-
-ASSYM(GD_FPENDING, offsetof(struct mdglobaldata, gd_fpending));
-ASSYM(GD_IPENDING, offsetof(struct mdglobaldata, gd_ipending));
-ASSYM(GD_SPENDING, offsetof(struct mdglobaldata, gd_spending));
-ASSYM(GD_COMMON_TSS, offsetof(struct mdglobaldata, gd_common_tss));
-ASSYM(GD_COMMON_TSSD, offsetof(struct mdglobaldata, gd_common_tssd));
-ASSYM(GD_TSS_GDT, offsetof(struct mdglobaldata, gd_tss_gdt));
-ASSYM(GD_NPXTHREAD, offsetof(struct mdglobaldata, gd_npxthread));
-ASSYM(GD_FPU_LOCK, offsetof(struct mdglobaldata, gd_fpu_lock));
-ASSYM(GD_SAVEFPU, offsetof(struct mdglobaldata, gd_savefpu));
-ASSYM(GD_OTHER_CPUS, offsetof(struct mdglobaldata, mi.gd_other_cpus));
-ASSYM(GD_SS_EFLAGS, offsetof(struct mdglobaldata, gd_ss_eflags));
-
-ASSYM(GD_CMAP1, offsetof(struct mdglobaldata, gd_CMAP1));
-ASSYM(GD_CMAP2, offsetof(struct mdglobaldata, gd_CMAP2));
-ASSYM(GD_CMAP3, offsetof(struct mdglobaldata, gd_CMAP3));
-ASSYM(GD_PMAP1, offsetof(struct mdglobaldata, gd_PMAP1));
-ASSYM(GD_CADDR1, offsetof(struct mdglobaldata, gd_CADDR1));
-ASSYM(GD_CADDR2, offsetof(struct mdglobaldata, gd_CADDR2));
-ASSYM(GD_CADDR3, offsetof(struct mdglobaldata, gd_CADDR3));
-ASSYM(GD_PADDR1, offsetof(struct mdglobaldata, gd_PADDR1));
-
-ASSYM(PS_IDLESTACK, offsetof(struct privatespace, idlestack));
-ASSYM(PS_IDLESTACK_PAGE, offsetof(struct privatespace, idlestack) / PAGE_SIZE);
-ASSYM(PS_IDLESTACK_TOP, sizeof(struct privatespace));
-ASSYM(PS_SIZEOF, sizeof(struct privatespace));
-
diff --git a/sys/platform/vkernel/i386/global.s b/sys/platform/vkernel/i386/global.s
deleted file mode 100644 (file)
index c81783f..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*-
- * Copyright (c) Peter Wemm <peter@netplex.com.au>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/i386/i386/globals.s,v 1.13.2.1 2000/05/16 06:58:06 dillon Exp $
- * $DragonFly: src/sys/platform/vkernel/i386/global.s,v 1.2 2007/01/05 22:18:18 dillon Exp $
- */
-
-#include <machine/asmacros.h>
-#include <machine/pmap.h>
-
-#include "assym.s"
-
-       /*
-        * Define the layout of the per-cpu address space.  This is
-        * "constructed" in locore.s on the BSP and in mp_machdep.c for
-        * each AP.  DO NOT REORDER THESE WITHOUT UPDATING THE REST!
-        *
-        * On UP the per-cpu address space is simply placed in the data
-        * segment.
-        */
-       .data
-
-       .globl  globaldata
-       .set    globaldata,0
-
-       /*
-        * Define layout of the global data.  On SMP this lives in
-        * the per-cpu address space, otherwise it's in the data segment.
-        */
-       .globl  gd_curthread, gd_npxthread, gd_reqflags, gd_common_tss
-       .set    gd_curthread,globaldata + GD_CURTHREAD
-       .set    gd_npxthread,globaldata + GD_NPXTHREAD
-       .set    gd_reqflags,globaldata + GD_REQFLAGS
-       .set    gd_common_tss,globaldata + GD_COMMON_TSS
-
-       .globl  gd_common_tssd, gd_tss_gdt
-       .set    gd_common_tssd,globaldata + GD_COMMON_TSSD
-       .set    gd_tss_gdt,globaldata + GD_TSS_GDT
-
-       .globl  gd_currentldt
-       .set    gd_currentldt,globaldata + GD_CURRENTLDT
-
-       .globl  gd_fpu_lock, gd_savefpu
-       .set    gd_fpu_lock, globaldata + GD_FPU_LOCK
-       .set    gd_savefpu, globaldata + GD_SAVEFPU
-
-       /*
-        * The BSP version of these get setup in locore.s and pmap.c, while
-        * the AP versions are setup in mp_machdep.c.
-        */
-       .globl  gd_cpuid, gd_cpumask, gd_other_cpus
-       .globl  gd_ss_eflags, gd_intr_nesting_level
-       .globl  gd_CMAP1, gd_CMAP2, gd_CMAP3, gd_PMAP1
-       .globl  gd_CADDR1, gd_CADDR2, gd_CADDR3, gd_PADDR1
-       .globl  gd_spending, gd_ipending, gd_fpending
-       .globl  gd_cnt
-
-       .set    gd_cpuid,globaldata + GD_CPUID
-       .set    gd_cpumask,globaldata + GD_CPUMASK
-       .set    gd_other_cpus,globaldata + GD_OTHER_CPUS
-       .set    gd_ss_eflags,globaldata + GD_SS_EFLAGS
-       .set    gd_intr_nesting_level,globaldata + GD_INTR_NESTING_LEVEL
-       .set    gd_CMAP1,globaldata + GD_PRV_CMAP1
-       .set    gd_CMAP2,globaldata + GD_PRV_CMAP2
-       .set    gd_CMAP3,globaldata + GD_PRV_CMAP3
-       .set    gd_PMAP1,globaldata + GD_PRV_PMAP1
-       .set    gd_CADDR1,globaldata + GD_PRV_CADDR1
-       .set    gd_CADDR2,globaldata + GD_PRV_CADDR2
-       .set    gd_CADDR3,globaldata + GD_PRV_CADDR3
-       .set    gd_PADDR1,globaldata + GD_PRV_PADDR1
-       .set    gd_fpending,globaldata + GD_FPENDING
-       .set    gd_ipending,globaldata + GD_IPENDING
-       .set    gd_spending,globaldata + GD_SPENDING
-       .set    gd_cnt,globaldata + GD_CNT
-
diff --git a/sys/platform/vkernel/i386/locore.s b/sys/platform/vkernel/i386/locore.s
deleted file mode 100644 (file)
index 4b3c30d..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2006 The DragonFly Project.  All rights reserved.
- * 
- * This code is derived from software contributed to The DragonFly Project
- * by Matthew Dillon <dillon@backplane.com>
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * $DragonFly: src/sys/platform/vkernel/i386/locore.s,v 1.6 2007/01/08 03:33:43 dillon Exp $
- */
-
-#include <sys/syscall.h>
-#include <machine/asmacros.h>
-#include <machine/psl.h>
-#include "assym.s"
-       
-       .globl  kernbase
-       .set    kernbase,KERNBASE
-
-       /*
-        * The sysinit and sysuninit sections have to be read-write data
-        * sections, not read-only data sections.
-        */
-       .section        set_sysinit_set, "aw"
-       .section        set_sysuninit_set, "aw"
-
-       .data
-       ALIGN_DATA              /* just to be sure */
-
-       /*
-        * Normally the startup code would begin here, but this is a 
-        * virtual kernel so we just have a main() in platform/init.c
-        */
-       
-       .text
-
-/*
- * Signal trampoline, copied to top of user stack
- */
-NON_GPROF_ENTRY(sigcode)
-       call    *SIGF_HANDLER(%esp)             /* call signal handler */
-       lea     SIGF_UC(%esp),%eax              /* get ucontext_t */
-       pushl   %eax
-#if 0
-       testl   $PSL_VM,UC_EFLAGS(%eax)
-       jne     9f
-#endif
-#if 0
-9:
-#endif
-       movl    $SYS_sigreturn,%eax
-       pushl   %eax                            /* junk to fake return addr. */
-       int     $0x80                           /* enter kernel with args */
-0:     jmp     0b
-
-       ALIGN_TEXT
-esigcode:
-
-/* void reset_dbregs() */
-ENTRY(reset_dbregs)
-        movl    $0,%eax
-        movl    %eax,%dr7     /* disable all breapoints first */
-        movl    %eax,%dr0
-        movl    %eax,%dr1
-        movl    %eax,%dr2
-        movl    %eax,%dr3
-        movl    %eax,%dr6
-        ret
-
-       .data
-       .globl  szsigcode
-szsigcode:
-       .long   esigcode - sigcode
-
diff --git a/sys/platform/vkernel/i386/mp.c b/sys/platform/vkernel/i386/mp.c
deleted file mode 100644 (file)
index 60ae4be..0000000
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
- * Copyright (c) 2007 The DragonFly Project.  All rights reserved.
- *
- * This code is derived from software contributed to The DragonFly Project
- * by Matthew Dillon <dillon@backplane.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-
-#include <sys/interrupt.h>
-#include <sys/kernel.h>
-#include <sys/memrange.h>
-#include <sys/tls.h>
-#include <sys/types.h>
-
-#include <vm/vm_extern.h>
-#include <vm/vm_kern.h>
-#include <vm/vm_object.h>
-#include <vm/vm_page.h>
-
-#include <sys/mplock2.h>
-
-#include <machine/cpu.h>
-#include <machine/cpufunc.h>
-#include <machine/globaldata.h>
-#include <machine/md_var.h>
-#include <machine/pmap.h>
-#include <machine/smp.h>
-#include <machine/tls.h>
-
-#include <unistd.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-
-extern pt_entry_t *KPTphys;
-
-volatile cpumask_t     stopped_cpus;
-cpumask_t      smp_active_mask = 1;  /* which cpus are ready for IPIs etc? */
-static int     boot_address;
-static cpumask_t smp_startup_mask = 1;  /* which cpus have been started */
-int            mp_naps;                /* # of Applications processors */
-static int  mp_finish;
-
-/* Local data for detecting CPU TOPOLOGY */
-static int core_bits = 0;
-static int logical_CPU_bits = 0;
-
-/* function prototypes XXX these should go elsewhere */
-void bootstrap_idle(void);
-void single_cpu_ipi(int, int, int);
-void selected_cpu_ipi(cpumask_t, int, int);
-#if 0
-void ipi_handler(int);
-#endif
-
-pt_entry_t *SMPpt;
-
-/* AP uses this during bootstrap.  Do not staticize.  */
-char *bootSTK;
-static int bootAP;
-
-
-/* XXX these need to go into the appropriate header file */
-static int start_all_aps(u_int);
-void init_secondary(void);
-void *start_ap(void *);
-
-/*
- * Get SMP fully working before we start initializing devices.
- */
-static
-void
-ap_finish(void)
-{
-        mp_finish = 1;
-        if (bootverbose)
-                kprintf("Finish MP startup\n");
-
-       /* build our map of 'other' CPUs */
-       mycpu->gd_other_cpus = smp_startup_mask;
-       CPUMASK_NANDBIT(mycpu->gd_other_cpus, mycpu->gd_cpuid);
-
-       /*
-        * Let the other cpu's finish initializing and build their map
-        * of 'other' CPUs.
-        */
-        rel_mplock();
-       while (CPUMASK_CMPMASKNEQ(smp_active_mask, smp_startup_mask)) {
-               DELAY(100000);
-                cpu_lfence();
-       }
-
-        while (try_mplock() == 0)
-               DELAY(100000);
-        if (bootverbose)
-                kprintf("Active CPU Mask: %08x\n", smp_active_mask);
-}
-
-SYSINIT(finishsmp, SI_BOOT2_FINISH_SMP, SI_ORDER_FIRST, ap_finish, NULL);
-
-
-void *
-start_ap(void *arg __unused)
-{
-       init_secondary();
-       setrealcpu();
-       bootstrap_idle();
-
-       return(NULL); /* NOTREACHED */
-}
-
-/* storage for AP thread IDs */
-pthread_t ap_tids[MAXCPU];
-
-void
-mp_start(void)
-{
-       int shift;
-       size_t ipiq_size;
-
-       ncpus = optcpus;
-
-       mp_naps = ncpus - 1;
-
-       /* ncpus2 -- ncpus rounded down to the nearest power of 2 */
-       for (shift = 0; (1 << shift) <= ncpus; ++shift)
-               ;
-       --shift;
-       ncpus2_shift = shift;
-       ncpus2 = 1 << shift;
-       ncpus2_mask = ncpus2 - 1;
-
-        /* ncpus_fit -- ncpus rounded up to the nearest power of 2 */
-        if ((1 << shift) < ncpus)
-                ++shift;
-        ncpus_fit = 1 << shift;
-        ncpus_fit_mask = ncpus_fit - 1;
-
-       /*
-        * cpu0 initialization
-        */
-       ipiq_size = sizeof(struct lwkt_ipiq) * ncpus;
-       mycpu->gd_ipiq = (void *)kmem_alloc(&kernel_map, ipiq_size);
-       bzero(mycpu->gd_ipiq, ipiq_size);
-
-       /*
-        * cpu 1-(n-1)
-        */
-       start_all_aps(boot_address);
-
-}
-
-void
-mp_announce(void)
-{
-       int x;
-
-       kprintf("DragonFly/MP: Multiprocessor\n");
-       kprintf(" cpu0 (BSP)\n");
-
-       for (x = 1; x <= mp_naps; ++x)
-               kprintf(" cpu%d (AP)\n", x);
-}
-
-void
-cpu_send_ipiq(int dcpu)
-{
-       if (CPUMASK_TESTBIT(smp_active_mask, dcpu)) {
-               if (pthread_kill(ap_tids[dcpu], SIGUSR1) != 0)
-                       panic("pthread_kill failed in cpu_send_ipiq");
-       }
-#if 0
-       panic("XXX cpu_send_ipiq()");
-#endif
-}
-
-void
-smp_invltlb(void)
-{
-}
-
-void
-single_cpu_ipi(int cpu, int vector, int delivery_mode)
-{
-       kprintf("XXX single_cpu_ipi\n");
-}
-
-void
-selected_cpu_ipi(cpumask_t target, int vector, int delivery_mode)
-{
-       crit_enter();
-       while (CPUMASK_TESTNZERO(target)) {
-               int n = BSFCPUMASK(target);
-               CPUMASK_NANDBIT(target, n);
-               single_cpu_ipi(n, vector, delivery_mode);
-       }
-       crit_exit();
-}
-
-int
-stop_cpus(cpumask_t map)
-{
-       CPUMASK_ANDMASK(map, smp_active_mask);
-
-       crit_enter();
-       while (CPUMASK_TESTNZERO(map)) {
-               int n = BSFCPUMASK(map);
-               CPUMASK_NANDBIT(map, n);
-               ATOMIC_CPUMASK_ORBIT(stopped_cpus, n);
-               if (pthread_kill(ap_tids[n], SIGXCPU) != 0)
-                       panic("stop_cpus: pthread_kill failed");
-       }
-       crit_exit();
-#if 0
-       panic("XXX stop_cpus()");
-#endif
-
-       return(1);
-}
-
-int
-restart_cpus(cpumask_t map)
-{
-       CPUMASK_ANDMASK(map, smp_active_mask);
-
-       crit_enter();
-       while (CPUMASK_TESTNZERO(map)) {
-               int n = BSFCPUMASK(map);
-               CPUMASK_NANDBIT(map, n);
-               ATOMIC_CPUMASK_NANDBIT(stopped_cpus, n);
-               if (pthread_kill(ap_tids[n], SIGXCPU) != 0)
-                       panic("restart_cpus: pthread_kill failed");
-       }
-       crit_exit();
-#if 0
-       panic("XXX restart_cpus()");
-#endif
-
-       return(1);
-}
-
-void
-ap_init(void)
-{
-        /*
-         * Adjust smp_startup_mask to signal the BSP that we have started
-         * up successfully.  Note that we do not yet hold the BGL.  The BSP
-         * is waiting for our signal.
-         *
-         * We can't set our bit in smp_active_mask yet because we are holding
-         * interrupts physically disabled and remote cpus could deadlock
-         * trying to send us an IPI.
-         */
-       ATOMIC_CPUMASK_ORBIT(smp_startup_mask, mycpu->gd_cpuid);
-       cpu_mfence();
-
-        /*
-         * Interlock for finalization.  Wait until mp_finish is non-zero,
-         * then get the MP lock.
-         *
-         * Note: We are in a critical section.
-         *
-         * Note: we are the idle thread, we can only spin.
-         *
-         * Note: The load fence is memory volatile and prevents the compiler
-         * from improperly caching mp_finish, and the cpu from improperly
-         * caching it.
-         */
-
-       while (mp_finish == 0) {
-               cpu_lfence();
-               DELAY(500000);
-       }
-        while (try_mplock() == 0)
-               DELAY(100000);
-
-        /* BSP may have changed PTD while we're waiting for the lock */
-        cpu_invltlb();
-
-        /* Build our map of 'other' CPUs. */
-        mycpu->gd_other_cpus = smp_startup_mask;
-       CPUMASK_NANDBIT(mycpu->gd_other_cpus, mycpu->gd_cpuid);
-
-        kprintf("SMP: AP CPU #%d Launched!\n", mycpu->gd_cpuid);
-
-
-        /* Set memory range attributes for this CPU to match the BSP */
-        mem_range_AP_init();
-        /*
-         * Once we go active we must process any IPIQ messages that may
-         * have been queued, because no actual IPI will occur until we
-         * set our bit in the smp_active_mask.  If we don't the IPI
-         * message interlock could be left set which would also prevent
-         * further IPIs.
-         *
-         * The idle loop doesn't expect the BGL to be held and while
-         * lwkt_switch() normally cleans things up this is a special case
-         * because we returning almost directly into the idle loop.
-         *
-         * The idle thread is never placed on the runq, make sure
-         * nothing we've done put it there.
-         */
-        KKASSERT(get_mplock_count(curthread) == 1);
-       ATOMIC_CPUMASK_ORBIT(smp_active_mask, mycpu->gd_cpuid);
-
-       mdcpu->gd_fpending = 0;
-       mdcpu->gd_ipending = 0;
-       initclocks_pcpu();      /* clock interrupts (via IPIs) */
-       lwkt_process_ipiq();
-
-        /*
-         * Releasing the mp lock lets the BSP finish up the SMP init
-         */
-        rel_mplock();
-        KKASSERT((curthread->td_flags & TDF_RUNQ) == 0);
-}
-
-void
-init_secondary(void)
-{
-        int     myid = bootAP;
-        struct mdglobaldata *md;
-        struct privatespace *ps;
-
-        ps = &CPU_prvspace[myid];
-
-       KKASSERT(ps->mdglobaldata.mi.gd_prvspace == ps);
-
-       /*
-        * Setup the %fs for cpu #n.  The mycpu macro works after this
-        * point.  Note that %gs is used by pthreads.
-        */
-       tls_set_fs(&CPU_prvspace[myid], sizeof(struct privatespace));
-
-        md = mdcpu;     /* loaded through %fs:0 (mdglobaldata.mi.gd_prvspace)*/
-
-        md->gd_common_tss.tss_esp0 = 0; /* not used until after switch */
-        md->gd_common_tss.tss_ss0 = GSEL(GDATA_SEL, SEL_KPL);
-        md->gd_common_tss.tss_ioopt = (sizeof md->gd_common_tss) << 16;
-
-        /*
-         * Set to a known state:
-         * Set by mpboot.s: CR0_PG, CR0_PE
-         * Set by cpu_setregs: CR0_NE, CR0_MP, CR0_TS, CR0_WP, CR0_AM
-         */
-}
-
-static int
-start_all_aps(u_int boot_addr)
-{
-       int x, i;
-       struct mdglobaldata *gd;
-       struct privatespace *ps;
-       vm_page_t m;
-       vm_offset_t va;
-       size_t ipiq_size;
-#if 0
-       struct lwp_params params;
-#endif
-
-       /*
-        * needed for ipis to initial thread
-        * FIXME: rename ap_tids?
-        */
-       ap_tids[0] = pthread_self();
-
-       vm_object_hold(&kernel_object);
-       for (x = 1; x <= mp_naps; x++)
-       {
-               /* Allocate space for the CPU's private space. */
-               for (i = 0; i < sizeof(struct mdglobaldata); i += PAGE_SIZE) {
-                       va =(vm_offset_t)&CPU_prvspace[x].mdglobaldata + i;
-                       m = vm_page_alloc(&kernel_object, va, VM_ALLOC_SYSTEM);
-                       pmap_kenter_quick(va, m->phys_addr);
-               }
-
-               for (i = 0; i < sizeof(CPU_prvspace[x].idlestack); i += PAGE_SIZE) {
-                       va =(vm_offset_t)&CPU_prvspace[x].idlestack + i;
-                       m = vm_page_alloc(&kernel_object, va, VM_ALLOC_SYSTEM);
-                       pmap_kenter_quick(va, m->phys_addr);
-               }
-
-                gd = &CPU_prvspace[x].mdglobaldata;     /* official location */
-                bzero(gd, sizeof(*gd));
-                gd->mi.gd_prvspace = ps = &CPU_prvspace[x];
-
-                /* prime data page for it to use */
-                mi_gdinit(&gd->mi, x);
-                cpu_gdinit(gd, x);
-
-#if 0
-                gd->gd_CMAP1 = pmap_kpte((vm_offset_t)CPU_prvspace[x].CPAGE1);
-                gd->gd_CMAP2 = pmap_kpte((vm_offset_t)CPU_prvspace[x].CPAGE2);
-                gd->gd_CMAP3 = pmap_kpte((vm_offset_t)CPU_prvspace[x].CPAGE3);
-                gd->gd_PMAP1 = pmap_kpte((vm_offset_t)CPU_prvspace[x].PPAGE1);
-                gd->gd_CADDR1 = ps->CPAGE1;
-                gd->gd_CADDR2 = ps->CPAGE2;
-                gd->gd_CADDR3 = ps->CPAGE3;
-                gd->gd_PADDR1 = (vpte_t *)ps->PPAGE1;
-#endif
-
-               ipiq_size = sizeof(struct lwkt_ipiq) * (mp_naps + 1);
-                gd->mi.gd_ipiq = (void *)kmem_alloc(&kernel_map, ipiq_size);
-                bzero(gd->mi.gd_ipiq, ipiq_size);
-
-                /*
-                 * Setup the AP boot stack
-                 */
-                bootSTK = &ps->idlestack[UPAGES*PAGE_SIZE/2];
-                bootAP = x;
-
-               /*
-                * Setup the AP's lwp, this is the 'cpu'
-                *
-                * We have to make sure our signals are masked or the new LWP
-                * may pick up a signal that it isn't ready for yet.  SMP
-                * startup occurs after SI_BOOT2_LEAVE_CRIT so interrupts
-                * have already been enabled.
-                */
-               cpu_disable_intr();
-               pthread_create(&ap_tids[x], NULL, start_ap, NULL);
-               cpu_enable_intr();
-
-               while (CPUMASK_TESTBIT(smp_startup_mask, x) == 0) {
-                       cpu_lfence(); /* XXX spin until the AP has started */
-                       DELAY(1000);
-               }
-       }
-       vm_object_drop(&kernel_object);
-
-       return(ncpus - 1);
-}
-
-/*
- * CPU TOPOLOGY DETECTION FUNCTIONS.
- */
-
-void
-detect_cpu_topology(void)
-{
-       logical_CPU_bits = vkernel_b_arg;
-       core_bits = vkernel_B_arg;
-}
-
-int
-get_chip_ID(int cpuid)
-{
-       return get_apicid_from_cpuid(cpuid) >>
-           (logical_CPU_bits + core_bits);
-}
-
-int
-get_core_number_within_chip(int cpuid)
-{
-       return (get_apicid_from_cpuid(cpuid) >> logical_CPU_bits) &
-           ( (1 << core_bits) -1);
-}
-
-int
-get_logical_CPU_number_within_core(int cpuid)
-{
-       return get_apicid_from_cpuid(cpuid) &
-           ( (1 << logical_CPU_bits) -1);
-}
diff --git a/sys/platform/vkernel/i386/npx.c b/sys/platform/vkernel/i386/npx.c
deleted file mode 100644 (file)
index a19218c..0000000
+++ /dev/null
@@ -1,711 +0,0 @@
-/*
- * Copyright (c) 2006 The DragonFly Project.  All rights reserved.
- * Copyright (c) 1990 William Jolitz.
- * Copyright (c) 1991 The Regents of the University of California.
- * All rights reserved.
- * 
- * This code is derived from software contributed to The DragonFly Project
- * by Matthew Dillon <dillon@backplane.com>
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * from: @(#)npx.c     7.2 (Berkeley) 5/12/91
- * $FreeBSD: src/sys/i386/isa/npx.c,v 1.80.2.3 2001/10/20 19:04:38 tegge Exp $
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/kernel.h>
-#include <sys/malloc.h>
-#include <sys/module.h>
-#include <sys/sysctl.h>
-#include <sys/proc.h>
-#include <sys/rman.h>
-#include <sys/signalvar.h>
-
-#include <sys/thread2.h>
-#include <sys/mplock2.h>
-
-#include <machine/cputypes.h>
-#include <machine/frame.h>
-#include <machine/md_var.h>
-#include <machine/pcb.h>
-#include <machine/psl.h>
-#include <machine/specialreg.h>
-#include <machine/segments.h>
-#include <machine/globaldata.h>
-
-#define        fldcw(addr)             __asm("fldcw %0" : : "m" (*(addr)))
-#define        fnclex()                __asm("fnclex")
-#define        fninit()                __asm("fninit")
-#define        fnop()                  __asm("fnop")
-#define        fnsave(addr)            __asm __volatile("fnsave %0" : "=m" (*(addr)))
-#define        fnstcw(addr)            __asm __volatile("fnstcw %0" : "=m" (*(addr)))
-#define        fnstsw(addr)            __asm __volatile("fnstsw %0" : "=m" (*(addr)))
-#define        frstor(addr)            __asm("frstor %0" : : "m" (*(addr)))
-#ifndef CPU_DISABLE_SSE
-#define        fxrstor(addr)           __asm("fxrstor %0" : : "m" (*(addr)))
-#define        fxsave(addr)            __asm __volatile("fxsave %0" : "=m" (*(addr)))
-#endif
-
-typedef u_char bool_t;
-#ifndef CPU_DISABLE_SSE
-static void    fpu_clean_state(void);
-#endif
-
-int cpu_fxsr = 0;
-
-static struct krate badfprate = { 1 };
-
-/*static       int     npx_attach      (device_t dev);*/
-static void    fpusave         (union savefpu *);
-static void    fpurstor        (union savefpu *);
-
-uint32_t npx_mxcsr_mask = 0xFFBF;       /* this is the default */
-
-#if (defined(I586_CPU) || defined(I686_CPU)) && !defined(CPU_DISABLE_SSE)
-int mmxopt = 1;
-SYSCTL_INT(_kern, OID_AUTO, mmxopt, CTLFLAG_RD, &mmxopt, 0,
-       "MMX/XMM optimized bcopy/copyin/copyout support");
-#endif
-
-static int      hw_instruction_sse;
-SYSCTL_INT(_hw, OID_AUTO, instruction_sse, CTLFLAG_RD,
-    &hw_instruction_sse, 0, "SIMD/MMX2 instructions available in CPU");
-
-#if 0
-/*
- * Attach routine - announce which it is, and wire into system
- */
-int
-npx_attach(device_t dev)
-{
-       npxinit();
-       return (0);
-}
-#endif
-
-/*
- * Probe the npx_mxcsr_mask
- */
-void npxprobemask(void)
-{
-        static union savefpu dummy __aligned(64);
-
-        crit_enter();
-        /*stop_emulating();*/
-        fxsave(&dummy);
-        npx_mxcsr_mask = ((uint32_t *)&dummy)[7];
-        /*start_emulating();*/
-        crit_exit();
-}
-
-void
-init_fpu(int supports_sse)
-{
-       cpu_fxsr = hw_instruction_sse = supports_sse;
-       if(supports_sse) {
-               npxprobemask();
-       }
-}
-
-/*
- * Initialize the floating point unit.
- */
-void npxinit(void)
-{
-       static union savefpu dummy __aligned(16);
-       u_short control = __INITIAL_NPXCW__;
-
-       /*
-        * fninit has the same h/w bugs as fnsave.  Use the detoxified
-        * fnsave to throw away any junk in the fpu.  npxsave() initializes
-        * the fpu and sets npxthread = NULL as important side effects.
-        */
-       npxsave(&dummy);
-       crit_enter();
-       /*stop_emulating();*/
-       fldcw(&control);
-       fpusave(curthread->td_savefpu);
-       mdcpu->gd_npxthread = NULL;
-       /*start_emulating();*/
-       crit_exit();
-}
-
-/*
- * Free coprocessor (if we have it).
- */
-void
-npxexit(void)
-{
-       if (curthread == mdcpu->gd_npxthread)
-               npxsave(curthread->td_savefpu);
-}
-
-#if 0
-/* 
- * The following mechanism is used to ensure that the FPE_... value
- * that is passed as a trapcode to the signal handler of the user
- * process does not have more than one bit set.
- * 
- * Multiple bits may be set if the user process modifies the control
- * word while a status word bit is already set.  While this is a sign
- * of bad coding, we have no choise than to narrow them down to one
- * bit, since we must not send a trapcode that is not exactly one of
- * the FPE_ macros.
- *
- * The mechanism has a static table with 127 entries.  Each combination
- * of the 7 FPU status word exception bits directly translates to a
- * position in this table, where a single FPE_... value is stored.
- * This FPE_... value stored there is considered the "most important"
- * of the exception bits and will be sent as the signal code.  The
- * precedence of the bits is based upon Intel Document "Numerical
- * Applications", Chapter "Special Computational Situations".
- *
- * The macro to choose one of these values does these steps: 1) Throw
- * away status word bits that cannot be masked.  2) Throw away the bits
- * currently masked in the control word, assuming the user isn't
- * interested in them anymore.  3) Reinsert status word bit 7 (stack
- * fault) if it is set, which cannot be masked but must be presered.
- * 4) Use the remaining bits to point into the trapcode table.
- *
- * The 6 maskable bits in order of their preference, as stated in the
- * above referenced Intel manual:
- * 1  Invalid operation (FP_X_INV)
- * 1a   Stack underflow
- * 1b   Stack overflow
- * 1c   Operand of unsupported format
- * 1d   SNaN operand.
- * 2  QNaN operand (not an exception, irrelavant here)
- * 3  Any other invalid-operation not mentioned above or zero divide
- *      (FP_X_INV, FP_X_DZ)
- * 4  Denormal operand (FP_X_DNML)
- * 5  Numeric over/underflow (FP_X_OFL, FP_X_UFL)
- * 6  Inexact result (FP_X_IMP) 
- */
-static char fpetable[128] = {
-       0,
-       FPE_FLTINV,     /*  1 - INV */
-       FPE_FLTUND,     /*  2 - DNML */
-       FPE_FLTINV,     /*  3 - INV | DNML */
-       FPE_FLTDIV,     /*  4 - DZ */
-       FPE_FLTINV,     /*  5 - INV | DZ */
-       FPE_FLTDIV,     /*  6 - DNML | DZ */
-       FPE_FLTINV,     /*  7 - INV | DNML | DZ */
-       FPE_FLTOVF,     /*  8 - OFL */
-       FPE_FLTINV,     /*  9 - INV | OFL */
-       FPE_FLTUND,     /*  A - DNML | OFL */
-       FPE_FLTINV,     /*  B - INV | DNML | OFL */
-       FPE_FLTDIV,     /*  C - DZ | OFL */
-       FPE_FLTINV,     /*  D - INV | DZ | OFL */
-       FPE_FLTDIV,     /*  E - DNML | DZ | OFL */
-       FPE_FLTINV,     /*  F - INV | DNML | DZ | OFL */
-       FPE_FLTUND,     /* 10 - UFL */
-       FPE_FLTINV,     /* 11 - INV | UFL */
-       FPE_FLTUND,     /* 12 - DNML | UFL */
-       FPE_FLTINV,     /* 13 - INV | DNML | UFL */
-       FPE_FLTDIV,     /* 14 - DZ | UFL */
-       FPE_FLTINV,     /* 15 - INV | DZ | UFL */
-       FPE_FLTDIV,     /* 16 - DNML | DZ | UFL */
-       FPE_FLTINV,     /* 17 - INV | DNML | DZ | UFL */
-       FPE_FLTOVF,     /* 18 - OFL | UFL */
-       FPE_FLTINV,     /* 19 - INV | OFL | UFL */
-       FPE_FLTUND,     /* 1A - DNML | OFL | UFL */
-       FPE_FLTINV,     /* 1B - INV | DNML | OFL | UFL */
-       FPE_FLTDIV,     /* 1C - DZ | OFL | UFL */
-       FPE_FLTINV,     /* 1D - INV | DZ | OFL | UFL */
-       FPE_FLTDIV,     /* 1E - DNML | DZ | OFL | UFL */
-       FPE_FLTINV,     /* 1F - INV | DNML | DZ | OFL | UFL */
-       FPE_FLTRES,     /* 20 - IMP */
-       FPE_FLTINV,     /* 21 - INV | IMP */
-       FPE_FLTUND,     /* 22 - DNML | IMP */
-       FPE_FLTINV,     /* 23 - INV | DNML | IMP */
-       FPE_FLTDIV,     /* 24 - DZ | IMP */
-       FPE_FLTINV,     /* 25 - INV | DZ | IMP */
-       FPE_FLTDIV,     /* 26 - DNML | DZ | IMP */
-       FPE_FLTINV,     /* 27 - INV | DNML | DZ | IMP */
-       FPE_FLTOVF,     /* 28 - OFL | IMP */
-       FPE_FLTINV,     /* 29 - INV | OFL | IMP */
-       FPE_FLTUND,     /* 2A - DNML | OFL | IMP */
-       FPE_FLTINV,     /* 2B - INV | DNML | OFL | IMP */
-       FPE_FLTDIV,     /* 2C - DZ | OFL | IMP */
-       FPE_FLTINV,     /* 2D - INV | DZ | OFL | IMP */
-       FPE_FLTDIV,     /* 2E - DNML | DZ | OFL | IMP */
-       FPE_FLTINV,     /* 2F - INV | DNML | DZ | OFL | IMP */
-       FPE_FLTUND,     /* 30 - UFL | IMP */
-       FPE_FLTINV,     /* 31 - INV | UFL | IMP */
-       FPE_FLTUND,     /* 32 - DNML | UFL | IMP */
-       FPE_FLTINV,     /* 33 - INV | DNML | UFL | IMP */
-       FPE_FLTDIV,     /* 34 - DZ | UFL | IMP */
-       FPE_FLTINV,     /* 35 - INV | DZ | UFL | IMP */
-       FPE_FLTDIV,     /* 36 - DNML | DZ | UFL | IMP */
-       FPE_FLTINV,     /* 37 - INV | DNML | DZ | UFL | IMP */
-       FPE_FLTOVF,     /* 38 - OFL | UFL | IMP */
-       FPE_FLTINV,     /* 39 - INV | OFL | UFL | IMP */
-       FPE_FLTUND,     /* 3A - DNML | OFL | UFL | IMP */
-       FPE_FLTINV,     /* 3B - INV | DNML | OFL | UFL | IMP */
-       FPE_FLTDIV,     /* 3C - DZ | OFL | UFL | IMP */
-       FPE_FLTINV,     /* 3D - INV | DZ | OFL | UFL | IMP */
-       FPE_FLTDIV,     /* 3E - DNML | DZ | OFL | UFL | IMP */
-       FPE_FLTINV,     /* 3F - INV | DNML | DZ | OFL | UFL | IMP */
-       FPE_FLTSUB,     /* 40 - STK */
-       FPE_FLTSUB,     /* 41 - INV | STK */
-       FPE_FLTUND,     /* 42 - DNML | STK */
-       FPE_FLTSUB,     /* 43 - INV | DNML | STK */
-       FPE_FLTDIV,     /* 44 - DZ | STK */
-       FPE_FLTSUB,     /* 45 - INV | DZ | STK */
-       FPE_FLTDIV,     /* 46 - DNML | DZ | STK */
-       FPE_FLTSUB,     /* 47 - INV | DNML | DZ | STK */
-       FPE_FLTOVF,     /* 48 - OFL | STK */
-       FPE_FLTSUB,     /* 49 - INV | OFL | STK */
-       FPE_FLTUND,     /* 4A - DNML | OFL | STK */
-       FPE_FLTSUB,     /* 4B - INV | DNML | OFL | STK */
-       FPE_FLTDIV,     /* 4C - DZ | OFL | STK */
-       FPE_FLTSUB,     /* 4D - INV | DZ | OFL | STK */
-       FPE_FLTDIV,     /* 4E - DNML | DZ | OFL | STK */
-       FPE_FLTSUB,     /* 4F - INV | DNML | DZ | OFL | STK */
-       FPE_FLTUND,     /* 50 - UFL | STK */
-       FPE_FLTSUB,     /* 51 - INV | UFL | STK */
-       FPE_FLTUND,     /* 52 - DNML | UFL | STK */
-       FPE_FLTSUB,     /* 53 - INV | DNML | UFL | STK */
-       FPE_FLTDIV,     /* 54 - DZ | UFL | STK */
-       FPE_FLTSUB,     /* 55 - INV | DZ | UFL | STK */
-       FPE_FLTDIV,     /* 56 - DNML | DZ | UFL | STK */
-       FPE_FLTSUB,     /* 57 - INV | DNML | DZ | UFL | STK */
-       FPE_FLTOVF,     /* 58 - OFL | UFL | STK */
-       FPE_FLTSUB,     /* 59 - INV | OFL | UFL | STK */
-       FPE_FLTUND,     /* 5A - DNML | OFL | UFL | STK */
-       FPE_FLTSUB,     /* 5B - INV | DNML | OFL | UFL | STK */
-       FPE_FLTDIV,     /* 5C - DZ | OFL | UFL | STK */
-       FPE_FLTSUB,     /* 5D - INV | DZ | OFL | UFL | STK */
-       FPE_FLTDIV,     /* 5E - DNML | DZ | OFL | UFL | STK */
-       FPE_FLTSUB,     /* 5F - INV | DNML | DZ | OFL | UFL | STK */
-       FPE_FLTRES,     /* 60 - IMP | STK */
-       FPE_FLTSUB,     /* 61 - INV | IMP | STK */
-       FPE_FLTUND,     /* 62 - DNML | IMP | STK */
-       FPE_FLTSUB,     /* 63 - INV | DNML | IMP | STK */
-       FPE_FLTDIV,     /* 64 - DZ | IMP | STK */
-       FPE_FLTSUB,     /* 65 - INV | DZ | IMP | STK */
-       FPE_FLTDIV,     /* 66 - DNML | DZ | IMP | STK */
-       FPE_FLTSUB,     /* 67 - INV | DNML | DZ | IMP | STK */
-       FPE_FLTOVF,     /* 68 - OFL | IMP | STK */
-       FPE_FLTSUB,     /* 69 - INV | OFL | IMP | STK */
-       FPE_FLTUND,     /* 6A - DNML | OFL | IMP | STK */
-       FPE_FLTSUB,     /* 6B - INV | DNML | OFL | IMP | STK */
-       FPE_FLTDIV,     /* 6C - DZ | OFL | IMP | STK */
-       FPE_FLTSUB,     /* 6D - INV | DZ | OFL | IMP | STK */
-       FPE_FLTDIV,     /* 6E - DNML | DZ | OFL | IMP | STK */
-       FPE_FLTSUB,     /* 6F - INV | DNML | DZ | OFL | IMP | STK */
-       FPE_FLTUND,     /* 70 - UFL | IMP | STK */
-       FPE_FLTSUB,     /* 71 - INV | UFL | IMP | STK */
-       FPE_FLTUND,     /* 72 - DNML | UFL | IMP | STK */
-       FPE_FLTSUB,     /* 73 - INV | DNML | UFL | IMP | STK */
-       FPE_FLTDIV,     /* 74 - DZ | UFL | IMP | STK */
-       FPE_FLTSUB,     /* 75 - INV | DZ | UFL | IMP | STK */
-       FPE_FLTDIV,     /* 76 - DNML | DZ | UFL | IMP | STK */
-       FPE_FLTSUB,     /* 77 - INV | DNML | DZ | UFL | IMP | STK */
-       FPE_FLTOVF,     /* 78 - OFL | UFL | IMP | STK */
-       FPE_FLTSUB,     /* 79 - INV | OFL | UFL | IMP | STK */
-       FPE_FLTUND,     /* 7A - DNML | OFL | UFL | IMP | STK */
-       FPE_FLTSUB,     /* 7B - INV | DNML | OFL | UFL | IMP | STK */
-       FPE_FLTDIV,     /* 7C - DZ | OFL | UFL | IMP | STK */
-       FPE_FLTSUB,     /* 7D - INV | DZ | OFL | UFL | IMP | STK */
-       FPE_FLTDIV,     /* 7E - DNML | DZ | OFL | UFL | IMP | STK */
-       FPE_FLTSUB,     /* 7F - INV | DNML | DZ | OFL | UFL | IMP | STK */
-};
-#endif
-
-#if 0
-
-/*
- * Preserve the FP status word, clear FP exceptions, then generate a SIGFPE.
- *
- * Clearing exceptions is necessary mainly to avoid IRQ13 bugs.  We now
- * depend on longjmp() restoring a usable state.  Restoring the state
- * or examining it might fail if we didn't clear exceptions.
- *
- * The error code chosen will be one of the FPE_... macros. It will be
- * sent as the second argument to old BSD-style signal handlers and as
- * "siginfo_t->si_code" (second argument) to SA_SIGINFO signal handlers.
- *
- * XXX the FP state is not preserved across signal handlers.  So signal
- * handlers cannot afford to do FP unless they preserve the state or
- * longjmp() out.  Both preserving the state and longjmp()ing may be
- * destroyed by IRQ13 bugs.  Clearing FP exceptions is not an acceptable
- * solution for signals other than SIGFPE.
- *
- * The MP lock is not held on entry (see i386/i386/exception.s) and
- * should not be held on exit.  Interrupts are enabled.  We must enter
- * a critical section to stabilize the FP system and prevent an interrupt
- * or preemption from changing the FP state out from under us.
- */
-void
-npx_intr(void *dummy)
-{
-       int code;
-       u_short control;
-       u_short status;
-       struct intrframe *frame;
-
-       crit_enter();
-
-       /*
-        * This exception can only occur with CR0_TS clear, otherwise we
-        * would get a DNA exception.  However, since interrupts were
-        * enabled a preemption could have sneaked in and used the FP system
-        * before we entered our critical section.  If that occured, the
-        * TS bit will be set and npxthread will be NULL.
-        */
-       panic("npx_intr: not coded");
-       /* XXX FP STATE FLAG MUST BE PART OF CONTEXT SUPPLIED BY REAL KERNEL */
-#if 0
-       if (rcr0() & CR0_TS) {
-               KASSERT(mdcpu->gd_npxthread == NULL, ("gd_npxthread was %p with TS set!", mdcpu->gd_npxthread));
-               npxdna();
-               crit_exit();
-               return;
-       }
-#endif
-       if (mdcpu->gd_npxthread == NULL) {
-               get_mplock();
-               kprintf("npxintr: npxthread = %p, curthread = %p\n",
-                      mdcpu->gd_npxthread, curthread);
-               panic("npxintr from nowhere");
-       }
-       if (mdcpu->gd_npxthread != curthread) {
-               get_mplock();
-               kprintf("npxintr: npxthread = %p, curthread = %p\n",
-                      mdcpu->gd_npxthread, curthread);
-               panic("npxintr from non-current process");
-       }
-
-       outb(0xf0, 0);
-       fnstsw(&status);
-       fnstcw(&control);
-       fnclex();
-
-       get_mplock();
-
-       /*
-        * Pass exception to process.
-        */
-       frame = (struct intrframe *)&dummy;     /* XXX */
-       if ((ISPL(frame->if_cs) == SEL_UPL) /*||(frame->if_eflags&PSL_VM)*/) {
-               /*
-                * Interrupt is essentially a trap, so we can afford to call
-                * the SIGFPE handler (if any) as soon as the interrupt
-                * returns.
-                *
-                * XXX little or nothing is gained from this, and plenty is
-                * lost - the interrupt frame has to contain the trap frame
-                * (this is otherwise only necessary for the rescheduling trap
-                * in doreti, and the frame for that could easily be set up
-                * just before it is used).
-                */
-               curthread->td_lwp->lwp_md.md_regs = INTR_TO_TRAPFRAME(frame);
-               /*
-                * Encode the appropriate code for detailed information on
-                * this exception.
-                */
-               code = 
-                   fpetable[(status & ~control & 0x3f) | (status & 0x40)];
-               trapsignal(curthread->td_lwp, SIGFPE, code);
-       } else {
-               /*
-                * Nested interrupt.  These losers occur when:
-                *      o an IRQ13 is bogusly generated at a bogus time, e.g.:
-                *              o immediately after an fnsave or frstor of an
-                *                error state.
-                *              o a couple of 386 instructions after
-                *                "fstpl _memvar" causes a stack overflow.
-                *        These are especially nasty when combined with a
-                *        trace trap.
-                *      o an IRQ13 occurs at the same time as another higher-
-                *        priority interrupt.
-                *
-                * Treat them like a true async interrupt.
-                */
-               lwpsignal(curproc, curthread->td_lwp, SIGFPE);
-       }
-       rel_mplock();
-       crit_exit();
-}
-
-#endif
-
-/*
- * Implement the device not available (DNA) exception.  gd_npxthread had 
- * better be NULL.  Restore the current thread's FP state and set gd_npxthread
- * to curthread.
- *
- * Interrupts are enabled and preemption can occur.  Enter a critical
- * section to stabilize the FP state.
- */
-int
-npxdna(struct trapframe *frame)
-{
-       thread_t td = curthread;
-       int didinit = 0;
-
-       if (mdcpu->gd_npxthread != NULL) {
-               kprintf("npxdna: npxthread = %p, curthread = %p\n",
-                      mdcpu->gd_npxthread, td);
-               panic("npxdna");
-       }
-
-       /*
-        * Setup the initial saved state if the thread has never before
-        * used the FP unit.  This also occurs when a thread pushes a
-        * signal handler and uses FP in the handler.
-        */
-       if ((curthread->td_flags & TDF_USINGFP) == 0) {
-               curthread->td_flags |= TDF_USINGFP;
-               npxinit();
-               didinit = 1;
-       }
-
-       /*
-        * The setting of gd_npxthread and the call to fpurstor() must not
-        * be preempted by an interrupt thread or we will take an npxdna
-        * trap and potentially save our current fpstate (which is garbage)
-        * and then restore the garbage rather then the originally saved
-        * fpstate.
-        */
-       crit_enter();
-       /*stop_emulating();*/
-       /*
-        * Record new context early in case frstor causes an IRQ13.
-        */
-       mdcpu->gd_npxthread = td;
-       /*
-        * The following frstor may cause an IRQ13 when the state being
-        * restored has a pending error.  The error will appear to have been
-        * triggered by the current (npx) user instruction even when that
-        * instruction is a no-wait instruction that should not trigger an
-        * error (e.g., fnclex).  On at least one 486 system all of the
-        * no-wait instructions are broken the same as frstor, so our
-        * treatment does not amplify the breakage.  On at least one
-        * 386/Cyrix 387 system, fnclex works correctly while frstor and
-        * fnsave are broken, so our treatment breaks fnclex if it is the
-        * first FPU instruction after a context switch.
-        */
-       if ((td->td_savefpu->sv_xmm.sv_env.en_mxcsr & ~0xFFBF) && cpu_fxsr) {
-               krateprintf(&badfprate,
-                           "FXRSTR: illegal FP MXCSR %08x didinit = %d\n",
-                           td->td_savefpu->sv_xmm.sv_env.en_mxcsr, didinit);
-               td->td_savefpu->sv_xmm.sv_env.en_mxcsr &= 0xFFBF;
-               lwpsignal(curproc, curthread->td_lwp, SIGFPE);
-       }
-       fpurstor(curthread->td_savefpu);
-       crit_exit();
-
-       return (1);
-}
-
-/*
- * Wrapper for the fnsave instruction to handle h/w bugs.  If there is an error
- * pending, then fnsave generates a bogus IRQ13 on some systems.  Force
- * any IRQ13 to be handled immediately, and then ignore it.  This routine is
- * often called at splhigh so it must not use many system services.  In
- * particular, it's much easier to install a special handler than to
- * guarantee that it's safe to use npxintr() and its supporting code.
- *
- * WARNING!  This call is made during a switch and the MP lock will be
- * setup for the new target thread rather then the current thread, so we
- * cannot do anything here that depends on the *_mplock() functions as
- * we may trip over their assertions.
- *
- * WARNING!  When using fxsave we MUST fninit after saving the FP state.  The
- * kernel will always assume that the FP state is 'safe' (will not cause
- * exceptions) for mmx/xmm use if npxthread is NULL.  The kernel must still
- * setup a custom save area before actually using the FP unit, but it will
- * not bother calling fninit.  This greatly improves kernel performance when
- * it wishes to use the FP unit.
- */
-void
-npxsave(union savefpu *addr)
-{
-       crit_enter();
-       /*stop_emulating();*/
-       fpusave(addr);
-       mdcpu->gd_npxthread = NULL;
-       fninit();
-       /*start_emulating();*/
-       crit_exit();
-}
-
-static void
-fpusave(union savefpu *addr)
-{
-       if (cpu_fxsr)
-               fxsave(addr);
-       else
-               fnsave(addr);
-}
-
-/*
- * Save the FP state to the mcontext structure.
- *
- * WARNING: If you want to try to npxsave() directly to mctx->mc_fpregs,
- * then it MUST be 16-byte aligned.  Currently this is not guarenteed.
- */
-void
-npxpush(mcontext_t *mctx)
-{
-       thread_t td = curthread;
-
-       if (td->td_flags & TDF_USINGFP) {
-               if (mdcpu->gd_npxthread == td) {
-                       /*
-                        * XXX Note: This is a bit inefficient if the signal
-                        * handler uses floating point, extra faults will
-                        * occur.
-                        */
-                       mctx->mc_ownedfp = _MC_FPOWNED_FPU;
-                       npxsave(td->td_savefpu);
-               } else {
-                       mctx->mc_ownedfp = _MC_FPOWNED_PCB;
-               }
-               bcopy(td->td_savefpu, mctx->mc_fpregs, sizeof(mctx->mc_fpregs));
-               td->td_flags &= ~TDF_USINGFP;
-               mctx->mc_fpformat =
-#ifndef CPU_DISABLE_SSE
-                       (cpu_fxsr) ? _MC_FPFMT_XMM :
-#endif
-                       _MC_FPFMT_387;
-       } else {
-               mctx->mc_ownedfp = _MC_FPOWNED_NONE;
-               mctx->mc_fpformat = _MC_FPFMT_NODEV;
-       }
-}
-
-/*
- * Restore the FP state from the mcontext structure.
- */
-void
-npxpop(mcontext_t *mctx)
-{
-       thread_t td = curthread;
-
-       switch(mctx->mc_ownedfp) {
-       case _MC_FPOWNED_NONE:
-               /*
-                * If the signal handler used the FP unit but the interrupted
-                * code did not, release the FP unit.  Clear TDF_USINGFP will
-                * force the FP unit to reinit so the interrupted code sees
-                * a clean slate.
-                */
-               if (td->td_flags & TDF_USINGFP) {
-                       if (td == mdcpu->gd_npxthread)
-                               npxsave(td->td_savefpu);
-                       td->td_flags &= ~TDF_USINGFP;
-               }
-               break;
-       case _MC_FPOWNED_FPU:
-       case _MC_FPOWNED_PCB:
-               /*
-                * Clear ownership of the FP unit and restore our saved state.
-                *
-                * NOTE: The signal handler may have set-up some FP state and
-                * enabled the FP unit, so we have to restore no matter what.
-                *
-                * XXX: This is bit inefficient, if the code being returned
-                * to is actively using the FP this results in multiple
-                * kernel faults.
-                *
-                * WARNING: The saved state was exposed to userland and may
-                * have to be sanitized to avoid a GP fault in the kernel.
-                */
-               if (td == mdcpu->gd_npxthread)
-                       npxsave(td->td_savefpu);
-               bcopy(mctx->mc_fpregs, td->td_savefpu, sizeof(*td->td_savefpu));
-               if ((td->td_savefpu->sv_xmm.sv_env.en_mxcsr & ~0xFFBF) &&
-                   cpu_fxsr) {
-                       krateprintf(&badfprate,
-                                   "pid %d (%s) signal return from user: "
-                                   "illegal FP MXCSR %08x\n",
-                                   td->td_proc->p_pid,
-                                   td->td_proc->p_comm,
-                                   td->td_savefpu->sv_xmm.sv_env.en_mxcsr);
-                       td->td_savefpu->sv_xmm.sv_env.en_mxcsr &= 0xFFBF;
-               }
-               td->td_flags |= TDF_USINGFP;
-               break;
-       }
-}
-
-
-#ifndef CPU_DISABLE_SSE
-/*
- * On AuthenticAMD processors, the fxrstor instruction does not restore
- * the x87's stored last instruction pointer, last data pointer, and last
- * opcode values, except in the rare case in which the exception summary
- * (ES) bit in the x87 status word is set to 1.
- *
- * In order to avoid leaking this information across processes, we clean
- * these values by performing a dummy load before executing fxrstor().
- */
-static double  dummy_variable = 0.0;
-static void
-fpu_clean_state(void)
-{
-       u_short status;
-
-       /*
-        * Clear the ES bit in the x87 status word if it is currently
-        * set, in order to avoid causing a fault in the upcoming load.
-        */
-       fnstsw(&status);
-       if (status & 0x80)
-               fnclex();
-
-       /*
-        * Load the dummy variable into the x87 stack.  This mangles
-        * the x87 stack, but we don't care since we're about to call
-        * fxrstor() anyway.
-        */
-       __asm __volatile("ffree %%st(7); fld %0" : : "m" (dummy_variable));
-}
-#endif /* CPU_DISABLE_SSE */
-
-static void
-fpurstor(union savefpu *addr)
-{
-#ifndef CPU_DISABLE_SSE
-       if (cpu_fxsr) {
-               fpu_clean_state();
-               fxrstor(addr);
-       } else {
-               frstor(addr);
-       }
-#else
-       frstor(addr);
-#endif
-}
-
diff --git a/sys/platform/vkernel/i386/procfs_machdep.c b/sys/platform/vkernel/i386/procfs_machdep.c
deleted file mode 100644 (file)
index f929baf..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- * Copyright (c) 1993 Jan-Simon Pendry
- *
- * This code is derived from software contributed to Berkeley by
- * Jan-Simon Pendry.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)procfs_machdep.c    8.3 (Berkeley) 1/27/94
- *
- * From:
- * $FreeBSD: src/sys/i386/i386/procfs_machdep.c,v 1.14 1999/10/11 14:50:03 peter Exp $
- * $DragonFly: src/sys/platform/vkernel/i386/procfs_machdep.c,v 1.3 2007/02/19 01:14:23 corecode Exp $
- */
-
-/*
- * Functions to be implemented here are:
- *
- * procfs_read_regs(lwp, regs)
- *     Get the current user-visible register set from the process
- *     and copy it into the regs structure (<machine/reg.h>).
- *     The process is stopped at the time read_regs is called.
- *
- * procfs_write_regs(lwp, regs)
- *     Update the current register set from the passed in regs
- *     structure.  Take care to avoid clobbering special CPU
- *     registers or privileged bits in the PSL.
- *     Depending on the architecture this may have fix-up work to do,
- *     especially if the IAR or PCW are modified.
- *     The process is stopped at the time write_regs is called.
- *
- * procfs_read_fpregs, procfs_write_fpregs
- *     deal with the floating point register set, otherwise as above.
- *
- * procfs_read_dbregs, procfs_write_dbregs
- *     deal with the processor debug register set, otherwise as above.
- *
- * procfs_sstep(lwp)
- *     Arrange for the process to trap after executing a single instruction.
- *
- */
-
-#include <sys/param.h>
-#include <sys/proc.h>
-#include <sys/ptrace.h>
-#include <sys/vnode.h>
-#include <sys/reg.h>
-#include <machine/md_var.h>
-#include <vfs/procfs/procfs.h>
-
-#include <vm/vm.h>
-#include <sys/lock.h>
-#include <vm/pmap.h>
-#include <vm/vm_map.h>
-
-int
-procfs_read_regs(struct lwp *lp, struct reg *regs)
-{
-       return (fill_regs(lp, regs));
-}
-
-int
-procfs_write_regs(struct lwp *lp, struct reg *regs)
-{
-       return (set_regs(lp, regs));
-}
-
-int
-procfs_read_dbregs(struct lwp *lp, struct dbreg *dbregs)
-{
-       return (fill_dbregs(lp, dbregs));
-}
-
-int
-procfs_write_dbregs(struct lwp *lp, struct dbreg *dbregs)
-{
-       return (set_dbregs(lp, dbregs));
-}
-
-/*
- * Ptrace doesn't support fpregs at all, and there are no security holes
- * or translations for fpregs, so we can just copy them.
- */
-
-int
-procfs_read_fpregs(struct lwp *lp, struct fpreg *fpregs)
-{
-       return (fill_fpregs(lp, fpregs));
-}
-
-int
-procfs_write_fpregs(struct lwp *lp, struct fpreg *fpregs)
-{
-       return (set_fpregs(lp, fpregs));
-}
-
-int
-procfs_sstep(struct lwp *lp)
-{
-       return (ptrace_single_step(lp));
-}
diff --git a/sys/platform/vkernel/i386/swtch.s b/sys/platform/vkernel/i386/swtch.s
deleted file mode 100644 (file)
index 1201b7a..0000000
+++ /dev/null
@@ -1,625 +0,0 @@
-/*
- * Copyright (c) 2003,2004 The DragonFly Project.  All rights reserved.
- * 
- * This code is derived from software contributed to The DragonFly Project
- * by Matthew Dillon <dillon@backplane.com>
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/i386/i386/swtch.s,v 1.89.2.10 2003/01/23 03:36:24 ps Exp $
- */
-
-#include "use_npx.h"
-
-#include <sys/rtprio.h>
-
-#include <machine/asmacros.h>
-#include <machine/segments.h>
-
-#include <machine/pmap.h>
-#include <machine/lock.h>
-
-#include "assym.s"
-
-#define MPLOCKED        lock ;
-
-       .data
-
-       .globl  panic
-       .globl  lwkt_switch_return
-
-#if defined(SWTCH_OPTIM_STATS)
-       .globl  swtch_optim_stats, tlb_flush_count
-swtch_optim_stats:     .long   0               /* number of _swtch_optims */
-tlb_flush_count:       .long   0
-#endif
-
-       .text
-
-
-/*
- * cpu_heavy_switch(next_thread)
- *
- *     Switch from the current thread to a new thread.  This entry
- *     is normally called via the thread->td_switch function, and will
- *     only be called when the current thread is a heavy weight process.
- *
- *     Some instructions have been reordered to reduce pipeline stalls.
- *
- *     YYY disable interrupts once giant is removed.
- */
-ENTRY(cpu_heavy_switch)
-       /*
-        * Save general regs
-        */
-       movl    PCPU(curthread),%ecx
-       movl    (%esp),%eax                     /* (reorder optimization) */
-       movl    TD_PCB(%ecx),%edx               /* EDX = PCB */
-       movl    %eax,PCB_EIP(%edx)              /* return PC may be modified */
-       movl    %ebx,PCB_EBX(%edx)
-       movl    %esp,PCB_ESP(%edx)
-       movl    %ebp,PCB_EBP(%edx)
-       movl    %esi,PCB_ESI(%edx)
-       movl    %edi,PCB_EDI(%edx)
-
-       movl    %ecx,%ebx                       /* EBX = curthread */
-       movl    TD_LWP(%ecx),%ecx
-       movl    PCPU(cpuid), %eax
-       movl    LWP_VMSPACE(%ecx), %ecx         /* ECX = vmspace */
-       MPLOCKED btrl   %eax, VM_PMAP+PM_ACTIVE(%ecx)
-
-       /*
-        * Push the LWKT switch restore function, which resumes a heavy
-        * weight process.  Note that the LWKT switcher is based on
-        * TD_SP, while the heavy weight process switcher is based on
-        * PCB_ESP.  TD_SP is usually two ints pushed relative to
-        * PCB_ESP.  We push the flags for later restore by cpu_heavy_restore.
-        */
-       pushfl
-       pushl   $cpu_heavy_restore
-       movl    %esp,TD_SP(%ebx)
-
-       /*
-        * Save debug regs if necessary
-        */
-       movb    PCB_FLAGS(%edx),%al
-       andb    $PCB_DBREGS,%al
-       jz      1f                              /* no, skip over */
-       movl    %dr7,%eax                       /* yes, do the save */
-       movl    %eax,PCB_DR7(%edx)
-       andl    $0x0000fc00, %eax               /* disable all watchpoints */
-       movl    %eax,%dr7
-       movl    %dr6,%eax
-       movl    %eax,PCB_DR6(%edx)
-       movl    %dr3,%eax
-       movl    %eax,PCB_DR3(%edx)
-       movl    %dr2,%eax
-       movl    %eax,PCB_DR2(%edx)
-       movl    %dr1,%eax
-       movl    %eax,PCB_DR1(%edx)
-       movl    %dr0,%eax
-       movl    %eax,PCB_DR0(%edx)
-1:
-#if NNPX > 0
-       /*
-        * Save the FP state if we have used the FP.  Note that calling
-        * npxsave will NULL out PCPU(npxthread).
-        */
-       cmpl    %ebx,PCPU(npxthread)
-       jne     1f
-       pushl   TD_SAVEFPU(%ebx)
-       call    npxsave                 /* do it in a big C function */
-       addl    $4,%esp                 /* EAX, ECX, EDX trashed */
-1:
-#endif /* NNPX > 0 */
-
-       /*
-        * Switch to the next thread, which was passed as an argument
-        * to cpu_heavy_switch().  Due to the eflags and switch-restore
-        * function we pushed, the argument is at 12(%esp).  Set the current
-        * thread, load the stack pointer, and 'ret' into the switch-restore
-        * function.
-        *
-        * The switch restore function expects the new thread to be in %eax
-        * and the old one to be in %ebx.
-        *
-        * There is a one-instruction window where curthread is the new
-        * thread but %esp still points to the old thread's stack, but
-        * we are protected by a critical section so it is ok.
-        */
-       movl    12(%esp),%eax           /* EAX = newtd, EBX = oldtd */
-       movl    %eax,PCPU(curthread)
-       movl    TD_SP(%eax),%esp
-       ret
-
-/*
- *  cpu_exit_switch()
- *
- *     The switch function is changed to this when a thread is going away
- *     for good.  We have to ensure that the MMU state is not cached, and
- *     we don't bother saving the existing thread state before switching.
- *
- *     At this point we are in a critical section and this cpu owns the
- *     thread's token, which serves as an interlock until the switchout is
- *     complete.
- */
-ENTRY(cpu_exit_switch)
-       /*
-        * Get us out of the vmspace
-        */
-#if 0
-       movl    IdlePTD,%ecx
-       movl    %cr3,%eax
-       cmpl    %ecx,%eax
-       je      1f
-       movl    %ecx,%cr3
-1:
-#endif
-       movl    PCPU(curthread),%ebx
-
-       /*
-        * If this is a process/lwp, deactivate the pmap after we've
-        * switched it out.
-        */
-       movl    TD_LWP(%ebx),%ecx
-       testl   %ecx,%ecx
-       jz      2f
-       movl    PCPU(cpuid), %eax
-       movl    LWP_VMSPACE(%ecx), %ecx         /* ECX = vmspace */
-       MPLOCKED btrl   %eax, VM_PMAP+PM_ACTIVE(%ecx)
-2:
-       /*
-        * Switch to the next thread.  RET into the restore function, which
-        * expects the new thread in EAX and the old in EBX.
-        *
-        * There is a one-instruction window where curthread is the new
-        * thread but %esp still points to the old thread's stack, but
-        * we are protected by a critical section so it is ok.
-        */
-       movl    4(%esp),%eax
-       movl    %eax,PCPU(curthread)
-       movl    TD_SP(%eax),%esp
-       ret
-
-/*
- * cpu_heavy_restore() (current thread in %eax on entry)
- *
- *     Restore the thread after an LWKT switch.  This entry is normally
- *     called via the LWKT switch restore function, which was pulled 
- *     off the thread stack and jumped to.
- *
- *     This entry is only called if the thread was previously saved
- *     using cpu_heavy_switch() (the heavy weight process thread switcher),
- *     or when a new process is initially scheduled.
- *
- *     NOTE: The lwp may be in any state, not necessarily LSRUN, because
- *     a preemption switch may interrupt the process and then return via 
- *     cpu_heavy_restore.
- *
- *     YYY theoretically we do not have to restore everything here, a lot
- *     of this junk can wait until we return to usermode.  But for now
- *     we restore everything.
- *
- *     YYY the PCB crap is really crap, it makes startup a bitch because
- *     we can't switch away.
- *
- *     YYY note: spl check is done in mi_switch when it splx()'s.
- */
-
-ENTRY(cpu_heavy_restore)
-       popfl
-       movl    TD_PCB(%eax),%edx               /* EDX = PCB */
-       movl    TD_LWP(%eax),%ecx
-
-#if defined(SWTCH_OPTIM_STATS)
-       incl    _swtch_optim_stats
-#endif
-       /*
-        * Tell the pmap that our cpu is using the VMSPACE now.  We cannot
-        * safely test/reload %cr3 until after we have set the bit in the
-        * pmap (remember, we do not hold the MP lock in the switch code).
-        */
-       movl    LWP_VMSPACE(%ecx), %ecx         /* ECX = vmspace */
-       movl    PCPU(cpuid), %esi
-       MPLOCKED btsl   %esi, VM_PMAP+PM_ACTIVE(%ecx)
-
-       /*
-        * Restore the MMU address space.  If it is the same as the last
-        * thread we don't have to invalidate the tlb (i.e. reload cr3).
-        * YYY which naturally also means that the PM_ACTIVE bit had better
-        * already have been set before we set it above, check? YYY
-        */
-#if 0
-       movl    %cr3,%esi
-       movl    PCB_CR3(%edx),%ecx
-       cmpl    %esi,%ecx
-       je      4f
-#if defined(SWTCH_OPTIM_STATS)
-       decl    _swtch_optim_stats
-       incl    _tlb_flush_count
-#endif
-       movl    %ecx,%cr3
-4:
-#endif
-       /*
-        * NOTE: %ebx is the previous thread and %eax is the new thread.
-        *       %ebx is retained throughout so we can return it.
-        *
-        *       lwkt_switch[_return] is responsible for handling TDF_RUNNING.
-        */
-#if 0
-       /*
-        * Deal with the PCB extension, restore the private tss
-        */
-       movl    PCB_EXT(%edx),%edi      /* check for a PCB extension */
-       movl    $1,%ecx                 /* maybe mark use of a private tss */
-       testl   %edi,%edi
-       jnz     2f
-
-       /*
-        * Going back to the common_tss.  We may need to update TSS_ESP0
-        * which sets the top of the supervisor stack when entering from
-        * usermode.  The PCB is at the top of the stack but we need another
-        * 16 bytes to take vm86 into account.
-        */
-       leal    -16(%edx),%ecx
-       movl    %ecx, PCPU(common_tss) + TSS_ESP0
-
-       cmpl    $0,PCPU(private_tss)    /* don't have to reload if      */
-       je      3f                      /* already using the common TSS */
-
-       subl    %ecx,%ecx               /* unmark use of private tss */
-
-       /*
-        * Get the address of the common TSS descriptor for the ltr.
-        * There is no way to get the address of a segment-accessed variable
-        * so we store a self-referential pointer at the base of the per-cpu
-        * data area and add the appropriate offset.
-        */
-       movl    $gd_common_tssd, %edi
-       addl    %fs:0, %edi
-
-       /*
-        * Move the correct TSS descriptor into the GDT slot, then reload
-        * ltr.
-        */
-2:
-       movl    %ecx,PCPU(private_tss)          /* mark/unmark private tss */
-       movl    PCPU(tss_gdt), %ecx             /* entry in GDT */
-       movl    0(%edi), %eax
-       movl    %eax, 0(%ecx)
-       movl    4(%edi), %eax
-       movl    %eax, 4(%ecx)
-       movl    $GPROC0_SEL*8, %esi             /* GSEL(entry, SEL_KPL) */
-       ltr     %si
-3:
-#endif
-       /*
-        * Restore general registers.  %ebx is restored later.
-        */
-       movl    PCB_ESP(%edx),%esp
-       movl    PCB_EBP(%edx),%ebp
-       movl    PCB_ESI(%edx),%esi
-       movl    PCB_EDI(%edx),%edi
-       movl    PCB_EIP(%edx),%eax
-       movl    %eax,(%esp)
-
-#if 0
-       /*
-        * Restore the user LDT if we have one
-        */
-       cmpl    $0, PCB_USERLDT(%edx)
-       jnz     1f
-       movl    _default_ldt,%eax
-       cmpl    PCPU(currentldt),%eax
-       je      2f
-       lldt    _default_ldt
-       movl    %eax,PCPU(currentldt)
-       jmp     2f
-1:     pushl   %edx
-       call    set_user_ldt
-       popl    %edx
-2:
-#endif
-#if 0
-       /*
-        * Restore the user TLS if we have one
-        */
-       pushl   %edx
-       call    set_user_TLS
-       popl    %edx
-#endif
-
-       /*
-        * Restore the DEBUG register state if necessary.
-        */
-       movb    PCB_FLAGS(%edx),%al
-       andb    $PCB_DBREGS,%al
-       jz      1f                              /* no, skip over */
-       movl    PCB_DR6(%edx),%eax              /* yes, do the restore */
-       movl    %eax,%dr6
-       movl    PCB_DR3(%edx),%eax
-       movl    %eax,%dr3
-       movl    PCB_DR2(%edx),%eax
-       movl    %eax,%dr2
-       movl    PCB_DR1(%edx),%eax
-       movl    %eax,%dr1
-       movl    PCB_DR0(%edx),%eax
-       movl    %eax,%dr0
-       movl    %dr7,%eax                /* load dr7 so as not to disturb */
-       andl    $0x0000fc00,%eax         /*   reserved bits               */
-       movl    PCB_DR7(%edx),%ecx
-       andl    $~0x0000fc00,%ecx
-       orl     %ecx,%eax
-       movl    %eax,%dr7
-1:
-       movl    %ebx,%eax               /* return previous thread */
-       movl    PCB_EBX(%edx),%ebx
-       ret
-
-/*
- * savectx(pcb)
- *
- * Update pcb, saving current processor state.
- */
-ENTRY(savectx)
-       /* fetch PCB */
-       movl    4(%esp),%ecx
-
-       /* caller's return address - child won't execute this routine */
-       movl    (%esp),%eax
-       movl    %eax,PCB_EIP(%ecx)
-       movl    %ebx,PCB_EBX(%ecx)
-       movl    %esp,PCB_ESP(%ecx)
-       movl    %ebp,PCB_EBP(%ecx)
-       movl    %esi,PCB_ESI(%ecx)
-       movl    %edi,PCB_EDI(%ecx)
-
-#if NNPX > 0
-       /*
-        * If npxthread == NULL, then the npx h/w state is irrelevant and the
-        * state had better already be in the pcb.  This is true for forks
-        * but not for dumps (the old book-keeping with FP flags in the pcb
-        * always lost for dumps because the dump pcb has 0 flags).
-        *
-        * If npxthread != NULL, then we have to save the npx h/w state to
-        * npxthread's pcb and copy it to the requested pcb, or save to the
-        * requested pcb and reload.  Copying is easier because we would
-        * have to handle h/w bugs for reloading.  We used to lose the
-        * parent's npx state for forks by forgetting to reload.
-        */
-       movl    PCPU(npxthread),%eax
-       testl   %eax,%eax
-       je      1f
-
-       pushl   %ecx                    /* target pcb */
-       movl    TD_SAVEFPU(%eax),%eax   /* originating savefpu area */
-       pushl   %eax
-
-       pushl   %eax
-       call    npxsave
-       addl    $4,%esp
-
-       popl    %eax
-       popl    %ecx
-
-       pushl   $PCB_SAVEFPU_SIZE
-       leal    PCB_SAVEFPU(%ecx),%ecx
-       pushl   %ecx
-       pushl   %eax
-       call    bcopy
-       addl    $12,%esp
-#endif /* NNPX > 0 */
-
-1:
-       ret
-
-/*
- * cpu_idle_restore()  (current thread in %eax on entry) (one-time execution)
- *
- *     Don't bother setting up any regs other then %ebp so backtraces
- *     don't die.  This restore function is used to bootstrap into the
- *     cpu_idle() LWKT only, after that cpu_lwkt_*() will be used for
- *     switching.
- *
- *     Clear TDF_RUNNING in old thread only after we've cleaned up %cr3.
- *     This only occurs during system boot so no special handling is
- *     required for migration.
- *
- *     If we are an AP we have to call ap_init() before jumping to
- *     cpu_idle().  ap_init() will synchronize with the BP and finish
- *     setting up various ncpu-dependant globaldata fields.  This may
- *     happen on UP as well as SMP if we happen to be simulating multiple
- *     cpus.
- */
-ENTRY(cpu_idle_restore)
-       /* cli */
-       movl    $0,%ebp
-       pushl   $0
-       andl    $~TDF_RUNNING,TD_FLAGS(%ebx)
-       orl     $TDF_RUNNING,TD_FLAGS(%eax)     /* manual, no switch_return */
-       cmpl    $0,PCPU(cpuid)
-       je      1f
-       call    ap_init
-1:
-       /* sti */
-       jmp     cpu_idle
-
-/*
- * cpu_kthread_restore() (current thread is %eax on entry) (one-time execution)
- *
- *     Don't bother setting up any regs other then %ebp so backtraces
- *     don't die.  This restore function is used to bootstrap into an
- *     LWKT based kernel thread only.  cpu_lwkt_switch() will be used
- *     after this.
- *
- *     Since all of our context is on the stack we are reentrant and
- *     we can release our critical section and enable interrupts early.
- *
- *     Because this switch target does not 'return' to lwkt_switch()
- *     we have to call lwkt_switch_return(otd) to clean up otd.
- *     otd is in %ebx.
- */
-ENTRY(cpu_kthread_restore)
-       /*sti*/
-       movl    TD_PCB(%eax),%esi
-       movl    $0,%ebp
-
-       pushl   %eax
-       pushl   %ebx    /* argument to lwkt_switch_return */
-       call    lwkt_switch_return
-       addl    $4,%esp
-       popl    %eax
-       decl    TD_CRITCOUNT(%eax)
-       popl    %eax            /* kthread exit function */
-       pushl   PCB_EBX(%esi)   /* argument to ESI function */
-       pushl   %eax            /* set exit func as return address */
-       movl    PCB_ESI(%esi),%eax
-       jmp     *%eax
-
-/*
- * cpu_lwkt_switch()
- *
- *     Standard LWKT switching function.  Only non-scratch registers are
- *     saved and we don't bother with the MMU state or anything else.
- *
- *     This function is always called while in a critical section.
- *
- *     There is a one-instruction window where curthread is the new
- *     thread but %esp still points to the old thread's stack, but
- *     we are protected by a critical section so it is ok.
- *
- *     YYY BGL, SPL
- */
-ENTRY(cpu_lwkt_switch)
-       pushl   %ebp    /* note: GDB hacked to locate ebp relative to td_sp */
-       pushl   %ebx
-       movl    PCPU(curthread),%ebx
-       pushl   %esi
-       pushl   %edi
-       pushfl
-       /* warning: adjust movl into %eax below if you change the pushes */
-
-#if NNPX > 0
-       /*
-        * Save the FP state if we have used the FP.  Note that calling
-        * npxsave will NULL out PCPU(npxthread).
-        *
-        * We have to deal with the FP state for LWKT threads in case they
-        * happen to get preempted or block while doing an optimized
-        * bzero/bcopy/memcpy.
-        */
-       cmpl    %ebx,PCPU(npxthread)
-       jne     1f
-       pushl   TD_SAVEFPU(%ebx)
-       call    npxsave                 /* do it in a big C function */
-       addl    $4,%esp                 /* EAX, ECX, EDX trashed */
-1:
-#endif /* NNPX > 0 */
-
-       movl    4+20(%esp),%eax         /* switch to this thread */
-       pushl   $cpu_lwkt_restore
-       movl    %esp,TD_SP(%ebx)
-       movl    %eax,PCPU(curthread)
-       movl    TD_SP(%eax),%esp
-
-       /*
-        * eax contains new thread, ebx contains old thread.
-        */
-       ret
-
-/*
- * cpu_lwkt_restore()  (current thread in %eax on entry)
- *
- *     Standard LWKT restore function.  This function is always called
- *     while in a critical section.
- *     
- *     Warning: due to preemption the restore function can be used to 
- *     'return' to the original thread.  Interrupt disablement must be
- *     protected through the switch so we cannot run splz here.
- */
-ENTRY(cpu_lwkt_restore)
-       /*
-        * NOTE: %ebx is the previous thread and %eax is the new thread.
-        *       %ebx is retained throughout so we can return it.
-        *
-        *       lwkt_switch[_return] is responsible for handling TDF_RUNNING.
-        */
-       movl    %ebx,%eax
-       popfl
-       popl    %edi
-       popl    %esi
-       popl    %ebx
-       popl    %ebp
-       ret
-
-/*
- * bootstrap_idle()
- *
- * Make AP become the idle loop.
- */
-ENTRY(bootstrap_idle)
-       movl    PCPU(curthread),%eax
-       movl    %eax,%ebx
-       movl    TD_SP(%eax),%esp
-       ret
diff --git a/sys/platform/vkernel/i386/tls.c b/sys/platform/vkernel/i386/tls.c
deleted file mode 100644 (file)
index 13195f8..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (c) 2003,2004 The DragonFly Project.  All rights reserved.
- * 
- * This code is derived from software contributed to The DragonFly Project
- * by David Xu <davidxu@t2t2.com> and Matthew Dillon <dillon@backplane.com>
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * $DragonFly: src/sys/platform/vkernel/i386/tls.c,v 1.3 2007/01/08 03:33:43 dillon Exp $
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/sysproto.h>
-#include <sys/kernel.h>
-#include <sys/proc.h>
-#include <sys/sysent.h>
-#include <sys/sysctl.h>
-#include <sys/tls.h>
-#include <sys/reg.h>
-#include <sys/thread2.h>
-
-#include <machine/cpu.h>
-#include <machine/clock.h>
-#include <machine/specialreg.h>
-#include <machine/md_var.h>
-#include <machine/pcb_ext.h>           /* pcb.h included via sys/user.h */
-#include <machine/globaldata.h>                /* CPU_prvspace */
-#include <machine/smp.h>
-
-/*
- * set a TLS descriptor and resync the GDT.  A descriptor may be cleared
- * by passing info=NULL and infosize=0.  Note that hardware limitations may
- * cause the size passed in tls_info to be approximated. 
- *
- * Returns the value userland needs to load into %gs representing the 
- * TLS descriptor or -1 on error.
- *
- * (struct tls_info *info, int infosize, int which)
- *
- * MPSAFE
- */
-int
-sys_set_tls_area(struct set_tls_area_args *uap)
-{
-       struct tls_info info;
-       struct segment_descriptor *desc;
-       int error;
-       int i;
-
-       /*
-        * Sanity checks
-        */
-       i = uap->which;
-       if (i < 0 || i >= NGTLS)
-               return (ERANGE);
-       if (uap->infosize < 0)
-               return (EINVAL);
-
-       /*
-        * Maintain forwards compatibility with future extensions.
-        */
-       if (uap->infosize != sizeof(info)) {
-               bzero(&info, sizeof(info));
-               error = copyin(uap->info, &info, 
-                               min(sizeof(info), uap->infosize));
-       } else {
-               error = copyin(uap->info, &info, sizeof(info));
-       }
-       if (error)
-               return (error);
-       if (info.size < -1)
-               return (EINVAL);
-       if (info.size > (1 << 20))
-               info.size = (info.size + PAGE_MASK) & ~PAGE_MASK;
-
-       /*
-        * Load the descriptor.  A critical section is required in case
-        * an interrupt thread comes along and switches us out and then back
-        * in.
-        */
-       desc = &curthread->td_tls.tls[i];
-       crit_enter();
-       if (info.size == 0) {
-               bzero(desc, sizeof(*desc));
-       } else {
-               desc->sd_lobase = (intptr_t)info.base;
-               desc->sd_hibase = (intptr_t)info.base >> 24;
-               desc->sd_def32 = 1;
-               desc->sd_type = SDT_MEMRWA;
-               desc->sd_dpl = SEL_UPL;
-               desc->sd_xx = 0;
-               desc->sd_p = 1;
-               if (info.size == -1) {
-                       /*
-                        * A descriptor size of -1 is a hack to map the
-                        * whole address space.  This type of mapping is
-                        * required for direct-tls accesses of variable
-                        * data, e.g. %gs:OFFSET where OFFSET is negative.
-                        */
-                       desc->sd_lolimit = -1;
-                       desc->sd_hilimit = -1;
-                       desc->sd_gran = 1;
-               } else if (info.size >= (1 << 20)) {
-                       /*
-                        * A descriptor size greater then 1MB requires page
-                        * granularity (the lo+hilimit field is only 20 bits)
-                        */
-                       desc->sd_lolimit = info.size >> PAGE_SHIFT;
-                       desc->sd_hilimit = info.size >> (PAGE_SHIFT + 16);
-                       desc->sd_gran = 1;
-               } else {
-                       /*
-                        * Otherwise a byte-granular size is supported.
-                        */
-                       desc->sd_lolimit = info.size;
-                       desc->sd_hilimit = info.size >> 16;
-                       desc->sd_gran = 0;
-               }
-       }
-       crit_exit();
-       uap->sysmsg_result = GSEL(GTLS_START + i, SEL_UPL);
-       set_user_TLS();
-       return(0);
-}
-       
-/*
- * Return the specified TLS descriptor to userland.
- *
- * Returns the value userland needs to load into %gs representing the 
- * TLS descriptor or -1 on error.
- *
- * (struct tls_info *info, int infosize, int which)
- *
- * MPSAFE
- */
-int
-sys_get_tls_area(struct get_tls_area_args *uap)
-{
-       struct tls_info info;
-       struct segment_descriptor *desc;
-       int error;
-       int i;
-
-       /*
-        * Sanity checks
-        */
-       i = uap->which;
-       if (i < 0 || i >= NGTLS)
-               return (ERANGE);
-       if (uap->infosize < 0)
-               return (EINVAL);
-
-       /*
-        * unpack the descriptor, ENOENT is returned for any descriptor
-        * which has not been loaded.  uap->info may be NULL.
-        */
-       desc = &curthread->td_tls.tls[i];
-       if (desc->sd_p) {
-               if (uap->info && uap->infosize > 0) {
-                       bzero(&info, sizeof(info));
-                       info.base = (void *)(intptr_t)
-                               ((desc->sd_hibase << 24) | desc->sd_lobase);
-                       info.size = (desc->sd_hilimit << 16) | desc->sd_lolimit;
-                       if (desc->sd_gran)
-                               info.size <<= PAGE_SHIFT;
-                       error = copyout(&info, uap->info,
-                                       min(sizeof(info), uap->infosize));
-               } else {
-                       error = 0;
-               }
-               uap->sysmsg_result = GSEL(GTLS_START + i, SEL_UPL);
-       } else {
-               error = ENOENT;
-       }
-       return(error);
-}
-
-/*
- * This function is a NOP because the TLS segments are proactively copied
- * by vmspace_ctl() when we switch to the (emulated) user process.
- */
-void
-set_user_TLS(void)
-{
-}
diff --git a/sys/platform/vkernel/i386/trap.c b/sys/platform/vkernel/i386/trap.c
deleted file mode 100644 (file)
index 39ee04f..0000000
+++ /dev/null
@@ -1,1425 +0,0 @@
-/*-
- * Copyright (C) 1994, David Greenman
- * Copyright (c) 1990, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the University of Utah, and William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     from: @(#)trap.c        7.4 (Berkeley) 5/13/91
- * $FreeBSD: src/sys/i386/i386/trap.c,v 1.147.2.11 2003/02/27 19:09:59 luoqi Exp $
- */
-
-/*
- * 386 Trap and System call handling
- */
-
-#include "use_isa.h"
-#include "use_npx.h"
-
-#include "opt_ddb.h"
-#include "opt_ktrace.h"
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/proc.h>
-#include <sys/pioctl.h>
-#include <sys/kernel.h>
-#include <sys/resourcevar.h>
-#include <sys/signalvar.h>
-#include <sys/signal2.h>
-#include <sys/syscall.h>
-#include <sys/sysctl.h>
-#include <sys/sysent.h>
-#include <sys/uio.h>
-#include <sys/vmmeter.h>
-#include <sys/malloc.h>
-#ifdef KTRACE
-#include <sys/ktrace.h>
-#endif
-#include <sys/ktr.h>
-#include <sys/vkernel.h>
-#include <sys/sysproto.h>
-#include <sys/sysunion.h>
-#include <sys/vmspace.h>
-
-#include <vm/vm.h>
-#include <vm/vm_param.h>
-#include <sys/lock.h>
-#include <vm/pmap.h>
-#include <vm/vm_kern.h>
-#include <vm/vm_map.h>
-#include <vm/vm_page.h>
-#include <vm/vm_extern.h>
-
-#include <machine/cpu.h>
-#include <machine/md_var.h>
-#include <machine/pcb.h>
-#include <machine/smp.h>
-#include <machine/tss.h>
-#include <machine/globaldata.h>
-
-#include <machine/vm86.h>
-
-#include <ddb/ddb.h>
-
-#include <sys/msgport2.h>
-#include <sys/thread2.h>
-#include <sys/mplock2.h>
-
-#define MAKEMPSAFE(have_mplock)                        \
-       if (have_mplock == 0) {                 \
-               get_mplock();                   \
-               have_mplock = 1;                \
-       }
-
-int (*pmath_emulate) (struct trapframe *);
-
-static int trap_pfault (struct trapframe *, int, vm_offset_t);
-static void trap_fatal (struct trapframe *, int, vm_offset_t);
-void dblfault_handler (void);
-
-#if 0
-extern inthand_t IDTVEC(syscall);
-#endif
-
-#define MAX_TRAP_MSG           28
-static char *trap_msg[] = {
-       "",                                     /*  0 unused */
-       "privileged instruction fault",         /*  1 T_PRIVINFLT */
-       "",                                     /*  2 unused */
-       "breakpoint instruction fault",         /*  3 T_BPTFLT */
-       "",                                     /*  4 unused */
-       "",                                     /*  5 unused */
-       "arithmetic trap",                      /*  6 T_ARITHTRAP */
-       "system forced exception",              /*  7 T_ASTFLT */
-       "",                                     /*  8 unused */
-       "general protection fault",             /*  9 T_PROTFLT */
-       "trace trap",                           /* 10 T_TRCTRAP */
-       "",                                     /* 11 unused */
-       "page fault",                           /* 12 T_PAGEFLT */
-       "",                                     /* 13 unused */
-       "alignment fault",                      /* 14 T_ALIGNFLT */
-       "",                                     /* 15 unused */
-       "",                                     /* 16 unused */
-       "",                                     /* 17 unused */
-       "integer divide fault",                 /* 18 T_DIVIDE */
-       "non-maskable interrupt trap",          /* 19 T_NMI */
-       "overflow trap",                        /* 20 T_OFLOW */
-       "FPU bounds check fault",               /* 21 T_BOUND */
-       "FPU device not available",             /* 22 T_DNA */
-       "double fault",                         /* 23 T_DOUBLEFLT */
-       "FPU operand fetch fault",              /* 24 T_FPOPFLT */
-       "invalid TSS fault",                    /* 25 T_TSSFLT */
-       "segment not present fault",            /* 26 T_SEGNPFLT */
-       "stack fault",                          /* 27 T_STKFLT */
-       "machine check trap",                   /* 28 T_MCHK */
-};
-
-#ifdef DDB
-static int ddb_on_nmi = 1;
-SYSCTL_INT(_machdep, OID_AUTO, ddb_on_nmi, CTLFLAG_RW,
-       &ddb_on_nmi, 0, "Go to DDB on NMI");
-#endif
-static int panic_on_nmi = 1;
-SYSCTL_INT(_machdep, OID_AUTO, panic_on_nmi, CTLFLAG_RW,
-       &panic_on_nmi, 0, "Panic on NMI");
-static int fast_release;
-SYSCTL_INT(_machdep, OID_AUTO, fast_release, CTLFLAG_RW,
-       &fast_release, 0, "Passive Release was optimal");
-static int slow_release;
-SYSCTL_INT(_machdep, OID_AUTO, slow_release, CTLFLAG_RW,
-       &slow_release, 0, "Passive Release was nonoptimal");
-
-/*
- * Passively intercepts the thread switch function to increase the thread
- * priority from a user priority to a kernel priority, reducing
- * syscall and trap overhead for the case where no switch occurs.
- *
- * Synchronizes td_ucred with p_ucred.  This is used by system calls,
- * signal handling, faults, AST traps, and anything else that enters the
- * kernel from userland and provides the kernel with a stable read-only
- * copy of the process ucred.
- */
-static __inline void
-userenter(struct thread *curtd, struct proc *curp)
-{
-       struct ucred *ocred;
-       struct ucred *ncred;
-
-       curtd->td_release = lwkt_passive_release;
-
-       if (curtd->td_ucred != curp->p_ucred) {
-               ncred = crhold(curp->p_ucred);
-               ocred = curtd->td_ucred;
-               curtd->td_ucred = ncred;
-               if (ocred)
-                       crfree(ocred);
-       }
-
-}
-
-/*
- * Handle signals, profiling, and other AST's and/or tasks that
- * must be completed before we can return to or try to return to userland.
- *
- * Note that td_sticks is a 64 bit quantity, but there's no point doing 64
- * arithmatic on the delta calculation so the absolute tick values are
- * truncated to an integer.
- */
-static void
-userret(struct lwp *lp, struct trapframe *frame, int sticks)
-{
-       struct proc *p = lp->lwp_proc;
-       int sig;
-
-       /*
-        * Charge system time if profiling.  Note: times are in microseconds.
-        * This may do a copyout and block, so do it first even though it
-        * means some system time will be charged as user time.
-        */
-       if (p->p_flags & P_PROFIL) {
-               addupc_task(p, frame->tf_eip, 
-                       (u_int)((int)lp->lwp_thread->td_sticks - sticks));
-       }
-
-recheck:
-       /*
-        * Specific on-return-to-usermode checks (LWP_MP_WEXIT,
-        * LWP_MP_VNLRU, etc).
-        */
-       if (lp->lwp_mpflags & LWP_MP_URETMASK)
-               lwpuserret(lp);
-
-       /*
-        * Block here if we are in a stopped state.
-        */
-       if (p->p_stat == SSTOP) {
-               lwkt_gettoken(&p->p_token);
-               tstop();
-               lwkt_reltoken(&p->p_token);
-               goto recheck;
-       }
-
-       /*
-        * Post any pending upcalls.  If running a virtual kernel be sure
-        * to restore the virtual kernel's vmspace before posting the upcall.
-        */
-       if (p->p_flags & (P_SIGVTALRM | P_SIGPROF)) {
-               lwkt_gettoken(&p->p_token);
-               if (p->p_flags & P_SIGVTALRM) {
-                       p->p_flags &= ~P_SIGVTALRM;
-                       ksignal(p, SIGVTALRM);
-               }
-               if (p->p_flags & P_SIGPROF) {
-                       p->p_flags &= ~P_SIGPROF;
-                       ksignal(p, SIGPROF);
-               }
-               lwkt_reltoken(&p->p_token);
-               goto recheck;
-       }
-
-       /*
-        * Post any pending signals
-        *
-        * WARNING!  postsig() can exit and not return.
-        */
-       if ((sig = CURSIG_TRACE(lp)) != 0) {
-               lwkt_gettoken(&p->p_token);
-               postsig(sig);
-               lwkt_reltoken(&p->p_token);
-               goto recheck;
-       }
-
-       /*
-        * block here if we are swapped out, but still process signals
-        * (such as SIGKILL).  proc0 (the swapin scheduler) is already
-        * aware of our situation, we do not have to wake it up.
-        */
-       if (p->p_flags & P_SWAPPEDOUT) {
-               lwkt_gettoken(&p->p_token);
-               get_mplock();
-               p->p_flags |= P_SWAPWAIT;
-               swapin_request();
-               if (p->p_flags & P_SWAPWAIT)
-                       tsleep(p, PCATCH, "SWOUT", 0);
-               p->p_flags &= ~P_SWAPWAIT;
-               rel_mplock();
-               lwkt_reltoken(&p->p_token);
-               goto recheck;
-       }
-
-       /*
-        * In a multi-threaded program it is possible for a thread to change
-        * signal state during a system call which temporarily changes the
-        * signal mask.  In this case postsig() might not be run and we
-        * have to restore the mask ourselves.
-        */
-       if (lp->lwp_flags & LWP_OLDMASK) {
-               lp->lwp_flags &= ~LWP_OLDMASK;
-               lp->lwp_sigmask = lp->lwp_oldsigmask;
-               goto recheck;
-       }
-}
-
-/*
- * Cleanup from userenter and any passive release that might have occured.
- * We must reclaim the current-process designation before we can return
- * to usermode.  We also handle both LWKT and USER reschedule requests.
- */
-static __inline void
-userexit(struct lwp *lp)
-{
-       struct thread *td = lp->lwp_thread;
-       /* globaldata_t gd = td->td_gd; */
-
-       /*
-        * Handle stop requests at kernel priority.  Any requests queued
-        * after this loop will generate another AST.
-        */
-       while (lp->lwp_proc->p_stat == SSTOP) {
-               lwkt_gettoken(&lp->lwp_proc->p_token);
-               tstop();
-               lwkt_reltoken(&lp->lwp_proc->p_token);
-       }
-
-       /*
-        * Become the current user scheduled process if we aren't already,
-        * and deal with reschedule requests and other factors.
-        */
-       lp->lwp_proc->p_usched->acquire_curproc(lp);
-       /* WARNING: we may have migrated cpu's */
-       /* gd = td->td_gd; */
-
-       /*
-        * Reduce our priority in preparation for a return to userland.  If
-        * our passive release function was still in place, our priority was
-        * never raised and does not need to be reduced.
-        */
-       lwkt_passive_recover(td);
-}
-
-#if !defined(KTR_KERNENTRY)
-#define        KTR_KERNENTRY   KTR_ALL
-#endif
-KTR_INFO_MASTER(kernentry);
-KTR_INFO(KTR_KERNENTRY, kernentry, trap, 0,
-        "TRAP(pid %d, tid %d, trapno %d, eva %lu)",
-        pid_t pid, lwpid_t tid,  register_t trapno, vm_offset_t eva);
-KTR_INFO(KTR_KERNENTRY, kernentry, trap_ret, 0, "TRAP_RET(pid %d, tid %d)",
-        pid_t pid, lwpid_t tid);
-KTR_INFO(KTR_KERNENTRY, kernentry, syscall, 0, "SYSC(pid %d, tid %d, nr %d)",
-        pid_t pid, lwpid_t tid,  register_t trapno);
-KTR_INFO(KTR_KERNENTRY, kernentry, syscall_ret, 0, "SYSRET(pid %d, tid %d, err %d)",
-        pid_t pid, lwpid_t tid,  int err);
-KTR_INFO(KTR_KERNENTRY, kernentry, fork_ret, 0, "FORKRET(pid %d, tid %d)",
-        pid_t pid, lwpid_t tid);
-
-/*
- * Exception, fault, and trap interface to the kernel.
- * This common code is called from assembly language IDT gate entry
- * routines that prepare a suitable stack frame, and restore this
- * frame after the exception has been processed.
- *
- * This function is also called from doreti in an interlock to handle ASTs.
- * For example:  hardwareint->INTROUTINE->(set ast)->doreti->trap
- *
- * NOTE!  We have to retrieve the fault address prior to obtaining the
- * MP lock because get_mplock() may switch out.  YYY cr2 really ought
- * to be retrieved by the assembly code, not here.
- *
- * XXX gd_trap_nesting_level currently prevents lwkt_switch() from panicing
- * if an attempt is made to switch from a fast interrupt or IPI.  This is
- * necessary to properly take fatal kernel traps on SMP machines if 
- * get_mplock() has to block.
- */
-
-void
-user_trap(struct trapframe *frame)
-{
-       struct globaldata *gd = mycpu;
-       struct thread *td = gd->gd_curthread;
-       struct lwp *lp = td->td_lwp;
-       struct proc *p;
-       int sticks = 0;
-       int i = 0, ucode = 0, type, code;
-       int have_mplock = 0;
-#ifdef INVARIANTS
-       int crit_count = td->td_critcount;
-       lwkt_tokref_t curstop = td->td_toks_stop;
-#endif
-       vm_offset_t eva;
-
-       p = td->td_proc;
-
-       /*
-        * This is a bad kludge to avoid changing the various trapframe
-        * structures.  Because we are enabled as a virtual kernel,
-        * the original tf_err field will be passed to us shifted 16
-        * over in the tf_trapno field for T_PAGEFLT.
-        */
-       if (frame->tf_trapno == T_PAGEFLT)
-               eva = frame->tf_err;
-       else
-               eva = 0;
-#if 0
-       kprintf("USER_TRAP AT %08x xflags %d trapno %d eva %08x\n", 
-               frame->tf_eip, frame->tf_xflags, frame->tf_trapno, eva);
-#endif
-
-       /*
-        * Everything coming from user mode runs through user_trap,
-        * including system calls.
-        */
-       if (frame->tf_trapno == T_SYSCALL80) {
-               syscall2(frame);
-               return;
-       }
-
-       KTR_LOG(kernentry_trap, lp->lwp_proc->p_pid, lp->lwp_tid,
-               frame->tf_trapno, eva);
-
-#ifdef DDB
-       if (db_active) {
-               eva = (frame->tf_trapno == T_PAGEFLT ? rcr2() : 0);
-               ++gd->gd_trap_nesting_level;
-               MAKEMPSAFE(have_mplock);
-               trap_fatal(frame, TRUE, eva);
-               --gd->gd_trap_nesting_level;
-               goto out2;
-       }
-#endif
-
-#if defined(I586_CPU) && !defined(NO_F00F_HACK)
-restart:
-#endif
-       type = frame->tf_trapno;
-       code = frame->tf_err;
-
-       userenter(td, p);
-
-       sticks = (int)td->td_sticks;
-       lp->lwp_md.md_regs = frame;
-
-       switch (type) {
-       case T_PRIVINFLT:       /* privileged instruction fault */
-               i = SIGILL;
-               ucode = ILL_PRVOPC;
-               break;
-
-       case T_BPTFLT:          /* bpt instruction fault */
-       case T_TRCTRAP:         /* trace trap */
-               frame->tf_eflags &= ~PSL_T;
-               i = SIGTRAP;
-               ucode = (type == T_TRCTRAP ? TRAP_TRACE : TRAP_BRKPT);
-               break;
-
-       case T_ARITHTRAP:       /* arithmetic trap */
-               ucode = code;
-               i = SIGFPE;
-               break;
-
-       case T_ASTFLT:          /* Allow process switch */
-               mycpu->gd_cnt.v_soft++;
-               if (mycpu->gd_reqflags & RQF_AST_OWEUPC) {
-                       atomic_clear_int(&mycpu->gd_reqflags,
-                                   RQF_AST_OWEUPC);
-                       addupc_task(p, p->p_prof.pr_addr,
-                                   p->p_prof.pr_ticks);
-               }
-               goto out;
-
-               /*
-                * The following two traps can happen in
-                * vm86 mode, and, if so, we want to handle
-                * them specially.
-                */
-       case T_PROTFLT:         /* general protection fault */
-       case T_STKFLT:          /* stack fault */
-#if 0
-               if (frame->tf_eflags & PSL_VM) {
-                       i = vm86_emulate((struct vm86frame *)frame);
-                       if (i == 0)
-                               goto out;
-                       break;
-               }
-#endif
-               i = SIGBUS;
-               ucode = (type == T_PROTFLT) ? BUS_OBJERR : BUS_ADRERR;
-               break;
-       case T_SEGNPFLT:        /* segment not present fault */
-               i = SIGBUS;
-               ucode = BUS_ADRERR;
-               break;
-       case T_TSSFLT:          /* invalid TSS fault */
-       case T_DOUBLEFLT:       /* double fault */
-       default:
-               i = SIGBUS;
-               ucode = BUS_OBJERR;
-               break;
-
-       case T_PAGEFLT:         /* page fault */
-               MAKEMPSAFE(have_mplock);
-               i = trap_pfault(frame, TRUE, eva);
-               if (i == -1)
-                       goto out;
-#if defined(I586_CPU) && !defined(NO_F00F_HACK)
-               if (i == -2)
-                       goto restart;
-#endif
-               if (i == 0)
-                       goto out;
-
-               if (i == SIGSEGV)
-                       ucode = SEGV_MAPERR;
-               else {
-                       i = SIGSEGV;
-                       ucode = SEGV_ACCERR;
-               }
-               break;
-
-       case T_DIVIDE:          /* integer divide fault */
-               ucode = FPE_INTDIV;
-               i = SIGFPE;
-               break;
-
-#if NISA > 0
-       case T_NMI:
-               MAKEMPSAFE(have_mplock);
-               /* machine/parity/power fail/"kitchen sink" faults */
-               if (isa_nmi(code) == 0) {
-#ifdef DDB
-                       /*
-                        * NMI can be hooked up to a pushbutton
-                        * for debugging.
-                        */
-                       if (ddb_on_nmi) {
-                               kprintf ("NMI ... going to debugger\n");
-                               kdb_trap (type, 0, frame);
-                       }
-#endif /* DDB */
-                       goto out2;
-               } else if (panic_on_nmi)
-                       panic("NMI indicates hardware failure");
-               break;
-#endif /* NISA > 0 */
-
-       case T_OFLOW:           /* integer overflow fault */
-               ucode = FPE_INTOVF;
-               i = SIGFPE;
-               break;
-
-       case T_BOUND:           /* bounds check fault */
-               ucode = FPE_FLTSUB;
-               i = SIGFPE;
-               break;
-
-       case T_DNA:
-               /*
-                * Virtual kernel intercept - pass the DNA exception
-                * to the (emulated) virtual kernel if it asked to handle 
-                * it.  This occurs when the virtual kernel is holding
-                * onto the FP context for a different emulated
-                * process then the one currently running.
-                *
-                * We must still call npxdna() since we may have
-                * saved FP state that the (emulated) virtual kernel
-                * needs to hand over to a different emulated process.
-                */
-               if (lp->lwp_vkernel && lp->lwp_vkernel->ve &&
-                   (td->td_pcb->pcb_flags & FP_VIRTFP)
-               ) {
-                       npxdna(frame);
-                       break;
-               }
-
-#if NNPX > 0
-               /* 
-                * The kernel may have switched out the FP unit's
-                * state, causing the user process to take a fault
-                * when it tries to use the FP unit.  Restore the
-                * state here
-                */
-               if (npxdna(frame))
-                       goto out;
-#endif
-               if (!pmath_emulate) {
-                       i = SIGFPE;
-                       ucode = FPE_FPU_NP_TRAP;
-                       break;
-               }
-               i = (*pmath_emulate)(frame);
-               if (i == 0) {
-                       if (!(frame->tf_eflags & PSL_T))
-                               goto out2;
-                       frame->tf_eflags &= ~PSL_T;
-                       i = SIGTRAP;
-               }
-               /* else ucode = emulator_only_knows() XXX */
-               break;
-
-       case T_FPOPFLT:         /* FPU operand fetch fault */
-               ucode = ILL_COPROC;
-               i = SIGILL;
-               break;
-
-       case T_XMMFLT:          /* SIMD floating-point exception */
-               ucode = 0; /* XXX */
-               i = SIGFPE;
-               break;
-       }
-
-       /*
-        * Virtual kernel intercept - if the fault is directly related to a
-        * VM context managed by a virtual kernel then let the virtual kernel
-        * handle it.
-        */
-       if (lp->lwp_vkernel && lp->lwp_vkernel->ve) {
-               vkernel_trap(lp, frame);
-               goto out;
-       }
-
-       /*
-        * Translate fault for emulators (e.g. Linux) 
-        */
-       if (*p->p_sysent->sv_transtrap)
-               i = (*p->p_sysent->sv_transtrap)(i, type);
-
-       MAKEMPSAFE(have_mplock);
-       trapsignal(lp, i, ucode);
-
-#ifdef DEBUG
-       if (type <= MAX_TRAP_MSG) {
-               uprintf("fatal process exception: %s",
-                       trap_msg[type]);
-               if ((type == T_PAGEFLT) || (type == T_PROTFLT))
-                       uprintf(", fault VA = 0x%lx", (u_long)eva);
-               uprintf("\n");
-       }
-#endif
-
-out:
-       userret(lp, frame, sticks);
-       userexit(lp);
-out2:  ;
-       if (have_mplock)
-               rel_mplock();
-       KTR_LOG(kernentry_trap_ret, lp->lwp_proc->p_pid, lp->lwp_tid);
-#ifdef INVARIANTS
-       KASSERT(crit_count == td->td_critcount,
-               ("trap: critical section count mismatch! %d/%d",
-               crit_count, td->td_pri));
-       KASSERT(curstop == td->td_toks_stop,
-               ("trap: extra tokens held after trap! %zd/%zd",
-               curstop - &td->td_toks_base,
-               td->td_toks_stop - &td->td_toks_base));
-#endif
-}
-
-void
-kern_trap(struct trapframe *frame)
-{
-       struct globaldata *gd = mycpu;
-       struct thread *td = gd->gd_curthread;
-       struct lwp *lp;
-       struct proc *p;
-       int i = 0, ucode = 0, type, code;
-       int have_mplock = 0;
-#ifdef INVARIANTS
-       int crit_count = td->td_critcount;
-       lwkt_tokref_t curstop = td->td_toks_stop;
-#endif
-       vm_offset_t eva;
-
-       lp = td->td_lwp;
-       p = td->td_proc;
-
-       if (frame->tf_trapno == T_PAGEFLT) 
-               eva = frame->tf_err;
-       else
-               eva = 0;
-
-#ifdef DDB
-       if (db_active) {
-               ++gd->gd_trap_nesting_level;
-               MAKEMPSAFE(have_mplock);
-               trap_fatal(frame, FALSE, eva);
-               --gd->gd_trap_nesting_level;
-               goto out2;
-       }
-#endif
-       type = frame->tf_trapno;
-       code = frame->tf_err;
-
-#if 0
-kernel_trap:
-#endif
-       /* kernel trap */
-
-       switch (type) {
-       case T_PAGEFLT:                 /* page fault */
-               MAKEMPSAFE(have_mplock);
-               trap_pfault(frame, FALSE, eva);
-               goto out2;
-
-       case T_DNA:
-#if NNPX > 0
-               /*
-                * The kernel may be using npx for copying or other
-                * purposes.
-                */
-               panic("kernel NPX should not happen");
-               if (npxdna(frame))
-                       goto out2;
-#endif
-               break;
-
-       case T_PROTFLT:         /* general protection fault */
-       case T_SEGNPFLT:        /* segment not present fault */
-               /*
-                * Invalid segment selectors and out of bounds
-                * %eip's and %esp's can be set up in user mode.
-                * This causes a fault in kernel mode when the
-                * kernel tries to return to user mode.  We want
-                * to get this fault so that we can fix the
-                * problem here and not have to check all the
-                * selectors and pointers when the user changes
-                * them.
-                */
-               if (mycpu->gd_intr_nesting_level == 0) {
-                       if (td->td_pcb->pcb_onfault) {
-                               frame->tf_eip = 
-                                   (register_t)td->td_pcb->pcb_onfault;
-                               goto out2;
-                       }
-               }
-               break;
-
-       case T_TSSFLT:
-               /*
-                * PSL_NT can be set in user mode and isn't cleared
-                * automatically when the kernel is entered.  This
-                * causes a TSS fault when the kernel attempts to
-                * `iret' because the TSS link is uninitialized.  We
-                * want to get this fault so that we can fix the
-                * problem here and not every time the kernel is
-                * entered.
-                */
-               if (frame->tf_eflags & PSL_NT) {
-                       frame->tf_eflags &= ~PSL_NT;
-                       goto out2;
-               }
-               break;
-
-       case T_TRCTRAP:  /* trace trap */
-#if 0
-               if (frame->tf_eip == (int)IDTVEC(syscall)) {
-                       /*
-                        * We've just entered system mode via the
-                        * syscall lcall.  Continue single stepping
-                        * silently until the syscall handler has
-                        * saved the flags.
-                        */
-                       goto out2;
-               }
-               if (frame->tf_eip == (int)IDTVEC(syscall) + 1) {
-                       /*
-                        * The syscall handler has now saved the
-                        * flags.  Stop single stepping it.
-                        */
-                       frame->tf_eflags &= ~PSL_T;
-                       goto out2;
-               }
-#endif
-#if 0
-               /*
-                * Ignore debug register trace traps due to
-                * accesses in the user's address space, which
-                * can happen under several conditions such as
-                * if a user sets a watchpoint on a buffer and
-                * then passes that buffer to a system call.
-                * We still want to get TRCTRAPS for addresses
-                * in kernel space because that is useful when
-                * debugging the kernel.
-                */
-               if (user_dbreg_trap()) {
-                       /*
-                        * Reset breakpoint bits because the
-                        * processor doesn't
-                        */
-                       load_dr6(rdr6() & 0xfffffff0);
-                       goto out2;
-               }
-#endif
-               /*
-                * FALLTHROUGH (TRCTRAP kernel mode, kernel address)
-                */
-       case T_BPTFLT:
-               /*
-                * If DDB is enabled, let it handle the debugger trap.
-                * Otherwise, debugger traps "can't happen".
-                */
-#ifdef DDB
-               MAKEMPSAFE(have_mplock);
-               if (kdb_trap (type, 0, frame))
-                       goto out2;
-#endif
-               break;
-       case T_DIVIDE:
-               MAKEMPSAFE(have_mplock);
-               trap_fatal(frame, FALSE, eva);
-               goto out2;
-       case T_NMI:
-               MAKEMPSAFE(have_mplock);
-               trap_fatal(frame, FALSE, eva);
-               goto out2;
-       case T_SYSCALL80:
-               /*
-                * Ignore this trap generated from a spurious SIGTRAP.
-                *
-                * single stepping in / syscalls leads to spurious / SIGTRAP
-                * so ignore
-                *
-                * Haiku (c) 2007 Simon 'corecode' Schubert
-                */
-               goto out2;
-       }
-
-       /*
-        * Translate fault for emulators (e.g. Linux) 
-        */
-       if (*p->p_sysent->sv_transtrap)
-               i = (*p->p_sysent->sv_transtrap)(i, type);
-
-       MAKEMPSAFE(have_mplock);
-       trapsignal(lp, i, ucode);
-
-#ifdef DEBUG
-       if (type <= MAX_TRAP_MSG) {
-               uprintf("fatal process exception: %s",
-                       trap_msg[type]);
-               if ((type == T_PAGEFLT) || (type == T_PROTFLT))
-                       uprintf(", fault VA = 0x%lx", (u_long)eva);
-               uprintf("\n");
-       }
-#endif
-
-out2:  
-       ;
-       if (have_mplock)
-               rel_mplock();
-#ifdef INVARIANTS
-       KASSERT(crit_count == td->td_critcount,
-               ("trap: critical section count mismatch! %d/%d",
-               crit_count, td->td_pri));
-       KASSERT(curstop == td->td_toks_stop,
-               ("trap: extra tokens held after trap! %zd/%zd",
-               curstop - &td->td_toks_base,
-               td->td_toks_stop - &td->td_toks_base));
-#endif
-}
-
-int
-trap_pfault(struct trapframe *frame, int usermode, vm_offset_t eva)
-{
-       vm_offset_t va;
-       struct vmspace *vm = NULL;
-       vm_map_t map = 0;
-       int rv = 0;
-       int fault_flags;
-       vm_prot_t ftype;
-       thread_t td = curthread;
-       struct lwp *lp = td->td_lwp;
-
-       va = trunc_page(eva);
-       if (usermode == FALSE) {
-               /*
-                * This is a fault on kernel virtual memory.
-                */
-               map = &kernel_map;
-       } else {
-               /*
-                * This is a fault on non-kernel virtual memory.
-                * vm is initialized above to NULL. If curproc is NULL
-                * or curproc->p_vmspace is NULL the fault is fatal.
-                */
-               if (lp != NULL)
-                       vm = lp->lwp_vmspace;
-
-               if (vm == NULL)
-                       goto nogo;
-
-               map = &vm->vm_map;
-       }
-
-       if (frame->tf_xflags & PGEX_W)
-               ftype = VM_PROT_READ | VM_PROT_WRITE;
-       else
-               ftype = VM_PROT_READ;
-
-       if (map != &kernel_map) {
-               /*
-                * Keep swapout from messing with us during this
-                *      critical time.
-                */
-               PHOLD(lp->lwp_proc);
-
-               /*
-                * Issue fault
-                */
-               fault_flags = 0;
-               if (usermode)
-                       fault_flags |= VM_FAULT_BURST;
-               if (ftype & VM_PROT_WRITE)
-                       fault_flags |= VM_FAULT_DIRTY;
-               else
-                       fault_flags |= VM_FAULT_NORMAL;
-               rv = vm_fault(map, va, ftype, fault_flags);
-               PRELE(lp->lwp_proc);
-       } else {
-               /*
-                * Don't have to worry about process locking or stacks in the kernel.
-                */
-               rv = vm_fault(map, va, ftype, VM_FAULT_NORMAL);
-       }
-       if (rv == KERN_SUCCESS)
-               return (0);
-nogo:
-       if (!usermode) {
-               if (td->td_gd->gd_intr_nesting_level == 0 &&
-                   td->td_pcb->pcb_onfault) {
-                       frame->tf_eip = (register_t)td->td_pcb->pcb_onfault;
-                       return (0);
-               }
-               trap_fatal(frame, usermode, eva);
-               return (-1);
-       }
-       return((rv == KERN_PROTECTION_FAILURE) ? SIGBUS : SIGSEGV);
-}
-
-static void
-trap_fatal(struct trapframe *frame, int usermode, vm_offset_t eva)
-{
-       int code, type, ss, esp;
-
-       code = frame->tf_xflags;
-       type = frame->tf_trapno;
-
-       if (type <= MAX_TRAP_MSG) {
-               kprintf("\n\nFatal trap %d: %s while in %s mode\n",
-                       type, trap_msg[type],
-                       (usermode ? "user" : "kernel"));
-       }
-       /* two separate prints in case of a trap on an unmapped page */
-       kprintf("cpuid = %d\n", mycpu->gd_cpuid);
-       if (type == T_PAGEFLT) {
-               kprintf("fault virtual address  = %p\n", (void *)eva);
-               kprintf("fault code             = %s %s, %s\n",
-                       usermode ? "user" : "supervisor",
-                       code & PGEX_W ? "write" : "read",
-                       code & PGEX_P ? "protection violation" : "page not present");
-       }
-       kprintf("instruction pointer    = 0x%x:0x%x\n",
-              frame->tf_cs & 0xffff, frame->tf_eip);
-       if (usermode) {
-               ss = frame->tf_ss & 0xffff;
-               esp = frame->tf_esp;
-       } else {
-               ss = GSEL(GDATA_SEL, SEL_KPL);
-               esp = (int)&frame->tf_esp;
-       }
-       kprintf("stack pointer          = 0x%x:0x%x\n", ss, esp);
-       kprintf("frame pointer          = 0x%x:0x%x\n", ss, frame->tf_ebp);
-       kprintf("processor eflags       = ");
-       if (frame->tf_eflags & PSL_T)
-               kprintf("trace trap, ");
-       if (frame->tf_eflags & PSL_I)
-               kprintf("interrupt enabled, ");
-       if (frame->tf_eflags & PSL_NT)
-               kprintf("nested task, ");
-       if (frame->tf_eflags & PSL_RF)
-               kprintf("resume, ");
-#if 0
-       if (frame->tf_eflags & PSL_VM)
-               kprintf("vm86, ");
-#endif
-       kprintf("IOPL = %d\n", (frame->tf_eflags & PSL_IOPL) >> 12);
-       kprintf("current process                = ");
-       if (curproc) {
-               kprintf("%lu (%s)\n",
-                   (u_long)curproc->p_pid, curproc->p_comm ?
-                   curproc->p_comm : "");
-       } else {
-               kprintf("Idle\n");
-       }
-       kprintf("current thread          = pri %d ", curthread->td_pri);
-       if (curthread->td_critcount)
-               kprintf("(CRIT)");
-       kprintf("\n");
-/**
- *  XXX FIXME:
- *     we probably SHOULD have stopped the other CPUs before now!
- *     another CPU COULD have been touching cpl at this moment...
- */
-       kprintf(" <- SMP: XXX");
-       kprintf("\n");
-
-#ifdef KDB
-       if (kdb_trap(&psl))
-               return;
-#endif
-#ifdef DDB
-       if ((debugger_on_panic || db_active) && kdb_trap(type, code, frame))
-               return;
-#endif
-       kprintf("trap number            = %d\n", type);
-       if (type <= MAX_TRAP_MSG)
-               panic("%s", trap_msg[type]);
-       else
-               panic("unknown/reserved trap");
-}
-
-/*
- * Double fault handler. Called when a fault occurs while writing
- * a frame for a trap/exception onto the stack. This usually occurs
- * when the stack overflows (such is the case with infinite recursion,
- * for example).
- *
- * XXX Note that the current PTD gets replaced by IdlePTD when the
- * task switch occurs. This means that the stack that was active at
- * the time of the double fault is not available at <kstack> unless
- * the machine was idle when the double fault occurred. The downside
- * of this is that "trace <ebp>" in ddb won't work.
- */
-void
-dblfault_handler(void)
-{
-       struct mdglobaldata *gd = mdcpu;
-
-       kprintf("\nFatal double fault:\n");
-       kprintf("eip = 0x%x\n", gd->gd_common_tss.tss_eip);
-       kprintf("esp = 0x%x\n", gd->gd_common_tss.tss_esp);
-       kprintf("ebp = 0x%x\n", gd->gd_common_tss.tss_ebp);
-       /* two separate prints in case of a trap on an unmapped page */
-       kprintf("cpuid = %d\n", mycpu->gd_cpuid);
-       panic("double fault");
-}
-
-/*
- * syscall2 -  MP aware system call request C handler
- *
- * A system call is essentially treated as a trap except that the
- * MP lock is not held on entry or return.  We are responsible for
- * obtaining the MP lock if necessary and for handling ASTs
- * (e.g. a task switch) prior to return.
- *
- * MPSAFE
- */
-void
-syscall2(struct trapframe *frame)
-{
-       struct thread *td = curthread;
-       struct proc *p = td->td_proc;
-       struct lwp *lp = td->td_lwp;
-       caddr_t params;
-       struct sysent *callp;
-       register_t orig_tf_eflags;
-       int sticks;
-       int error;
-       int narg;
-#ifdef INVARIANTS
-       int crit_count = td->td_critcount;
-#endif
-       int have_mplock = 0;
-       u_int code;
-       union sysunion args;
-
-       KTR_LOG(kernentry_syscall, lp->lwp_proc->p_pid, lp->lwp_tid,
-               frame->tf_eax);
-
-       userenter(td, p);       /* lazy raise our priority */
-
-       /*
-        * Misc
-        */
-       sticks = (int)td->td_sticks;
-       orig_tf_eflags = frame->tf_eflags;
-
-       /*
-        * Virtual kernel intercept - if a VM context managed by a virtual
-        * kernel issues a system call the virtual kernel handles it, not us.
-        * Restore the virtual kernel context and return from its system
-        * call.  The current frame is copied out to the virtual kernel.
-        */
-       if (lp->lwp_vkernel && lp->lwp_vkernel->ve) {
-               vkernel_trap(lp, frame);
-               error = EJUSTRETURN;
-               goto out;
-       }
-
-       /*
-        * Get the system call parameters and account for time
-        */
-       lp->lwp_md.md_regs = frame;
-       params = (caddr_t)frame->tf_esp + sizeof(int);
-       code = frame->tf_eax;
-
-       if (p->p_sysent->sv_prepsyscall) {
-               (*p->p_sysent->sv_prepsyscall)(
-                       frame, (int *)(&args.nosys.sysmsg + 1),
-                       &code, &params);
-       } else {
-               /*
-                * Need to check if this is a 32 bit or 64 bit syscall.
-                * fuword is MP aware.
-                */
-               if (code == SYS_syscall) {
-                       /*
-                        * Code is first argument, followed by actual args.
-                        */
-                       code = fuword(params);
-                       params += sizeof(int);
-               } else if (code == SYS___syscall) {
-                       /*
-                        * Like syscall, but code is a quad, so as to maintain
-                        * quad alignment for the rest of the arguments.
-                        */
-                       code = fuword(params);
-                       params += sizeof(quad_t);
-               }
-       }
-
-       code &= p->p_sysent->sv_mask;
-       if (code >= p->p_sysent->sv_size)
-               callp = &p->p_sysent->sv_table[0];
-       else
-               callp = &p->p_sysent->sv_table[code];
-
-       narg = callp->sy_narg & SYF_ARGMASK;
-
-       /*
-        * copyin is MP aware, but the tracing code is not
-        */
-       if (narg && params) {
-               error = copyin(params, (caddr_t)(&args.nosys.sysmsg + 1),
-                               narg * sizeof(register_t));
-               if (error) {
-#ifdef KTRACE
-                       if (KTRPOINT(td, KTR_SYSCALL)) {
-                               MAKEMPSAFE(have_mplock);
-                               
-                               ktrsyscall(lp, code, narg,
-                                       (void *)(&args.nosys.sysmsg + 1));
-                       }
-#endif
-                       goto bad;
-               }
-       }
-
-#ifdef KTRACE
-       if (KTRPOINT(td, KTR_SYSCALL)) {
-               MAKEMPSAFE(have_mplock);
-               ktrsyscall(lp, code, narg, (void *)(&args.nosys.sysmsg + 1));
-       }
-#endif
-
-       /*
-        * For traditional syscall code edx is left untouched when 32 bit
-        * results are returned.  Since edx is loaded from fds[1] when the 
-        * system call returns we pre-set it here.
-        */
-       args.sysmsg_fds[0] = 0;
-       args.sysmsg_fds[1] = frame->tf_edx;
-
-       /*
-        * The syscall might manipulate the trap frame. If it does it
-        * will probably return EJUSTRETURN.
-        */
-       args.sysmsg_frame = frame;
-
-       STOPEVENT(p, S_SCE, narg);      /* MP aware */
-
-       /*
-        * NOTE: All system calls run MPSAFE now.  The system call itself
-        *       is responsible for getting the MP lock.
-        */
-       error = (*callp->sy_call)(&args);
-
-#if 0
-       kprintf("system call %d returned %d\n", code, error);
-#endif
-
-out:
-       /*
-        * MP SAFE (we may or may not have the MP lock at this point)
-        */
-       switch (error) {
-       case 0:
-               /*
-                * Reinitialize proc pointer `p' as it may be different
-                * if this is a child returning from fork syscall.
-                */
-               p = curproc;
-               lp = curthread->td_lwp;
-               frame->tf_eax = args.sysmsg_fds[0];
-               frame->tf_edx = args.sysmsg_fds[1];
-               frame->tf_eflags &= ~PSL_C;
-               break;
-       case ERESTART:
-               /*
-                * Reconstruct pc, assuming lcall $X,y is 7 bytes,
-                * int 0x80 is 2 bytes. We saved this in tf_err.
-                */
-               frame->tf_eip -= frame->tf_err;
-               break;
-       case EJUSTRETURN:
-               break;
-       case EASYNC:
-               panic("Unexpected EASYNC return value (for now)");
-       default:
-bad:
-               if (p->p_sysent->sv_errsize) {
-                       if (error >= p->p_sysent->sv_errsize)
-                               error = -1;     /* XXX */
-                       else
-                               error = p->p_sysent->sv_errtbl[error];
-               }
-               frame->tf_eax = error;
-               frame->tf_eflags |= PSL_C;
-               break;
-       }
-
-       /*
-        * Traced syscall.  trapsignal() is not MP aware.
-        */
-       if ((orig_tf_eflags & PSL_T) /*&& !(orig_tf_eflags & PSL_VM)*/) {
-               MAKEMPSAFE(have_mplock);
-               frame->tf_eflags &= ~PSL_T;
-               trapsignal(lp, SIGTRAP, TRAP_TRACE);
-       }
-
-       /*
-        * Handle reschedule and other end-of-syscall issues
-        */
-       userret(lp, frame, sticks);
-
-#ifdef KTRACE
-       if (KTRPOINT(td, KTR_SYSRET)) {
-               MAKEMPSAFE(have_mplock);
-               ktrsysret(lp, code, error, args.sysmsg_result);
-       }
-#endif
-
-       /*
-        * This works because errno is findable through the
-        * register set.  If we ever support an emulation where this
-        * is not the case, this code will need to be revisited.
-        */
-       STOPEVENT(p, S_SCX, code);
-
-       userexit(lp);
-       /*
-        * Release the MP lock if we had to get it
-        */
-       if (have_mplock)
-               rel_mplock();
-       KTR_LOG(kernentry_syscall_ret, lp->lwp_proc->p_pid, lp->lwp_tid, error);
-#ifdef INVARIANTS
-       KASSERT(crit_count == td->td_critcount,
-               ("syscall: critical section count mismatch! %d/%d",
-               crit_count, td->td_pri));
-       KASSERT(&td->td_toks_base == td->td_toks_stop,
-               ("syscall: extra tokens held after trap! %zd",
-               td->td_toks_stop - &td->td_toks_base));
-#endif
-}
-
-/*
- * NOTE: mplock not held at any point
- */
-void
-fork_return(struct lwp *lp, struct trapframe *frame)
-{
-       frame->tf_eax = 0;              /* Child returns zero */
-       frame->tf_eflags &= ~PSL_C;     /* success */
-       frame->tf_edx = 1;
-
-       generic_lwp_return(lp, frame);
-       KTR_LOG(kernentry_fork_ret, lp->lwp_proc->p_pid, lp->lwp_tid);
-}
-
-/*
- * Simplified back end of syscall(), used when returning from fork()
- * directly into user mode.
- *
- * This code will return back into the fork trampoline code which then
- * runs doreti.
- *
- * NOTE: The mplock is not held at any point.
- */
-void
-generic_lwp_return(struct lwp *lp, struct trapframe *frame)
-{
-       struct proc *p = lp->lwp_proc;
-
-       /*
-        * Newly forked processes are given a kernel priority.  We have to
-        * adjust the priority to a normal user priority and fake entry
-        * into the kernel (call userenter()) to install a passive release
-        * function just in case userret() decides to stop the process.  This
-        * can occur when ^Z races a fork.  If we do not install the passive
-        * release function the current process designation will not be
-        * released when the thread goes to sleep.
-        */
-       lwkt_setpri_self(TDPRI_USER_NORM);
-       userenter(lp->lwp_thread, p);
-       userret(lp, frame, 0);
-#ifdef KTRACE
-       if (KTRPOINT(lp->lwp_thread, KTR_SYSRET))
-               ktrsysret(lp, SYS_fork, 0, 0);
-#endif
-       lp->lwp_flags |= LWP_PASSIVE_ACQ;
-       userexit(lp);
-       lp->lwp_flags &= ~LWP_PASSIVE_ACQ;
-}
-
-/*
- * doreti has turned into this.  The frame is directly on the stack.  We
- * pull everything else we need (fpu and tls context) from the current
- * thread.
- *
- * Note on fpu interactions: In a virtual kernel, the fpu context for
- * an emulated user mode process is not shared with the virtual kernel's
- * fpu context, so we only have to 'stack' fpu contexts within the virtual
- * kernel itself, and not even then since the signal() contexts that we care
- * about save and restore the FPU state (I think anyhow).
- *
- * vmspace_ctl() returns an error only if it had problems instaling the
- * context we supplied or problems copying data to/from our VM space.
- */
-void
-go_user(struct intrframe *frame)
-{
-       struct trapframe *tf = (void *)&frame->if_gs;
-       int r;
-
-       /*
-        * Interrupts may be disabled on entry, make sure all signals
-        * can be received before beginning our loop.
-        */
-       sigsetmask(0);
-
-       /*
-        * Switch to the current simulated user process, then call
-        * user_trap() when we break out of it (usually due to a signal).
-        */
-       for (;;) {
-               /*
-                * Tell the real kernel whether it is ok to use the FP
-                * unit or not.
-                *
-                * The critical section is required to prevent an interrupt
-                * from causing a preemptive task switch and changing
-                * the FP state.
-                */
-               crit_enter();
-               if (mdcpu->gd_npxthread == curthread) {
-                       tf->tf_xflags &= ~PGEX_FPFAULT;
-               } else {
-                       tf->tf_xflags |= PGEX_FPFAULT;
-               }
-
-               /*
-                * Run emulated user process context.  This call interlocks
-                * with new mailbox signals.
-                *
-                * Set PGEX_U unconditionally, indicating a user frame (the
-                * bit is normally set only by T_PAGEFLT).
-                */
-               r = vmspace_ctl(&curproc->p_vmspace->vm_pmap, VMSPACE_CTL_RUN,
-                               tf, &curthread->td_savevext);
-               crit_exit();
-               frame->if_xflags |= PGEX_U;
-#if 0
-               kprintf("GO USER %d trap %d EVA %08x EIP %08x ESP %08x XFLAGS %02x/%02x\n", 
-                       r, tf->tf_trapno, tf->tf_err, tf->tf_eip, tf->tf_esp,
-                       tf->tf_xflags, frame->if_xflags);
-#endif
-               if (r < 0) {
-                       if (errno != EINTR)
-                               panic("vmspace_ctl failed error %d", errno);
-               } else {
-                       if (tf->tf_trapno) {
-                               user_trap(tf);
-                       }
-               }
-               if (mycpu->gd_reqflags & RQF_AST_MASK) {
-                       tf->tf_trapno = T_ASTFLT;
-                       user_trap(tf);
-               }
-               tf->tf_trapno = 0;
-       }
-}
-
-/*
- * If PGEX_FPFAULT is set then set FP_VIRTFP in the PCB to force a T_DNA
- * fault (which is then passed back to the virtual kernel) if an attempt is
- * made to use the FP unit.
- *
- * XXX this is a fairly big hack.
- */
-void
-set_vkernel_fp(struct trapframe *frame)
-{
-       struct thread *td = curthread;
-
-       if (frame->tf_xflags & PGEX_FPFAULT) {
-               td->td_pcb->pcb_flags |= FP_VIRTFP;
-               if (mdcpu->gd_npxthread == td)
-                       npxexit();
-       } else {
-               td->td_pcb->pcb_flags &= ~FP_VIRTFP;
-       }
-}
-
-/*
- * Called from vkernel_trap() to fixup the vkernel's syscall
- * frame for vmspace_ctl() return.
- */
-void
-cpu_vkernel_trap(struct trapframe *frame, int error)
-{
-       frame->tf_eax = error;
-       if (error)
-               frame->tf_eflags |= PSL_C;
-       else
-               frame->tf_eflags &= ~PSL_C;
-}
diff --git a/sys/platform/vkernel/i386/userldt.c b/sys/platform/vkernel/i386/userldt.c
deleted file mode 100644 (file)
index d4f7f9d..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2006 The DragonFly Project.  All rights reserved.
- * 
- * This code is derived from software contributed to The DragonFly Project
- * by Matthew Dillon <dillon@backplane.com>
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * $DragonFly: src/sys/platform/vkernel/i386/userldt.c,v 1.2 2007/01/07 08:37:35 dillon Exp $
- */
-
-#include <sys/types.h>
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <machine/pcb.h>
-#include <machine/pcb_ext.h>
-
-void
-set_user_ldt (struct pcb *pcb)
-{
-       panic("set_user_ldt");
-}
-
-struct pcb_ldt *
-user_ldt_alloc (struct pcb *pcb, int len)
-{
-       panic("user_ldt_alloc");
-}
-
-void
-user_ldt_free (struct pcb *pcb)
-{
-       if (pcb->pcb_ldt)
-               panic("user_ldt_free");
-}
-
diff --git a/sys/platform/vkernel/i386/vm_machdep.c b/sys/platform/vkernel/i386/vm_machdep.c
deleted file mode 100644 (file)
index 31776cd..0000000
+++ /dev/null
@@ -1,386 +0,0 @@
-/*-
- * Copyright (c) 1982, 1986 The Regents of the University of California.
- * Copyright (c) 1989, 1990 William Jolitz
- * Copyright (c) 1994 John Dyson
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department, and William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     from: @(#)vm_machdep.c  7.3 (Berkeley) 5/13/91
- *     Utah $Hdr: vm_machdep.c 1.16.1.1 89/06/23$
- * $FreeBSD: src/sys/i386/i386/vm_machdep.c,v 1.132.2.9 2003/01/25 19:02:23 dillon Exp $
- */
-
-#include "use_npx.h"
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/malloc.h>
-#include <sys/proc.h>
-#include <sys/buf.h>
-#include <sys/interrupt.h>
-#include <sys/vnode.h>
-#include <sys/vmmeter.h>
-#include <sys/kernel.h>
-#include <sys/sysctl.h>
-#include <sys/unistd.h>
-
-#include <machine/clock.h>
-#include <machine/cpu.h>
-#include <machine/md_var.h>
-#include <machine/smp.h>
-#include <machine/pcb.h>
-#include <machine/pcb_ext.h>
-#include <machine/vm86.h>
-#include <machine/segments.h>
-#include <machine/globaldata.h>        /* npxthread */
-
-#include <vm/vm.h>
-#include <vm/vm_param.h>
-#include <sys/lock.h>
-#include <vm/vm_kern.h>
-#include <vm/vm_page.h>
-#include <vm/vm_map.h>
-#include <vm/vm_extern.h>
-
-#include <sys/user.h>
-
-#include <sys/thread2.h>
-#include <sys/mplock2.h>
-
-#include <bus/isa/isa.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-
-char machine[] = MACHINE;
-SYSCTL_STRING(_hw, HW_MACHINE, machine, CTLFLAG_RD,
-             machine, 0, "Machine class");
-
-char cpu_vendor[] = "DragonFly";       /* XXX */
-u_int cpu_vendor_id = 0;               /* XXX */
-u_int cpu_id = 0x80000000;             /* XXX */
-
-/*
- * Finish a fork operation, with lwp lp2 nearly set up.
- * Copy and update the pcb, set up the stack so that the child
- * ready to run and return to user mode.
- */
-void
-cpu_fork(struct lwp *lp1, struct lwp *lp2, int flags)
-{
-       struct pcb *pcb2;
-
-       if ((flags & RFPROC) == 0) {
-               if ((flags & RFMEM) == 0) {
-                       /* unshare user LDT */
-                       struct pcb *pcb1 = lp1->lwp_thread->td_pcb;
-                       struct pcb_ldt *pcb_ldt = pcb1->pcb_ldt;
-                       if (pcb_ldt && pcb_ldt->ldt_refcnt > 1) {
-                               pcb_ldt = user_ldt_alloc(pcb1,pcb_ldt->ldt_len);
-                               user_ldt_free(pcb1);
-                               pcb1->pcb_ldt = pcb_ldt;
-                               set_user_ldt(pcb1);
-                       }
-               }
-               return;
-       }
-
-#if NNPX > 0
-       /* Ensure that lp1's pcb is up to date. */
-       if (mdcpu->gd_npxthread == lp1->lwp_thread)
-               npxsave(lp1->lwp_thread->td_savefpu);
-#endif
-       
-       /*
-        * Copy lp1's PCB.  This really only applies to the
-        * debug registers and FP state, but its faster to just copy the
-        * whole thing.  Because we only save the PCB at switchout time,
-        * the register state may not be current.
-        */
-       pcb2 = lp2->lwp_thread->td_pcb;
-       *pcb2 = *lp1->lwp_thread->td_pcb;
-
-       /*
-        * Create a new fresh stack for the new process.
-        * Copy the trap frame for the return to user mode as if from a
-        * syscall.  This copies the user mode register values.  The
-        * 16 byte offset saves space for vm86, and must match 
-        * common_tss.esp0 (kernel stack pointer on entry from user mode)
-        *
-        * pcb_esp must allocate an additional call-return pointer below
-        * the trap frame which will be restored by cpu_restore from
-        * PCB_EIP, and the thread's td_sp pointer must allocate an
-        * additonal two worsd below the pcb_esp call-return pointer to
-        * hold the LWKT restore function pointer and eflags.
-        *
-        * The LWKT restore function pointer must be set to cpu_restore,
-        * which is our standard heavy weight process switch-in function.
-        * YYY eventually we should shortcut fork_return and fork_trampoline
-        * to use the LWKT restore function directly so we can get rid of
-        * all the extra crap we are setting up.
-        */
-       lp2->lwp_md.md_regs = (struct trapframe *)((char *)pcb2 - 16) - 1;
-       bcopy(lp1->lwp_md.md_regs, lp2->lwp_md.md_regs, sizeof(*lp2->lwp_md.md_regs));
-
-       /*
-        * Set registers for trampoline to user mode.  Leave space for the
-        * return address on stack.  These are the kernel mode register values.
-        */
-       pcb2->pcb_unused01 = 0;
-       pcb2->pcb_edi = 0;
-       pcb2->pcb_esi = (int)fork_return;       /* fork_trampoline argument */
-       pcb2->pcb_ebp = 0;
-       pcb2->pcb_esp = (int)lp2->lwp_md.md_regs - sizeof(void *);
-       pcb2->pcb_ebx = (int)lp2;               /* fork_trampoline argument */
-       pcb2->pcb_eip = (int)fork_trampoline;
-       lp2->lwp_thread->td_sp = (char *)(pcb2->pcb_esp - sizeof(void *));
-       *(u_int32_t *)lp2->lwp_thread->td_sp = PSL_USER;
-       lp2->lwp_thread->td_sp -= sizeof(void *);
-       *(void **)lp2->lwp_thread->td_sp = (void *)cpu_heavy_restore;
-
-       /*
-        * pcb2->pcb_ldt:       duplicated below, if necessary.
-        * pcb2->pcb_savefpu:   cloned above.
-        * pcb2->pcb_flags:     cloned above (always 0 here?).
-        * pcb2->pcb_onfault:   cloned above (always NULL here?).
-        */
-
-       /*
-        * XXX don't copy the i/o pages.  this should probably be fixed.
-        */
-       pcb2->pcb_ext = NULL;
-
-        /* Copy the LDT, if necessary. */
-        if (pcb2->pcb_ldt != NULL) {
-               if (flags & RFMEM) {
-                       pcb2->pcb_ldt->ldt_refcnt++;
-               } else {
-                       pcb2->pcb_ldt = user_ldt_alloc(pcb2,
-                               pcb2->pcb_ldt->ldt_len);
-               }
-        }
-       bcopy(&lp1->lwp_thread->td_tls, &lp2->lwp_thread->td_tls,
-             sizeof(lp2->lwp_thread->td_tls));
-       /*
-        * Now, cpu_switch() can schedule the new process.
-        * pcb_esp is loaded pointing to the cpu_switch() stack frame
-        * containing the return address when exiting cpu_switch.
-        * This will normally be to fork_trampoline(), which will have
-        * %ebx loaded with the new proc's pointer.  fork_trampoline()
-        * will set up a stack to call fork_return(p, frame); to complete
-        * the return to user-mode.
-        */
-}
-
-/*
- * Prepare new lwp to return to the address specified in params.
- */
-int
-cpu_prepare_lwp(struct lwp *lp, struct lwp_params *params)
-{
-       struct trapframe *regs = lp->lwp_md.md_regs;
-       void *bad_return = NULL;
-       int error;
-
-       regs->tf_eip = (int)params->func;
-       regs->tf_esp = (int)params->stack;
-       /* Set up argument for function call */
-       regs->tf_esp -= sizeof(params->arg);
-       error = copyout(&params->arg, (void *)regs->tf_esp,
-                       sizeof(params->arg));
-       if (error)
-               return (error);
-       /*
-        * Set up fake return address.  As the lwp function may never return,
-        * we simply copy out a NULL pointer and force the lwp to receive
-        * a SIGSEGV if it returns anyways.
-        */
-       regs->tf_esp -= sizeof(void *);
-       error = copyout(&bad_return, (void *)regs->tf_esp,
-                       sizeof(bad_return));
-       if (error)
-               return (error);
-
-       cpu_set_fork_handler(lp,
-           (void (*)(void *, struct trapframe *))generic_lwp_return, lp);
-       return (0);
-}
-
-/*
- * Intercept the return address from a freshly forked process that has NOT
- * been scheduled yet.
- *
- * This is needed to make kernel threads stay in kernel mode.
- */
-void
-cpu_set_fork_handler(struct lwp *lp, void (*func)(void *, struct trapframe *),
-                    void *arg)
-{
-       /*
-        * Note that the trap frame follows the args, so the function
-        * is really called like this:  func(arg, frame);
-        */
-       lp->lwp_thread->td_pcb->pcb_esi = (int) func;   /* function */
-       lp->lwp_thread->td_pcb->pcb_ebx = (int) arg;    /* first arg */
-}
-
-void
-cpu_set_thread_handler(thread_t td, void (*rfunc)(void), void *func, void *arg)
-{
-       td->td_pcb->pcb_esi = (int)func;
-       td->td_pcb->pcb_ebx = (int) arg;
-       td->td_switch = cpu_lwkt_switch;
-       td->td_sp -= sizeof(void *);
-       *(void **)td->td_sp = rfunc;    /* exit function on return */
-       td->td_sp -= sizeof(void *);
-       *(void **)td->td_sp = cpu_kthread_restore;
-}
-
-void
-cpu_lwp_exit(void)
-{
-       struct thread *td = curthread;
-       struct pcb *pcb;
-       struct pcb_ext *ext;
-
-       /*
-        * If we were using a private TSS do a forced-switch to ourselves
-        * to switch back to the common TSS before freeing it.
-        */
-       pcb = td->td_pcb;
-       if ((ext = pcb->pcb_ext) != NULL) {
-               crit_enter();
-               pcb->pcb_ext = NULL;
-               lwkt_switch_return(td->td_switch(td));
-               crit_exit();
-               kmem_free(&kernel_map, (vm_offset_t)ext, ctob(IOPAGES + 1));
-       }
-       user_ldt_free(pcb);
-        if (pcb->pcb_flags & PCB_DBREGS) {
-                /*
-                 * disable all hardware breakpoints
-                 */
-                reset_dbregs();
-                pcb->pcb_flags &= ~PCB_DBREGS;
-        }
-       td->td_gd->gd_cnt.v_swtch++;
-
-       crit_enter_quick(td);
-       if (td->td_flags & TDF_TSLEEPQ)
-               tsleep_remove(td);
-       lwkt_deschedule_self(td);
-       lwkt_remove_tdallq(td);
-       cpu_thread_exit();
-}
-
-/*
- * Terminate the current thread.  The caller must have already acquired
- * the thread's rwlock and placed it on a reap list or otherwise notified
- * a reaper of its existance.  We set a special assembly switch function which
- * releases td_rwlock after it has cleaned up the MMU state and switched
- * out the stack.
- *
- * Must be caller from a critical section and with the thread descheduled.
- */
-void
-cpu_thread_exit(void)
-{
-#if NNPX > 0
-       npxexit();
-#endif
-       curthread->td_switch = cpu_exit_switch;
-       curthread->td_flags |= TDF_EXITING;
-       lwkt_switch();
-       panic("cpu_exit");
-}
-
-#ifdef notyet
-static void
-setredzone(u_short *pte, caddr_t vaddr)
-{
-/* eventually do this by setting up an expand-down stack segment
-   for ss0: selector, allowing stack access down to top of u.
-   this means though that protection violations need to be handled
-   thru a double fault exception that must do an integral task
-   switch to a known good context, within which a dump can be
-   taken. a sensible scheme might be to save the initial context
-   used by sched (that has physical memory mapped 1:1 at bottom)
-   and take the dump while still in mapped mode */
-}
-#endif
-
-/*
- * Convert kernel VA to physical address
- */
-vm_paddr_t
-kvtop(void *addr)
-{
-       vm_paddr_t pa;
-
-       pa = pmap_kextract((vm_offset_t)addr);
-       if (pa == 0)
-               panic("kvtop: zero page frame");
-       return (pa);
-}
-
-SYSCTL_DECL(_vm_stats_misc);
-
-/*
- * Used by /dev/kmem to determine if we can safely read or write
- * the requested KVA range.  Some portions of kernel memory are
- * not governed by our virtual page table.
- */
-extern int32_t _end;
-extern void _start(void);
-
-int
-kvm_access_check(vm_offset_t saddr, vm_offset_t eaddr, int prot)
-{
-       vm_offset_t addr;
-
-       if (saddr >= trunc_page((vm_offset_t)&_start) && eaddr <= round_page((vm_offset_t)&_end))
-               return 0;
-       if (saddr < KvaStart)
-               return EFAULT;
-       if (eaddr >= KvaEnd)
-               return EFAULT;
-       for (addr = saddr; addr < eaddr; addr += PAGE_SIZE)  {
-               if (pmap_extract(&kernel_pmap, addr) == 0)
-                       return EFAULT;
-       }
-       if (!kernacc((caddr_t)saddr, eaddr - saddr, prot))
-               return EFAULT;
-       return 0;
-}
-
diff --git a/sys/platform/vkernel/include/clock.h b/sys/platform/vkernel/include/clock.h
deleted file mode 100644 (file)
index c145eef..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Kernel interface to machine-dependent clock driver.
- * Garrett Wollman, September 1994.
- * This file is in the public domain.
- *
- * $FreeBSD: src/sys/i386/include/clock.h,v 1.38.2.1 2002/11/02 04:41:50 iwasaki Exp $
- */
-
-#ifndef _MACHINE_CLOCK_H_
-#define        _MACHINE_CLOCK_H_
-
-#ifdef _KERNEL
-
-#ifndef _SYS_TYPES_H_
-#include <sys/types.h>
-#endif
-
-/*
- * i386 to clock driver interface.
- * XXX large parts of the driver and its interface are misplaced.
- */
-extern int     adjkerntz;
-extern int     disable_rtc_set;
-extern u_int   timer_freq;
-extern int     timer0_max_count;
-extern int     tsc_present;
-extern int     tsc_invariant;
-extern int     tsc_mpsync;
-extern int64_t tsc_frequency;
-extern int     tsc_is_broken;
-extern int     wall_cmos_clock;
-
-/*
- * Driver to clock driver interface.
- */
-
-int    rtcin (int val);
-int    acquire_timer2 (int mode);
-int    release_timer2 (void);
-int    sysbeep (int pitch, int period);
-void   timer_restore (void);
-
-#endif /* _KERNEL */
-
-#endif /* !_MACHINE_CLOCK_H_ */
diff --git a/sys/platform/vkernel/include/cothread.h b/sys/platform/vkernel/include/cothread.h
deleted file mode 100644 (file)
index 7fd72a2..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2008 The DragonFly Project.  All rights reserved.
- *
- * This code is derived from software contributed to The DragonFly Project
- * by Matthew Dillon <dillon@backplane.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $DragonFly: src/sys/platform/vkernel/include/cothread.h,v 1.2 2008/03/27 04:28:07 dillon Exp $
- */
-
-#ifndef _MACHINE_COTHREAD_H_
-#define _MACHINE_COTHREAD_H_
-
-#include <pthread.h>
-
-struct cothread {
-       pthread_t       pthr;
-       pthread_t       pintr;
-       void            *arg;
-       void            (*thr_func)(struct cothread *);
-       void            (*thr_intr)(struct cothread *);
-       void            *intr_id;
-       pthread_mutex_t mutex;
-       pthread_cond_t  cond;
-};
-
-typedef struct cothread *cothread_t;
-
-cothread_t cothread_create(void (*thr_func)(cothread_t cotd),
-                          void (*thr_intr)(cothread_t cotd),
-                          void *arg, const  char *name);
-void cothread_delete(cothread_t *cotdp);
-void cothread_intr(cothread_t cotd);
-void cothread_signal(cothread_t cotd);
-void cothread_wait(cothread_t cotd);
-void cothread_lock(cothread_t cotd, int is_cotd);
-void cothread_unlock(cothread_t cotd, int is_cotd);
-
-#endif
diff --git a/sys/platform/vkernel/include/cpu.h b/sys/platform/vkernel/include/cpu.h
deleted file mode 100644 (file)
index cd0ea74..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2006 The DragonFly Project.  All rights reserved.
- * 
- * This code is derived from software contributed to The DragonFly Project
- * by Matthew Dillon <dillon@backplane.com>
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * $DragonFly: src/sys/platform/vkernel/include/cpu.h,v 1.3 2008/05/19 10:29:58 corecode Exp $
- */
-
-#ifndef _MACHINE_CPU_H_
-#define _MACHINE_CPU_H_
-
-#include <cpu/cpu.h>
-
-#define CLKF_USERMODE(framep) ((framep)->if_xflags & PGEX_U)
-
-/* globals used in vkernel CPU to kernel CPU locking */
-#if defined(_KERNEL)
-
-extern int lwp_cpu_lock;
-extern int next_cpu;
-extern int real_ncpus;
-void setrealcpu(void);
-void identcpu(void);
-
-#endif
-
-#if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
-
-#define LCL_NONE        0
-#define LCL_PER_CPU     1
-#define LCL_SINGLE_CPU  2
-
-#endif
-
-#endif
-
diff --git a/sys/platform/vkernel/include/cpufunc.h b/sys/platform/vkernel/include/cpufunc.h
deleted file mode 100644 (file)
index 5ed7b00..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2006 The DragonFly Project.  All rights reserved.
- * 
- * This code is derived from software contributed to The DragonFly Project
- * by Matthew Dillon <dillon@backplane.com>
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * $DragonFly: src/sys/platform/vkernel/include/cpufunc.h,v 1.2 2007/02/18 14:28:18 corecode Exp $
- */
-#ifndef _MACHINE_CPUFUNC_H_
-#define        _MACHINE_CPUFUNC_H_
-
-#ifdef _KERNEL
-
-/*
- * First declare our overriding functions.  We have to do this to prevent
- * cpu/cpufunc.h to define inline assembler versions.  However, we need
- * cpu/cpufunc.h to define other functions like ``ffs'', which will otherwise
- * be defined by libkern (via sys/systm.h).  This is why the order needs to be:
- *
- * 1. Declare our overrides
- * 2. include cpu/cpufunc.h
- * 3. include the remaining needed headers for our overrides
- */
-
-#define _CPU_ENABLE_INTR_DEFINED
-#define _CPU_DISABLE_INTR_DEFINED
-#define _CPU_INVLPG_DEFINED
-#define _CPU_INVLTLB_DEFINED
-
-void cpu_disable_intr(void);
-void cpu_enable_intr(void);
-void cpu_invlpg(void *addr);
-void cpu_invltlb(void);
-
-#endif
-
-#include <cpu/cpufunc.h>
-
-#ifdef _KERNEL
-
-#include <sys/types.h>
-#include <sys/systm.h>
-#include <sys/proc.h>
-#include <vm/pmap.h>
-
-#include <sys/mman.h>
-#include <signal.h>
-
-#endif /* _KERNEL */
-
-#endif /* !_MACHINE_CPUFUNC_H_ */
-
diff --git a/sys/platform/vkernel/include/globaldata.h b/sys/platform/vkernel/include/globaldata.h
deleted file mode 100644 (file)
index 9cd8289..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/*-
- * Copyright (c) Peter Wemm <peter@netplex.com.au>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     Only machine-dependant code should ever include this file.  MI
- *     code and header files do NOT include this file.  e.g. sys/globaldata.h
- *     should not include this file.
- *
- * $FreeBSD: src/sys/i386/include/globaldata.h,v 1.11.2.1 2000/05/16 06:58:10 dillon Exp $
- */
-
-#ifndef _MACHINE_GLOBALDATA_H_
-#define _MACHINE_GLOBALDATA_H_
-
-#if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
-
-#ifndef _SYS_GLOBALDATA_H_
-#include <sys/globaldata.h>    /* struct globaldata */
-#endif
-#ifndef _SYS_THREAD_H_
-#include <sys/thread.h>                /* struct thread */
-#endif
-#ifndef _SYS_VKERNEL_H_
-#include <sys/vkernel.h>       /* vpte_t */
-#endif
-#include <machine/segments.h>  /* struct segment_descriptor */
-#include <machine/tss.h>       /* struct i386tss */
-#include <machine/npx.h>
-
-/*
- * Note on interrupt control.  Pending interrupts not yet dispatched are
- * marked in gd_fpending, gd_ipending, or gd_spending.  Once dispatched 
- * the interrupt's pending bit is cleared and the interrupt is masked. 
- * Upon completion the interrupt is unmasked.
- *
- * For edge triggered interrupts interrupts may be enabled again at this
- * point and if they occur before the interrupt service routine is complete
- * the service routine will loop.
- *
- * The current thread's cpl is stored in the thread structure.
- *
- * Note: the embedded globaldata and/or the mdglobaldata structure
- * may exceed the size of a page.
- */
-struct mdglobaldata {
-       struct globaldata mi;
-       struct segment_descriptor gd_common_tssd;
-       struct segment_descriptor *gd_tss_gdt;
-       struct thread   *gd_npxthread;
-       struct i386tss  gd_common_tss;
-       union savefpu   gd_savefpu;     /* fast bcopy/zero temp fpu save area */
-       int             gd_fpu_lock;    /* fast bcopy/zero cpu lock */
-       int             gd_fpending;    /* fast interrupt pending */
-       int             gd_ipending;    /* normal interrupt pending */
-       int             gd_spending;    /* software interrupt pending */
-       int             gd_sdelayed;    /* delayed software ints */
-       int             gd_currentldt;
-       int             unused001;
-       int             unused002;
-       u_int           unused003;
-       u_int           unused004;
-       u_int           gd_ss_eflags;
-       vpte_t          *gd_CMAP1;      /* pointer to pte for CADDR1 */
-       vpte_t          *gd_CMAP2;
-       vpte_t          *gd_CMAP3;
-       vpte_t          *gd_PMAP1;
-
-       caddr_t         gd_CADDR1;
-       caddr_t         gd_CADDR2;
-       caddr_t         gd_CADDR3;
-       vpte_t          *gd_PADDR1;
-
-       /*
-        * Page table mappings, see get_ptbase()
-        */
-       vpte_t          *gd_PT1map;     /* points into privatedata */
-       vpte_t          *gd_PT1pdir;    /* KVA of page directory */
-       vpte_t          *gd_PT1pde;     /* pointer to pde */
-       vpte_t          *gd_PT2map;
-       vpte_t          *gd_PT2pdir;
-       vpte_t          *gd_PT2pde;
-       int             gd_PTflip;
-
-       vpte_t          *gd_PT3map;     /* used from preemptive interrupt */
-       vpte_t          *gd_PT3pdir;
-       vpte_t          *gd_PT3pde;
-};
-
-#define MDGLOBALDATA_BASEALLOC_SIZE    \
-       ((sizeof(struct mdglobaldata) + PAGE_MASK) & ~PAGE_MASK)
-#define MDGLOBALDATA_BASEALLOC_PAGES   \
-       (MDGLOBALDATA_BASEALLOC_SIZE / PAGE_SIZE)
-#define MDGLOBALDATA_PAD               \
-       (MDGLOBALDATA_BASEALLOC_SIZE - sizeof(struct mdglobaldata))
-
-/*
- * This is the upper (0xff800000) address space layout that is per-cpu.
- * It is setup in locore.s and pmap.c for the BSP and in mp_machdep.c for
- * each AP.  genassym helps export this to the assembler code.
- *
- * WARNING!  This structure must be segment-aligned and portions within the
- *           structure must also be segment-aligned.  The structure typically
- *          takes 3 segments per cpu (12MB).
- */
-#define PRIVATESPACE_SEGPAD    \
-       (SEG_SIZE -             \
-       ((sizeof(struct mdglobaldata) + MDGLOBALDATA_PAD + PAGE_SIZE * 4 +  \
-       UPAGES * PAGE_SIZE) % SEG_SIZE))                                    \
-
-struct privatespace {
-       /* main data page */
-       struct mdglobaldata mdglobaldata;
-       char            __filler0[MDGLOBALDATA_PAD];
-
-       /* mapping pages - CPAGE1,CPAGE2,CPAGE3,PPAGE1 */
-       char            CPAGE1[PAGE_SIZE];
-       char            CPAGE2[PAGE_SIZE];
-       char            CPAGE3[PAGE_SIZE];
-       vpte_t          PPAGE1[PAGE_SIZE / sizeof(vpte_t)];
-
-       /* idle stack (UPAGES pages) */
-       char            idlestack[UPAGES * PAGE_SIZE];
-
-       /* we must PAD to SEG_SIZE */
-       char            __filler1[PRIVATESPACE_SEGPAD];
-       vpte_t          PT1MAP[SEG_SIZE / sizeof(vpte_t)];
-       vpte_t          PT2MAP[SEG_SIZE / sizeof(vpte_t)];
-       vpte_t          PT3MAP[SEG_SIZE / sizeof(vpte_t)];
-};
-#define mdcpu                  ((struct mdglobaldata *)_get_mycpu())
-
-#endif
-
-#ifdef _KERNEL
-
-extern struct privatespace *CPU_prvspace;
-
-#endif
-
-#endif
diff --git a/sys/platform/vkernel/include/lock.h b/sys/platform/vkernel/include/lock.h
deleted file mode 100644 (file)
index 20131d7..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2003-2006 The DragonFly Project.  All rights reserved.
- * 
- * This code is derived from software contributed to The DragonFly Project
- * by Matthew Dillon <dillon@backplane.com>
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * $FreeBSD: src/sys/i386/include/lock.h,v 1.11.2.2 2000/09/30 02:49:34 ps Exp $
- * $DragonFly: src/sys/platform/vkernel/include/lock.h,v 1.2 2008/06/19 21:32:55 aggelos Exp $
- */
-
-#ifndef _MACHINE_LOCK_H_
-#define _MACHINE_LOCK_H_
-
-#ifndef _CPU_PSL_H_
-#include <machine/psl.h>
-#endif
-
-#ifndef LOCORE
-
-#endif /* LOCORE */
-#endif /* !_MACHINE_LOCK_H_ */
diff --git a/sys/platform/vkernel/include/md_var.h b/sys/platform/vkernel/include/md_var.h
deleted file mode 100644 (file)
index 7eb7bbb..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2006 The DragonFly Project.  All rights reserved.
- * 
- * This code is derived from software contributed to The DragonFly Project
- * by Matthew Dillon <dillon@backplane.com>
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _MACHINE_MD_VAR_H_
-#define _MACHINE_MD_VAR_H_
-
-#ifndef _SYS_TYPES_H_
-#include <sys/types.h>
-#endif
-#ifndef _SYS_VKERNEL_H_
-#include <sys/vkernel.h>
-#endif
-#ifndef _NET_ETHERNET_H_
-#include <net/ethernet.h>
-#endif
-
-#define VKNETIF_MAX    16
-#define VKDISK_MAX     16
-#define        SERNOLEN        30
-
-struct vknetif_info {
-       int             tap_fd;
-       int             tap_unit;
-       in_addr_t       netif_addr;
-       in_addr_t       netif_mask;
-       u_char          *enaddr;
-};
-
-struct vkdisk_info {
-        int fd;
-        int unit;
-       enum vkdisk_type { VKD_EMPTY, VKD_DISK, VKD_CD } type;
-       char fname[MAXPATHLEN];
-       char *serno;
-};
-
-extern char    sigcode[];
-extern int     szsigcode;
-extern vpte_t  *KernelPTA;     /* NOTE: Offset for direct VA translation */
-extern vpte_t  *KernelPTD;
-extern vm_offset_t crashdumpmap;
-extern  int    cpu_fxsr;
-
-extern  char    cpu_vendor[];  /* XXX belongs in i386 */
-extern  u_int   cpu_vendor_id; /* XXX belongs in i386 */
-extern  u_int   cpu_id;                /* XXX belongs in i386 */
-
-extern struct vkdisk_info DiskInfo[VKDISK_MAX];
-extern int     DiskNum;
-extern int     MemImageFd;
-extern struct vknetif_info NetifInfo[VKNETIF_MAX];
-extern int     NetifNum;
-extern int     _ucodesel, _udatasel;
-
-extern int     via_feature_xcrypt;
-extern int     via_feature_rng;
-
-struct mdglobaldata;
-struct __mcontext;
-
-vpte_t *pmap_kpte(vm_offset_t va);
-void cpu_gdinit (struct mdglobaldata *gd, int cpu);
-
-void cpu_heavy_restore(void);  /* cannot be called from C */
-void cpu_lwkt_restore(void);    /* cannot be called from C */
-void cpu_idle_restore(void);    /* cannot be called from C */
-void cpu_kthread_restore(void);        /* cannot be called from C */
-thread_t cpu_exit_switch (struct thread *next);
-void cpu_setregs (void);
-void cpu_idle (void);
-void cpu_mask_all_signals (void);
-void cpu_unmask_all_signals (void);
-void go_user (struct intrframe *frame);
-
-void init_exceptions(void);
-void init_kqueue(void);
-void init_fpu(int supports_sse);
-void kern_trap(struct trapframe *);
-void user_trap(struct trapframe *);
-void syscall2 (struct trapframe *);
-void vcons_set_mode(int);
-int npxdna(struct trapframe *);
-void npxpush(struct __mcontext *mctx);
-void npxpop(struct __mcontext *mctx);
-
-void signalintr(int intr);
-
-struct kqueue_info;
-struct kqueue_info *kqueue_add(int, void (*)(void *, struct intrframe *), void *);
-void kqueue_del(struct kqueue_info *);
-struct kqueue_info *kqueue_add_timer(void (*func)(void *, struct intrframe *), void *data);
-void kqueue_reload_timer(struct kqueue_info *info, int ms);
-
-
-#endif
diff --git a/sys/platform/vkernel/include/param.h b/sys/platform/vkernel/include/param.h
deleted file mode 100644 (file)
index 141d730..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef _MACHINE_PARAM_H_
-
-#ifndef _NO_NAMESPACE_POLLUTION
-#define _MACHINE_PARAM_H_
-#endif
-
-#ifndef _MACHINE_PLATFORM
-#define _MACHINE_PLATFORM      vkernel
-#endif
-
-#ifndef _NO_NAMESPACE_POLLUTION
-
-#ifndef MACHINE_PLATFORM
-#define MACHINE_PLATFORM       "vkernel"
-#endif
-
-#endif
-
-/*
- * Set the default HZ to the likely resolution of the kqueue timer
- * the vkernel uses, otherwise our ticks will be seriously off and
- * while date/time will be correct, sleep intervals will not.
- */
-#ifdef _KERNEL
-#ifndef HZ
-#define HZ     20
-#endif
-#endif
-
-#include <cpu/param.h>
-
-#endif
-
diff --git a/sys/platform/vkernel/include/pcb.h b/sys/platform/vkernel/include/pcb.h
deleted file mode 100644 (file)
index 48e64a5..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     from: @(#)pcb.h 5.10 (Berkeley) 5/12/91
- * $FreeBSD: src/sys/i386/include/pcb.h,v 1.32.2.1 2001/08/15 01:23:52 peter Exp $
- * $DragonFly: src/sys/platform/vkernel/include/pcb.h,v 1.3 2007/01/09 23:34:05 dillon Exp $
- */
-
-#ifndef _MACHINE_PCB_H_
-#define _MACHINE_PCB_H_
-
-/*
- * Intel 386 process control block
- */
-#include <machine/npx.h>
-
-struct pcb {
-       int     pcb_unused01;
-       int     pcb_edi;
-       int     pcb_esi;
-       int     pcb_ebp;
-       int     pcb_esp;
-       int     pcb_ebx;
-       int     pcb_eip;
-
-       int     pcb_dr0;
-       int     pcb_dr1;
-       int     pcb_dr2;
-       int     pcb_dr3;
-       int     pcb_dr6;
-       int     pcb_dr7;
-
-       struct  pcb_ldt *pcb_ldt;       /* per process (user) LDT */
-       union   savefpu pcb_save;
-       u_char  pcb_flags;
-#define        FP_SOFTFP       0x01    /* process using software fltng pnt emulator */
-#define        PCB_DBREGS      0x02    /* process using debug registers */
-#define FP_VIRTFP      0x04    /* virtual kernel wants exception */
-       caddr_t pcb_onfault;    /* copyin/out fault recovery */
-       int     pcb_unused;
-       struct  pcb_ext *pcb_ext;       /* optional pcb extension */
-       u_long  __pcb_spare[3]; /* adjust to avoid core dump size changes */
-};
-
-#ifdef _KERNEL
-
-void   savectx (struct pcb *);
-#endif
-
-#endif /* _MACHINE_PCB_H_ */
diff --git a/sys/platform/vkernel/include/pcb_ext.h b/sys/platform/vkernel/include/pcb_ext.h
deleted file mode 100644 (file)
index ea8a3c2..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*-
- * Copyright (c) 1997 Jonathan Lemon
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/i386/include/pcb_ext.h,v 1.4 1999/12/29 04:33:04 peter Exp $
- */
-
-#ifndef _MACHINE_PCB_EXT_H_
-#define _MACHINE_PCB_EXT_H_
-
-#ifndef _SYS_TYPES_H_
-#include <sys/types.h>
-#endif
-
-/*
- * Extension to the 386 process control block
- */
-#include <machine/tss.h>
-#include <machine/vm86.h>
-#include <machine/segments.h>
-
-struct pcb_ext {
-       struct  segment_descriptor ext_tssd;    /* tss descriptor */
-       struct  i386tss ext_tss;        /* per-process i386tss */
-       caddr_t ext_iomap;              /* i/o permission bitmap */
-       struct  vm86_kernel ext_vm86;   /* vm86 area */
-};
-
-struct pcb_ldt {
-       caddr_t ldt_base;
-       int     ldt_len;
-       int     ldt_refcnt;
-       u_long  ldt_active;
-       struct  segment_descriptor ldt_sd;
-};
-
-#ifdef _KERNEL
-
-struct pcb;
-
-void set_user_ldt (struct pcb *);
-struct pcb_ldt *user_ldt_alloc (struct pcb *, int);
-void user_ldt_free (struct pcb *);
-
-#endif
-
-#endif /* _MACHINE_PCB_EXT_H_ */
diff --git a/sys/platform/vkernel/include/pmap.h b/sys/platform/vkernel/include/pmap.h
deleted file mode 100644 (file)
index 6ab7b90..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (c) 1991 Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and William Jolitz of UUNET Technologies Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Derived from hp300 version by Mike Hibler, this version by William
- * Jolitz uses a recursive map [a pde points to the page directory] to
- * map the page tables using the pagetables themselves. This is done to
- * reduce the impact on kernel virtual memory for lots of sparse address
- * space, and to reduce the cost of memory to each process.
- *
- * from: hp300: @(#)pmap.h     7.2 (Berkeley) 12/16/90
- * from: @(#)pmap.h    7.4 (Berkeley) 5/12/91
- * $FreeBSD: src/sys/i386/include/pmap.h,v 1.65.2.3 2001/10/03 07:15:37 peter Exp $
- */
-
-#ifndef _MACHINE_PMAP_H_
-#define        _MACHINE_PMAP_H_
-
-#include <cpu/pmap.h>
-
-/*
- * Size of Kernel address space.  This is the number of page table pages
- * (4MB each) to use for the kernel.  256 pages == 1 Gigabyte.
- * This **MUST** be a multiple of 4 (eg: 252, 256, 260, etc).
- */
-#ifndef KVA_PAGES
-#define KVA_PAGES      256
-#endif
-
-/*
- * Pte related macros
- */
-#define VADDR(pdi, pti) ((vm_offset_t)(((pdi)<<PDRSHIFT)|((pti)<<PAGE_SHIFT)))
-
-#ifndef LOCORE
-
-#ifndef _SYS_TYPES_H_
-#include <sys/types.h>
-#endif
-#ifndef _SYS_QUEUE_H_
-#include <sys/queue.h>
-#endif
-#ifndef _SYS_SPINLOCK_H_
-#include <sys/spinlock.h>
-#endif
-#ifndef _SYS_THREAD_H_
-#include <sys/thread.h>
-#endif
-#ifndef _SYS_VKERNEL_H_
-#include <sys/vkernel.h>
-#endif
-#ifndef _MACHINE_TYPES_H_
-#include <machine/types.h>
-#endif
-#ifndef _MACHINE_PARAM_H_
-#include <machine/param.h>
-#endif
-
-#ifdef _KERNEL
-
-vm_paddr_t pmap_kextract(vm_offset_t);
-
-/*
- * XXX
- */
-#define        vtophys(va)     pmap_kextract(((vm_offset_t)(va)))
-#define        vtophys_pte(va) ((pt_entry_t)pmap_kextract(((vm_offset_t)(va))))
-
-#endif
-
-/*
- * Pmap stuff
- */
-struct pv_entry;
-struct vm_page;
-struct vm_object;
-
-struct md_page {
-       int pv_list_count;
-       TAILQ_HEAD(,pv_entry)   pv_list;
-};
-
-struct md_object {
-};
-
-/*
- * Each machine dependent implementation is expected to
- * keep certain statistics.  They may do this anyway they
- * so choose, but are expected to return the statistics
- * in the following structure.
- */
-struct pmap_statistics {
-       long resident_count;    /* # of pages mapped (total) */
-       long wired_count;       /* # of pages wired */
-};
-typedef struct pmap_statistics *pmap_statistics_t;
-
-struct pmap {
-       vpte_t                  *pm_pdir;       /* KVA of page directory */
-       vpte_t                  pm_pdirpte;     /* pte mapping phys page */
-       struct vm_object        *pm_pteobj;     /* Container for pte's */
-       cpumask_t               pm_cpucachemask;/* Invalidate cpu mappings */
-       TAILQ_ENTRY(pmap)       pm_pmnode;      /* list of pmaps */
-       TAILQ_HEAD(,pv_entry)   pm_pvlist;      /* list of mappings in pmap */
-       TAILQ_HEAD(,pv_entry)   pm_pvlist_free; /* free mappings */
-       int                     pm_count;       /* reference count */
-       cpulock_t               pm_active_lock; /* interlock */
-       cpumask_t               pm_active;      /* active on cpus */
-       int                     pm_pdindex;     /* page dir page in obj */
-       struct pmap_statistics  pm_stats;       /* pmap statistics */
-       struct  vm_page         *pm_ptphint;    /* pmap ptp hint */
-       int                     pm_generation;  /* detect pvlist deletions */
-       struct spinlock         pm_spin;
-       struct lwkt_token       pm_token;
-};
-
-#define pmap_resident_count(pmap) (pmap)->pm_stats.resident_count
-
-typedef struct pmap    *pmap_t;
-
-#ifdef _KERNEL
-extern struct pmap     kernel_pmap;
-#endif
-
-/*
- * For each vm_page_t, there is a list of all currently valid virtual
- * mappings of that page.  An entry is a pv_entry_t, the list is pv_table.
- */
-typedef struct pv_entry {
-       pmap_t          pv_pmap;        /* pmap where mapping lies */
-       vm_offset_t     pv_va;          /* virtual address for mapping */
-       TAILQ_ENTRY(pv_entry)   pv_list;
-       TAILQ_ENTRY(pv_entry)   pv_plist;
-       struct vm_page  *pv_ptem;       /* VM page for pte */
-} *pv_entry_t;
-
-#ifdef _KERNEL
-
-extern caddr_t CADDR1;
-extern pt_entry_t *CMAP1;
-extern char *ptvmmap;          /* poor name! */
-extern vm_offset_t clean_sva;
-extern vm_offset_t clean_eva;
-
-#ifndef __VM_PAGE_T_DEFINED__
-#define __VM_PAGE_T_DEFINED__
-typedef struct vm_page *vm_page_t;
-#endif
-#ifndef __VM_MEMATTR_T_DEFINED__
-#define __VM_MEMATTR_T_DEFINED__
-typedef char vm_memattr_t;
-#endif
-
-void   pmap_bootstrap (void);
-void   *pmap_mapdev (vm_paddr_t, vm_size_t);
-void   pmap_page_set_memattr(vm_page_t m, vm_memattr_t ma);
-void   pmap_unmapdev (vm_offset_t, vm_size_t);
-void   pmap_release(struct pmap *pmap);
-struct vm_page *pmap_use_pt (pmap_t, vm_offset_t);
-void   pmap_set_opt (void);
-
-static __inline int
-pmap_emulate_ad_bits(pmap_t pmap) {
-       return 0;
-}
-
-#endif /* _KERNEL */
-
-#endif /* !LOCORE */
-
-#endif /* !_MACHINE_PMAP_H_ */
diff --git a/sys/platform/vkernel/include/pmap_inval.h b/sys/platform/vkernel/include/pmap_inval.h
deleted file mode 100644 (file)
index 3f9e6dc..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2003,2004 The DragonFly Project.  All rights reserved.
- * 
- * This code is derived from software contributed to The DragonFly Project
- * by Matthew Dillon <dillon@backplane.com>
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * $DragonFly: src/sys/platform/vkernel/include/pmap_inval.h,v 1.3 2007/07/02 02:22:57 dillon Exp $
- */
-
-#ifndef _MACHINE_PMAP_INVAL_H_
-#define        _MACHINE_PMAP_INVAL_H_
-
-#ifndef _SYS_THREAD_H_
-#include <sys/thread.h>
-#endif
-
-typedef struct pmap_inval_info {
-    int                        pir_flags;
-    struct lwkt_cpusync        pir_cpusync;
-} pmap_inval_info;
-
-typedef pmap_inval_info *pmap_inval_info_t;
-
-#define PIRF_INVLTLB   0x0001  /* request invalidation of whole table */
-#define PIRF_INVL1PG   0x0002  /* else request invalidation of one page */
-#define PIRF_CPUSYNC   0x0004  /* cpusync is currently active */
-
-#ifdef _KERNEL
-
-#ifndef _MACHINE_PMAP_H_
-#include <machine/pmap.h>
-#endif
-
-void pmap_inval_pte(volatile vpte_t *ptep, struct pmap *pmap, vm_offset_t va);
-void pmap_inval_pte_quick(volatile vpte_t *ptep, struct pmap *pmap, vm_offset_t va);
-void pmap_inval_pde(volatile vpte_t *ptep, struct pmap *pmap, vm_offset_t va);
-void pmap_inval_pde_quick(volatile vpte_t *ptep, struct pmap *pmap, vm_offset_t va);
-vpte_t pmap_clean_pte(volatile vpte_t *ptep, struct pmap *pmap, vm_offset_t va);
-vpte_t pmap_clean_pde(volatile vpte_t *ptep, struct pmap *pmap, vm_offset_t va);
-vpte_t pmap_setro_pte(volatile vpte_t *ptep, struct pmap *pmap, vm_offset_t va);
-vpte_t pmap_inval_loadandclear(volatile vpte_t *ptep, struct pmap *pmap, vm_offset_t va);
-
-#endif
-
-#endif
diff --git a/sys/platform/vkernel/include/proc.h b/sys/platform/vkernel/include/proc.h
deleted file mode 100644 (file)
index 88d2ee6..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2006 The DragonFly Project.  All rights reserved.
- * 
- * This code is derived from software contributed to The DragonFly Project
- * by Matthew Dillon <dillon@backplane.com>
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of The DragonFly Project nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific, prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.