Date: Sun, 22 Aug 2010 21:52:39 +0000 (UTC) From: Warner Losh <imp@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r211656 - in user/imp/tbemd/sys: amd64/acpica amd64/amd64 amd64/conf amd64/ia32 amd64/include amd64/linux32 arm/arm arm/at91 arm/conf arm/include arm/mv arm/mv/discovery arm/mv/kirkwood... Message-ID: <201008222152.o7MLqdVg017639@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: imp Date: Sun Aug 22 21:52:38 2010 New Revision: 211656 URL: http://svn.freebsd.org/changeset/base/211656 Log: Merge to head @211636 -- with hand tweaks [given up] hoping for the best Added: user/imp/tbemd/sys/arm/at91/at91_aicreg.h - copied unchanged from r211636, head/sys/arm/at91/at91_aicreg.h user/imp/tbemd/sys/arm/at91/at91_pio_sam9.h - copied unchanged from r211636, head/sys/arm/at91/at91_pio_sam9.h user/imp/tbemd/sys/arm/at91/at91_pit.c - copied unchanged from r211636, head/sys/arm/at91/at91_pit.c user/imp/tbemd/sys/arm/at91/at91_pitreg.h - copied unchanged from r211636, head/sys/arm/at91/at91_pitreg.h user/imp/tbemd/sys/arm/at91/at91sam9.c - copied unchanged from r211636, head/sys/arm/at91/at91sam9.c user/imp/tbemd/sys/arm/at91/at91sam9_machdep.c - copied unchanged from r211636, head/sys/arm/at91/at91sam9_machdep.c user/imp/tbemd/sys/arm/at91/at91sam9g20reg.h - copied unchanged from r211636, head/sys/arm/at91/at91sam9g20reg.h user/imp/tbemd/sys/arm/at91/board_hl201.c - copied unchanged from r211636, head/sys/arm/at91/board_hl201.c user/imp/tbemd/sys/arm/at91/files.at91sam9 - copied unchanged from r211636, head/sys/arm/at91/files.at91sam9 user/imp/tbemd/sys/arm/at91/if_macb.c - copied unchanged from r211636, head/sys/arm/at91/if_macb.c user/imp/tbemd/sys/arm/at91/if_macbreg.h - copied unchanged from r211636, head/sys/arm/at91/if_macbreg.h user/imp/tbemd/sys/arm/at91/if_macbvar.h - copied unchanged from r211636, head/sys/arm/at91/if_macbvar.h user/imp/tbemd/sys/arm/at91/std.at91sam9 - copied unchanged from r211636, head/sys/arm/at91/std.at91sam9 user/imp/tbemd/sys/arm/at91/std.hl201 - copied unchanged from r211636, head/sys/arm/at91/std.hl201 user/imp/tbemd/sys/arm/conf/HL201 - copied unchanged from r211636, head/sys/arm/conf/HL201 user/imp/tbemd/sys/arm/conf/HL201.hints - copied unchanged from r211636, head/sys/arm/conf/HL201.hints user/imp/tbemd/sys/arm/include/fdt.h - copied unchanged from r211636, head/sys/arm/include/fdt.h user/imp/tbemd/sys/arm/include/ofw_machdep.h - copied unchanged from r211636, head/sys/arm/include/ofw_machdep.h user/imp/tbemd/sys/arm/s3c2xx0/s3c24x0_rtc.c - copied unchanged from r211636, head/sys/arm/s3c2xx0/s3c24x0_rtc.c user/imp/tbemd/sys/boot/ofw/libofw/ppc64_elf_freebsd.c - copied unchanged from r211636, head/sys/boot/ofw/libofw/ppc64_elf_freebsd.c user/imp/tbemd/sys/boot/zfs/zfstest.c - copied unchanged from r211636, head/sys/boot/zfs/zfstest.c user/imp/tbemd/sys/cddl/compat/opensolaris/kern/opensolaris_uio.c - copied unchanged from r211636, head/sys/cddl/compat/opensolaris/kern/opensolaris_uio.c user/imp/tbemd/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/ - copied from r211636, head/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/ user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/sys/fasttrap_impl.h - copied unchanged from r211636, head/sys/cddl/contrib/opensolaris/uts/common/sys/fasttrap_impl.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/intel/dtrace/ - copied from r211636, head/sys/cddl/contrib/opensolaris/uts/intel/dtrace/ user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/sparc/dtrace/ - copied from r211636, head/sys/cddl/contrib/opensolaris/uts/sparc/dtrace/ user/imp/tbemd/sys/cddl/dev/dtrace/amd64/regset.h - copied unchanged from r211636, head/sys/cddl/dev/dtrace/amd64/regset.h user/imp/tbemd/sys/cddl/dev/dtrace/i386/regset.h - copied unchanged from r211636, head/sys/cddl/dev/dtrace/i386/regset.h user/imp/tbemd/sys/conf/ldscript.mips.64 - copied unchanged from r211636, head/sys/conf/ldscript.mips.64 user/imp/tbemd/sys/conf/ldscript.mips.n32 - copied unchanged from r211636, head/sys/conf/ldscript.mips.n32 user/imp/tbemd/sys/conf/ldscript.powerpc64 - copied unchanged from r211636, head/sys/conf/ldscript.powerpc64 user/imp/tbemd/sys/crypto/aesni/ - copied from r211636, head/sys/crypto/aesni/ Deleted: user/imp/tbemd/sys/amd64/acpica/Makefile user/imp/tbemd/sys/amd64/acpica/genwakecode.sh user/imp/tbemd/sys/amd64/acpica/genwakedata.sh user/imp/tbemd/sys/arm/include/bootinfo.h user/imp/tbemd/sys/arm/mv/discovery/db78xxx.c user/imp/tbemd/sys/arm/mv/kirkwood/db88f6xxx.c user/imp/tbemd/sys/arm/mv/kirkwood/files.db88f6xxx user/imp/tbemd/sys/arm/mv/obio.c Modified: user/imp/tbemd/sys/amd64/acpica/acpi_switch.S user/imp/tbemd/sys/amd64/acpica/acpi_wakecode.S user/imp/tbemd/sys/amd64/acpica/acpi_wakeup.c user/imp/tbemd/sys/amd64/acpica/madt.c user/imp/tbemd/sys/amd64/amd64/apic_vector.S user/imp/tbemd/sys/amd64/amd64/cpu_switch.S user/imp/tbemd/sys/amd64/amd64/exception.S user/imp/tbemd/sys/amd64/amd64/fpu.c user/imp/tbemd/sys/amd64/amd64/genassym.c user/imp/tbemd/sys/amd64/amd64/identcpu.c user/imp/tbemd/sys/amd64/amd64/initcpu.c user/imp/tbemd/sys/amd64/amd64/intr_machdep.c user/imp/tbemd/sys/amd64/amd64/legacy.c user/imp/tbemd/sys/amd64/amd64/machdep.c user/imp/tbemd/sys/amd64/amd64/mp_machdep.c user/imp/tbemd/sys/amd64/amd64/mptable_pci.c user/imp/tbemd/sys/amd64/amd64/pmap.c user/imp/tbemd/sys/amd64/amd64/support.S user/imp/tbemd/sys/amd64/amd64/trap.c user/imp/tbemd/sys/amd64/amd64/tsc.c user/imp/tbemd/sys/amd64/amd64/vm_machdep.c user/imp/tbemd/sys/amd64/conf/GENERIC user/imp/tbemd/sys/amd64/conf/GENERIC.hints user/imp/tbemd/sys/amd64/conf/NOTES user/imp/tbemd/sys/amd64/ia32/ia32_exception.S user/imp/tbemd/sys/amd64/ia32/ia32_signal.c user/imp/tbemd/sys/amd64/ia32/ia32_syscall.c user/imp/tbemd/sys/amd64/include/apicvar.h user/imp/tbemd/sys/amd64/include/asmacros.h user/imp/tbemd/sys/amd64/include/clock.h user/imp/tbemd/sys/amd64/include/cpu.h user/imp/tbemd/sys/amd64/include/elf.h user/imp/tbemd/sys/amd64/include/mca.h user/imp/tbemd/sys/amd64/include/param.h user/imp/tbemd/sys/amd64/include/pcb.h user/imp/tbemd/sys/amd64/include/pcpu.h user/imp/tbemd/sys/amd64/include/pmap.h user/imp/tbemd/sys/amd64/include/segments.h user/imp/tbemd/sys/amd64/include/smp.h user/imp/tbemd/sys/amd64/include/specialreg.h user/imp/tbemd/sys/amd64/include/vmparam.h user/imp/tbemd/sys/amd64/linux32/linux32_machdep.c user/imp/tbemd/sys/amd64/linux32/linux32_proto.h user/imp/tbemd/sys/amd64/linux32/linux32_syscall.h user/imp/tbemd/sys/amd64/linux32/linux32_sysent.c user/imp/tbemd/sys/amd64/linux32/linux32_sysvec.c user/imp/tbemd/sys/amd64/linux32/syscalls.master user/imp/tbemd/sys/arm/arm/machdep.c user/imp/tbemd/sys/arm/arm/nexus.c user/imp/tbemd/sys/arm/arm/pmap.c user/imp/tbemd/sys/arm/at91/at91_pmc.c user/imp/tbemd/sys/arm/at91/at91_pmcreg.h user/imp/tbemd/sys/arm/conf/DB-78XXX user/imp/tbemd/sys/arm/conf/DB-88F5XXX user/imp/tbemd/sys/arm/conf/DB-88F6XXX user/imp/tbemd/sys/arm/conf/SHEEVAPLUG user/imp/tbemd/sys/arm/include/elf.h user/imp/tbemd/sys/arm/include/metadata.h user/imp/tbemd/sys/arm/include/pmap.h user/imp/tbemd/sys/arm/include/vmparam.h user/imp/tbemd/sys/arm/mv/bus_space.c user/imp/tbemd/sys/arm/mv/common.c user/imp/tbemd/sys/arm/mv/discovery/discovery.c user/imp/tbemd/sys/arm/mv/discovery/files.db78xxx user/imp/tbemd/sys/arm/mv/discovery/std.db78xxx user/imp/tbemd/sys/arm/mv/files.mv user/imp/tbemd/sys/arm/mv/gpio.c user/imp/tbemd/sys/arm/mv/ic.c user/imp/tbemd/sys/arm/mv/kirkwood/kirkwood.c user/imp/tbemd/sys/arm/mv/kirkwood/sheevaplug.c user/imp/tbemd/sys/arm/mv/kirkwood/std.db88f6xxx user/imp/tbemd/sys/arm/mv/kirkwood/std.sheevaplug user/imp/tbemd/sys/arm/mv/mv_machdep.c user/imp/tbemd/sys/arm/mv/mv_pci.c user/imp/tbemd/sys/arm/mv/mv_sata.c user/imp/tbemd/sys/arm/mv/mvreg.h user/imp/tbemd/sys/arm/mv/mvvar.h user/imp/tbemd/sys/arm/mv/mvwin.h user/imp/tbemd/sys/arm/mv/orion/db88f5xxx.c user/imp/tbemd/sys/arm/mv/orion/orion.c user/imp/tbemd/sys/arm/mv/orion/std.db88f5xxx user/imp/tbemd/sys/arm/mv/rtc.c user/imp/tbemd/sys/arm/mv/timer.c user/imp/tbemd/sys/arm/mv/twsi.c user/imp/tbemd/sys/arm/s3c2xx0/files.s3c2xx0 user/imp/tbemd/sys/arm/s3c2xx0/s3c24x0.c user/imp/tbemd/sys/arm/s3c2xx0/s3c24x0_machdep.c user/imp/tbemd/sys/arm/s3c2xx0/s3c24x0reg.h user/imp/tbemd/sys/arm/s3c2xx0/s3c2xx0_space.c user/imp/tbemd/sys/arm/s3c2xx0/s3c2xx0var.h user/imp/tbemd/sys/boot/Makefile user/imp/tbemd/sys/boot/arm/uboot/Makefile user/imp/tbemd/sys/boot/common/Makefile.inc user/imp/tbemd/sys/boot/common/load_elf_obj.c user/imp/tbemd/sys/boot/common/loader.8 user/imp/tbemd/sys/boot/fdt/Makefile user/imp/tbemd/sys/boot/fdt/dts/mpc8555cds.dts user/imp/tbemd/sys/boot/ficl/Makefile user/imp/tbemd/sys/boot/ficl/ficl.h user/imp/tbemd/sys/boot/forth/loader.conf user/imp/tbemd/sys/boot/i386/boot2/Makefile user/imp/tbemd/sys/boot/i386/loader/Makefile user/imp/tbemd/sys/boot/i386/pxeldr/Makefile user/imp/tbemd/sys/boot/ia64/common/exec.c user/imp/tbemd/sys/boot/ia64/efi/version user/imp/tbemd/sys/boot/ofw/Makefile.inc user/imp/tbemd/sys/boot/ofw/libofw/Makefile user/imp/tbemd/sys/boot/ofw/libofw/libofw.h user/imp/tbemd/sys/boot/pc98/loader/Makefile user/imp/tbemd/sys/boot/powerpc/Makefile.inc user/imp/tbemd/sys/boot/powerpc/boot1.chrp/Makefile user/imp/tbemd/sys/boot/powerpc/ofw/Makefile user/imp/tbemd/sys/boot/powerpc/ofw/conf.c user/imp/tbemd/sys/boot/powerpc/ofw/ldscript.powerpc user/imp/tbemd/sys/boot/powerpc/ofw/metadata.c user/imp/tbemd/sys/boot/powerpc/uboot/Makefile user/imp/tbemd/sys/boot/powerpc/uboot/ldscript.powerpc user/imp/tbemd/sys/boot/uboot/Makefile.inc user/imp/tbemd/sys/boot/uboot/common/metadata.c user/imp/tbemd/sys/boot/zfs/zfsimpl.c user/imp/tbemd/sys/cam/ata/ata_da.c user/imp/tbemd/sys/cam/ata/ata_xpt.c user/imp/tbemd/sys/cam/cam.c user/imp/tbemd/sys/cam/cam_ccb.h user/imp/tbemd/sys/cam/cam_xpt.c user/imp/tbemd/sys/cam/scsi/scsi_all.h user/imp/tbemd/sys/cam/scsi/scsi_cd.c user/imp/tbemd/sys/cam/scsi/scsi_da.c user/imp/tbemd/sys/cam/scsi/scsi_target.c user/imp/tbemd/sys/cddl/boot/zfs/zfsimpl.h user/imp/tbemd/sys/cddl/compat/opensolaris/kern/opensolaris_misc.c user/imp/tbemd/sys/cddl/compat/opensolaris/kern/opensolaris_policy.c user/imp/tbemd/sys/cddl/compat/opensolaris/sys/misc.h user/imp/tbemd/sys/cddl/compat/opensolaris/sys/policy.h user/imp/tbemd/sys/cddl/compat/opensolaris/sys/sid.h user/imp/tbemd/sys/cddl/compat/opensolaris/sys/uio.h user/imp/tbemd/sys/cddl/compat/opensolaris/sys/vnode.h user/imp/tbemd/sys/cddl/contrib/opensolaris/common/zfs/zfs_deleg.c user/imp/tbemd/sys/cddl/contrib/opensolaris/common/zfs/zfs_deleg.h user/imp/tbemd/sys/cddl/contrib/opensolaris/common/zfs/zfs_namecheck.c user/imp/tbemd/sys/cddl/contrib/opensolaris/common/zfs/zfs_namecheck.h user/imp/tbemd/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c user/imp/tbemd/sys/cddl/contrib/opensolaris/common/zfs/zprop_common.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scrub.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_errlog.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_deleg.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_prop.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab_impl.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/space_map.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/uberblock_impl.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_acl.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ctldir.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_dir.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_fuid.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/txg.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_cache.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_label.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_mirror.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_fm.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_fuid.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_replay.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_rlock.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/sys/acl.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/sys/debug.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace_impl.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/sys/fasttrap.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/sys/fm/fs/zfs.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/sys/isa_defs.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/sys/sysevent/eventdefs.h user/imp/tbemd/sys/cddl/contrib/opensolaris/uts/common/sys/vnode.h user/imp/tbemd/sys/cddl/dev/cyclic/cyclic.c user/imp/tbemd/sys/cddl/dev/dtrace/amd64/dtrace_isa.c user/imp/tbemd/sys/cddl/dev/dtrace/amd64/dtrace_subr.c user/imp/tbemd/sys/cddl/dev/dtrace/amd64/instr_size.c user/imp/tbemd/sys/cddl/dev/dtrace/dtrace_cddl.h user/imp/tbemd/sys/cddl/dev/dtrace/dtrace_debug.c user/imp/tbemd/sys/cddl/dev/dtrace/dtrace_ioctl.c user/imp/tbemd/sys/cddl/dev/dtrace/dtrace_load.c user/imp/tbemd/sys/cddl/dev/dtrace/dtrace_unload.c user/imp/tbemd/sys/cddl/dev/dtrace/i386/dtrace_isa.c user/imp/tbemd/sys/cddl/dev/dtrace/i386/dtrace_subr.c user/imp/tbemd/sys/cddl/dev/dtrace/i386/instr_size.c user/imp/tbemd/sys/cddl/dev/systrace/systrace.c user/imp/tbemd/sys/compat/freebsd32/freebsd32.h user/imp/tbemd/sys/compat/freebsd32/freebsd32_misc.c user/imp/tbemd/sys/compat/freebsd32/freebsd32_proto.h user/imp/tbemd/sys/compat/freebsd32/freebsd32_signal.h user/imp/tbemd/sys/compat/freebsd32/freebsd32_syscall.h user/imp/tbemd/sys/compat/freebsd32/freebsd32_syscalls.c user/imp/tbemd/sys/compat/freebsd32/freebsd32_sysent.c user/imp/tbemd/sys/compat/freebsd32/freebsd32_util.h user/imp/tbemd/sys/compat/freebsd32/syscalls.master user/imp/tbemd/sys/compat/linprocfs/linprocfs.c user/imp/tbemd/sys/compat/linux/linux_signal.c user/imp/tbemd/sys/compat/ndis/subr_usbd.c user/imp/tbemd/sys/compat/svr4/svr4_filio.c user/imp/tbemd/sys/compat/svr4/svr4_proto.h user/imp/tbemd/sys/compat/svr4/svr4_syscall.h user/imp/tbemd/sys/compat/svr4/svr4_syscallnames.c user/imp/tbemd/sys/compat/svr4/svr4_sysent.c user/imp/tbemd/sys/compat/x86bios/x86bios.c user/imp/tbemd/sys/compat/x86bios/x86bios.h user/imp/tbemd/sys/conf/Makefile.arm user/imp/tbemd/sys/conf/Makefile.powerpc user/imp/tbemd/sys/conf/NOTES user/imp/tbemd/sys/conf/files user/imp/tbemd/sys/conf/files.amd64 user/imp/tbemd/sys/conf/files.arm user/imp/tbemd/sys/conf/files.i386 user/imp/tbemd/sys/conf/files.mips user/imp/tbemd/sys/conf/files.pc98 user/imp/tbemd/sys/conf/files.powerpc user/imp/tbemd/sys/conf/files.sparc64 user/imp/tbemd/sys/conf/files.sun4v user/imp/tbemd/sys/conf/kern.mk user/imp/tbemd/sys/conf/kern.pre.mk user/imp/tbemd/sys/conf/kmod.mk user/imp/tbemd/sys/conf/ldscript.mips.octeon1.32 user/imp/tbemd/sys/conf/makeLINT.mk user/imp/tbemd/sys/conf/options user/imp/tbemd/sys/conf/options.amd64 user/imp/tbemd/sys/conf/options.arm user/imp/tbemd/sys/conf/options.mips user/imp/tbemd/sys/conf/options.powerpc Directory Properties: user/imp/tbemd/sys/amd64/include/xen/ (props changed) user/imp/tbemd/sys/cddl/contrib/opensolaris/ (props changed) Modified: user/imp/tbemd/sys/amd64/acpica/acpi_switch.S ============================================================================== --- user/imp/tbemd/sys/amd64/acpica/acpi_switch.S Sun Aug 22 21:47:34 2010 (r211655) +++ user/imp/tbemd/sys/amd64/acpica/acpi_switch.S Sun Aug 22 21:52:38 2010 (r211656) @@ -1,7 +1,7 @@ /*- * Copyright (c) 2001 Takanori Watanabe <takawata@jp.freebsd.org> * Copyright (c) 2001 Mitsuru IWASAKI <iwasaki@jp.freebsd.org> - * Copyright (c) 2008-2009 Jung-uk Kim <jkim@FreeBSD.org> + * Copyright (c) 2008-2010 Jung-uk Kim <jkim@FreeBSD.org> * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -34,14 +34,11 @@ #include "acpi_wakedata.h" #include "assym.s" -#define WAKEUP_CTX(member) wakeup_ ## member - wakeup_ctx(%rdi) -#define WAKEUP_PCB(member) PCB_ ## member(%r11) -#define WAKEUP_XPCB(member) XPCB_ ## member(%r11) +#define WAKEUP_CTX(member) wakeup_ ## member - wakeup_ctx(%rsi) ENTRY(acpi_restorecpu) /* Switch to KPML4phys. */ - movq %rsi, %rax - movq %rax, %cr3 + movq %rdi, %cr3 /* Restore GDT. */ lgdt WAKEUP_CTX(gdt) @@ -49,7 +46,7 @@ ENTRY(acpi_restorecpu) 1: /* Fetch PCB. */ - movq WAKEUP_CTX(xpcb), %r11 + movq WAKEUP_CTX(pcb), %rdi /* Force kernel segment registers. */ movl $KDSEL, %eax @@ -62,16 +59,16 @@ ENTRY(acpi_restorecpu) movw %ax, %gs movl $MSR_FSBASE, %ecx - movl WAKEUP_PCB(FSBASE), %eax - movl 4 + WAKEUP_PCB(FSBASE), %edx + movl PCB_FSBASE(%rdi), %eax + movl 4 + PCB_FSBASE(%rdi), %edx wrmsr movl $MSR_GSBASE, %ecx - movl WAKEUP_PCB(GSBASE), %eax - movl 4 + WAKEUP_PCB(GSBASE), %edx + movl PCB_GSBASE(%rdi), %eax + movl 4 + PCB_GSBASE(%rdi), %edx wrmsr movl $MSR_KGSBASE, %ecx - movl WAKEUP_XPCB(KGSBASE), %eax - movl 4 + WAKEUP_XPCB(KGSBASE), %edx + movl PCB_KGSBASE(%rdi), %eax + movl 4 + PCB_KGSBASE(%rdi), %edx wrmsr /* Restore EFER. */ @@ -102,17 +99,21 @@ ENTRY(acpi_restorecpu) movl WAKEUP_CTX(sfmask), %eax wrmsr - /* Restore CR0, CR2 and CR4. */ - movq WAKEUP_XPCB(CR0), %rax + /* Restore CR0 except for FPU mode. */ + movq PCB_CR0(%rdi), %rax + movq %rax, %rcx + andq $~(CR0_EM | CR0_TS), %rax movq %rax, %cr0 - movq WAKEUP_XPCB(CR2), %rax + + /* Restore CR2 and CR4. */ + movq PCB_CR2(%rdi), %rax movq %rax, %cr2 - movq WAKEUP_XPCB(CR4), %rax + movq PCB_CR4(%rdi), %rax movq %rax, %cr4 /* Restore descriptor tables. */ - lidt WAKEUP_XPCB(IDT) - lldt WAKEUP_XPCB(LDT) + lidt PCB_IDT(%rdi) + lldt PCB_LDT(%rdi) #define SDT_SYSTSS 9 #define SDT_SYSBSY 11 @@ -120,37 +121,44 @@ ENTRY(acpi_restorecpu) /* Clear "task busy" bit and reload TR. */ movq PCPU(TSS), %rax andb $(~SDT_SYSBSY | SDT_SYSTSS), 5(%rax) - movw WAKEUP_XPCB(TR), %ax + movw PCB_TR(%rdi), %ax ltr %ax #undef SDT_SYSTSS #undef SDT_SYSBSY /* Restore other callee saved registers. */ - movq WAKEUP_PCB(R15), %r15 - movq WAKEUP_PCB(R14), %r14 - movq WAKEUP_PCB(R13), %r13 - movq WAKEUP_PCB(R12), %r12 - movq WAKEUP_PCB(RBP), %rbp - movq WAKEUP_PCB(RSP), %rsp - movq WAKEUP_PCB(RBX), %rbx + movq PCB_R15(%rdi), %r15 + movq PCB_R14(%rdi), %r14 + movq PCB_R13(%rdi), %r13 + movq PCB_R12(%rdi), %r12 + movq PCB_RBP(%rdi), %rbp + movq PCB_RSP(%rdi), %rsp + movq PCB_RBX(%rdi), %rbx /* Restore debug registers. */ - movq WAKEUP_PCB(DR0), %rax + movq PCB_DR0(%rdi), %rax movq %rax, %dr0 - movq WAKEUP_PCB(DR1), %rax + movq PCB_DR1(%rdi), %rax movq %rax, %dr1 - movq WAKEUP_PCB(DR2), %rax + movq PCB_DR2(%rdi), %rax movq %rax, %dr2 - movq WAKEUP_PCB(DR3), %rax + movq PCB_DR3(%rdi), %rax movq %rax, %dr3 - movq WAKEUP_PCB(DR6), %rax + movq PCB_DR6(%rdi), %rax movq %rax, %dr6 - movq WAKEUP_PCB(DR7), %rax + movq PCB_DR7(%rdi), %rax movq %rax, %dr7 + /* Restore FPU state. */ + fninit + fxrstor PCB_USERFPU(%rdi) + + /* Reload CR0. */ + movq %rcx, %cr0 + /* Restore return address. */ - movq WAKEUP_PCB(RIP), %rax + movq PCB_RIP(%rdi), %rax movq %rax, (%rsp) /* Indicate the CPU is resumed. */ @@ -159,19 +167,3 @@ ENTRY(acpi_restorecpu) ret END(acpi_restorecpu) - -ENTRY(acpi_savecpu) - /* Fetch XPCB and save CPU context. */ - movq %rdi, %r10 - call savectx2 - movq %r10, %r11 - - /* Patch caller's return address and stack pointer. */ - movq (%rsp), %rax - movq %rax, WAKEUP_PCB(RIP) - movq %rsp, %rax - movq %rax, WAKEUP_PCB(RSP) - - movl $1, %eax - ret -END(acpi_savecpu) Modified: user/imp/tbemd/sys/amd64/acpica/acpi_wakecode.S ============================================================================== --- user/imp/tbemd/sys/amd64/acpica/acpi_wakecode.S Sun Aug 22 21:47:34 2010 (r211655) +++ user/imp/tbemd/sys/amd64/acpica/acpi_wakecode.S Sun Aug 22 21:52:38 2010 (r211656) @@ -2,7 +2,7 @@ * Copyright (c) 2001 Takanori Watanabe <takawata@jp.freebsd.org> * Copyright (c) 2001 Mitsuru IWASAKI <iwasaki@jp.freebsd.org> * Copyright (c) 2003 Peter Wemm - * Copyright (c) 2008-2009 Jung-uk Kim <jkim@FreeBSD.org> + * Copyright (c) 2008-2010 Jung-uk Kim <jkim@FreeBSD.org> * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -29,8 +29,6 @@ * $FreeBSD$ */ -#define LOCORE - #include <machine/asmacros.h> #include <machine/specialreg.h> @@ -212,8 +210,8 @@ wakeup_64: mov %ax, %ds /* Restore arguments and return. */ - movq wakeup_ctx - wakeup_start(%rbx), %rdi - movq wakeup_kpml4 - wakeup_start(%rbx), %rsi + movq wakeup_kpml4 - wakeup_start(%rbx), %rdi + movq wakeup_ctx - wakeup_start(%rbx), %rsi movq wakeup_retaddr - wakeup_start(%rbx), %rax jmp *%rax @@ -267,7 +265,7 @@ wakeup_kpml4: wakeup_ctx: .quad 0 -wakeup_xpcb: +wakeup_pcb: .quad 0 wakeup_gdt: .word 0 Modified: user/imp/tbemd/sys/amd64/acpica/acpi_wakeup.c ============================================================================== --- user/imp/tbemd/sys/amd64/acpica/acpi_wakeup.c Sun Aug 22 21:47:34 2010 (r211655) +++ user/imp/tbemd/sys/amd64/acpica/acpi_wakeup.c Sun Aug 22 21:52:38 2010 (r211656) @@ -2,7 +2,7 @@ * Copyright (c) 2001 Takanori Watanabe <takawata@jp.freebsd.org> * Copyright (c) 2001 Mitsuru IWASAKI <iwasaki@jp.freebsd.org> * Copyright (c) 2003 Peter Wemm - * Copyright (c) 2008-2009 Jung-uk Kim <jkim@FreeBSD.org> + * Copyright (c) 2008-2010 Jung-uk Kim <jkim@FreeBSD.org> * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$"); #include <vm/pmap.h> #include <machine/intr_machdep.h> +#include <machine/mca.h> #include <machine/pcb.h> #include <machine/pmap.h> #include <machine/specialreg.h> @@ -65,13 +66,12 @@ extern int acpi_resume_beep; extern int acpi_reset_video; #ifdef SMP -extern struct xpcb **stopxpcbs; +extern struct pcb **susppcbs; #else -static struct xpcb **stopxpcbs; +static struct pcb **susppcbs; #endif -int acpi_restorecpu(struct xpcb *, vm_offset_t); -int acpi_savecpu(struct xpcb *); +int acpi_restorecpu(vm_offset_t, struct pcb *); static void *acpi_alloc_wakeup_handler(void); static void acpi_stop_beep(void *); @@ -104,10 +104,10 @@ acpi_wakeup_ap(struct acpi_softc *sc, in int apic_id = cpu_apic_ids[cpu]; int ms; - WAKECODE_FIXUP(wakeup_xpcb, struct xpcb *, stopxpcbs[cpu]); - WAKECODE_FIXUP(wakeup_gdt, uint16_t, stopxpcbs[cpu]->xpcb_gdt.rd_limit); + WAKECODE_FIXUP(wakeup_pcb, struct pcb *, susppcbs[cpu]); + WAKECODE_FIXUP(wakeup_gdt, uint16_t, susppcbs[cpu]->pcb_gdt.rd_limit); WAKECODE_FIXUP(wakeup_gdt + 2, uint64_t, - stopxpcbs[cpu]->xpcb_gdt.rd_base); + susppcbs[cpu]->pcb_gdt.rd_base); WAKECODE_FIXUP(wakeup_cpu, int, cpu); /* do an INIT IPI: assert RESET */ @@ -176,7 +176,6 @@ static void acpi_wakeup_cpus(struct acpi_softc *sc, cpumask_t wakeup_cpus) { uint32_t mpbioswarmvec; - cpumask_t map; int cpu; u_char mpbiosreason; @@ -193,8 +192,7 @@ acpi_wakeup_cpus(struct acpi_softc *sc, /* Wake up each AP. */ for (cpu = 1; cpu < mp_ncpus; cpu++) { - map = 1ul << cpu; - if ((wakeup_cpus & map) != map) + if ((wakeup_cpus & (1 << cpu)) == 0) continue; if (acpi_wakeup_ap(sc, cpu) == 0) { /* restore the warmstart vector */ @@ -215,7 +213,6 @@ acpi_wakeup_cpus(struct acpi_softc *sc, int acpi_sleep_machdep(struct acpi_softc *sc, int state) { - struct savefpu *stopfpu; #ifdef SMP cpumask_t wakeup_cpus; #endif @@ -245,10 +242,7 @@ acpi_sleep_machdep(struct acpi_softc *sc cr3 = rcr3(); load_cr3(KPML4phys); - stopfpu = stopxpcbs[0]->xpcb_pcb.pcb_save; - if (acpi_savecpu(stopxpcbs[0])) { - fpugetregs(curthread, stopfpu); - + if (savectx(susppcbs[0])) { #ifdef SMP if (wakeup_cpus != 0 && suspend_cpus(wakeup_cpus) == 0) { device_printf(sc->acpi_dev, @@ -261,11 +255,11 @@ acpi_sleep_machdep(struct acpi_softc *sc WAKECODE_FIXUP(resume_beep, uint8_t, (acpi_resume_beep != 0)); WAKECODE_FIXUP(reset_video, uint8_t, (acpi_reset_video != 0)); - WAKECODE_FIXUP(wakeup_xpcb, struct xpcb *, stopxpcbs[0]); + WAKECODE_FIXUP(wakeup_pcb, struct pcb *, susppcbs[0]); WAKECODE_FIXUP(wakeup_gdt, uint16_t, - stopxpcbs[0]->xpcb_gdt.rd_limit); + susppcbs[0]->pcb_gdt.rd_limit); WAKECODE_FIXUP(wakeup_gdt + 2, uint64_t, - stopxpcbs[0]->xpcb_gdt.rd_base); + susppcbs[0]->pcb_gdt.rd_base); WAKECODE_FIXUP(wakeup_cpu, int, 0); /* Call ACPICA to enter the desired sleep state */ @@ -284,7 +278,8 @@ acpi_sleep_machdep(struct acpi_softc *sc for (;;) ia32_pause(); } else { - fpusetregs(curthread, stopfpu); + PCPU_SET(switchtime, 0); + PCPU_SET(switchticks, ticks); #ifdef SMP if (wakeup_cpus != 0) acpi_wakeup_cpus(sc, wakeup_cpus); @@ -300,6 +295,7 @@ out: #endif load_cr3(cr3); + mca_resume(); intr_resume(); intr_restore(rf); @@ -335,9 +331,9 @@ acpi_alloc_wakeup_handler(void) printf("%s: can't alloc wake memory\n", __func__); return (NULL); } - stopxpcbs = malloc(mp_ncpus * sizeof(*stopxpcbs), M_DEVBUF, M_WAITOK); + susppcbs = malloc(mp_ncpus * sizeof(*susppcbs), M_DEVBUF, M_WAITOK); for (i = 0; i < mp_ncpus; i++) - stopxpcbs[i] = malloc(sizeof(**stopxpcbs), M_DEVBUF, M_WAITOK); + susppcbs[i] = malloc(sizeof(**susppcbs), M_DEVBUF, M_WAITOK); return (wakeaddr); } Modified: user/imp/tbemd/sys/amd64/acpica/madt.c ============================================================================== --- user/imp/tbemd/sys/amd64/acpica/madt.c Sun Aug 22 21:47:34 2010 (r211655) +++ user/imp/tbemd/sys/amd64/acpica/madt.c Sun Aug 22 21:52:38 2010 (r211656) @@ -557,9 +557,7 @@ madt_set_ids(void *dummy) if (madt == NULL) return; - for (i = 0; i < MAXCPU; i++) { - if (CPU_ABSENT(i)) - continue; + CPU_FOREACH(i) { pc = pcpu_find(i); KASSERT(pc != NULL, ("no pcpu data for CPU %u", i)); la = &lapics[pc->pc_apic_id]; Modified: user/imp/tbemd/sys/amd64/amd64/apic_vector.S ============================================================================== --- user/imp/tbemd/sys/amd64/amd64/apic_vector.S Sun Aug 22 21:47:34 2010 (r211655) +++ user/imp/tbemd/sys/amd64/amd64/apic_vector.S Sun Aug 22 21:52:38 2010 (r211656) @@ -36,6 +36,8 @@ * as well as IPI handlers. */ +#include "opt_smp.h" + #include <machine/asmacros.h> #include <machine/apicreg.h> @@ -135,6 +137,19 @@ IDTVEC(errorint) .text SUPERALIGN_TEXT IDTVEC(invltlb) +#if defined(COUNT_XINVLTLB_HITS) || defined(COUNT_IPIS) + PUSH_FRAME + movl PCPU(CPUID), %eax +#ifdef COUNT_XINVLTLB_HITS + incl xhits_gbl(,%rax,4) +#endif +#ifdef COUNT_IPIS + movq ipi_invltlb_counts(,%rax,8),%rax + incq (%rax) +#endif + POP_FRAME +#endif + pushq %rax movq %cr3, %rax /* invalidate the TLB */ @@ -155,6 +170,19 @@ IDTVEC(invltlb) .text SUPERALIGN_TEXT IDTVEC(invlpg) +#if defined(COUNT_XINVLTLB_HITS) || defined(COUNT_IPIS) + PUSH_FRAME + movl PCPU(CPUID), %eax +#ifdef COUNT_XINVLTLB_HITS + incl xhits_pg(,%rax,4) +#endif +#ifdef COUNT_IPIS + movq ipi_invlpg_counts(,%rax,8),%rax + incq (%rax) +#endif + POP_FRAME +#endif + pushq %rax movq smp_tlb_addr1, %rax @@ -175,6 +203,19 @@ IDTVEC(invlpg) .text SUPERALIGN_TEXT IDTVEC(invlrng) +#if defined(COUNT_XINVLTLB_HITS) || defined(COUNT_IPIS) + PUSH_FRAME + movl PCPU(CPUID), %eax +#ifdef COUNT_XINVLTLB_HITS + incl xhits_rng(,%rax,4) +#endif +#ifdef COUNT_IPIS + movq ipi_invlrng_counts(,%rax,8),%rax + incq (%rax) +#endif + POP_FRAME +#endif + pushq %rax pushq %rdx @@ -201,6 +242,14 @@ IDTVEC(invlrng) .text SUPERALIGN_TEXT IDTVEC(invlcache) +#ifdef COUNT_IPIS + PUSH_FRAME + movl PCPU(CPUID), %eax + movq ipi_invlcache_counts(,%rax,8),%rax + incq (%rax) + POP_FRAME +#endif + pushq %rax wbinvd @@ -270,6 +319,11 @@ IDTVEC(cpususpend) SUPERALIGN_TEXT IDTVEC(rendezvous) PUSH_FRAME +#ifdef COUNT_IPIS + movl PCPU(CPUID), %eax + movq ipi_rendezvous_counts(,%rax,8), %rax + incq (%rax) +#endif call smp_rendezvous_action movq lapic, %rax movl $0, LA_EOI(%rax) /* End Of Interrupt to APIC */ Modified: user/imp/tbemd/sys/amd64/amd64/cpu_switch.S ============================================================================== --- user/imp/tbemd/sys/amd64/amd64/cpu_switch.S Sun Aug 22 21:47:34 2010 (r211655) +++ user/imp/tbemd/sys/amd64/amd64/cpu_switch.S Sun Aug 22 21:52:38 2010 (r211656) @@ -69,16 +69,13 @@ * %rsi = newtd */ ENTRY(cpu_throw) + movl PCPU(CPUID),%eax testq %rdi,%rdi - jnz 1f - movq PCPU(IDLETHREAD),%rdi -1: - movq TD_PCB(%rdi),%r8 /* Old pcb */ - movl PCPU(CPUID), %eax + jz 1f /* release bit from old pm_active */ - movq TD_PROC(%rdi), %rdx /* oldtd->td_proc */ - movq P_VMSPACE(%rdx), %rdx /* proc->p_vmspace */ - LK btrl %eax, VM_PMAP+PM_ACTIVE(%rdx) /* clear old */ + movq PCPU(CURPMAP),%rdx + LK btrl %eax,PM_ACTIVE(%rdx) /* clear old */ +1: movq TD_PCB(%rsi),%r8 /* newtd->td_proc */ movq PCB_CR3(%r8),%rdx movq %rdx,%cr3 /* new address space */ @@ -140,15 +137,16 @@ swinact: movq %rcx,%cr3 /* new address space */ movl PCPU(CPUID), %eax /* Release bit from old pmap->pm_active */ - movq TD_PROC(%rdi), %rcx /* oldproc */ - movq P_VMSPACE(%rcx), %rcx - LK btrl %eax, VM_PMAP+PM_ACTIVE(%rcx) /* clear old */ + movq PCPU(CURPMAP),%rcx + LK btrl %eax,PM_ACTIVE(%rcx) /* clear old */ SETLK %rdx, TD_LOCK(%rdi) /* Release the old thread */ swact: /* Set bit in new pmap->pm_active */ movq TD_PROC(%rsi),%rdx /* newproc */ movq P_VMSPACE(%rdx), %rdx - LK btsl %eax, VM_PMAP+PM_ACTIVE(%rdx) /* set new */ + addq $VM_PMAP,%rdx + LK btsl %eax,PM_ACTIVE(%rdx) /* set new */ + movq %rdx,PCPU(CURPMAP) sw1: #if defined(SCHED_ULE) && defined(SMP) @@ -245,13 +243,13 @@ store_dr: movq %dr2,%r13 movq %dr3,%r12 movq %dr6,%r11 - andq $0x0000fc00, %rax /* disable all watchpoints */ movq %r15,PCB_DR0(%r8) movq %r14,PCB_DR1(%r8) movq %r13,PCB_DR2(%r8) movq %r12,PCB_DR3(%r8) movq %r11,PCB_DR6(%r8) movq %rax,PCB_DR7(%r8) + andq $0x0000fc00, %rax /* disable all watchpoints */ movq %rax,%dr7 jmp done_store_dr @@ -304,121 +302,65 @@ END(cpu_switch) * Update pcb, saving current processor state. */ ENTRY(savectx) - /* Fetch PCB. */ - movq %rdi,%rcx - /* Save caller's return address. */ movq (%rsp),%rax - movq %rax,PCB_RIP(%rcx) - - movq %cr3,%rax - movq %rax,PCB_CR3(%rcx) - - movq %rbx,PCB_RBX(%rcx) - movq %rsp,PCB_RSP(%rcx) - movq %rbp,PCB_RBP(%rcx) - movq %r12,PCB_R12(%rcx) - movq %r13,PCB_R13(%rcx) - movq %r14,PCB_R14(%rcx) - movq %r15,PCB_R15(%rcx) - - /* - * If fpcurthread == NULL, then the fpu 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 fpcurthread != NULL, then we have to save the fpu h/w state to - * fpcurthread'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 fpu state for forks by forgetting to reload. - */ - pushfq - cli - movq PCPU(FPCURTHREAD),%rax - testq %rax,%rax - je 1f + movq %rax,PCB_RIP(%rdi) - movq TD_PCB(%rax),%rdi - movq PCB_SAVEFPU(%rdi),%rdi - clts - fxsave (%rdi) - smsw %ax - orb $CR0_TS,%al - lmsw %ax + movq %rbx,PCB_RBX(%rdi) + movq %rsp,PCB_RSP(%rdi) + movq %rbp,PCB_RBP(%rdi) + movq %r12,PCB_R12(%rdi) + movq %r13,PCB_R13(%rdi) + movq %r14,PCB_R14(%rdi) + movq %r15,PCB_R15(%rdi) - movq $PCB_SAVEFPU_SIZE,%rdx /* arg 3 */ - movq PCB_SAVEFPU(%rcx),%rsi /* arg 2 */ - /* arg 1 (%rdi) already loaded */ - call bcopy -1: - popfq - - ret -END(savectx) - -/* - * savectx2(xpcb) - * Update xpcb, saving current processor state. - */ -ENTRY(savectx2) - /* Fetch XPCB. */ - movq %rdi,%r8 - - /* Save caller's return address. */ - movq (%rsp),%rax - movq %rax,PCB_RIP(%r8) - - movq %rbx,PCB_RBX(%r8) - movq %rsp,PCB_RSP(%r8) - movq %rbp,PCB_RBP(%r8) - movq %r12,PCB_R12(%r8) - movq %r13,PCB_R13(%r8) - movq %r14,PCB_R14(%r8) - movq %r15,PCB_R15(%r8) - - movq %cr0,%rax - movq %rax,XPCB_CR0(%r8) + movq %cr0,%rsi + movq %rsi,PCB_CR0(%rdi) movq %cr2,%rax - movq %rax,XPCB_CR2(%r8) + movq %rax,PCB_CR2(%rdi) + movq %cr3,%rax + movq %rax,PCB_CR3(%rdi) movq %cr4,%rax - movq %rax,XPCB_CR4(%r8) + movq %rax,PCB_CR4(%rdi) movq %dr0,%rax - movq %rax,PCB_DR0(%r8) + movq %rax,PCB_DR0(%rdi) movq %dr1,%rax - movq %rax,PCB_DR1(%r8) + movq %rax,PCB_DR1(%rdi) movq %dr2,%rax - movq %rax,PCB_DR2(%r8) + movq %rax,PCB_DR2(%rdi) movq %dr3,%rax - movq %rax,PCB_DR3(%r8) + movq %rax,PCB_DR3(%rdi) movq %dr6,%rax - movq %rax,PCB_DR6(%r8) + movq %rax,PCB_DR6(%rdi) movq %dr7,%rax - movq %rax,PCB_DR7(%r8) - - sgdt XPCB_GDT(%r8) - sidt XPCB_IDT(%r8) - sldt XPCB_LDT(%r8) - str XPCB_TR(%r8) + movq %rax,PCB_DR7(%rdi) movl $MSR_FSBASE,%ecx rdmsr shlq $32,%rdx leaq (%rax,%rdx),%rax - movq %rax,PCB_FSBASE(%r8) + movq %rax,PCB_FSBASE(%rdi) movl $MSR_GSBASE,%ecx rdmsr shlq $32,%rdx leaq (%rax,%rdx),%rax - movq %rax,PCB_GSBASE(%r8) + movq %rax,PCB_GSBASE(%rdi) movl $MSR_KGSBASE,%ecx rdmsr shlq $32,%rdx leaq (%rax,%rdx),%rax - movq %rax,XPCB_KGSBASE(%r8) + movq %rax,PCB_KGSBASE(%rdi) + + sgdt PCB_GDT(%rdi) + sidt PCB_IDT(%rdi) + sldt PCB_LDT(%rdi) + str PCB_TR(%rdi) - movl $1, %eax + clts + fxsave PCB_USERFPU(%rdi) + movq %rsi,%cr0 /* The previous %cr0 is saved in %rsi. */ + + movl $1,%eax ret -END(savectx2) +END(savectx) Modified: user/imp/tbemd/sys/amd64/amd64/exception.S ============================================================================== --- user/imp/tbemd/sys/amd64/amd64/exception.S Sun Aug 22 21:47:34 2010 (r211655) +++ user/imp/tbemd/sys/amd64/amd64/exception.S Sun Aug 22 21:52:38 2010 (r211656) @@ -191,6 +191,7 @@ alltraps_pushregs_no_rdi: movq %r14,TF_R14(%rsp) movq %r15,TF_R15(%rsp) movl $TF_HASSEGS,TF_FLAGS(%rsp) + cld FAKE_MCOUNT(TF_RIP(%rsp)) #ifdef KDTRACE_HOOKS /* @@ -270,6 +271,7 @@ IDTVEC(dblfault) movw %es,TF_ES(%rsp) movw %ds,TF_DS(%rsp) movl $TF_HASSEGS,TF_FLAGS(%rsp) + cld testb $SEL_RPL_MASK,TF_CS(%rsp) /* Did we come from kernel? */ jz 1f /* already running with kernel GS.base */ swapgs @@ -369,6 +371,7 @@ IDTVEC(fast_syscall) movq %r14,TF_R14(%rsp) /* C preserved */ movq %r15,TF_R15(%rsp) /* C preserved */ movl $TF_HASSEGS,TF_FLAGS(%rsp) + cld FAKE_MCOUNT(TF_RIP(%rsp)) movq %rsp,%rdi call syscall @@ -434,6 +437,7 @@ IDTVEC(nmi) movw %es,TF_ES(%rsp) movw %ds,TF_DS(%rsp) movl $TF_HASSEGS,TF_FLAGS(%rsp) + cld xorl %ebx,%ebx testb $SEL_RPL_MASK,TF_CS(%rsp) jnz nmi_fromuserspace Modified: user/imp/tbemd/sys/amd64/amd64/fpu.c ============================================================================== --- user/imp/tbemd/sys/amd64/amd64/fpu.c Sun Aug 22 21:47:34 2010 (r211655) +++ user/imp/tbemd/sys/amd64/amd64/fpu.c Sun Aug 22 21:52:38 2010 (r211656) @@ -65,27 +65,29 @@ __FBSDID("$FreeBSD$"); #if defined(__GNUCLIKE_ASM) && !defined(lint) -#define fldcw(addr) __asm("fldcw %0" : : "m" (*(addr))) -#define fnclex() __asm("fnclex") -#define fninit() __asm("fninit") +#define fldcw(cw) __asm __volatile("fldcw %0" : : "m" (cw)) +#define fnclex() __asm __volatile("fnclex") +#define fninit() __asm __volatile("fninit") #define fnstcw(addr) __asm __volatile("fnstcw %0" : "=m" (*(addr))) -#define fnstsw(addr) __asm __volatile("fnstsw %0" : "=m" (*(addr))) -#define fxrstor(addr) __asm("fxrstor %0" : : "m" (*(addr))) +#define fnstsw(addr) __asm __volatile("fnstsw %0" : "=am" (*(addr))) +#define fxrstor(addr) __asm __volatile("fxrstor %0" : : "m" (*(addr))) #define fxsave(addr) __asm __volatile("fxsave %0" : "=m" (*(addr))) -#define ldmxcsr(r) __asm __volatile("ldmxcsr %0" : : "m" (r)) -#define start_emulating() __asm("smsw %%ax; orb %0,%%al; lmsw %%ax" \ - : : "n" (CR0_TS) : "ax") -#define stop_emulating() __asm("clts") +#define ldmxcsr(csr) __asm __volatile("ldmxcsr %0" : : "m" (csr)) +#define start_emulating() __asm __volatile( \ + "smsw %%ax; orb %0,%%al; lmsw %%ax" \ + : : "n" (CR0_TS) : "ax") +#define stop_emulating() __asm __volatile("clts") #else /* !(__GNUCLIKE_ASM && !lint) */ -void fldcw(caddr_t addr); +void fldcw(u_short cw); void fnclex(void); void fninit(void); void fnstcw(caddr_t addr); void fnstsw(caddr_t addr); void fxsave(caddr_t addr); void fxrstor(caddr_t addr); +void ldmxcsr(u_int csr); void start_emulating(void); void stop_emulating(void); @@ -115,11 +117,14 @@ fpuinit(void) u_int mxcsr; u_short control; + /* + * It is too early for critical_enter() to work on AP. + */ savecrit = intr_disable(); stop_emulating(); fninit(); control = __INITIAL_FPUCW__; - fldcw(&control); + fldcw(control); mxcsr = __INITIAL_MXCSR__; ldmxcsr(mxcsr); if (PCPU_GET(cpuid) == 0) { @@ -141,16 +146,15 @@ fpuinit(void) void fpuexit(struct thread *td) { - register_t savecrit; - savecrit = intr_disable(); + critical_enter(); if (curthread == PCPU_GET(fpcurthread)) { stop_emulating(); fxsave(PCPU_GET(curpcb)->pcb_save); start_emulating(); PCPU_SET(fpcurthread, 0); } - intr_restore(savecrit); + critical_exit(); } int @@ -351,10 +355,9 @@ static char fpetable[128] = { int fputrap() { - register_t savecrit; u_short control, status; - savecrit = intr_disable(); + critical_enter(); /* * Interrupt handling (for another interrupt) may have pushed the @@ -371,7 +374,7 @@ fputrap() if (PCPU_GET(fpcurthread) == curthread) fnclex(); - intr_restore(savecrit); + critical_exit(); return (fpetable[status & ((~control & 0x3f) | 0x40)]); } @@ -389,12 +392,13 @@ void fpudna(void) { struct pcb *pcb; - register_t s; + critical_enter(); if (PCPU_GET(fpcurthread) == curthread) { printf("fpudna: fpcurthread == curthread %d times\n", ++err_count); stop_emulating(); + critical_exit(); return; } if (PCPU_GET(fpcurthread) != NULL) { @@ -404,7 +408,6 @@ fpudna(void) curthread, curthread->td_proc->p_pid); panic("fpudna"); } - s = intr_disable(); stop_emulating(); /* * Record new context early in case frstor causes a trap. @@ -422,25 +425,23 @@ fpudna(void) */ fxrstor(&fpu_initialstate); if (pcb->pcb_initial_fpucw != __INITIAL_FPUCW__) - fldcw(&pcb->pcb_initial_fpucw); + fldcw(pcb->pcb_initial_fpucw); pcb->pcb_flags |= PCB_FPUINITDONE; if (PCB_USER_FPU(pcb)) pcb->pcb_flags |= PCB_USERFPUINITDONE; } else fxrstor(pcb->pcb_save); - intr_restore(s); + critical_exit(); } -/* - * This should be called with interrupts disabled and only when the owning - * FPU thread is non-null. - */ void fpudrop() { struct thread *td; td = PCPU_GET(fpcurthread); + KASSERT(td == curthread, ("fpudrop: fpcurthread != curthread")); + CRITICAL_ASSERT(td); PCPU_SET(fpcurthread, NULL); td->td_pcb->pcb_flags &= ~PCB_FPUINITDONE; start_emulating(); @@ -454,7 +455,6 @@ int fpugetuserregs(struct thread *td, struct savefpu *addr) { struct pcb *pcb; - register_t s; pcb = td->td_pcb; if ((pcb->pcb_flags & PCB_USERFPUINITDONE) == 0) { @@ -462,13 +462,13 @@ fpugetuserregs(struct thread *td, struct addr->sv_env.en_cw = pcb->pcb_initial_fpucw; return (_MC_FPOWNED_NONE); } - s = intr_disable(); + critical_enter(); if (td == PCPU_GET(fpcurthread) && PCB_USER_FPU(pcb)) { fxsave(addr); - intr_restore(s); + critical_exit(); return (_MC_FPOWNED_FPU); } else { - intr_restore(s); + critical_exit(); bcopy(&pcb->pcb_user_save, addr, sizeof(*addr)); return (_MC_FPOWNED_PCB); } @@ -478,7 +478,6 @@ int fpugetregs(struct thread *td, struct savefpu *addr) { struct pcb *pcb; - register_t s; pcb = td->td_pcb; if ((pcb->pcb_flags & PCB_FPUINITDONE) == 0) { @@ -486,13 +485,13 @@ fpugetregs(struct thread *td, struct sav addr->sv_env.en_cw = pcb->pcb_initial_fpucw; return (_MC_FPOWNED_NONE); } - s = intr_disable(); + critical_enter(); if (td == PCPU_GET(fpcurthread)) { fxsave(addr); - intr_restore(s); + critical_exit(); return (_MC_FPOWNED_FPU); } else { - intr_restore(s); + critical_exit(); bcopy(pcb->pcb_save, addr, sizeof(*addr)); return (_MC_FPOWNED_PCB); } @@ -505,16 +504,15 @@ void fpusetuserregs(struct thread *td, struct savefpu *addr) { struct pcb *pcb; - register_t s; pcb = td->td_pcb; - s = intr_disable(); + critical_enter(); if (td == PCPU_GET(fpcurthread) && PCB_USER_FPU(pcb)) { fxrstor(addr); - intr_restore(s); + critical_exit(); pcb->pcb_flags |= PCB_FPUINITDONE | PCB_USERFPUINITDONE; } else { - intr_restore(s); + critical_exit(); bcopy(addr, &td->td_pcb->pcb_user_save, sizeof(*addr)); if (PCB_USER_FPU(pcb)) pcb->pcb_flags |= PCB_FPUINITDONE; @@ -526,15 +524,14 @@ void fpusetregs(struct thread *td, struct savefpu *addr) { struct pcb *pcb; - register_t s; pcb = td->td_pcb; - s = intr_disable(); + critical_enter(); if (td == PCPU_GET(fpcurthread)) { fxrstor(addr); - intr_restore(s); + critical_exit(); } else { - intr_restore(s); + critical_exit(); bcopy(addr, td->td_pcb->pcb_save, sizeof(*addr)); } if (PCB_USER_FPU(pcb)) @@ -652,13 +649,12 @@ int fpu_kern_leave(struct thread *td, struct fpu_kern_ctx *ctx) { struct pcb *pcb; - register_t savecrit; pcb = td->td_pcb; - savecrit = intr_disable(); + critical_enter(); if (curthread == PCPU_GET(fpcurthread)) fpudrop(); - intr_restore(savecrit); + critical_exit(); pcb->pcb_save = ctx->prev; if (pcb->pcb_save == &pcb->pcb_user_save) { if ((pcb->pcb_flags & PCB_USERFPUINITDONE) != 0) Modified: user/imp/tbemd/sys/amd64/amd64/genassym.c ============================================================================== --- user/imp/tbemd/sys/amd64/amd64/genassym.c Sun Aug 22 21:47:34 2010 (r211655) +++ user/imp/tbemd/sys/amd64/amd64/genassym.c Sun Aug 22 21:52:38 2010 (r211656) @@ -123,7 +123,7 @@ ASSYM(KERNBASE, KERNBASE); ASSYM(DMAP_MIN_ADDRESS, DMAP_MIN_ADDRESS); ASSYM(DMAP_MAX_ADDRESS, DMAP_MAX_ADDRESS); ASSYM(MCLBYTES, MCLBYTES); -ASSYM(PCB_CR3, offsetof(struct pcb, pcb_cr3)); + ASSYM(PCB_R15, offsetof(struct pcb, pcb_r15)); ASSYM(PCB_R14, offsetof(struct pcb, pcb_r14)); ASSYM(PCB_R13, offsetof(struct pcb, pcb_r13)); @@ -134,39 +134,35 @@ ASSYM(PCB_RBX, offsetof(struct pcb, pcb_ ASSYM(PCB_RIP, offsetof(struct pcb, pcb_rip)); ASSYM(PCB_FSBASE, offsetof(struct pcb, pcb_fsbase)); ASSYM(PCB_GSBASE, offsetof(struct pcb, pcb_gsbase)); +ASSYM(PCB_KGSBASE, offsetof(struct pcb, pcb_kgsbase)); +ASSYM(PCB_CR0, offsetof(struct pcb, pcb_cr0)); +ASSYM(PCB_CR2, offsetof(struct pcb, pcb_cr2)); +ASSYM(PCB_CR3, offsetof(struct pcb, pcb_cr3)); +ASSYM(PCB_CR4, offsetof(struct pcb, pcb_cr4)); 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_FLAGS, offsetof(struct pcb, pcb_flags)); +ASSYM(PCB_ONFAULT, offsetof(struct pcb, pcb_onfault)); +ASSYM(PCB_GS32SD, offsetof(struct pcb, pcb_gs32sd)); ASSYM(PCB_TSSP, offsetof(struct pcb, pcb_tssp)); +ASSYM(PCB_SAVEFPU, offsetof(struct pcb, pcb_save)); +ASSYM(PCB_SAVEFPU_SIZE, sizeof(struct savefpu)); ASSYM(PCB_FULL_IRET, offsetof(struct pcb, pcb_full_iret)); +ASSYM(PCB_GDT, offsetof(struct pcb, pcb_gdt)); +ASSYM(PCB_IDT, offsetof(struct pcb, pcb_idt)); +ASSYM(PCB_LDT, offsetof(struct pcb, pcb_ldt)); +ASSYM(PCB_TR, offsetof(struct pcb, pcb_tr)); +ASSYM(PCB_USERFPU, offsetof(struct pcb, pcb_user_save)); +ASSYM(PCB_SIZE, sizeof(struct pcb)); ASSYM(PCB_DBREGS, PCB_DBREGS); ASSYM(PCB_32BIT, PCB_32BIT); ASSYM(PCB_GS32BIT, PCB_GS32BIT); *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008222152.o7MLqdVg017639>