Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 8 Feb 2009 11:43:04 GMT
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 157361 for review
Message-ID:  <200902081143.n18Bh4b1045568@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=157361

Change 157361 by hselasky@hselasky_laptop001 on 2009/02/08 11:42:15

	
	IFC @ 157360

Affected files ...

.. //depot/projects/usb/src/sys/amd64/amd64/exception.S#9 integrate
.. //depot/projects/usb/src/sys/amd64/amd64/machdep.c#12 integrate
.. //depot/projects/usb/src/sys/amd64/amd64/mp_machdep.c#16 integrate
.. //depot/projects/usb/src/sys/amd64/conf/NOTES#14 integrate
.. //depot/projects/usb/src/sys/amd64/include/intr_machdep.h#7 integrate
.. //depot/projects/usb/src/sys/amd64/include/legacyvar.h#3 integrate
.. //depot/projects/usb/src/sys/amd64/pci/pci_bus.c#6 integrate
.. //depot/projects/usb/src/sys/arm/arm/busdma_machdep.c#15 integrate
.. //depot/projects/usb/src/sys/arm/arm/dump_machdep.c#6 integrate
.. //depot/projects/usb/src/sys/arm/arm/elf_trampoline.c#10 integrate
.. //depot/projects/usb/src/sys/arm/arm/pmap.c#13 integrate
.. //depot/projects/usb/src/sys/arm/arm/vm_machdep.c#8 integrate
.. //depot/projects/usb/src/sys/arm/conf/AVILA#11 integrate
.. //depot/projects/usb/src/sys/arm/conf/AVILA.hints#4 integrate
.. //depot/projects/usb/src/sys/arm/include/atomic.h#6 integrate
.. //depot/projects/usb/src/sys/arm/sa11x0/assabet_machdep.c#7 integrate
.. //depot/projects/usb/src/sys/arm/xscale/ixp425/avila_machdep.c#10 integrate
.. //depot/projects/usb/src/sys/arm/xscale/ixp425/files.ixp425#6 integrate
.. //depot/projects/usb/src/sys/arm/xscale/ixp425/ixp425.c#7 integrate
.. //depot/projects/usb/src/sys/arm/xscale/ixp425/ixp425reg.h#4 integrate
.. //depot/projects/usb/src/sys/conf/NOTES#27 integrate
.. //depot/projects/usb/src/sys/conf/files#50 integrate
.. //depot/projects/usb/src/sys/conf/options#20 integrate
.. //depot/projects/usb/src/sys/conf/options.amd64#7 integrate
.. //depot/projects/usb/src/sys/conf/options.i386#9 integrate
.. //depot/projects/usb/src/sys/conf/options.ia64#3 integrate
.. //depot/projects/usb/src/sys/conf/options.mips#3 integrate
.. //depot/projects/usb/src/sys/conf/options.pc98#7 integrate
.. //depot/projects/usb/src/sys/crypto/via/padlock.c#8 integrate
.. //depot/projects/usb/src/sys/dev/acpi_support/acpi_panasonic.c#4 integrate
.. //depot/projects/usb/src/sys/dev/acpica/acpi_pcib_acpi.c#5 integrate
.. //depot/projects/usb/src/sys/dev/ae/if_ae.c#3 integrate
.. //depot/projects/usb/src/sys/dev/agp/agp.c#5 integrate
.. //depot/projects/usb/src/sys/dev/an/if_an.c#7 integrate
.. //depot/projects/usb/src/sys/dev/an/if_anreg.h#4 integrate
.. //depot/projects/usb/src/sys/dev/ata/ata-disk.c#11 integrate
.. //depot/projects/usb/src/sys/dev/ata/atapi-cam.c#9 integrate
.. //depot/projects/usb/src/sys/dev/ata/atapi-cd.c#8 integrate
.. //depot/projects/usb/src/sys/dev/ata/atapi-fd.c#6 integrate
.. //depot/projects/usb/src/sys/dev/ata/atapi-tape.c#7 integrate
.. //depot/projects/usb/src/sys/dev/ath/ath_hal/ah_regdomain.c#4 integrate
.. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar5212.h#3 integrate
.. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar5212_reset.c#4 integrate
.. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5212/ar5212_rfgain.c#3 integrate
.. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c#3 integrate
.. //depot/projects/usb/src/sys/dev/ath/if_ath.c#16 integrate
.. //depot/projects/usb/src/sys/dev/ath/if_athioctl.h#6 integrate
.. //depot/projects/usb/src/sys/dev/atkbdc/atkbdc_isa.c#3 integrate
.. //depot/projects/usb/src/sys/dev/bge/if_bge.c#14 integrate
.. //depot/projects/usb/src/sys/dev/bm/if_bm.c#6 integrate
.. //depot/projects/usb/src/sys/dev/cardbus/cardbus.c#9 integrate
.. //depot/projects/usb/src/sys/dev/cardbus/cardbus_device.c#6 integrate
.. //depot/projects/usb/src/sys/dev/cfi/cfi_bus_ixp4xx.c#1 branch
.. //depot/projects/usb/src/sys/dev/cfi/cfi_core.c#2 integrate
.. //depot/projects/usb/src/sys/dev/cfi/cfi_dev.c#2 integrate
.. //depot/projects/usb/src/sys/dev/cfi/cfi_reg.h#2 integrate
.. //depot/projects/usb/src/sys/dev/cfi/cfi_var.h#2 integrate
.. //depot/projects/usb/src/sys/dev/exca/exca.c#5 integrate
.. //depot/projects/usb/src/sys/dev/firewire/firewire.c#9 integrate
.. //depot/projects/usb/src/sys/dev/firewire/fwohci.c#6 integrate
.. //depot/projects/usb/src/sys/dev/firewire/fwohci_pci.c#6 integrate
.. //depot/projects/usb/src/sys/dev/firewire/fwohcivar.h#4 integrate
.. //depot/projects/usb/src/sys/dev/firewire/sbp.c#6 integrate
.. //depot/projects/usb/src/sys/dev/fxp/if_fxp.c#8 integrate
.. //depot/projects/usb/src/sys/dev/hifn/hifn7751.c#4 integrate
.. //depot/projects/usb/src/sys/dev/ichsmb/ichsmb.c#6 integrate
.. //depot/projects/usb/src/sys/dev/ipmi/ipmi_acpi.c#2 integrate
.. //depot/projects/usb/src/sys/dev/ipmi/ipmi_smbios.c#4 integrate
.. //depot/projects/usb/src/sys/dev/kbdmux/kbdmux.c#8 integrate
.. //depot/projects/usb/src/sys/dev/lmc/if_lmc.c#9 integrate
.. //depot/projects/usb/src/sys/dev/lmc/if_lmc.h#5 integrate
.. //depot/projects/usb/src/sys/dev/mmc/mmc.c#8 integrate
.. //depot/projects/usb/src/sys/dev/mmc/mmcreg.h#4 integrate
.. //depot/projects/usb/src/sys/dev/my/if_my.c#6 integrate
.. //depot/projects/usb/src/sys/dev/nve/if_nve.c#7 integrate
.. //depot/projects/usb/src/sys/dev/pccard/card_if.m#2 integrate
.. //depot/projects/usb/src/sys/dev/pccard/pccard.c#5 integrate
.. //depot/projects/usb/src/sys/dev/pccard/pccard_cis.c#6 integrate
.. //depot/projects/usb/src/sys/dev/pccard/pccardvarp.h#4 integrate
.. //depot/projects/usb/src/sys/dev/pccbb/pccbb.c#10 integrate
.. //depot/projects/usb/src/sys/dev/pccbb/pccbb_pci.c#8 integrate
.. //depot/projects/usb/src/sys/dev/pccbb/pccbbvar.h#7 integrate
.. //depot/projects/usb/src/sys/dev/pci/pci_user.c#5 integrate
.. //depot/projects/usb/src/sys/dev/pci/pcireg.h#9 integrate
.. //depot/projects/usb/src/sys/dev/pcn/if_pcn.c#3 integrate
.. //depot/projects/usb/src/sys/dev/ppbus/ppbconf.h#7 integrate
.. //depot/projects/usb/src/sys/dev/ppc/ppc.c#9 integrate
.. //depot/projects/usb/src/sys/dev/ppc/ppcvar.h#5 integrate
.. //depot/projects/usb/src/sys/dev/safe/safe.c#5 integrate
.. //depot/projects/usb/src/sys/dev/scc/scc_if.m#3 integrate
.. //depot/projects/usb/src/sys/dev/si/si.c#6 integrate
.. //depot/projects/usb/src/sys/dev/smbus/smb.c#5 integrate
.. //depot/projects/usb/src/sys/dev/snp/snp.c#10 integrate
.. //depot/projects/usb/src/sys/dev/sound/macio/aoa.c#2 integrate
.. //depot/projects/usb/src/sys/dev/sound/macio/aoa.h#2 integrate
.. //depot/projects/usb/src/sys/dev/sound/macio/davbus.c#2 integrate
.. //depot/projects/usb/src/sys/dev/sound/macio/i2s.c#2 integrate
.. //depot/projects/usb/src/sys/dev/sound/macio/snapper.c#2 integrate
.. //depot/projects/usb/src/sys/dev/sound/macio/tumbler.c#2 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_rum.c#37 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_urtw.c#2 integrate
.. //depot/projects/usb/src/sys/dev/usb/usbdevs#42 integrate
.. //depot/projects/usb/src/sys/dev/usb2/bluetooth/ubtbcmfw2.c#14 integrate
.. //depot/projects/usb/src/sys/dev/usb2/controller/ehci2.c#31 integrate
.. //depot/projects/usb/src/sys/dev/usb2/controller/ohci2.c#28 integrate
.. //depot/projects/usb/src/sys/dev/usb2/controller/uhci2.c#28 integrate
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_error.c#6 integrate
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_process.c#16 integrate
.. //depot/projects/usb/src/sys/dev/usb2/include/usb2_devid.h#28 integrate
.. //depot/projects/usb/src/sys/dev/usb2/include/usb2_devtable.h#28 integrate
.. //depot/projects/usb/src/sys/dev/usb2/include/usb2_error.h#5 integrate
.. //depot/projects/usb/src/sys/dev/usb2/include/usb2_hid.h#7 integrate
.. //depot/projects/usb/src/sys/dev/usb2/include/usb2_mfunc.h#5 integrate
.. //depot/projects/usb/src/sys/dev/usb2/include/usb2_revision.h#7 integrate
.. //depot/projects/usb/src/sys/dev/usb2/input/uhid2.c#16 integrate
.. //depot/projects/usb/src/sys/dev/usb2/quirk/usb2_quirk.c#14 integrate
.. //depot/projects/usb/src/sys/dev/usb2/quirk/usb2_quirk.h#7 integrate
.. //depot/projects/usb/src/sys/dev/usb2/serial/uftdi2.c#20 integrate
.. //depot/projects/usb/src/sys/dev/usb2/wlan/if_rum2.c#25 integrate
.. //depot/projects/usb/src/sys/dev/xen/netback/netback.c#2 integrate
.. //depot/projects/usb/src/sys/dev/xen/netfront/netfront.c#6 integrate
.. //depot/projects/usb/src/sys/fs/fifofs/fifo_vnops.c#9 integrate
.. //depot/projects/usb/src/sys/fs/udf/ecma167-udf.h#3 integrate
.. //depot/projects/usb/src/sys/fs/udf/udf.h#3 integrate
.. //depot/projects/usb/src/sys/fs/udf/udf_vfsops.c#8 integrate
.. //depot/projects/usb/src/sys/fs/udf/udf_vnops.c#10 integrate
.. //depot/projects/usb/src/sys/geom/geom_subr.c#9 integrate
.. //depot/projects/usb/src/sys/geom/part/g_part_bsd.c#8 integrate
.. //depot/projects/usb/src/sys/geom/part/g_part_mbr.c#6 integrate
.. //depot/projects/usb/src/sys/i386/conf/NOTES#16 integrate
.. //depot/projects/usb/src/sys/i386/i386/vm_machdep.c#11 integrate
.. //depot/projects/usb/src/sys/i386/xen/clock.c#4 integrate
.. //depot/projects/usb/src/sys/i386/xen/xen_machdep.c#7 integrate
.. //depot/projects/usb/src/sys/ia64/conf/NOTES#4 integrate
.. //depot/projects/usb/src/sys/ia64/ia64/mca.c#3 integrate
.. //depot/projects/usb/src/sys/ia64/include/mca.h#2 integrate
.. //depot/projects/usb/src/sys/kern/kern_jail.c#16 integrate
.. //depot/projects/usb/src/sys/kern/kern_linker.c#12 integrate
.. //depot/projects/usb/src/sys/kern/kern_lock.c#11 integrate
.. //depot/projects/usb/src/sys/kern/kern_sysctl.c#11 integrate
.. //depot/projects/usb/src/sys/kern/subr_autoconf.c#5 integrate
.. //depot/projects/usb/src/sys/kern/subr_bus.c#16 integrate
.. //depot/projects/usb/src/sys/kern/subr_clist.c#4 integrate
.. //depot/projects/usb/src/sys/kern/subr_devstat.c#2 integrate
.. //depot/projects/usb/src/sys/kern/subr_disk.c#4 integrate
.. //depot/projects/usb/src/sys/kern/subr_firmware.c#8 integrate
.. //depot/projects/usb/src/sys/kern/subr_kobj.c#3 integrate
.. //depot/projects/usb/src/sys/kern/subr_prf.c#8 integrate
.. //depot/projects/usb/src/sys/kern/subr_prof.c#5 integrate
.. //depot/projects/usb/src/sys/kern/subr_rman.c#9 integrate
.. //depot/projects/usb/src/sys/kern/subr_rtc.c#3 integrate
.. //depot/projects/usb/src/sys/kern/subr_taskqueue.c#7 integrate
.. //depot/projects/usb/src/sys/kern/subr_witness.c#16 integrate
.. //depot/projects/usb/src/sys/kern/sys_generic.c#11 integrate
.. //depot/projects/usb/src/sys/kern/tty.c#16 integrate
.. //depot/projects/usb/src/sys/kern/tty_inq.c#2 integrate
.. //depot/projects/usb/src/sys/kern/tty_outq.c#2 integrate
.. //depot/projects/usb/src/sys/kern/uipc_socket.c#16 integrate
.. //depot/projects/usb/src/sys/kern/vfs_bio.c#13 integrate
.. //depot/projects/usb/src/sys/kern/vfs_init.c#4 integrate
.. //depot/projects/usb/src/sys/kern/vfs_mount.c#17 integrate
.. //depot/projects/usb/src/sys/kern/vfs_subr.c#17 integrate
.. //depot/projects/usb/src/sys/kern/vfs_syscalls.c#16 integrate
.. //depot/projects/usb/src/sys/mips/mips/busdma_machdep.c#3 integrate
.. //depot/projects/usb/src/sys/modules/libalias/libalias/Makefile#3 integrate
.. //depot/projects/usb/src/sys/net/if.c#17 integrate
.. //depot/projects/usb/src/sys/net/if_ethersubr.c#14 integrate
.. //depot/projects/usb/src/sys/net/rtsock.c#18 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211.c#14 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211_crypto.h#8 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211_ddb.c#9 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211_scan_sta.c#8 integrate
.. //depot/projects/usb/src/sys/netatalk/ddp_usrreq.c#6 integrate
.. //depot/projects/usb/src/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap_raw.c#6 integrate
.. //depot/projects/usb/src/sys/netinet/in.c#17 integrate
.. //depot/projects/usb/src/sys/netinet/in_pcb.c#18 integrate
.. //depot/projects/usb/src/sys/netinet/ip_divert.c#13 integrate
.. //depot/projects/usb/src/sys/netinet/ip_fw_nat.c#6 integrate
.. //depot/projects/usb/src/sys/netinet/ip_ipsec.c#10 integrate
.. //depot/projects/usb/src/sys/netinet/ip_output.c#13 integrate
.. //depot/projects/usb/src/sys/netinet/libalias/alias.c#6 integrate
.. //depot/projects/usb/src/sys/netinet/libalias/alias_db.c#9 integrate
.. //depot/projects/usb/src/sys/netinet/libalias/alias_local.h#5 integrate
.. //depot/projects/usb/src/sys/netinet/libalias/alias_sctp.c#1 branch
.. //depot/projects/usb/src/sys/netinet/libalias/alias_sctp.h#1 branch
.. //depot/projects/usb/src/sys/netinet/raw_ip.c#17 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_auth.c#9 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_constants.h#12 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_crc32.c#5 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_crc32.h#4 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_input.c#13 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_os_bsd.h#12 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_output.c#14 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_pcb.c#14 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_pcb.h#13 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_sysctl.c#10 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_uio.h#11 integrate
.. //depot/projects/usb/src/sys/netinet/sctp_usrreq.c#13 integrate
.. //depot/projects/usb/src/sys/netinet/sctputil.c#15 integrate
.. //depot/projects/usb/src/sys/netinet/sctputil.h#10 integrate
.. //depot/projects/usb/src/sys/netinet/tcp_subr.c#17 integrate
.. //depot/projects/usb/src/sys/netinet/tcp_usrreq.c#14 integrate
.. //depot/projects/usb/src/sys/netinet/udp_usrreq.c#17 integrate
.. //depot/projects/usb/src/sys/netinet6/frag6.c#12 integrate
.. //depot/projects/usb/src/sys/netinet6/in6.c#16 integrate
.. //depot/projects/usb/src/sys/netinet6/in6_pcb.c#14 integrate
.. //depot/projects/usb/src/sys/netinet6/in6_src.c#15 integrate
.. //depot/projects/usb/src/sys/netinet6/ip6_forward.c#12 integrate
.. //depot/projects/usb/src/sys/netinet6/ip6_input.c#16 integrate
.. //depot/projects/usb/src/sys/netinet6/ip6_ipsec.c#8 integrate
.. //depot/projects/usb/src/sys/netinet6/ip6_output.c#10 integrate
.. //depot/projects/usb/src/sys/netinet6/ip6_var.h#11 integrate
.. //depot/projects/usb/src/sys/netinet6/nd6_rtr.c#12 integrate
.. //depot/projects/usb/src/sys/netinet6/raw_ip6.c#16 integrate
.. //depot/projects/usb/src/sys/netinet6/sctp6_usrreq.c#11 integrate
.. //depot/projects/usb/src/sys/netinet6/udp6_usrreq.c#16 integrate
.. //depot/projects/usb/src/sys/netinet6/vinet6.h#5 integrate
.. //depot/projects/usb/src/sys/netipsec/ipsec.c#15 integrate
.. //depot/projects/usb/src/sys/netipsec/ipsec.h#12 integrate
.. //depot/projects/usb/src/sys/netipsec/ipsec6.h#6 integrate
.. //depot/projects/usb/src/sys/opencrypto/cryptosoft.c#7 integrate
.. //depot/projects/usb/src/sys/pc98/conf/NOTES#14 integrate
.. //depot/projects/usb/src/sys/rpc/clnt_rc.c#5 integrate
.. //depot/projects/usb/src/sys/security/audit/audit_pipe.c#12 integrate
.. //depot/projects/usb/src/sys/sys/cfictl.h#3 integrate
.. //depot/projects/usb/src/sys/sys/clist.h#4 integrate
.. //depot/projects/usb/src/sys/sys/conf.h#14 integrate
.. //depot/projects/usb/src/sys/sys/elf_common.h#10 integrate
.. //depot/projects/usb/src/sys/sys/jail.h#9 integrate
.. //depot/projects/usb/src/sys/sys/kobj.h#4 integrate
.. //depot/projects/usb/src/sys/sys/lockmgr.h#8 integrate
.. //depot/projects/usb/src/sys/sys/mount.h#14 integrate
.. //depot/projects/usb/src/sys/sys/pciio.h#3 integrate
.. //depot/projects/usb/src/sys/sys/sysctl.h#14 integrate
.. //depot/projects/usb/src/sys/sys/tty.h#8 integrate
.. //depot/projects/usb/src/sys/sys/ttyqueue.h#3 integrate
.. //depot/projects/usb/src/sys/ufs/ffs/ffs_alloc.c#9 integrate

Differences ...

==== //depot/projects/usb/src/sys/amd64/amd64/exception.S#9 (text+ko) ====

@@ -31,7 +31,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/amd64/exception.S,v 1.136 2009/01/14 14:20:08 kib Exp $
+ * $FreeBSD: src/sys/amd64/amd64/exception.S,v 1.137 2009/02/03 09:01:45 jkoshy Exp $
  */
 
 #include "opt_atpic.h"
@@ -383,22 +383,24 @@
  * NMI handling is special.
  *
  * First, NMIs do not respect the state of the processor's RFLAGS.IF
- * bit and the NMI handler may be invoked at any time, including when
- * the processor is in a critical section with RFLAGS.IF == 0.  In
- * particular, this means that the processor's GS.base values could be
- * inconsistent on entry to the handler, and so we need to read
- * MSR_GSBASE to determine if a 'swapgs' is needed.  We use '%ebx', a
- * C-preserved register, to remember whether to swap GS back on the
- * exit path.
+ * bit.  The NMI handler may be entered at any time, including when
+ * the processor is in a critical section with RFLAGS.IF == 0.
+ * The processor's GS.base value could be invalid on entry to the
+ * handler.
  *
  * Second, the processor treats NMIs specially, blocking further NMIs
- * until an 'iretq' instruction is executed.  We therefore need to
- * execute the NMI handler with interrupts disabled to prevent a
- * nested interrupt from executing an 'iretq' instruction and
- * inadvertently taking the processor out of NMI mode.
+ * until an 'iretq' instruction is executed.  We thus need to execute
+ * the NMI handler with interrupts disabled, to prevent a nested interrupt
+ * from executing an 'iretq' instruction and inadvertently taking the
+ * processor out of NMI mode.
  *
- * Third, the NMI handler runs on its own stack (tss_ist1), shared
- * with the double fault handler.
+ * Third, the NMI handler runs on its own stack (tss_ist2). The canonical
+ * GS.base value for the processor is stored just above the bottom of its
+ * NMI stack.  For NMIs taken from kernel mode, the current value in
+ * the processor's GS.base is saved at entry to C-preserved register %r12,
+ * the canonical value for GS.base is then loaded into the processor, and
+ * the saved value is restored at exit time.  For NMIs taken from user mode,
+ * the cheaper 'SWAPGS' instructions are used for swapping GS.base.
  */
 
 IDTVEC(nmi)
@@ -423,12 +425,22 @@
 	movq	%r15,TF_R15(%rsp)
 	xorl	%ebx,%ebx
 	testb	$SEL_RPL_MASK,TF_CS(%rsp)
-	jnz	nmi_needswapgs		/* we came from userland */
+	jnz	nmi_fromuserspace
+	/*
+	 * We've interrupted the kernel.  Preserve GS.base in %r12.
+	 */
 	movl	$MSR_GSBASE,%ecx
 	rdmsr
-	cmpl	$VM_MAXUSER_ADDRESS >> 32,%edx
-	jae	nmi_calltrap		/* GS.base holds a kernel VA */
-nmi_needswapgs:
+	movq	%rax,%r12
+	shlq	$32,%rdx
+	orq	%rdx,%r12
+	/* Retrieve and load the canonical value for GS.base. */
+	movq	TF_SIZE(%rsp),%rdx
+	movl	%edx,%eax
+	shrq	$32,%rdx
+	wrmsr
+	jmp	nmi_calltrap
+nmi_fromuserspace:
 	incl	%ebx
 	swapgs
 /* Note: this label is also used by ddb and gdb: */
@@ -439,14 +451,19 @@
 	MEXITCOUNT
 #ifdef HWPMC_HOOKS
 	/*
-	 * Check if the current trap was from user mode and if so
-	 * whether the current thread needs a user call chain to be
-	 * captured. We are still in NMI mode at this point.
+	 * Capture a userspace callchain if needed.
+	 * 
+	 * - Check if the current trap was from user mode.
+	 * - Check if the current thread is valid.
+	 * - Check if the thread requires a user call chain to be
+	 *   captured.
+	 *
+	 * We are still in NMI mode at this point.
 	 */
-	testb	$SEL_RPL_MASK,TF_CS(%rsp)
-	jz	nocallchain
-	movq	PCPU(CURTHREAD),%rax	/* curthread present? */
-	orq	%rax,%rax
+	testl	%ebx,%ebx
+	jz	nocallchain	/* not from userspace */
+	movq	PCPU(CURTHREAD),%rax
+	orq	%rax,%rax	/* curthread present? */
 	jz	nocallchain
 	testl	$TDP_CALLCHAIN,TD_PFLAGS(%rax) /* flagged for capture? */
 	jz	nocallchain
@@ -498,8 +515,18 @@
 nocallchain:
 #endif
 	testl	%ebx,%ebx
-	jz	nmi_restoreregs
+	jz	nmi_kernelexit
 	swapgs
+	jmp	nmi_restoreregs
+nmi_kernelexit:	
+	/*
+	 * Put back the preserved MSR_GSBASE value.
+	 */
+	movl	$MSR_GSBASE,%ecx
+	movq	%r12,%rdx
+	movl	%edx,%eax
+	shrq	$32,%rdx
+	wrmsr
 nmi_restoreregs:
 	movq	TF_RDI(%rsp),%rdi
 	movq	TF_RSI(%rsp),%rsi

==== //depot/projects/usb/src/sys/amd64/amd64/machdep.c#12 (text+ko) ====

@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.690 2008/09/08 09:59:05 kib Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.691 2009/02/03 09:01:45 jkoshy Exp $");
 
 #include "opt_atalk.h"
 #include "opt_atpic.h"
@@ -809,6 +809,9 @@
 
 static char dblfault_stack[PAGE_SIZE] __aligned(16);
 
+static char nmi0_stack[PAGE_SIZE] __aligned(16);
+CTASSERT(sizeof(struct nmi_pcpu) == 16);
+
 struct amd64tss common_tss[MAXCPU];
 
 /* software prototypes -- in more palatable form */
@@ -1291,6 +1294,7 @@
 	caddr_t kmdp;
 	int gsel_tss, x;
 	struct pcpu *pc;
+	struct nmi_pcpu *np;
 	u_int64_t msr;
 	char *env;
 
@@ -1365,7 +1369,7 @@
 		setidt(x, &IDTVEC(rsvd), SDT_SYSIGT, SEL_KPL, 0);
 	setidt(IDT_DE, &IDTVEC(div),  SDT_SYSIGT, SEL_KPL, 0);
 	setidt(IDT_DB, &IDTVEC(dbg),  SDT_SYSIGT, SEL_KPL, 0);
-	setidt(IDT_NMI, &IDTVEC(nmi),  SDT_SYSIGT, SEL_KPL, 1);
+	setidt(IDT_NMI, &IDTVEC(nmi),  SDT_SYSIGT, SEL_KPL, 2);
  	setidt(IDT_BP, &IDTVEC(bpt),  SDT_SYSIGT, SEL_UPL, 0);
 	setidt(IDT_OF, &IDTVEC(ofl),  SDT_SYSIGT, SEL_KPL, 0);
 	setidt(IDT_BR, &IDTVEC(bnd),  SDT_SYSIGT, SEL_KPL, 0);
@@ -1438,6 +1442,14 @@
 	/* doublefault stack space, runs on ist1 */
 	common_tss[0].tss_ist1 = (long)&dblfault_stack[sizeof(dblfault_stack)];
 
+	/*
+	 * NMI stack, runs on ist2.  The pcpu pointer is stored just
+	 * above the start of the ist2 stack.
+	 */
+	np = ((struct nmi_pcpu *) &nmi0_stack[sizeof(nmi0_stack)]) - 1;
+	np->np_pcpu = (register_t) pc;
+	common_tss[0].tss_ist2 = (long) np;
+
 	/* Set the IO permission bitmap (empty due to tss seg limit) */
 	common_tss[0].tss_iobase = sizeof(struct amd64tss);
 

==== //depot/projects/usb/src/sys/amd64/amd64/mp_machdep.c#16 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.296 2009/01/29 09:22:56 jeff Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.297 2009/02/03 09:01:45 jkoshy Exp $");
 
 #include "opt_cpu.h"
 #include "opt_kstack_pages.h"
@@ -92,6 +92,7 @@
 
 /* Temporary holder for double fault stack */
 char *doublefault_stack;
+char *nmi_stack;
 
 /* Hotwire a 0->4MB V==P mapping */
 extern pt_entry_t *KPTphys;
@@ -437,6 +438,7 @@
 init_secondary(void)
 {
 	struct pcpu *pc;
+	struct nmi_pcpu *np;
 	u_int64_t msr, cr0;
 	int cpu, gsel_tss, x;
 	struct region_descriptor ap_gdt;
@@ -450,6 +452,10 @@
 	common_tss[cpu].tss_iobase = sizeof(struct amd64tss);
 	common_tss[cpu].tss_ist1 = (long)&doublefault_stack[PAGE_SIZE];
 
+	/* The NMI stack runs on IST2. */
+	np = ((struct nmi_pcpu *) &nmi_stack[PAGE_SIZE]) - 1;
+	common_tss[cpu].tss_ist2 = (long) np;
+
 	/* Prepare private GDT */
 	gdt_segs[GPROC0_SEL].ssd_base = (long) &common_tss[cpu];
 	ssdtosyssd(&gdt_segs[GPROC0_SEL],
@@ -474,6 +480,9 @@
 	pc->pc_rsp0 = 0;
 	pc->pc_gs32p = &gdt[NGDT * cpu + GUGS32_SEL];
 
+	/* Save the per-cpu pointer for use by the NMI handler. */
+	np->np_pcpu = (register_t) pc;
+
 	wrmsr(MSR_FSBASE, 0);		/* User value */
 	wrmsr(MSR_GSBASE, (u_int64_t)pc);
 	wrmsr(MSR_KGSBASE, (u_int64_t)pc);	/* XXX User value while we're in the kernel */
@@ -725,6 +734,7 @@
 		/* allocate and set up an idle stack data page */
 		bootstacks[cpu] = (void *)kmem_alloc(kernel_map, KSTACK_PAGES * PAGE_SIZE);
 		doublefault_stack = (char *)kmem_alloc(kernel_map, PAGE_SIZE);
+		nmi_stack = (char *)kmem_alloc(kernel_map, PAGE_SIZE);
 
 		bootSTK = (char *)bootstacks[cpu] + KSTACK_PAGES * PAGE_SIZE - 8;
 		bootAP = cpu;

==== //depot/projects/usb/src/sys/amd64/conf/NOTES#14 (text+ko) ====

@@ -4,7 +4,7 @@
 # This file contains machine dependent kernel configuration notes.  For
 # machine independent notes, look in /sys/conf/NOTES.
 #
-# $FreeBSD: src/sys/amd64/conf/NOTES,v 1.83 2008/12/01 16:53:01 sam Exp $
+# $FreeBSD: src/sys/amd64/conf/NOTES,v 1.86 2009/02/07 00:01:10 wkoszek Exp $
 #
 
 #
@@ -150,6 +150,11 @@
 # AGP GART support
 device		agp
 
+#
+# AGP debugging.
+#
+options		AGP_DEBUG
+
 
 #####################################################################
 # HARDWARE DEVICE CONFIGURATION
@@ -267,7 +272,6 @@
 # nfe:	nVidia nForce MCP on-board Ethernet Networking (BSD open source)
 # nve:	nVidia nForce MCP on-board Ethernet Networking
 # ral:	Ralink Technology IEEE 802.11 wireless adapter
-# ural:	Ralink Technology RT2500USB IEEE 802.11 wireless adapter
 # wpi:	Intel 3945ABG Wireless LAN controller
 
 device		ed
@@ -277,10 +281,9 @@
 device		iwi
 device		iwn
 device		ipw
-device		nfe		# nVidia nForce MCP on-board Ethernet Networking
-device		nve		# nVidia nForce MCP on-board Ethernet Networking
+device		nfe
+device		nve
 device		ral
-device		ural
 device		wpi
 
 device		ath			# Atheros pci/cardbus NIC's
@@ -356,9 +359,11 @@
 # Miscellaneous hardware:
 #
 # ipmi: Intelligent Platform Management Interface
+# pbio: Parallel (8255 PPI) basic I/O (mode 0) port (e.g. Advantech PCL-724)
 # smbios: DMI/SMBIOS entry point
 # vpd: Vital Product Data kernel interface
 # asmc: Apple System Management Controller
+# si: Specialix International SI/XIO or SX intelligent serial card
 
 # Notes on the Specialix SI/XIO driver:
 #  The host card is memory, not IO mapped.
@@ -367,13 +372,14 @@
 #  The cards can use an IRQ of 11, 12 or 15.
 
 device		ipmi
-# Parallel (8255 PPI) basic I/O (mode 0) port (e.g. Advantech PCL-724)
 device		pbio
 hint.pbio.0.at="isa"
 hint.pbio.0.port="0x360"
 device		smbios
 device		vpd
 device		asmc
+#device		si
+
 #
 # Laptop/Notebook options:
 #

==== //depot/projects/usb/src/sys/amd64/include/intr_machdep.h#7 (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/include/intr_machdep.h,v 1.20 2009/01/29 09:22:56 jeff Exp $
+ * $FreeBSD: src/sys/amd64/include/intr_machdep.h,v 1.21 2009/02/03 09:01:45 jkoshy Exp $
  */
 
 #ifndef __MACHINE_INTR_MACHDEP_H__
@@ -120,6 +120,15 @@
 
 struct trapframe;
 
+/*
+ * The following data structure holds per-cpu data, and is placed just
+ * above the top of the space used for the NMI stack.
+ */
+struct nmi_pcpu {
+	register_t	np_pcpu;
+	register_t	__padding;	/* pad to 16 bytes */
+};
+
 extern struct mtx icu_lock;
 extern int elcr_found;
 

==== //depot/projects/usb/src/sys/amd64/include/legacyvar.h#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/include/legacyvar.h,v 1.8 2007/09/30 11:05:13 marius Exp $
+ * $FreeBSD: src/sys/amd64/include/legacyvar.h,v 1.9 2009/02/08 07:03:34 imp Exp $
  */
 
 #ifndef _MACHINE_LEGACYVAR_H_
@@ -43,12 +43,12 @@
 #undef LEGACY_ACCESSOR
 
 int	legacy_pcib_maxslots(device_t dev);
-uint32_t legacy_pcib_read_config(device_t dev, int bus, int slot, int func,
-    int reg, int bytes);
+uint32_t legacy_pcib_read_config(device_t dev, u_int bus, u_int slot,
+    u_int func, u_int reg, int bytes);
 int	legacy_pcib_read_ivar(device_t dev, device_t child, int which,
     uintptr_t *result);
-void	legacy_pcib_write_config(device_t dev, int bus, int slot, int func,
-    int reg, u_int32_t data, int bytes);
+void	legacy_pcib_write_config(device_t dev, u_int bus, u_int slot,
+    u_int func, u_int reg, uint32_t data, int bytes);
 int	legacy_pcib_write_ivar(device_t dev, device_t child, int which,
     uintptr_t value);
 struct resource *legacy_pcib_alloc_resource(device_t dev, device_t child,

==== //depot/projects/usb/src/sys/amd64/pci/pci_bus.c#6 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/pci/pci_bus.c,v 1.122 2007/09/30 11:05:13 marius Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/pci/pci_bus.c,v 1.123 2009/02/08 07:02:42 imp Exp $");
 
 #include "opt_cpu.h"
 
@@ -55,9 +55,9 @@
 
 /* read configuration space register */
 
-u_int32_t
-legacy_pcib_read_config(device_t dev, int bus, int slot, int func,
-			int reg, int bytes)
+uint32_t
+legacy_pcib_read_config(device_t dev, u_int bus, u_int slot, u_int func,
+			u_int reg, int bytes)
 {
 	return(pci_cfgregread(bus, slot, func, reg, bytes));
 }
@@ -65,8 +65,8 @@
 /* write configuration space register */
 
 void
-legacy_pcib_write_config(device_t dev, int bus, int slot, int func,
-			 int reg, u_int32_t data, int bytes)
+legacy_pcib_write_config(device_t dev, u_int bus, u_int slot, u_int func,
+			 u_int reg, uint32_t data, int bytes)
 {
 	pci_cfgregwrite(bus, slot, func, reg, data, bytes);
 }

==== //depot/projects/usb/src/sys/arm/arm/busdma_machdep.c#15 (text+ko) ====

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.41 2009/01/30 07:01:32 thompsa Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.42 2009/02/04 01:14:06 cognet Exp $");
 
 /*
  * ARM bus dma support routines
@@ -1168,7 +1168,7 @@
 
 	STAILQ_FOREACH(bpage, &map->bpages, links) {
 		if ((vm_offset_t)buf >= bpage->datavaddr &&
-		    (vm_offset_t)buf + len < bpage->datavaddr + 
+		    (vm_offset_t)buf + len <= bpage->datavaddr + 
 		    bpage->datacount)
 			return (1);
 	}

==== //depot/projects/usb/src/sys/arm/arm/dump_machdep.c#6 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/dump_machdep.c,v 1.6 2008/11/06 16:20:27 raj Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/dump_machdep.c,v 1.7 2009/02/02 20:09:14 cognet Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -158,14 +158,12 @@
 {
 	struct dumperinfo *di = (struct dumperinfo*)arg;
 	vm_paddr_t pa;
-	vm_offset_t va;
 	uint32_t pgs;
 	size_t counter, sz, chunk;
 	int c, error;
 
 	error = 0;	/* catch case in which chunk size is 0 */
 	counter = 0;
-	va = 0;
 	pgs = mdp->md_size / PAGE_SIZE;
 	pa = mdp->md_start;
 

==== //depot/projects/usb/src/sys/arm/arm/elf_trampoline.c#10 (text+ko) ====

@@ -23,7 +23,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/elf_trampoline.c,v 1.23 2009/01/09 10:45:04 raj Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/elf_trampoline.c,v 1.24 2009/02/02 20:09:14 cognet Exp $");
 #include <machine/asm.h>
 #include <sys/param.h>
 #include <sys/elf32.h>
@@ -404,11 +404,11 @@
 	int symtabindex = -1;
 	int symstrindex = -1;
 	vm_offset_t lastaddr = 0;
-	Elf_Addr ssym = 0, esym = 0;
+	Elf_Addr ssym = 0;
 	Elf_Dyn *dp;
 	
 	eh = (Elf32_Ehdr *)kstart;
-	ssym = esym = 0;
+	ssym = 0;
 	entry_point = (void*)eh->e_entry;
 	memcpy(phdr, (void *)(kstart + eh->e_phoff ),
 	    eh->e_phnum * sizeof(phdr[0]));

==== //depot/projects/usb/src/sys/arm/arm/pmap.c#13 (text+ko) ====

@@ -147,7 +147,7 @@
 #include "opt_vm.h"
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.106 2008/11/06 16:28:28 raj Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.107 2009/02/02 20:09:14 cognet Exp $");
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
@@ -3102,7 +3102,7 @@
 pmap_remove_all(vm_page_t m)
 {
 	pv_entry_t pv;
-	pt_entry_t *ptep, pte;
+	pt_entry_t *ptep;
 	struct l2_bucket *l2b;
 	boolean_t flush = FALSE;
 	pmap_t curpm;
@@ -3130,7 +3130,6 @@
 		l2b = pmap_get_l2_bucket(pv->pv_pmap, pv->pv_va);
 		KASSERT(l2b != NULL, ("No l2 bucket"));
 		ptep = &l2b->l2b_kva[l2pte_index(pv->pv_va)];
-		pte = *ptep;
 		*ptep = 0;
 		PTE_SYNC_CURRENT(pv->pv_pmap, ptep);
 		pmap_free_l2_bucket(pv->pv_pmap, l2b, 1);

==== //depot/projects/usb/src/sys/arm/arm/vm_machdep.c#8 (text+ko) ====

@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/vm_machdep.c,v 1.37 2008/08/04 14:47:49 raj Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/vm_machdep.c,v 1.38 2009/02/02 20:09:14 cognet Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -108,14 +108,13 @@
 cpu_fork(register struct thread *td1, register struct proc *p2,
     struct thread *td2, int flags)
 {
-	struct pcb *pcb1, *pcb2;
+	struct pcb *pcb2;
 	struct trapframe *tf;
 	struct switchframe *sf;
 	struct mdproc *mdp2;
 
 	if ((flags & RFPROC) == 0)
 		return;
-	pcb1 = td1->td_pcb;
 	pcb2 = (struct pcb *)(td2->td_kstack + td2->td_kstack_pages * PAGE_SIZE) - 1;
 #ifdef __XSCALE__
 #ifndef CPU_XSCALE_CORE3

==== //depot/projects/usb/src/sys/arm/conf/AVILA#11 (text+ko) ====

@@ -16,7 +16,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check first 
 # in NOTES.
 #
-# $FreeBSD: src/sys/arm/conf/AVILA,v 1.21 2008/12/27 17:22:17 bz Exp $
+# $FreeBSD: src/sys/arm/conf/AVILA,v 1.22 2009/02/03 19:16:04 sam Exp $
 
 ident		AVILA
 
@@ -66,13 +66,15 @@
 device		pci
 device		uart
 
+device		ixpwdog		# watchdog timer
+device		cfi		# flash support
+
 # I2C Bus
 device		iicbus
 device		iicbb
 device		iic
 
 device		ixpiic		# I2C bus glue
-device		ixpwdog		# watchdog timer
 device		ds1672		# DS1672 on I2C bus
 device		ad7418		# AD7418 on I2C bus
 

==== //depot/projects/usb/src/sys/arm/conf/AVILA.hints#4 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/arm/conf/AVILA.hints,v 1.4 2008/12/20 03:26:09 sam Exp $
+# $FreeBSD: src/sys/arm/conf/AVILA.hints,v 1.5 2009/02/03 19:16:04 sam Exp $
 
 #
 # Device wiring for the Gateworks Avila 2384.
@@ -29,6 +29,10 @@
 hint.npe.1.mii="B"
 hint.npe.1.phy=1
 
+# FLASH
+hint.cfi.0.at="ixp0"
+hint.cfi.0.addr=0x50000000
+
 # CF IDE controller
 hint.ata_avila.0.at="ixp0"
 

==== //depot/projects/usb/src/sys/arm/include/atomic.h#6 (text+ko) ====

@@ -33,7 +33,7 @@
  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/arm/include/atomic.h,v 1.25 2008/11/22 05:55:56 kmacy Exp $
+ * $FreeBSD: src/sys/arm/include/atomic.h,v 1.26 2009/02/03 19:06:12 sam Exp $
  */
 
 #ifndef	_MACHINE_ATOMIC_H_
@@ -344,7 +344,8 @@
 
 #define atomic_clear_ptr		atomic_clear_32
 #define atomic_set_ptr			atomic_set_32
-#define atomic_cmpset_ptr		atomic_cmpset_32
+#define	atomic_cmpset_ptr(dst, old, new)	\
+    atomic_cmpset_32((volatile u_int *)(dst), (u_int)(old), (u_int)(new))
 #define atomic_cmpset_rel_ptr		atomic_cmpset_ptr
 #define atomic_cmpset_acq_ptr		atomic_cmpset_ptr
 #define atomic_store_ptr		atomic_store_32

==== //depot/projects/usb/src/sys/arm/sa11x0/assabet_machdep.c#7 (text+ko) ====

@@ -47,7 +47,7 @@
 
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/sa11x0/assabet_machdep.c,v 1.26 2008/12/01 10:16:25 stas Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/sa11x0/assabet_machdep.c,v 1.28 2009/02/02 20:24:29 cognet Exp $");
 
 #include "opt_md.h"
 
@@ -210,12 +210,10 @@
 	struct pv_addr	md_addr;
 	struct pv_addr	md_bla;
 	int loop;
-	u_int kerneldatasize, symbolsize;
 	u_int l1pagetable;
 	vm_offset_t freemempos;
 	vm_offset_t lastalloced;
 	vm_offset_t lastaddr;
-	vm_size_t pt_size;
 	uint32_t memsize = 32 * 1024 * 1024;
 	sa1110_uart_vaddr = SACOM1_VBASE;
 
@@ -232,8 +230,6 @@
 	physical_end =  lastaddr;
 	physical_freestart = (((vm_offset_t)physical_end) + PAGE_MASK) & ~PAGE_MASK;
 	md_addr.pv_va = md_addr.pv_pa = MDROOT_ADDR;
-	kerneldatasize = (u_int32_t)&end - (u_int32_t)KERNVIRTADDR;
-	symbolsize = 0;
 	freemempos = (vm_offset_t)round_page(physical_freestart);
 	memset((void *)freemempos, 0, 256*1024);
 		/* Define a macro to simplify memory allocation */
@@ -265,14 +261,12 @@
 		}
 	}
 
-	valloc_pages(systempage, 1);
-
 	/*
 	 * Allocate a page for the system page mapped to V0x00000000
 	 * This page will just contain the system vectors and can be
 	 * shared by all processes.
 	 */
-	pt_size = round_page(freemempos) - physical_freestart;
+	valloc_pages(systempage, 1);
 
 	/* Allocate stacks for all modes */
 	valloc_pages(irqstack, IRQ_STACK_SIZE);

==== //depot/projects/usb/src/sys/arm/xscale/ixp425/avila_machdep.c#10 (text+ko) ====

@@ -48,7 +48,7 @@
 #include "opt_msgbuf.h"
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/avila_machdep.c,v 1.14 2008/12/20 03:26:09 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/avila_machdep.c,v 1.15 2009/02/03 19:16:04 sam Exp $");
 
 #define _ARM32_BUS_DMA_PRIVATE
 #include <sys/param.h>
@@ -154,6 +154,10 @@
     { IXP425_EXP_VBASE, IXP425_EXP_HWBASE, IXP425_EXP_SIZE,
       VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, },
 
+	/* CFI Flash on the Expansion Bus */
+    { IXP425_EXP_BUS_CS0_VBASE, IXP425_EXP_BUS_CS0_HWBASE,
+      IXP425_EXP_BUS_CS0_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, },
+
 	/* IXP425 PCI Configuration */
     { IXP425_PCI_VBASE, IXP425_PCI_HWBASE, IXP425_PCI_SIZE,
       VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, },

==== //depot/projects/usb/src/sys/arm/xscale/ixp425/files.ixp425#6 (text+ko) ====

@@ -1,4 +1,4 @@
-#$FreeBSD: src/sys/arm/xscale/ixp425/files.ixp425,v 1.7 2008/12/23 17:40:02 sam Exp $
+#$FreeBSD: src/sys/arm/xscale/ixp425/files.ixp425,v 1.8 2009/02/03 19:16:04 sam Exp $
 arm/arm/bus_space_generic.c		standard
 arm/arm/cpufunc_asm_xscale.S		standard
 arm/arm/irq_dispatch.S			standard
@@ -15,6 +15,7 @@
 arm/xscale/ixp425/uart_bus_ixp425.c	optional	uart
 arm/xscale/ixp425/ixp425_a4x_space.c	optional	uart
 arm/xscale/ixp425/ixp425_a4x_io.S	optional	uart
+dev/cfi/cfi_bus_ixp4xx.c		optional	cfi
 dev/uart/uart_dev_ns8250.c		optional	uart
 #
 # NPE-based Ethernet support (requires qmgr also).

==== //depot/projects/usb/src/sys/arm/xscale/ixp425/ixp425.c#7 (text+ko) ====

@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/ixp425.c,v 1.12 2008/12/23 04:48:27 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/ixp425.c,v 1.13 2009/02/03 19:16:04 sam Exp $");
 
 #define _ARM32_BUS_DMA_PRIVATE
 #include <sys/param.h>
@@ -329,6 +329,8 @@
 	{ IXP425_IO_HWBASE,	IXP425_IO_SIZE,		IXP425_IO_VBASE },
 	{ IXP425_PCI_HWBASE,	IXP425_PCI_SIZE,	IXP425_PCI_VBASE },
 	{ IXP425_PCI_MEM_HWBASE,IXP425_PCI_MEM_SIZE,	IXP425_PCI_MEM_VBASE },
+	{ IXP425_EXP_BUS_CS0_HWBASE, IXP425_EXP_BUS_CS0_SIZE,
+	  IXP425_EXP_BUS_CS0_VBASE },
 	/* NB: needed only for uart_cpu_getdev */
 	{ IXP425_UART0_HWBASE,	IXP425_REG_SIZE,	IXP425_UART0_VBASE },
 	{ IXP425_UART1_HWBASE,	IXP425_REG_SIZE,	IXP425_UART1_VBASE },

==== //depot/projects/usb/src/sys/arm/xscale/ixp425/ixp425reg.h#4 (text+ko) ====

@@ -31,7 +31,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/arm/xscale/ixp425/ixp425reg.h,v 1.4 2008/12/23 04:48:27 sam Exp $
+ * $FreeBSD: src/sys/arm/xscale/ixp425/ixp425reg.h,v 1.5 2009/02/03 19:16:04 sam Exp $
  *
  */
 
@@ -76,6 +76,10 @@
  *           Global cache clean area
  * FF00 0000 ---------------------------
  *
+ * FE00 0000 ---------------------------
+ *           16M CFI Flash (on ext bus)
+ * FD00 0000 ---------------------------
+ *
  * FC00 0000 ---------------------------
  *           PCI Data (memory space)
  * F800 0000 --------------------------- IXP425_PCI_MEM_VBASE
@@ -649,6 +653,9 @@
 #define	IXP425_EXP_BUS_CSx_VBASE(i) \
 	(IXP425_MAC_B_VBASE + (i)*IXP425_MAC_B_SIZE)
 
+#define	IXP425_EXP_BUS_CS0_HWBASE	IXP425_EXP_BUS_CSx_HWBASE(0)
+#define IXP425_EXP_BUS_CS0_VBASE	0xFD000000UL
+#define IXP425_EXP_BUS_CS0_SIZE		0x01000000	/* NB: 16M */
 #define	IXP425_EXP_BUS_CS1_HWBASE	IXP425_EXP_BUS_CSx_HWBASE(1)
 #define IXP425_EXP_BUS_CS1_VBASE	IXP425_EXP_BUS_CSx_VBASE(1)
 #define IXP425_EXP_BUS_CS1_SIZE		0x1000
@@ -663,7 +670,6 @@
 #define IXP425_EXP_BUS_CS4_SIZE		0x1000
 
 /* NB: not mapped (yet) */
-#define	IXP425_EXP_BUS_CS0_HWBASE	IXP425_EXP_BUS_CSx_HWBASE(0)
 #define	IXP425_EXP_BUS_CS5_HWBASE	IXP425_EXP_BUS_CSx_HWBASE(5)
 #define	IXP425_EXP_BUS_CS6_HWBASE	IXP425_EXP_BUS_CSx_HWBASE(6)

>>> TRUNCATED FOR MAIL (1000 lines) <<<



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200902081143.n18Bh4b1045568>