From owner-p4-projects@FreeBSD.ORG Sun Feb 1 11:58:54 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 250C71065673; Sun, 1 Feb 2009 11:58:54 +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 D6F86106566C for ; Sun, 1 Feb 2009 11:58:53 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id C21F28FC12 for ; Sun, 1 Feb 2009 11:58:53 +0000 (UTC) (envelope-from hselasky@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 n11BwrEq070296 for ; Sun, 1 Feb 2009 11:58:53 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n11BwqMx070294 for perforce@freebsd.org; Sun, 1 Feb 2009 11:58:52 GMT (envelope-from hselasky@FreeBSD.org) Date: Sun, 1 Feb 2009 11:58:52 GMT Message-Id: <200902011158.n11BwqMx070294@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 156990 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: Sun, 01 Feb 2009 11:58:55 -0000 http://perforce.freebsd.org/chv.cgi?CH=156990 Change 156990 by hselasky@hselasky_laptop001 on 2009/02/01 11:58:35 IFC @ 156988 Affected files ... .. //depot/projects/usb/src/sys/amd64/amd64/cpu_switch.S#10 integrate .. //depot/projects/usb/src/sys/amd64/amd64/fpu.c#3 integrate .. //depot/projects/usb/src/sys/amd64/amd64/io_apic.c#6 integrate .. //depot/projects/usb/src/sys/amd64/amd64/local_apic.c#12 integrate .. //depot/projects/usb/src/sys/amd64/amd64/mp_machdep.c#15 integrate .. //depot/projects/usb/src/sys/amd64/amd64/msi.c#7 integrate .. //depot/projects/usb/src/sys/amd64/ia32/ia32_signal.c#6 integrate .. //depot/projects/usb/src/sys/amd64/ia32/ia32_sigtramp.S#3 integrate .. //depot/projects/usb/src/sys/amd64/include/apicvar.h#6 integrate .. //depot/projects/usb/src/sys/amd64/include/cpufunc.h#4 integrate .. //depot/projects/usb/src/sys/amd64/include/fpu.h#2 integrate .. //depot/projects/usb/src/sys/amd64/include/intr_machdep.h#6 integrate .. //depot/projects/usb/src/sys/amd64/linux32/linux32_locore.s#4 integrate .. //depot/projects/usb/src/sys/amd64/linux32/linux32_sysvec.c#13 integrate .. //depot/projects/usb/src/sys/arm/arm/busdma_machdep.c#13 integrate .. //depot/projects/usb/src/sys/boot/i386/pxeldr/pxeboot.8#3 integrate .. //depot/projects/usb/src/sys/cam/scsi/scsi_pass.c#9 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c#6 integrate .. //depot/projects/usb/src/sys/compat/linux/linux_stats.c#9 integrate .. //depot/projects/usb/src/sys/compat/ndis/winx32_wrap.S#3 integrate .. //depot/projects/usb/src/sys/compat/svr4/svr4_types.h#2 integrate .. //depot/projects/usb/src/sys/conf/options#19 integrate .. //depot/projects/usb/src/sys/dev/adb/adb_mouse.c#3 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ah.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ah.h#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ah_internal.h#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ah_regdomain.c#3 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5210/ar5210.h#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5210/ar5210_misc.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5210/ar5210_reset.c#3 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5211/ar5211.h#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5211/ar5211_misc.c#3 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5211/ar5211_reset.c#3 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar2316.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar2317.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar2413.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar2425.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar5111.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar5112.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar5212.h#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar5212_ani.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c#3 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar5212_reset.c#3 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar5413.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5312/ar5312.h#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5312/ar5312_reset.c#3 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5416/ar2133.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5416/ar5416.h#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5416/ar5416_cal.h#2 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c#3 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c#2 integrate .. //depot/projects/usb/src/sys/dev/ath/if_ath.c#15 integrate .. //depot/projects/usb/src/sys/dev/ath/if_athvar.h#12 integrate .. //depot/projects/usb/src/sys/dev/hwpmc/hwpmc_core.c#2 integrate .. //depot/projects/usb/src/sys/dev/hwpmc/hwpmc_intel.c#4 integrate .. //depot/projects/usb/src/sys/dev/hwpmc/pmc_events.h#5 integrate .. //depot/projects/usb/src/sys/dev/mmc/mmc.c#7 integrate .. //depot/projects/usb/src/sys/dev/puc/pucdata.c#9 integrate .. //depot/projects/usb/src/sys/dev/sdhci/sdhci.c#3 integrate .. //depot/projects/usb/src/sys/dev/sound/pci/hda/hdac.c#22 integrate .. //depot/projects/usb/src/sys/dev/usb/u3g.c#4 integrate .. //depot/projects/usb/src/sys/dev/usb2/bluetooth/ng_ubt2.c#21 integrate .. //depot/projects/usb/src/sys/dev/usb2/bluetooth/ubtbcmfw2.c#12 integrate .. //depot/projects/usb/src/sys/dev/usb2/controller/at91dci_atmelarm.c#19 integrate .. //depot/projects/usb/src/sys/dev/usb2/controller/ehci2_pci.c#22 integrate .. //depot/projects/usb/src/sys/dev/usb2/controller/musb2_otg_atmelarm.c#16 integrate .. //depot/projects/usb/src/sys/dev/usb2/controller/ohci2_atmelarm.c#17 integrate .. //depot/projects/usb/src/sys/dev/usb2/controller/ohci2_pci.c#18 integrate .. //depot/projects/usb/src/sys/dev/usb2/controller/uhci2_pci.c#20 integrate .. //depot/projects/usb/src/sys/dev/usb2/controller/uss820dci_atmelarm.c#10 integrate .. //depot/projects/usb/src/sys/dev/usb2/core/usb2_compat_linux.c#16 integrate .. //depot/projects/usb/src/sys/dev/usb2/core/usb2_hub.c#36 integrate .. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_aue2.c#18 integrate .. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_axe2.c#18 integrate .. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_cdce2.c#16 integrate .. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_cue2.c#17 integrate .. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_kue2.c#17 integrate .. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_rue2.c#17 integrate .. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_udav2.c#17 integrate .. //depot/projects/usb/src/sys/dev/usb2/input/uhid2.c#15 integrate .. //depot/projects/usb/src/sys/dev/usb2/input/ukbd2.c#15 integrate .. //depot/projects/usb/src/sys/dev/usb2/misc/udbp2.c#12 integrate .. //depot/projects/usb/src/sys/dev/usb2/misc/ufm2.c#10 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/u3g2.c#9 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/uark2.c#15 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/ubsa2.c#21 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/ubser2.c#15 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/uchcom2.c#18 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/ucycom2.c#16 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/ufoma2.c#21 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/uftdi2.c#18 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/ugensa2.c#22 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/uipaq2.c#17 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/umct2.c#15 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/umodem2.c#18 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/umoscom2.c#16 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/uplcom2.c#18 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/uvisor2.c#16 integrate .. //depot/projects/usb/src/sys/dev/usb2/serial/uvscom2.c#18 integrate .. //depot/projects/usb/src/sys/dev/usb2/sound/uaudio2.c#26 integrate .. //depot/projects/usb/src/sys/dev/usb2/storage/ata-usb2.c#15 integrate .. //depot/projects/usb/src/sys/dev/usb2/storage/umass2.c#25 integrate .. //depot/projects/usb/src/sys/dev/usb2/storage/urio2.c#15 integrate .. //depot/projects/usb/src/sys/dev/usb2/storage/ustorage2_fs.c#16 integrate .. //depot/projects/usb/src/sys/dev/usb2/wlan/if_rum2.c#24 integrate .. //depot/projects/usb/src/sys/dev/usb2/wlan/if_ural2.c#25 integrate .. //depot/projects/usb/src/sys/dev/usb2/wlan/if_zyd2.c#28 integrate .. //depot/projects/usb/src/sys/dev/xen/blkback/blkback.c#2 integrate .. //depot/projects/usb/src/sys/fs/cd9660/cd9660_lookup.c#3 integrate .. //depot/projects/usb/src/sys/fs/cd9660/cd9660_node.c#5 integrate .. //depot/projects/usb/src/sys/fs/cd9660/cd9660_node.h#3 integrate .. //depot/projects/usb/src/sys/fs/cd9660/cd9660_rrip.c#6 integrate .. //depot/projects/usb/src/sys/fs/cd9660/cd9660_vfsops.c#6 integrate .. //depot/projects/usb/src/sys/fs/cd9660/cd9660_vnops.c#6 integrate .. //depot/projects/usb/src/sys/fs/coda/coda_vfsops.c#4 integrate .. //depot/projects/usb/src/sys/fs/devfs/devfs_devs.c#11 integrate .. //depot/projects/usb/src/sys/fs/devfs/devfs_vnops.c#15 integrate .. //depot/projects/usb/src/sys/fs/fifofs/fifo_vnops.c#8 integrate .. //depot/projects/usb/src/sys/fs/hpfs/hpfs_vfsops.c#7 integrate .. //depot/projects/usb/src/sys/fs/nullfs/null_vnops.c#11 integrate .. //depot/projects/usb/src/sys/fs/nwfs/nwfs_subr.c#4 integrate .. //depot/projects/usb/src/sys/fs/nwfs/nwfs_vnops.c#6 integrate .. //depot/projects/usb/src/sys/fs/smbfs/smbfs_vnops.c#9 integrate .. //depot/projects/usb/src/sys/fs/tmpfs/tmpfs_subr.c#7 integrate .. //depot/projects/usb/src/sys/fs/udf/udf_vnops.c#9 integrate .. //depot/projects/usb/src/sys/geom/geom.h#6 integrate .. //depot/projects/usb/src/sys/geom/geom_subr.c#8 integrate .. //depot/projects/usb/src/sys/i386/i386/io_apic.c#6 integrate .. //depot/projects/usb/src/sys/i386/i386/local_apic.c#12 integrate .. //depot/projects/usb/src/sys/i386/i386/locore.s#5 integrate .. //depot/projects/usb/src/sys/i386/i386/mp_machdep.c#13 integrate .. //depot/projects/usb/src/sys/i386/i386/msi.c#7 integrate .. //depot/projects/usb/src/sys/i386/i386/swtch.s#6 integrate .. //depot/projects/usb/src/sys/i386/include/apicvar.h#7 integrate .. //depot/projects/usb/src/sys/i386/include/cpufunc.h#7 integrate .. //depot/projects/usb/src/sys/i386/include/intr_machdep.h#6 integrate .. //depot/projects/usb/src/sys/i386/linux/linux_locore.s#3 integrate .. //depot/projects/usb/src/sys/i386/svr4/svr4_locore.s#2 integrate .. //depot/projects/usb/src/sys/i386/xen/mp_machdep.c#6 integrate .. //depot/projects/usb/src/sys/kern/kern_jail.c#15 integrate .. //depot/projects/usb/src/sys/kern/kern_mib.c#10 integrate .. //depot/projects/usb/src/sys/kern/kern_sysctl.c#10 integrate .. //depot/projects/usb/src/sys/kern/tty_info.c#3 integrate .. //depot/projects/usb/src/sys/kern/vfs_cache.c#16 integrate .. //depot/projects/usb/src/sys/modules/usb2/Makefile#10 integrate .. //depot/projects/usb/src/sys/net/if_llatbl.c#2 integrate .. //depot/projects/usb/src/sys/net80211/_ieee80211.h#10 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211.c#13 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211.h#11 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_crypto.h#7 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_ddb.c#8 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_ht.h#8 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_ioctl.c#16 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_ioctl.h#9 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_node.c#15 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_node.h#11 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_regdomain.c#7 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_regdomain.h#3 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_tdma.c#2 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_var.h#14 integrate .. //depot/projects/usb/src/sys/netinet/ip_fw2.c#16 integrate .. //depot/projects/usb/src/sys/netinet6/frag6.c#11 integrate .. //depot/projects/usb/src/sys/netinet6/in6.c#15 integrate .. //depot/projects/usb/src/sys/netinet6/in6_gif.c#10 integrate .. //depot/projects/usb/src/sys/netinet6/in6_ifattach.c#13 integrate .. //depot/projects/usb/src/sys/netinet6/ip6_forward.c#11 integrate .. //depot/projects/usb/src/sys/netinet6/ip6_input.c#15 integrate .. //depot/projects/usb/src/sys/netinet6/ip6_var.h#10 integrate .. //depot/projects/usb/src/sys/netinet6/nd6.c#13 integrate .. //depot/projects/usb/src/sys/netinet6/nd6_nbr.c#12 integrate .. //depot/projects/usb/src/sys/netinet6/nd6_rtr.c#11 integrate .. //depot/projects/usb/src/sys/netinet6/vinet6.h#4 integrate .. //depot/projects/usb/src/sys/netipsec/ipsec_mbuf.c#5 integrate .. //depot/projects/usb/src/sys/netipsec/ipsec_output.c#10 integrate .. //depot/projects/usb/src/sys/nfs4client/nfs4_subs.c#3 integrate .. //depot/projects/usb/src/sys/nfsclient/nfs_vfsops.c#14 integrate .. //depot/projects/usb/src/sys/nfsclient/nfs_vnops.c#16 integrate .. //depot/projects/usb/src/sys/nfsserver/nfs_srvsubs.c#13 integrate .. //depot/projects/usb/src/sys/opencrypto/cryptosoft.c#6 integrate .. //depot/projects/usb/src/sys/sys/_null.h#2 integrate .. //depot/projects/usb/src/sys/sys/cdefs.h#5 integrate .. //depot/projects/usb/src/sys/sys/conf.h#13 integrate .. //depot/projects/usb/src/sys/sys/malloc.h#5 integrate .. //depot/projects/usb/src/sys/sys/param.h#19 integrate .. //depot/projects/usb/src/sys/sys/pmc.h#6 integrate .. //depot/projects/usb/src/sys/sys/types.h#7 integrate .. //depot/projects/usb/src/sys/sys/unistd.h#3 integrate .. //depot/projects/usb/src/sys/sys/vnode.h#15 integrate .. //depot/projects/usb/src/sys/ufs/ffs/ffs_alloc.c#8 integrate .. //depot/projects/usb/src/sys/ufs/ffs/ffs_balloc.c#5 integrate .. //depot/projects/usb/src/sys/ufs/ffs/ffs_extern.h#6 integrate .. //depot/projects/usb/src/sys/ufs/ffs/ffs_inode.c#9 integrate .. //depot/projects/usb/src/sys/ufs/ffs/ffs_vfsops.c#14 integrate .. //depot/projects/usb/src/sys/ufs/ffs/ffs_vnops.c#11 integrate Differences ... ==== //depot/projects/usb/src/sys/amd64/amd64/cpu_switch.S#10 (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.165 2009/01/20 12:07:49 kib Exp $ + * $FreeBSD: src/sys/amd64/amd64/cpu_switch.S,v 1.166 2009/01/31 11:37:21 obrien Exp $ */ #include @@ -260,12 +260,12 @@ jmp do_tss store_seg: - movl %gs,PCB_GS(%r8) + mov %gs,PCB_GS(%r8) testl $PCB_GS32BIT,PCB_FLAGS(%r8) jnz 2f -1: movl %ds,PCB_DS(%r8) - movl %es,PCB_ES(%r8) - movl %fs,PCB_FS(%r8) +1: mov %ds,PCB_DS(%r8) + mov %es,PCB_ES(%r8) + mov %fs,PCB_FS(%r8) jmp done_store_seg 2: movq PCPU(GS32P),%rax movq (%rax),%rax @@ -277,11 +277,11 @@ jnz 2f 1: movl $MSR_GSBASE,%ecx rdmsr - movl PCB_GS(%r8),%gs + mov PCB_GS(%r8),%gs wrmsr - movl PCB_DS(%r8),%ds - movl PCB_ES(%r8),%es - movl PCB_FS(%r8),%fs + mov PCB_DS(%r8),%ds + mov PCB_ES(%r8),%es + mov PCB_FS(%r8),%fs jmp restore_fsbase /* Restore userland %gs while preserving kernel gsbase */ 2: movq PCPU(GS32P),%rax ==== //depot/projects/usb/src/sys/amd64/amd64/fpu.c#3 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/fpu.c,v 1.159 2006/06/19 22:36:01 davidxu Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/fpu.c,v 1.160 2009/01/28 20:35:16 jhb Exp $"); #include #include @@ -391,6 +391,7 @@ { struct pcb *pcb; register_t s; + u_short control; if (PCPU_GET(fpcurthread) == curthread) { printf("fpudna: fpcurthread == curthread %d times\n", @@ -421,6 +422,10 @@ * explicitly load sanitized registers. */ fxrstor(&fpu_cleanstate); + if (pcb->pcb_flags & PCB_32BIT) { + control = __INITIAL_FPUCW_I386__; + fldcw(&control); + } pcb->pcb_flags |= PCB_FPUINITDONE; } else fxrstor(&pcb->pcb_save); ==== //depot/projects/usb/src/sys/amd64/amd64/io_apic.c#6 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/io_apic.c,v 1.31 2007/06/05 18:57:48 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/io_apic.c,v 1.32 2009/01/29 09:22:56 jeff Exp $"); #include "opt_isa.h" @@ -327,39 +327,56 @@ { struct ioapic_intsrc *intpin = (struct ioapic_intsrc *)isrc; struct ioapic *io = (struct ioapic *)isrc->is_pic; + u_int old_vector; + u_int old_id; + + /* + * keep 1st core as the destination for NMI + */ + if (intpin->io_irq == IRQ_NMI) + apic_id = 0; + + /* + * Set us up to free the old irq. + */ + old_vector = intpin->io_vector; + old_id = intpin->io_cpu; + if (old_vector && apic_id == old_id) + return; + /* + * Allocate an APIC vector for this interrupt pin. Once + * we have a vector we program the interrupt pin. + */ intpin->io_cpu = apic_id; + intpin->io_vector = apic_alloc_vector(apic_id, intpin->io_irq); if (bootverbose) { - printf("ioapic%u: Assigning ", io->io_id); + printf("ioapic%u: routing intpin %u (", io->io_id, + intpin->io_intpin); ioapic_print_irq(intpin); - printf(" to local APIC %u\n", intpin->io_cpu); + printf(") to lapic %u vector %u\n", intpin->io_cpu, + intpin->io_vector); } ioapic_program_intpin(intpin); + /* + * Free the old vector after the new one is established. This is done + * to prevent races where we could miss an interrupt. + */ + if (old_vector) + apic_free_vector(old_id, old_vector, intpin->io_irq); } static void ioapic_enable_intr(struct intsrc *isrc) { struct ioapic_intsrc *intpin = (struct ioapic_intsrc *)isrc; - struct ioapic *io = (struct ioapic *)isrc->is_pic; - if (intpin->io_vector == 0) { - /* - * Allocate an APIC vector for this interrupt pin. Once - * we have a vector we program the interrupt pin. - */ - intpin->io_vector = apic_alloc_vector(intpin->io_irq); - if (bootverbose) { - printf("ioapic%u: routing intpin %u (", io->io_id, - intpin->io_intpin); - ioapic_print_irq(intpin); - printf(") to vector %u\n", intpin->io_vector); - } - ioapic_program_intpin(intpin); - apic_enable_vector(intpin->io_vector); - } + if (intpin->io_vector == 0) + ioapic_assign_cpu(isrc, pcpu_find(0)->pc_apic_id); + apic_enable_vector(intpin->io_cpu, intpin->io_vector); } + static void ioapic_disable_intr(struct intsrc *isrc) { @@ -369,11 +386,11 @@ if (intpin->io_vector != 0) { /* Mask this interrupt pin and free its APIC vector. */ vector = intpin->io_vector; - apic_disable_vector(vector); + apic_disable_vector(intpin->io_cpu, vector); intpin->io_masked = 1; intpin->io_vector = 0; ioapic_program_intpin(intpin); - apic_free_vector(vector, intpin->io_irq); + apic_free_vector(intpin->io_cpu, vector, intpin->io_irq); } } ==== //depot/projects/usb/src/sys/amd64/amd64/local_apic.c#12 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.50 2008/12/11 15:56:30 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.51 2009/01/29 09:22:56 jeff Exp $"); #include "opt_hwpmc_hooks.h" #include "opt_kdtrace.h" @@ -46,6 +46,8 @@ #include #include #include +#include +#include #include #include @@ -109,6 +111,8 @@ u_long la_hard_ticks; u_long la_stat_ticks; u_long la_prof_ticks; + /* Include IDT_SYSCALL to make indexing easier. */ + u_int la_ioint_irqs[APIC_NUM_IOINTS + 1]; } static lapics[MAX_APIC_ID + 1]; /* XXX: should thermal be an NMI? */ @@ -134,8 +138,6 @@ IDTVEC(apic_isr7), /* 224 - 255 */ }; -/* Include IDT_SYSCALL to make indexing easier. */ -static u_int ioint_irqs[APIC_NUM_IOINTS + 1]; static u_int32_t lapic_timer_divisors[] = { APIC_TDCR_1, APIC_TDCR_2, APIC_TDCR_4, APIC_TDCR_8, APIC_TDCR_16, @@ -215,14 +217,12 @@ /* Perform basic initialization of the BSP's local APIC. */ lapic_enable(); - ioint_irqs[IDT_SYSCALL - APIC_IO_INTS] = IRQ_SYSCALL; /* Set BSP's per-CPU local APIC ID. */ PCPU_SET(apic_id, lapic_id()); /* Local APIC timer interrupt. */ setidt(APIC_TIMER_INT, IDTVEC(timerint), SDT_SYSIGT, SEL_KPL, 0); - ioint_irqs[APIC_TIMER_INT - APIC_IO_INTS] = IRQ_TIMER; /* XXX: error/thermal interrupts */ } @@ -254,6 +254,9 @@ lapics[apic_id].la_lvts[i] = lvts[i]; lapics[apic_id].la_lvts[i].lvt_active = 0; } + lapics[apic_id].la_ioint_irqs[IDT_SYSCALL - APIC_IO_INTS] = IRQ_SYSCALL; + lapics[apic_id].la_ioint_irqs[APIC_TIMER_INT - APIC_IO_INTS] = + IRQ_TIMER; #ifdef SMP cpu_add(apic_id, boot_cpu); @@ -664,7 +667,8 @@ if (vector == -1) panic("Couldn't get vector from ISR!"); - isrc = intr_lookup_source(apic_idt_to_irq(vector)); + isrc = intr_lookup_source(apic_idt_to_irq(PCPU_GET(apic_id), + vector)); intr_execute_handlers(isrc, frame); } @@ -779,9 +783,19 @@ lapic->lvt_timer = value; } +u_int +apic_cpuid(u_int apic_id) +{ +#ifdef SMP + return apic_cpuids[apic_id]; +#else + return 0; +#endif +} + /* Request a free IDT vector to be used by the specified IRQ. */ u_int -apic_alloc_vector(u_int irq) +apic_alloc_vector(u_int apic_id, u_int irq) { u_int vector; @@ -793,9 +807,9 @@ */ mtx_lock_spin(&icu_lock); for (vector = 0; vector < APIC_NUM_IOINTS; vector++) { - if (ioint_irqs[vector] != 0) + if (lapics[apic_id].la_ioint_irqs[vector] != 0) continue; - ioint_irqs[vector] = irq; + lapics[apic_id].la_ioint_irqs[vector] = irq; mtx_unlock_spin(&icu_lock); return (vector + APIC_IO_INTS); } @@ -810,7 +824,7 @@ * satisfied, 0 is returned. */ u_int -apic_alloc_vectors(u_int *irqs, u_int count, u_int align) +apic_alloc_vectors(u_int apic_id, u_int *irqs, u_int count, u_int align) { u_int first, run, vector; @@ -833,7 +847,7 @@ for (vector = 0; vector < APIC_NUM_IOINTS; vector++) { /* Vector is in use, end run. */ - if (ioint_irqs[vector] != 0) { + if (lapics[apic_id].la_ioint_irqs[vector] != 0) { run = 0; first = 0; continue; @@ -853,7 +867,8 @@ /* Found a run, assign IRQs and return the first vector. */ for (vector = 0; vector < count; vector++) - ioint_irqs[first + vector] = irqs[vector]; + lapics[apic_id].la_ioint_irqs[first + vector] = + irqs[vector]; mtx_unlock_spin(&icu_lock); return (first + APIC_IO_INTS); } @@ -862,8 +877,14 @@ return (0); } +/* + * Enable a vector for a particular apic_id. Since all lapics share idt + * entries and ioint_handlers this enables the vector on all lapics. lapics + * which do not have the vector configured would report spurious interrupts + * should it fire. + */ void -apic_enable_vector(u_int vector) +apic_enable_vector(u_int apic_id, u_int vector) { KASSERT(vector != IDT_SYSCALL, ("Attempt to overwrite syscall entry")); @@ -873,7 +894,7 @@ } void -apic_disable_vector(u_int vector) +apic_disable_vector(u_int apic_id, u_int vector) { KASSERT(vector != IDT_SYSCALL, ("Attempt to overwrite syscall entry")); @@ -884,27 +905,42 @@ /* Release an APIC vector when it's no longer in use. */ void -apic_free_vector(u_int vector, u_int irq) +apic_free_vector(u_int apic_id, u_int vector, u_int irq) { + struct thread *td; KASSERT(vector >= APIC_IO_INTS && vector != IDT_SYSCALL && vector <= APIC_IO_INTS + APIC_NUM_IOINTS, ("Vector %u does not map to an IRQ line", vector)); KASSERT(irq < NUM_IO_INTS, ("Invalid IRQ %u", irq)); - KASSERT(ioint_irqs[vector - APIC_IO_INTS] == irq, ("IRQ mismatch")); + KASSERT(lapics[apic_id].la_ioint_irqs[vector - APIC_IO_INTS] == + irq, ("IRQ mismatch")); + + /* + * Bind us to the cpu that owned the vector before freeing it so + * we don't lose an interrupt delivery race. + */ + td = curthread; + thread_lock(td); + if (sched_is_bound(td)) + panic("apic_free_vector: Thread already bound.\n"); + sched_bind(td, apic_cpuid(apic_id)); mtx_lock_spin(&icu_lock); - ioint_irqs[vector - APIC_IO_INTS] = 0; + lapics[apic_id].la_ioint_irqs[vector - APIC_IO_INTS] = 0; mtx_unlock_spin(&icu_lock); + sched_unbind(td); + thread_unlock(td); + } /* Map an IDT vector (APIC) to an IRQ (interrupt source). */ u_int -apic_idt_to_irq(u_int vector) +apic_idt_to_irq(u_int apic_id, u_int vector) { KASSERT(vector >= APIC_IO_INTS && vector != IDT_SYSCALL && vector <= APIC_IO_INTS + APIC_NUM_IOINTS, ("Vector %u does not map to an IRQ line", vector)); - return (ioint_irqs[vector - APIC_IO_INTS]); + return (lapics[apic_id].la_ioint_irqs[vector - APIC_IO_INTS]); } #ifdef DDB @@ -915,6 +951,7 @@ { struct intsrc *isrc; int i, verbose; + u_int apic_id; u_int irq; if (strcmp(modif, "vv") == 0) @@ -923,9 +960,14 @@ verbose = 1; else verbose = 0; - for (i = 0; i < APIC_NUM_IOINTS + 1 && !db_pager_quit; i++) { - irq = ioint_irqs[i]; - if (irq != 0 && irq != IRQ_SYSCALL) { + for (apic_id = 0; apic_id <= MAX_APIC_ID; apic_id++) { + if (lapics[apic_id].la_present == 0) + continue; + db_printf("Interrupts bound to lapic %u\n", apic_id); + for (i = 0; i < APIC_NUM_IOINTS + 1 && !db_pager_quit; i++) { + irq = lapics[apic_id].la_ioint_irqs[i]; + if (irq == 0 || irq == IRQ_SYSCALL) + continue; db_printf("vec 0x%2x -> ", i + APIC_IO_INTS); if (irq == IRQ_TIMER) db_printf("lapic timer\n"); ==== //depot/projects/usb/src/sys/amd64/amd64/mp_machdep.c#15 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.295 2008/11/26 19:25:13 jkim Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.296 2009/01/29 09:22:56 jeff Exp $"); #include "opt_cpu.h" #include "opt_kstack_pages.h" @@ -152,6 +152,7 @@ int cpu_disabled:1; } static cpu_info[MAX_APIC_ID + 1]; int cpu_apic_ids[MAXCPU]; +int apic_cpuids[MAX_APIC_ID + 1]; /* Holds pending bitmap based IPIs per CPU */ static volatile u_int cpu_ipi_pending[MAXCPU]; @@ -349,6 +350,7 @@ KASSERT(boot_cpu_id == PCPU_GET(apic_id), ("BSP's APIC ID doesn't match boot_cpu_id")); cpu_apic_ids[0] = boot_cpu_id; + apic_cpuids[boot_cpu_id] = 0; assign_cpu_ids(); @@ -656,6 +658,7 @@ if (mp_ncpus < MAXCPU) { cpu_apic_ids[mp_ncpus] = i; + apic_cpuids[i] = mp_ncpus; mp_ncpus++; } else cpu_info[i].cpu_disabled = 1; ==== //depot/projects/usb/src/sys/amd64/amd64/msi.c#7 (text+ko) ==== @@ -35,7 +35,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/msi.c,v 1.9 2009/01/12 19:17:35 jkim Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/msi.c,v 1.10 2009/01/29 09:22:56 jeff Exp $"); #include #include @@ -161,7 +161,9 @@ { struct msi_intsrc *msi = (struct msi_intsrc *)isrc; - apic_enable_vector(msi->msi_vector); + if (msi->msi_vector == 0) + msi_assign_cpu(isrc, 0); + apic_enable_vector(msi->msi_cpu, msi->msi_vector); } static void @@ -169,7 +171,7 @@ { struct msi_intsrc *msi = (struct msi_intsrc *)isrc; - apic_disable_vector(msi->msi_vector); + apic_disable_vector(msi->msi_cpu, msi->msi_vector); } static int @@ -199,15 +201,35 @@ msi_assign_cpu(struct intsrc *isrc, u_int apic_id) { struct msi_intsrc *msi = (struct msi_intsrc *)isrc; + int old_vector; + u_int old_id; + int vector; + /* Store information to free existing irq. */ + old_vector = msi->msi_vector; + old_id = msi->msi_cpu; + if (old_vector && old_id == apic_id) + return; + /* Allocate IDT vector on this cpu. */ + vector = apic_alloc_vector(apic_id, msi->msi_irq); + if (vector == 0) + return; /* XXX alloc_vector panics on failure. */ msi->msi_cpu = apic_id; + msi->msi_vector = vector; if (bootverbose) - printf("msi: Assigning %s IRQ %d to local APIC %u\n", + printf("msi: Assigning %s IRQ %d to local APIC %u vector %u\n", msi->msi_msix ? "MSI-X" : "MSI", msi->msi_irq, - msi->msi_cpu); + msi->msi_cpu, msi->msi_vector); pci_remap_msi_irq(msi->msi_dev, msi->msi_irq); + /* + * Free the old vector after the new one is established. This is done + * to prevent races where we could miss an interrupt. + */ + if (old_vector) + apic_free_vector(old_id, old_vector, msi->msi_irq); } + void msi_init(void) { @@ -263,7 +285,7 @@ msi_alloc(device_t dev, int count, int maxcount, int *irqs) { struct msi_intsrc *msi, *fsrc; - int cnt, i, vector; + int cnt, i; if (!msi_enabled) return (ENXIO); @@ -309,22 +331,12 @@ /* Ok, we now have the IRQs allocated. */ KASSERT(cnt == count, ("count mismatch")); - /* Allocate 'count' IDT vectors. */ - vector = apic_alloc_vectors(irqs, count, maxcount); - if (vector == 0) { - mtx_unlock(&msi_lock); - return (ENOSPC); - } - /* Assign IDT vectors and make these messages owned by 'dev'. */ fsrc = (struct msi_intsrc *)intr_lookup_source(irqs[0]); for (i = 0; i < count; i++) { msi = (struct msi_intsrc *)intr_lookup_source(irqs[i]); msi->msi_dev = dev; - msi->msi_vector = vector + i; - if (bootverbose) - printf("msi: routing MSI IRQ %d to vector %u\n", - msi->msi_irq, msi->msi_vector); + msi->msi_vector = 0; msi->msi_first = fsrc; KASSERT(msi->msi_intsrc.is_handlers == 0, ("dead MSI has handlers")); @@ -377,14 +389,18 @@ KASSERT(msi->msi_dev == first->msi_dev, ("owner mismatch")); msi->msi_first = NULL; msi->msi_dev = NULL; - apic_free_vector(msi->msi_vector, msi->msi_irq); + if (msi->msi_vector) + apic_free_vector(msi->msi_cpu, msi->msi_vector, + msi->msi_irq); msi->msi_vector = 0; } /* Clear out the first message. */ first->msi_first = NULL; first->msi_dev = NULL; - apic_free_vector(first->msi_vector, first->msi_irq); + if (first->msi_vector) + apic_free_vector(first->msi_cpu, first->msi_vector, + first->msi_irq); first->msi_vector = 0; first->msi_count = 0; @@ -433,7 +449,7 @@ msix_alloc(device_t dev, int *irq) { struct msi_intsrc *msi; - int i, vector; + int i; if (!msi_enabled) return (ENXIO); @@ -468,15 +484,9 @@ goto again; } - /* Allocate an IDT vector. */ - vector = apic_alloc_vector(i); - if (bootverbose) - printf("msi: routing MSI-X IRQ %d to vector %u\n", msi->msi_irq, - vector); - /* Setup source. */ msi->msi_dev = dev; - msi->msi_vector = vector; + msi->msi_vector = 0; msi->msi_msix = 1; KASSERT(msi->msi_intsrc.is_handlers == 0, ("dead MSI-X has handlers")); @@ -508,7 +518,8 @@ /* Clear out the message. */ msi->msi_dev = NULL; - apic_free_vector(msi->msi_vector, msi->msi_irq); + if (msi->msi_vector) + apic_free_vector(msi->msi_cpu, msi->msi_vector, msi->msi_irq); msi->msi_vector = 0; msi->msi_msix = 0; ==== //depot/projects/usb/src/sys/amd64/ia32/ia32_signal.c#6 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/ia32/ia32_signal.c,v 1.19 2008/09/02 17:52:11 kib Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/ia32/ia32_signal.c,v 1.20 2009/01/31 11:37:21 obrien Exp $"); #include "opt_compat.h" @@ -328,8 +328,8 @@ sf.sf_uc.uc_mcontext.mc_onstack = (oonstack) ? 1 : 0; sf.sf_uc.uc_mcontext.mc_gs = rgs(); sf.sf_uc.uc_mcontext.mc_fs = rfs(); - __asm __volatile("movl %%es,%0" : "=rm" (sf.sf_uc.uc_mcontext.mc_es)); - __asm __volatile("movl %%ds,%0" : "=rm" (sf.sf_uc.uc_mcontext.mc_ds)); + __asm __volatile("mov %%es,%0" : "=rm" (sf.sf_uc.uc_mcontext.mc_es)); + __asm __volatile("mov %%ds,%0" : "=rm" (sf.sf_uc.uc_mcontext.mc_ds)); sf.sf_uc.uc_mcontext.mc_edi = regs->tf_rdi; sf.sf_uc.uc_mcontext.mc_esi = regs->tf_rsi; sf.sf_uc.uc_mcontext.mc_ebp = regs->tf_rbp; @@ -443,8 +443,8 @@ sf.sf_uc.uc_mcontext.mc_onstack = (oonstack) ? 1 : 0; sf.sf_uc.uc_mcontext.mc_gs = rgs(); sf.sf_uc.uc_mcontext.mc_fs = rfs(); - __asm __volatile("movl %%es,%0" : "=rm" (sf.sf_uc.uc_mcontext.mc_es)); - __asm __volatile("movl %%ds,%0" : "=rm" (sf.sf_uc.uc_mcontext.mc_ds)); + __asm __volatile("mov %%es,%0" : "=rm" (sf.sf_uc.uc_mcontext.mc_es)); + __asm __volatile("mov %%ds,%0" : "=rm" (sf.sf_uc.uc_mcontext.mc_ds)); sf.sf_uc.uc_mcontext.mc_edi = regs->tf_rdi; sf.sf_uc.uc_mcontext.mc_esi = regs->tf_rsi; sf.sf_uc.uc_mcontext.mc_ebp = regs->tf_rbp; ==== //depot/projects/usb/src/sys/amd64/ia32/ia32_sigtramp.S#3 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/ia32/ia32_sigtramp.S,v 1.3 2006/09/23 13:42:09 davidxu Exp $ + * $FreeBSD: src/sys/amd64/ia32/ia32_sigtramp.S,v 1.4 2009/01/31 11:37:21 obrien Exp $ */ #include "opt_compat.h" @@ -45,8 +45,8 @@ calll *IA32_SIGF_HANDLER(%esp) leal IA32_SIGF_UC(%esp),%eax /* get ucontext */ pushl %eax - movl IA32_UC_ES(%eax),%es /* restore %es */ - movl IA32_UC_DS(%eax),%ds /* restore %ds */ + mov IA32_UC_ES(%eax),%es /* restore %es */ + mov IA32_UC_DS(%eax),%ds /* restore %ds */ movl $SYS_sigreturn,%eax pushl %eax /* junk to fake return addr. */ int $0x80 /* enter kernel with args */ @@ -60,8 +60,8 @@ calll *IA32_SIGF_HANDLER(%esp) leal IA32_SIGF_UC4(%esp),%eax/* get ucontext */ pushl %eax - movl IA32_UC4_ES(%eax),%es /* restore %es */ - movl IA32_UC4_DS(%eax),%ds /* restore %ds */ + mov IA32_UC4_ES(%eax),%es /* restore %es */ + mov IA32_UC4_DS(%eax),%ds /* restore %ds */ movl $344,%eax /* 4.x SYS_sigreturn */ pushl %eax /* junk to fake return addr. */ int $0x80 /* enter kernel with args */ ==== //depot/projects/usb/src/sys/amd64/include/apicvar.h#6 (text+ko) ==== @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/include/apicvar.h,v 1.26 2008/12/11 15:56:30 jhb Exp $ + * $FreeBSD: src/sys/amd64/include/apicvar.h,v 1.27 2009/01/29 09:22:56 jeff Exp $ */ #ifndef _MACHINE_APICVAR_H_ @@ -176,14 +176,17 @@ IDTVEC(apic_isr7), IDTVEC(spuriousint), IDTVEC(timerint); extern vm_paddr_t lapic_paddr; +extern int apic_cpuids[]; -u_int apic_alloc_vector(u_int irq); -u_int apic_alloc_vectors(u_int *irqs, u_int count, u_int align); -void apic_disable_vector(u_int vector); -void apic_enable_vector(u_int vector); -void apic_free_vector(u_int vector, u_int irq); -u_int apic_idt_to_irq(u_int vector); +u_int apic_alloc_vector(u_int apic_id, u_int irq); +u_int apic_alloc_vectors(u_int apic_id, u_int *irqs, u_int count, + u_int align); +void apic_disable_vector(u_int apic_id, u_int vector); +void apic_enable_vector(u_int apic_id, u_int vector); +void apic_free_vector(u_int apic_id, u_int vector, u_int irq); +u_int apic_idt_to_irq(u_int apic_id, u_int vector); void apic_register_enumerator(struct apic_enumerator *enumerator); +u_int apic_cpuid(u_int apic_id); void *ioapic_create(vm_paddr_t addr, int32_t apic_id, int intbase); int ioapic_disable_pin(void *cookie, u_int pin); int ioapic_get_vector(void *cookie, u_int pin); ==== //depot/projects/usb/src/sys/amd64/include/cpufunc.h#4 (text+ko) ==== @@ -27,7 +27,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/include/cpufunc.h,v 1.150 2008/08/08 16:26:53 stas Exp $ + * $FreeBSD: src/sys/amd64/include/cpufunc.h,v 1.151 2009/01/31 11:37:21 obrien Exp $ */ /* @@ -482,7 +482,7 @@ rfs(void) { u_int sel; - __asm __volatile("movl %%fs,%0" : "=rm" (sel)); + __asm __volatile("mov %%fs,%0" : "=rm" (sel)); return (sel); } @@ -490,7 +490,7 @@ rgs(void) { u_int sel; - __asm __volatile("movl %%gs,%0" : "=rm" (sel)); + __asm __volatile("mov %%gs,%0" : "=rm" (sel)); return (sel); } @@ -498,20 +498,20 @@ rss(void) { u_int sel; - __asm __volatile("movl %%ss,%0" : "=rm" (sel)); + __asm __volatile("mov %%ss,%0" : "=rm" (sel)); return (sel); } static __inline void load_ds(u_int sel) { - __asm __volatile("movl %0,%%ds" : : "rm" (sel)); + __asm __volatile("mov %0,%%ds" : : "rm" (sel)); } static __inline void load_es(u_int sel) { - __asm __volatile("movl %0,%%es" : : "rm" (sel)); + __asm __volatile("mov %0,%%es" : : "rm" (sel)); } static inline void @@ -539,7 +539,7 @@ /* Preserve the fsbase value across the selector load */ fsbase = MSR_FSBASE; - __asm __volatile("rdmsr; movl %0,%%fs; wrmsr" + __asm __volatile("rdmsr; mov %0,%%fs; wrmsr" : : "rm" (sel), "c" (fsbase) : "eax", "edx"); } @@ -557,7 +557,7 @@ * being trashed happens to be the kernel gsbase at the time. */ gsbase = MSR_GSBASE; - __asm __volatile("pushfq; cli; rdmsr; movl %0,%%gs; wrmsr; popfq" + __asm __volatile("pushfq; cli; rdmsr; mov %0,%%gs; wrmsr; popfq" : : "rm" (sel), "c" (gsbase) : "eax", "edx"); } #else @@ -565,13 +565,13 @@ static __inline void load_fs(u_int sel) { - __asm __volatile("movl %0,%%fs" : : "rm" (sel)); + __asm __volatile("mov %0,%%fs" : : "rm" (sel)); >>> TRUNCATED FOR MAIL (1000 lines) <<<