From owner-p4-projects@FreeBSD.ORG Thu Mar 19 16:53:39 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7FC851065672; Thu, 19 Mar 2009 16:53:38 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 37F77106566B for ; Thu, 19 Mar 2009 16:53:38 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 23FFF8FC0A for ; Thu, 19 Mar 2009 16:53:38 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n2JGraQE093485 for ; Thu, 19 Mar 2009 16:53:36 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n2JGrZQS093481 for perforce@freebsd.org; Thu, 19 Mar 2009 16:53:35 GMT (envelope-from jhb@freebsd.org) Date: Thu, 19 Mar 2009 16:53:35 GMT Message-Id: <200903191653.n2JGrZQS093481@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Cc: Subject: PERFORCE change 159454 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Mar 2009 16:53:40 -0000 http://perforce.freebsd.org/chv.cgi?CH=159454 Change 159454 by jhb@jhb_jhbbsd on 2009/03/19 16:52:48 IFC @159449 Affected files ... .. //depot/projects/smpng/sys/amd64/acpica/Makefile#1 branch .. //depot/projects/smpng/sys/amd64/acpica/acpi_machdep.c#11 integrate .. //depot/projects/smpng/sys/amd64/acpica/acpi_switch.S#1 branch .. //depot/projects/smpng/sys/amd64/acpica/acpi_wakecode.S#1 branch .. //depot/projects/smpng/sys/amd64/acpica/acpi_wakeup.c#5 integrate .. //depot/projects/smpng/sys/amd64/acpica/genwakecode.sh#1 branch .. //depot/projects/smpng/sys/amd64/acpica/genwakedata.sh#1 branch .. //depot/projects/smpng/sys/amd64/amd64/amd64_mem.c#10 integrate .. //depot/projects/smpng/sys/amd64/amd64/apic_vector.S#16 integrate .. //depot/projects/smpng/sys/amd64/amd64/cpu_switch.S#24 integrate .. //depot/projects/smpng/sys/amd64/amd64/db_trace.c#27 integrate .. //depot/projects/smpng/sys/amd64/amd64/elf_machdep.c#15 integrate .. //depot/projects/smpng/sys/amd64/amd64/genassym.c#26 integrate .. //depot/projects/smpng/sys/amd64/amd64/machdep.c#75 integrate .. //depot/projects/smpng/sys/amd64/amd64/mp_machdep.c#53 integrate .. //depot/projects/smpng/sys/amd64/amd64/pmap.c#91 integrate .. //depot/projects/smpng/sys/amd64/conf/NOTES#50 integrate .. //depot/projects/smpng/sys/amd64/conf/XENHVM#1 branch .. //depot/projects/smpng/sys/amd64/include/apicvar.h#21 integrate .. //depot/projects/smpng/sys/amd64/include/elf.h#7 integrate .. //depot/projects/smpng/sys/amd64/include/pcb.h#16 integrate .. //depot/projects/smpng/sys/amd64/include/pcpu.h#11 integrate .. //depot/projects/smpng/sys/amd64/include/smp.h#19 integrate .. //depot/projects/smpng/sys/amd64/include/xen/hypercall.h#1 branch .. //depot/projects/smpng/sys/amd64/include/xen/synch_bitops.h#1 branch .. //depot/projects/smpng/sys/amd64/include/xen/xen-os.h#1 branch .. //depot/projects/smpng/sys/amd64/include/xen/xenfunc.h#1 branch .. //depot/projects/smpng/sys/amd64/include/xen/xenpmap.h#1 branch .. //depot/projects/smpng/sys/amd64/include/xen/xenvar.h#1 branch .. //depot/projects/smpng/sys/amd64/linux32/linux32_sysvec.c#37 integrate .. //depot/projects/smpng/sys/arm/arm/elf_machdep.c#11 integrate .. //depot/projects/smpng/sys/arm/conf/CAMBRIA#6 integrate .. //depot/projects/smpng/sys/arm/include/elf.h#8 integrate .. //depot/projects/smpng/sys/boot/forth/loader.conf#58 integrate .. //depot/projects/smpng/sys/boot/i386/libi386/bioscd.c#10 integrate .. //depot/projects/smpng/sys/boot/i386/libi386/biosdisk.c#19 integrate .. //depot/projects/smpng/sys/boot/i386/libi386/libi386.h#15 integrate .. //depot/projects/smpng/sys/boot/pc98/libpc98/Makefile#16 integrate .. //depot/projects/smpng/sys/boot/pc98/libpc98/biosdisk.c#15 integrate .. //depot/projects/smpng/sys/boot/pc98/loader/Makefile#21 integrate .. //depot/projects/smpng/sys/boot/pc98/loader/main.c#15 integrate .. //depot/projects/smpng/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c#3 integrate .. //depot/projects/smpng/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c#7 integrate .. //depot/projects/smpng/sys/compat/ia32/ia32_sysvec.c#22 integrate .. //depot/projects/smpng/sys/compat/linux/linux_emul.h#7 integrate .. //depot/projects/smpng/sys/compat/linux/linux_futex.c#11 integrate .. //depot/projects/smpng/sys/compat/linux/linux_futex.h#6 integrate .. //depot/projects/smpng/sys/compat/ndis/hal_var.h#10 integrate .. //depot/projects/smpng/sys/compat/ndis/subr_hal.c#23 integrate .. //depot/projects/smpng/sys/compat/ndis/subr_ntoskrnl.c#49 integrate .. //depot/projects/smpng/sys/compat/ndis/subr_usbd.c#8 integrate .. //depot/projects/smpng/sys/compat/svr4/svr4_sysvec.c#30 integrate .. //depot/projects/smpng/sys/conf/NOTES#163 integrate .. //depot/projects/smpng/sys/conf/files#232 integrate .. //depot/projects/smpng/sys/conf/files.amd64#63 integrate .. //depot/projects/smpng/sys/conf/files.i386#120 integrate .. //depot/projects/smpng/sys/conf/files.pc98#97 integrate .. //depot/projects/smpng/sys/conf/options#163 integrate .. //depot/projects/smpng/sys/conf/options.amd64#25 integrate .. //depot/projects/smpng/sys/dev/acpica/acpi.c#110 integrate .. //depot/projects/smpng/sys/dev/acpica/acpi_ec.c#46 integrate .. //depot/projects/smpng/sys/dev/amdtemp/amdtemp.c#1 branch .. //depot/projects/smpng/sys/dev/ata/ata-card.c#33 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ah.c#7 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416.h#4 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c#3 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c#6 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar9280.c#1 branch .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar9280.h#1 branch .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar9280_attach.c#1 branch .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar9280v1.ini#1 branch .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar9280v2.ini#1 branch .. //depot/projects/smpng/sys/dev/ath/if_ath.c#71 integrate .. //depot/projects/smpng/sys/dev/atkbdc/psm.c#15 integrate .. //depot/projects/smpng/sys/dev/cardbus/cardbus.c#38 integrate .. //depot/projects/smpng/sys/dev/cardbus/cardbus_cis.c#32 integrate .. //depot/projects/smpng/sys/dev/cfi/cfi_disk.c#2 integrate .. //depot/projects/smpng/sys/dev/cxgb/cxgb_multiq.c#5 integrate .. //depot/projects/smpng/sys/dev/dcons/dcons_os.c#16 integrate .. //depot/projects/smpng/sys/dev/drm/drmP.h#23 integrate .. //depot/projects/smpng/sys/dev/drm/drm_bufs.c#8 integrate .. //depot/projects/smpng/sys/dev/drm/drm_drv.c#14 integrate .. //depot/projects/smpng/sys/dev/drm/drm_irq.c#8 integrate .. //depot/projects/smpng/sys/dev/drm/drm_linux_list.h#6 integrate .. //depot/projects/smpng/sys/dev/drm/drm_lock.c#8 integrate .. //depot/projects/smpng/sys/dev/drm/drm_vm.c#5 integrate .. //depot/projects/smpng/sys/dev/drm/i915_dma.c#13 integrate .. //depot/projects/smpng/sys/dev/drm/i915_drv.h#9 integrate .. //depot/projects/smpng/sys/dev/drm/i915_irq.c#9 integrate .. //depot/projects/smpng/sys/dev/drm/i915_reg.h#2 integrate .. //depot/projects/smpng/sys/dev/drm/i915_suspend.c#3 integrate .. //depot/projects/smpng/sys/dev/drm/mga_irq.c#9 integrate .. //depot/projects/smpng/sys/dev/drm/r600_cp.c#2 integrate .. //depot/projects/smpng/sys/dev/drm/radeon_cp.c#21 integrate .. //depot/projects/smpng/sys/dev/drm/radeon_irq.c#12 integrate .. //depot/projects/smpng/sys/dev/ed/if_ed_pccard.c#43 integrate .. //depot/projects/smpng/sys/dev/fe/if_fe_pccard.c#20 integrate .. //depot/projects/smpng/sys/dev/firewire/firewire.c#48 integrate .. //depot/projects/smpng/sys/dev/ichwd/ichwd.c#12 integrate .. //depot/projects/smpng/sys/dev/if_ndis/if_ndis.c#53 integrate .. //depot/projects/smpng/sys/dev/if_ndis/if_ndis_usb.c#8 integrate .. //depot/projects/smpng/sys/dev/if_ndis/if_ndisvar.h#23 integrate .. //depot/projects/smpng/sys/dev/k8temp/k8temp.c#4 delete .. //depot/projects/smpng/sys/dev/md/md.c#88 integrate .. //depot/projects/smpng/sys/dev/mmc/mmc.c#11 integrate .. //depot/projects/smpng/sys/dev/pccard/card_if.m#18 integrate .. //depot/projects/smpng/sys/dev/pccard/pccard_cis.c#29 integrate .. //depot/projects/smpng/sys/dev/pccard/pccarddevs#63 integrate .. //depot/projects/smpng/sys/dev/pccbb/pccbb.c#71 integrate .. //depot/projects/smpng/sys/dev/pci/pci_pci.c#39 integrate .. //depot/projects/smpng/sys/dev/pci/pcib_private.h#15 integrate .. //depot/projects/smpng/sys/dev/ppbus/lpbb.c#11 integrate .. //depot/projects/smpng/sys/dev/sound/pci/hda/hdac.c#30 integrate .. //depot/projects/smpng/sys/dev/txp/if_txp.c#39 integrate .. //depot/projects/smpng/sys/dev/txp/if_txpreg.h#7 integrate .. //depot/projects/smpng/sys/dev/usb/controller/atmegadci.c#3 integrate .. //depot/projects/smpng/sys/dev/usb/controller/atmegadci.h#2 integrate .. //depot/projects/smpng/sys/dev/usb/controller/atmegadci_atmelarm.c#2 integrate .. //depot/projects/smpng/sys/dev/usb/controller/usb_controller.c#2 integrate .. //depot/projects/smpng/sys/dev/usb/image/uscanner.c#4 integrate .. //depot/projects/smpng/sys/dev/usb/serial/ulpt.c#4 integrate .. //depot/projects/smpng/sys/dev/usb/storage/umass.c#4 integrate .. //depot/projects/smpng/sys/dev/usb/usb_dev.c#5 integrate .. //depot/projects/smpng/sys/dev/usb/usb_dev.h#4 integrate .. //depot/projects/smpng/sys/dev/usb/usb_device.h#5 integrate .. //depot/projects/smpng/sys/dev/usb/usb_hid.c#4 integrate .. //depot/projects/smpng/sys/dev/usb/usbdevs#131 integrate .. //depot/projects/smpng/sys/dev/xen/balloon/balloon.c#2 integrate .. //depot/projects/smpng/sys/dev/xen/blkfront/blkfront.c#5 integrate .. //depot/projects/smpng/sys/dev/xen/console/console.c#5 integrate .. //depot/projects/smpng/sys/dev/xen/console/xencons_ring.c#3 integrate .. //depot/projects/smpng/sys/dev/xen/netfront/netfront.c#7 integrate .. //depot/projects/smpng/sys/dev/xen/xenpci/evtchn.c#1 branch .. //depot/projects/smpng/sys/dev/xen/xenpci/machine_reboot.c#1 branch .. //depot/projects/smpng/sys/dev/xen/xenpci/xenpci.c#1 branch .. //depot/projects/smpng/sys/dev/xen/xenpci/xenpcivar.h#1 branch .. //depot/projects/smpng/sys/fs/cd9660/cd9660_vfsops.c#11 integrate .. //depot/projects/smpng/sys/fs/devfs/devfs_vnops.c#77 integrate .. //depot/projects/smpng/sys/fs/nullfs/null_vnops.c#40 integrate .. //depot/projects/smpng/sys/fs/udf/udf_vfsops.c#46 integrate .. //depot/projects/smpng/sys/geom/eli/g_eli.c#26 integrate .. //depot/projects/smpng/sys/geom/geom_redboot.c#2 integrate .. //depot/projects/smpng/sys/geom/part/g_part.c#16 integrate .. //depot/projects/smpng/sys/geom/part/g_part_ebr.c#4 integrate .. //depot/projects/smpng/sys/geom/part/g_part_pc98.c#9 integrate .. //depot/projects/smpng/sys/gnu/fs/xfs/FreeBSD/xfs_buf.c#6 integrate .. //depot/projects/smpng/sys/i386/conf/NOTES#141 integrate .. //depot/projects/smpng/sys/i386/i386/elf_machdep.c#17 integrate .. //depot/projects/smpng/sys/i386/i386/i686_mem.c#14 integrate .. //depot/projects/smpng/sys/i386/i386/k6_mem.c#7 integrate .. //depot/projects/smpng/sys/i386/i386/pmap.c#131 integrate .. //depot/projects/smpng/sys/i386/include/elf.h#10 integrate .. //depot/projects/smpng/sys/i386/include/xen/xenpmap.h#3 integrate .. //depot/projects/smpng/sys/i386/linux/linux_sysvec.c#66 integrate .. //depot/projects/smpng/sys/ia64/ia64/elf_machdep.c#24 integrate .. //depot/projects/smpng/sys/ia64/include/elf.h#14 integrate .. //depot/projects/smpng/sys/kern/imgact_elf.c#64 integrate .. //depot/projects/smpng/sys/kern/kern_exec.c#117 integrate .. //depot/projects/smpng/sys/kern/kern_ktrace.c#67 integrate .. //depot/projects/smpng/sys/kern/kern_lock.c#73 integrate .. //depot/projects/smpng/sys/kern/kern_mutex.c#154 integrate .. //depot/projects/smpng/sys/kern/kern_poll.c#31 integrate .. //depot/projects/smpng/sys/kern/kern_rwlock.c#27 integrate .. //depot/projects/smpng/sys/kern/kern_sx.c#56 integrate .. //depot/projects/smpng/sys/kern/kern_sysctl.c#61 integrate .. //depot/projects/smpng/sys/kern/kern_thread.c#113 integrate .. //depot/projects/smpng/sys/kern/kern_umtx.c#35 integrate .. //depot/projects/smpng/sys/kern/sched_ule.c#93 integrate .. //depot/projects/smpng/sys/kern/subr_bus.c#75 integrate .. //depot/projects/smpng/sys/kern/subr_lock.c#14 integrate .. //depot/projects/smpng/sys/kern/subr_param.c#28 integrate .. //depot/projects/smpng/sys/kern/subr_smp.c#55 integrate .. //depot/projects/smpng/sys/kern/sys_generic.c#58 integrate .. //depot/projects/smpng/sys/kern/uipc_sem.c#27 integrate .. //depot/projects/smpng/sys/kern/vfs_bio.c#117 integrate .. //depot/projects/smpng/sys/kern/vfs_lookup.c#55 integrate .. //depot/projects/smpng/sys/kern/vfs_vnops.c#92 integrate .. //depot/projects/smpng/sys/kern/vnode_if.src#40 integrate .. //depot/projects/smpng/sys/mips/include/elf.h#3 integrate .. //depot/projects/smpng/sys/mips/mips/elf64_machdep.c#2 integrate .. //depot/projects/smpng/sys/mips/mips/elf_machdep.c#5 integrate .. //depot/projects/smpng/sys/modules/Makefile#157 integrate .. //depot/projects/smpng/sys/modules/amdtemp/Makefile#1 branch .. //depot/projects/smpng/sys/modules/ip6_mroute_mod/Makefile#1 branch .. //depot/projects/smpng/sys/modules/ip_mroute_mod/Makefile#11 integrate .. //depot/projects/smpng/sys/modules/k8temp/Makefile#2 delete .. //depot/projects/smpng/sys/modules/netgraph/Makefile#29 integrate .. //depot/projects/smpng/sys/net/if.c#113 integrate .. //depot/projects/smpng/sys/net/if_bridge.c#55 integrate .. //depot/projects/smpng/sys/net/if_loop.c#52 integrate .. //depot/projects/smpng/sys/net/if_tap.c#50 integrate .. //depot/projects/smpng/sys/net/if_var.h#59 integrate .. //depot/projects/smpng/sys/net80211/ieee80211.h#18 integrate .. //depot/projects/smpng/sys/net80211/ieee80211_input.c#44 integrate .. //depot/projects/smpng/sys/net80211/ieee80211_scan_sta.c#10 integrate .. //depot/projects/smpng/sys/net80211/ieee80211_tdma.c#7 integrate .. //depot/projects/smpng/sys/net80211/ieee80211_tdma.h#2 integrate .. //depot/projects/smpng/sys/net80211/ieee80211_var.h#35 integrate .. //depot/projects/smpng/sys/netinet/igmp.c#27 integrate .. //depot/projects/smpng/sys/netinet/igmp.h#7 integrate .. //depot/projects/smpng/sys/netinet/in.c#50 integrate .. //depot/projects/smpng/sys/netinet/in.h#46 integrate .. //depot/projects/smpng/sys/netinet/in_mcast.c#10 integrate .. //depot/projects/smpng/sys/netinet/in_pcb.c#92 integrate .. //depot/projects/smpng/sys/netinet/in_pcb.h#60 integrate .. //depot/projects/smpng/sys/netinet/ip_mroute.c#63 integrate .. //depot/projects/smpng/sys/netinet/ip_mroute.h#13 integrate .. //depot/projects/smpng/sys/netinet/sctp.h#11 integrate .. //depot/projects/smpng/sys/netinet/sctp_constants.h#21 integrate .. //depot/projects/smpng/sys/netinet/sctp_indata.c#22 integrate .. //depot/projects/smpng/sys/netinet/sctp_output.c#28 integrate .. //depot/projects/smpng/sys/netinet/sctp_structs.h#14 integrate .. //depot/projects/smpng/sys/netinet/sctp_timer.c#18 integrate .. //depot/projects/smpng/sys/netinet/sctp_var.h#13 integrate .. //depot/projects/smpng/sys/netinet/sctputil.c#28 integrate .. //depot/projects/smpng/sys/netinet/sctputil.h#15 integrate .. //depot/projects/smpng/sys/netinet/tcp_input.c#123 integrate .. //depot/projects/smpng/sys/netinet/tcp_subr.c#108 integrate .. //depot/projects/smpng/sys/netinet/tcp_timer.c#45 integrate .. //depot/projects/smpng/sys/netinet/tcp_timewait.c#10 integrate .. //depot/projects/smpng/sys/netinet/tcp_usrreq.c#75 integrate .. //depot/projects/smpng/sys/netinet6/in6.c#52 integrate .. //depot/projects/smpng/sys/netinet6/in6_ifattach.c#31 integrate .. //depot/projects/smpng/sys/netinet6/in6_pcb.c#59 integrate .. //depot/projects/smpng/sys/netinet6/ip6_mroute.c#37 integrate .. //depot/projects/smpng/sys/netinet6/ip6_mroute.h#9 integrate .. //depot/projects/smpng/sys/netinet6/mld6.c#27 integrate .. //depot/projects/smpng/sys/netipsec/key.c#30 integrate .. //depot/projects/smpng/sys/netnatm/natm.c#31 integrate .. //depot/projects/smpng/sys/nfsserver/nfs_srvkrpc.c#3 integrate .. //depot/projects/smpng/sys/pc98/conf/NOTES#67 integrate .. //depot/projects/smpng/sys/pci/intpm.c#19 integrate .. //depot/projects/smpng/sys/powerpc/aim/mmu_oea.c#5 integrate .. //depot/projects/smpng/sys/powerpc/include/elf.h#9 integrate .. //depot/projects/smpng/sys/powerpc/include/spr.h#11 integrate .. //depot/projects/smpng/sys/powerpc/mpc85xx/mpc85xx.c#3 integrate .. //depot/projects/smpng/sys/powerpc/mpc85xx/mpc85xx.h#2 integrate .. //depot/projects/smpng/sys/powerpc/mpc85xx/ocpbus.c#5 integrate .. //depot/projects/smpng/sys/powerpc/powerpc/elf_machdep.c#17 integrate .. //depot/projects/smpng/sys/security/mac/mac_atalk.c#2 integrate .. //depot/projects/smpng/sys/security/mac/mac_audit.c#5 integrate .. //depot/projects/smpng/sys/security/mac/mac_cred.c#3 integrate .. //depot/projects/smpng/sys/security/mac/mac_framework.c#6 integrate .. //depot/projects/smpng/sys/security/mac/mac_inet.c#14 integrate .. //depot/projects/smpng/sys/security/mac/mac_inet6.c#4 integrate .. //depot/projects/smpng/sys/security/mac/mac_internal.h#19 integrate .. //depot/projects/smpng/sys/security/mac/mac_net.c#23 integrate .. //depot/projects/smpng/sys/security/mac/mac_pipe.c#15 integrate .. //depot/projects/smpng/sys/security/mac/mac_posix_sem.c#11 integrate .. //depot/projects/smpng/sys/security/mac/mac_posix_shm.c#4 integrate .. //depot/projects/smpng/sys/security/mac/mac_priv.c#5 integrate .. //depot/projects/smpng/sys/security/mac/mac_process.c#21 integrate .. //depot/projects/smpng/sys/security/mac/mac_socket.c#12 integrate .. //depot/projects/smpng/sys/security/mac/mac_syscalls.c#8 integrate .. //depot/projects/smpng/sys/security/mac/mac_system.c#13 integrate .. //depot/projects/smpng/sys/security/mac/mac_sysv_msg.c#10 integrate .. //depot/projects/smpng/sys/security/mac/mac_sysv_sem.c#10 integrate .. //depot/projects/smpng/sys/security/mac/mac_sysv_shm.c#9 integrate .. //depot/projects/smpng/sys/security/mac/mac_vfs.c#23 integrate .. //depot/projects/smpng/sys/security/mac_portacl/mac_portacl.c#17 integrate .. //depot/projects/smpng/sys/sparc64/conf/GENERIC#90 integrate .. //depot/projects/smpng/sys/sparc64/include/elf.h#14 integrate .. //depot/projects/smpng/sys/sparc64/sparc64/db_disasm.c#8 integrate .. //depot/projects/smpng/sys/sparc64/sparc64/elf_machdep.c#23 integrate .. //depot/projects/smpng/sys/sun4v/include/elf.h#4 integrate .. //depot/projects/smpng/sys/sys/_pthreadtypes.h#2 integrate .. //depot/projects/smpng/sys/sys/aio.h#9 integrate .. //depot/projects/smpng/sys/sys/buf.h#53 integrate .. //depot/projects/smpng/sys/sys/diskpc98.h#9 integrate .. //depot/projects/smpng/sys/sys/elf_common.h#15 integrate .. //depot/projects/smpng/sys/sys/imgact.h#17 integrate .. //depot/projects/smpng/sys/sys/imgact_elf.h#12 integrate .. //depot/projects/smpng/sys/sys/ktrace.h#15 integrate .. //depot/projects/smpng/sys/sys/lock_profile.h#7 integrate .. //depot/projects/smpng/sys/sys/memrange.h#5 integrate .. //depot/projects/smpng/sys/sys/mount.h#73 integrate .. //depot/projects/smpng/sys/sys/param.h#138 integrate .. //depot/projects/smpng/sys/sys/proc.h#195 integrate .. //depot/projects/smpng/sys/sys/sem.h#10 integrate .. //depot/projects/smpng/sys/sys/shm.h#12 integrate .. //depot/projects/smpng/sys/sys/smp.h#20 integrate .. //depot/projects/smpng/sys/sys/stat.h#22 integrate .. //depot/projects/smpng/sys/sys/syslog.h#7 integrate .. //depot/projects/smpng/sys/sys/termios.h#9 integrate .. //depot/projects/smpng/sys/sys/time.h#27 integrate .. //depot/projects/smpng/sys/sys/uio.h#24 integrate .. //depot/projects/smpng/sys/ufs/ffs/ffs_vfsops.c#112 integrate .. //depot/projects/smpng/sys/ufs/ffs/ffs_vnops.c#64 integrate .. //depot/projects/smpng/sys/ufs/ufs/inode.h#18 integrate .. //depot/projects/smpng/sys/xen/evtchn/evtchn.c#5 integrate .. //depot/projects/smpng/sys/xen/evtchn/evtchn_dev.c#3 integrate .. //depot/projects/smpng/sys/xen/features.c#3 integrate .. //depot/projects/smpng/sys/xen/features.h#1 branch .. //depot/projects/smpng/sys/xen/gnttab.c#5 integrate .. //depot/projects/smpng/sys/xen/gnttab.h#5 integrate .. //depot/projects/smpng/sys/xen/hypervisor.h#2 integrate .. //depot/projects/smpng/sys/xen/interface/arch-x86/xen.h#3 integrate .. //depot/projects/smpng/sys/xen/interface/hvm/params.h#3 integrate .. //depot/projects/smpng/sys/xen/reboot.c#1 branch .. //depot/projects/smpng/sys/xen/xen_intr.h#2 integrate .. //depot/projects/smpng/sys/xen/xenbus/xenbus_probe.c#4 integrate .. //depot/projects/smpng/sys/xen/xenbus/xenbus_xs.c#5 integrate Differences ... ==== //depot/projects/smpng/sys/amd64/acpica/acpi_machdep.c#11 (text+ko) ==== @@ -25,31 +25,56 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/acpica/acpi_machdep.c,v 1.18 2008/03/13 20:39:02 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/acpica/acpi_machdep.c,v 1.19 2009/03/17 00:48:11 jkim Exp $"); #include #include #include #include +#include #include #include #include +SYSCTL_DECL(_debug_acpi); + +uint32_t acpi_resume_beep; +TUNABLE_INT("debug.acpi.resume_beep", &acpi_resume_beep); +SYSCTL_UINT(_debug_acpi, OID_AUTO, resume_beep, CTLFLAG_RW, &acpi_resume_beep, + 0, "Beep the PC speaker when resuming"); +uint32_t acpi_reset_video; +TUNABLE_INT("hw.acpi.reset_video", &acpi_reset_video); + static int intr_model = ACPI_INTR_PIC; +static struct apm_clone_data acpi_clone; int acpi_machdep_init(device_t dev) { - struct acpi_softc *sc; + struct acpi_softc *sc; sc = devclass_get_softc(devclass_find("acpi"), 0); + + /* Create a fake clone for /dev/acpi. */ + STAILQ_INIT(&sc->apm_cdevs); + acpi_clone.cdev = sc->acpi_dev_t; + acpi_clone.acpi_sc = sc; + ACPI_LOCK(acpi); + STAILQ_INSERT_TAIL(&sc->apm_cdevs, &acpi_clone, entries); + ACPI_UNLOCK(acpi); + sc->acpi_clone = &acpi_clone; acpi_install_wakeup_handler(sc); if (intr_model != ACPI_INTR_PIC) acpi_SetIntrModel(intr_model); + SYSCTL_ADD_UINT(&sc->acpi_sysctl_ctx, + SYSCTL_CHILDREN(sc->acpi_sysctl_tree), OID_AUTO, + "reset_video", CTLFLAG_RW, &acpi_reset_video, 0, + "Call the VESA reset BIOS vector on the resume path"); + return (0); } ==== //depot/projects/smpng/sys/amd64/acpica/acpi_wakeup.c#5 (text+ko) ==== @@ -1,6 +1,8 @@ /*- * Copyright (c) 2001 Takanori Watanabe * Copyright (c) 2001 Mitsuru IWASAKI + * Copyright (c) 2003 Peter Wemm + * Copyright (c) 2008-2009 Jung-uk Kim * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,21 +28,414 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/acpica/acpi_wakeup.c,v 1.22 2005/09/11 18:39:00 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/acpica/acpi_wakeup.c,v 1.23 2009/03/17 00:48:11 jkim Exp $"); #include +#include #include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +#ifdef SMP +#include +#include +#endif #include #include +#include "acpi_wakecode.h" +#include "acpi_wakedata.h" + +/* Make sure the code is less than a page and leave room for the stack. */ +CTASSERT(sizeof(wakecode) < PAGE_SIZE - 1024); + +#ifndef _SYS_CDEFS_H_ +#error this file needs sys/cdefs.h as a prerequisite +#endif + +extern uint32_t acpi_resume_beep; +extern uint32_t acpi_reset_video; + +#ifdef SMP +extern struct xpcb *stopxpcbs; +#else +static struct xpcb *stopxpcbs; +#endif + +int acpi_restorecpu(struct xpcb *, vm_offset_t); +int acpi_savecpu(struct xpcb *); + +static void acpi_reset_tss(int cpu); +static void acpi_alloc_wakeup_handler(void); +static void acpi_stop_beep(void *); + +#ifdef SMP +static int acpi_wakeup_ap(struct acpi_softc *, int); +static void acpi_wakeup_cpus(struct acpi_softc *, cpumask_t); +#endif + +#define WAKECODE_VADDR(sc) ((sc)->acpi_wakeaddr + (3 * PAGE_SIZE)) +#define WAKECODE_PADDR(sc) ((sc)->acpi_wakephys + (3 * PAGE_SIZE)) +#define WAKECODE_FIXUP(offset, type, val) do { \ + type *addr; \ + addr = (type *)(WAKECODE_VADDR(sc) + offset); \ + *addr = val; \ +} while (0) + +/* Turn off bits 1&2 of the PIT, stopping the beep. */ +static void +acpi_stop_beep(void *arg) +{ + outb(0x61, inb(0x61) & ~0x3); +} + +#ifdef SMP +static int +acpi_wakeup_ap(struct acpi_softc *sc, int cpu) +{ + int vector = (WAKECODE_PADDR(sc) >> 12) & 0xff; + 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_gdt + 2, uint64_t, + stopxpcbs[cpu].xpcb_gdt.rd_base); + WAKECODE_FIXUP(wakeup_cpu, int, cpu); + + acpi_reset_tss(cpu); + + /* do an INIT IPI: assert RESET */ + lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE | + APIC_LEVEL_ASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, apic_id); + + /* wait for pending status end */ + lapic_ipi_wait(-1); + + /* do an INIT IPI: deassert RESET */ + lapic_ipi_raw(APIC_DEST_ALLESELF | APIC_TRIGMOD_LEVEL | + APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, 0); + + /* wait for pending status end */ + DELAY(10000); /* wait ~10mS */ + lapic_ipi_wait(-1); + + /* + * next we do a STARTUP IPI: the previous INIT IPI might still be + * latched, (P5 bug) this 1st STARTUP would then terminate + * immediately, and the previously started INIT IPI would continue. OR + * the previous INIT IPI has already run. and this STARTUP IPI will + * run. OR the previous INIT IPI was ignored. and this STARTUP IPI + * will run. + */ + + /* do a STARTUP IPI */ + lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE | + APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_STARTUP | + vector, apic_id); + lapic_ipi_wait(-1); + DELAY(200); /* wait ~200uS */ + + /* + * finally we do a 2nd STARTUP IPI: this 2nd STARTUP IPI should run IF + * the previous STARTUP IPI was cancelled by a latched INIT IPI. OR + * this STARTUP IPI will be ignored, as only ONE STARTUP IPI is + * recognized after hardware RESET or INIT IPI. + */ + + lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE | + APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_STARTUP | + vector, apic_id); + lapic_ipi_wait(-1); + DELAY(200); /* wait ~200uS */ + + /* Wait up to 5 seconds for it to start. */ + for (ms = 0; ms < 5000; ms++) { + if (*(int *)(WAKECODE_VADDR(sc) + wakeup_cpu) == 0) + return (1); /* return SUCCESS */ + DELAY(1000); + } + return (0); /* return FAILURE */ +} + +#define WARMBOOT_TARGET 0 +#define WARMBOOT_OFF (KERNBASE + 0x0467) +#define WARMBOOT_SEG (KERNBASE + 0x0469) + +#define CMOS_REG (0x70) +#define CMOS_DATA (0x71) +#define BIOS_RESET (0x0f) +#define BIOS_WARM (0x0a) + +static void +acpi_wakeup_cpus(struct acpi_softc *sc, cpumask_t wakeup_cpus) +{ + uint32_t mpbioswarmvec; + cpumask_t map; + int cpu; + u_char mpbiosreason; + + /* save the current value of the warm-start vector */ + mpbioswarmvec = *((uint32_t *)WARMBOOT_OFF); + outb(CMOS_REG, BIOS_RESET); + mpbiosreason = inb(CMOS_DATA); + + /* setup a vector to our boot code */ + *((volatile u_short *)WARMBOOT_OFF) = WARMBOOT_TARGET; + *((volatile u_short *)WARMBOOT_SEG) = WAKECODE_PADDR(sc) >> 4; + outb(CMOS_REG, BIOS_RESET); + outb(CMOS_DATA, BIOS_WARM); /* 'warm-start' */ + + /* Wake up each AP. */ + for (cpu = 1; cpu < mp_ncpus; cpu++) { + map = 1ul << cpu; + if ((wakeup_cpus & map) != map) + continue; + if (acpi_wakeup_ap(sc, cpu) == 0) { + /* restore the warmstart vector */ + *(uint32_t *)WARMBOOT_OFF = mpbioswarmvec; + panic("acpi_wakeup: failed to resume AP #%d (PHY #%d)", + cpu, cpu_apic_ids[cpu]); + } + } + + /* restore the warmstart vector */ + *(uint32_t *)WARMBOOT_OFF = mpbioswarmvec; + + outb(CMOS_REG, BIOS_RESET); + outb(CMOS_DATA, mpbiosreason); +} +#endif + +static void +acpi_reset_tss(int cpu) +{ + uint32_t *tss; + + /* + * We have to clear "task busy" bit in TSS to restore + * task register later. Otherwise, ltr causes GPF. + */ + tss = (uint32_t *)&gdt[NGDT * cpu + GPROC0_SEL] + 1; + *tss &= ~((SDT_SYSBSY ^ SDT_SYSTSS) << 8); +} + int acpi_sleep_machdep(struct acpi_softc *sc, int state) { - return (0); + struct savefpu *stopfpu; +#ifdef SMP + cpumask_t wakeup_cpus; +#endif + register_t cr3, rf; + ACPI_STATUS status; + int ret; + + ret = -1; + + if (sc->acpi_wakeaddr == 0ul) + return (ret); + +#ifdef SMP + wakeup_cpus = PCPU_GET(other_cpus); +#endif + + AcpiSetFirmwareWakingVector(WAKECODE_PADDR(sc)); + + rf = intr_disable(); + intr_suspend(); + + /* + * Temporarily switch to the kernel pmap because it provides + * an identity mapping (setup at boot) for the low physical + * memory region containing the wakeup code. + */ + cr3 = rcr3(); + load_cr3(KPML4phys); + + stopfpu = &stopxpcbs[0].xpcb_pcb.pcb_save; + if (acpi_savecpu(&stopxpcbs[0])) { + fpugetregs(curthread, stopfpu); + +#ifdef SMP + if (wakeup_cpus != 0 && suspend_cpus(wakeup_cpus) == 0) { + device_printf(sc->acpi_dev, + "Failed to suspend APs: CPU mask = 0x%jx\n", + (uintmax_t)(wakeup_cpus & ~stopped_cpus)); + goto out; + } +#endif + + WAKECODE_FIXUP(resume_beep, uint32_t, acpi_resume_beep); + WAKECODE_FIXUP(reset_video, uint32_t, acpi_reset_video); + + WAKECODE_FIXUP(wakeup_xpcb, struct xpcb *, &stopxpcbs[0]); + WAKECODE_FIXUP(wakeup_gdt, uint16_t, + stopxpcbs[0].xpcb_gdt.rd_limit); + WAKECODE_FIXUP(wakeup_gdt + 2, uint64_t, + stopxpcbs[0].xpcb_gdt.rd_base); + WAKECODE_FIXUP(wakeup_cpu, int, 0); + + acpi_reset_tss(0); + + /* Call ACPICA to enter the desired sleep state */ + if (state == ACPI_STATE_S4 && sc->acpi_s4bios) + status = AcpiEnterSleepStateS4bios(); + else + status = AcpiEnterSleepState(state); + + if (status != AE_OK) { + device_printf(sc->acpi_dev, + "AcpiEnterSleepState failed - %s\n", + AcpiFormatException(status)); + goto out; + } + + for (;;) + ia32_pause(); + } else { + fpusetregs(curthread, stopfpu); + + WAKECODE_FIXUP(resume_beep, uint32_t, 0); + WAKECODE_FIXUP(reset_video, uint32_t, 0); +#ifdef SMP + if (wakeup_cpus != 0) + acpi_wakeup_cpus(sc, wakeup_cpus); +#endif + ret = 0; + } + +out: +#ifdef SMP + if (wakeup_cpus != 0) + restart_cpus(wakeup_cpus); +#endif + + load_cr3(cr3); + intr_resume(); + intr_restore(rf); + + AcpiSetFirmwareWakingVector(0); + + if (ret == 0 && mem_range_softc.mr_op != NULL && + mem_range_softc.mr_op->reinit != NULL) + mem_range_softc.mr_op->reinit(&mem_range_softc); + + /* If we beeped, turn it off after a delay. */ + if (acpi_resume_beep) + timeout(acpi_stop_beep, NULL, 3 * hz); + + return (ret); +} + +static vm_offset_t acpi_wakeaddr; + +static void +acpi_alloc_wakeup_handler(void) +{ + void *wakeaddr; + + if (!cold) + return; + + /* + * Specify the region for our wakeup code. We want it in the low 1 MB + * region, excluding video memory and above (0xa0000). We ask for + * it to be page-aligned, just to be safe. + */ + wakeaddr = contigmalloc(4 * PAGE_SIZE, M_DEVBUF, M_NOWAIT, 0, 0x9ffff, + PAGE_SIZE, 0ul); + if (wakeaddr == NULL) { + printf("%s: can't alloc wake memory\n", __func__); + return; + } + stopxpcbs = malloc(mp_ncpus * sizeof(*stopxpcbs), M_DEVBUF, M_NOWAIT); + if (stopxpcbs == NULL) { + contigfree(wakeaddr, 4 * PAGE_SIZE, M_DEVBUF); + printf("%s: can't alloc CPU state memory\n", __func__); + return; + } + acpi_wakeaddr = (vm_offset_t)wakeaddr; } +SYSINIT(acpiwakeup, SI_SUB_KMEM, SI_ORDER_ANY, acpi_alloc_wakeup_handler, 0); + void acpi_install_wakeup_handler(struct acpi_softc *sc) { + uint64_t *pt4, *pt3, *pt2; + int i; + + if (acpi_wakeaddr == 0ul) + return; + + sc->acpi_wakeaddr = acpi_wakeaddr; + sc->acpi_wakephys = vtophys(acpi_wakeaddr); + + bcopy(wakecode, (void *)WAKECODE_VADDR(sc), sizeof(wakecode)); + + /* Patch GDT base address, ljmp targets and page table base address. */ + WAKECODE_FIXUP((bootgdtdesc + 2), uint32_t, + WAKECODE_PADDR(sc) + bootgdt); + WAKECODE_FIXUP((wakeup_sw32 + 2), uint32_t, + WAKECODE_PADDR(sc) + wakeup_32); + WAKECODE_FIXUP((wakeup_sw64 + 1), uint32_t, + WAKECODE_PADDR(sc) + wakeup_64); + WAKECODE_FIXUP(wakeup_pagetables, uint32_t, sc->acpi_wakephys); + + /* Save pointers to some global data. */ + WAKECODE_FIXUP(wakeup_retaddr, void *, acpi_restorecpu); + WAKECODE_FIXUP(wakeup_kpml4, uint64_t, KPML4phys); + WAKECODE_FIXUP(wakeup_ctx, vm_offset_t, + WAKECODE_VADDR(sc) + wakeup_ctx); + WAKECODE_FIXUP(wakeup_efer, uint64_t, rdmsr(MSR_EFER)); + WAKECODE_FIXUP(wakeup_pat, uint64_t, rdmsr(MSR_PAT)); + WAKECODE_FIXUP(wakeup_star, uint64_t, rdmsr(MSR_STAR)); + WAKECODE_FIXUP(wakeup_lstar, uint64_t, rdmsr(MSR_LSTAR)); + WAKECODE_FIXUP(wakeup_cstar, uint64_t, rdmsr(MSR_CSTAR)); + WAKECODE_FIXUP(wakeup_sfmask, uint64_t, rdmsr(MSR_SF_MASK)); + + /* Build temporary page tables below realmode code. */ + pt4 = (uint64_t *)acpi_wakeaddr; + pt3 = pt4 + (PAGE_SIZE) / sizeof(uint64_t); + pt2 = pt3 + (PAGE_SIZE) / sizeof(uint64_t); + + /* Create the initial 1GB replicated page tables */ + for (i = 0; i < 512; i++) { + /* + * Each slot of the level 4 pages points + * to the same level 3 page + */ + pt4[i] = (uint64_t)(sc->acpi_wakephys + PAGE_SIZE); + pt4[i] |= PG_V | PG_RW | PG_U; + + /* + * Each slot of the level 3 pages points + * to the same level 2 page + */ + pt3[i] = (uint64_t)(sc->acpi_wakephys + (2 * PAGE_SIZE)); + pt3[i] |= PG_V | PG_RW | PG_U; + + /* The level 2 page slots are mapped with 2MB pages for 1GB. */ + pt2[i] = i * (2 * 1024 * 1024); + pt2[i] |= PG_V | PG_RW | PG_PS | PG_U; + } + + if (bootverbose) + device_printf(sc->acpi_dev, "wakeup code va %p pa %p\n", + (void *)sc->acpi_wakeaddr, (void *)sc->acpi_wakephys); } ==== //depot/projects/smpng/sys/amd64/amd64/amd64_mem.c#10 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/amd64_mem.c,v 1.31 2009/01/12 19:17:35 jkim Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/amd64_mem.c,v 1.32 2009/03/17 00:48:11 jkim Exp $"); #include #include @@ -73,11 +73,13 @@ static int amd64_mrset(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg); static void amd64_mrAPinit(struct mem_range_softc *sc); +static void amd64_mrreinit(struct mem_range_softc *sc); static struct mem_range_ops amd64_mrops = { amd64_mrinit, amd64_mrset, - amd64_mrAPinit + amd64_mrAPinit, + amd64_mrreinit }; /* XXX for AP startup hook */ @@ -668,6 +670,30 @@ wrmsr(MSR_MTRRdefType, mtrrdef); } +/* + * Re-initialise running CPU(s) MTRRs to match the ranges in the descriptor + * list. + * + * XXX Must be called with interrupts enabled. + */ +static void +amd64_mrreinit(struct mem_range_softc *sc) +{ +#ifdef SMP + /* + * We should use ipi_all_but_self() to call other CPUs into a + * locking gate, then call a target function to do this work. + * The "proper" solution involves a generalised locking gate + * implementation, not ready yet. + */ + smp_rendezvous(NULL, (void *)amd64_mrAPinit, NULL, sc); +#else + disable_intr(); /* disable interrupts */ + amd64_mrAPinit(sc); + enable_intr(); +#endif +} + static void amd64_mem_drvinit(void *unused) { ==== //depot/projects/smpng/sys/amd64/amd64/apic_vector.S#16 (text+ko) ==== @@ -28,7 +28,7 @@ * SUCH DAMAGE. * * from: vector.s, 386BSD 0.1 unknown origin - * $FreeBSD: src/sys/amd64/amd64/apic_vector.S,v 1.110 2006/12/17 06:48:39 kmacy Exp $ + * $FreeBSD: src/sys/amd64/amd64/apic_vector.S,v 1.111 2009/03/17 00:48:11 jkim Exp $ */ /* @@ -224,6 +224,22 @@ iretq /* + * Executed by a CPU when it receives an IPI_SUSPEND from another CPU. + */ + .text + SUPERALIGN_TEXT +IDTVEC(cpususpend) + PUSH_FRAME + + movq lapic, %rax + movl $0, LA_EOI(%rax) /* End Of Interrupt to APIC */ + + call cpususpend_handler + + POP_FRAME + iretq + +/* * Executed by a CPU when it receives a RENDEZVOUS IPI from another CPU. * * - Calls the generic rendezvous action function. ==== //depot/projects/smpng/sys/amd64/amd64/cpu_switch.S#24 (text+ko) ==== @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/amd64/cpu_switch.S,v 1.166 2009/01/31 11:37:21 obrien Exp $ + * $FreeBSD: src/sys/amd64/amd64/cpu_switch.S,v 1.167 2009/03/17 00:48:11 jkim Exp $ */ #include @@ -325,9 +325,8 @@ movq %r11,%dr6 movq %rax,%dr7 jmp done_load_dr +END(cpu_switch) -END(cpu_switch) - /* * savectx(pcb) * Update pcb, saving current processor state. @@ -386,3 +385,74 @@ 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) + + mov %ds,PCB_DS(%r8) + mov %es,PCB_ES(%r8) + mov %ss,XPCB_SS(%r8) + mov %fs,PCB_FS(%r8) + mov %gs,PCB_GS(%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 %cr2,%rax + movq %rax,XPCB_CR2(%r8) + movq %cr4,%rax + movq %rax,XPCB_CR4(%r8) + + movq %dr0,%rax + movq %rax,PCB_DR0(%r8) + movq %dr1,%rax + movq %rax,PCB_DR1(%r8) + movq %dr2,%rax + movq %rax,PCB_DR2(%r8) + movq %dr3,%rax + movq %rax,PCB_DR3(%r8) + movq %dr6,%rax + movq %rax,PCB_DR6(%r8) + movq %dr7,%rax + movq %rax,PCB_DR7(%r8) + + sgdt XPCB_GDT(%r8) + sidt XPCB_IDT(%r8) + sldt XPCB_LDT(%r8) + str XPCB_TR(%r8) + + movl $MSR_FSBASE,%ecx + rdmsr + shlq $32,%rdx + leaq (%rax,%rdx),%rax + movq %rax,PCB_FSBASE(%r8) + movl $MSR_GSBASE,%ecx + rdmsr + shlq $32,%rdx + leaq (%rax,%rdx),%rax + movq %rax,PCB_GSBASE(%r8) + movl $MSR_KGSBASE,%ecx + rdmsr + shlq $32,%rdx + leaq (%rax,%rdx),%rax + movq %rax,XPCB_KGSBASE(%r8) + + movl $1, %eax + ret +END(savectx2) ==== //depot/projects/smpng/sys/amd64/amd64/db_trace.c#27 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/db_trace.c,v 1.83 2008/12/05 11:34:36 kib Exp $"); >>> TRUNCATED FOR MAIL (1000 lines) <<<