From owner-svn-src-projects@FreeBSD.ORG  Mon Dec 26 00:10:43 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 439FA106566B;
	Mon, 26 Dec 2011 00:10:43 +0000 (UTC)
	(envelope-from rmacklem@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 2E0818FC19;
	Mon, 26 Dec 2011 00:10:43 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBQ0AhpI081502;
	Mon, 26 Dec 2011 00:10:43 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Received: (from rmacklem@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBQ0AgVA081482;
	Mon, 26 Dec 2011 00:10:42 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Message-Id: <201112260010.pBQ0AgVA081482@svn.freebsd.org>
From: Rick Macklem <rmacklem@FreeBSD.org>
Date: Mon, 26 Dec 2011 00:10:42 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228884 - in projects/nfsv4.1-client/sys: amd64/conf
	amd64/include arm/arm arm/econa arm/include
	boot/arm/at91/libat91 boot/forth boot/i386/boot0
	boot/i386/libi386 cam/ata cam/scsi cddl...
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 26 Dec 2011 00:10:43 -0000

Author: rmacklem
Date: Mon Dec 26 00:10:42 2011
New Revision: 228884
URL: http://svn.freebsd.org/changeset/base/228884

Log:
  Merge in an up to date kernel from head.

Added:
  projects/nfsv4.1-client/sys/dev/cxgbe/firmware/
     - copied from r228883, head/sys/dev/cxgbe/firmware/
  projects/nfsv4.1-client/sys/dev/fb/splash_txt.c
     - copied unchanged from r228883, head/sys/dev/fb/splash_txt.c
  projects/nfsv4.1-client/sys/dev/viawd/
     - copied from r228883, head/sys/dev/viawd/
  projects/nfsv4.1-client/sys/modules/carp/
     - copied from r228883, head/sys/modules/carp/
  projects/nfsv4.1-client/sys/modules/cxgbe/firmware/
     - copied from r228883, head/sys/modules/cxgbe/firmware/
  projects/nfsv4.1-client/sys/modules/splash/txt/
     - copied from r228883, head/sys/modules/splash/txt/
  projects/nfsv4.1-client/sys/modules/usb/avr32dci/
     - copied from r228883, head/sys/modules/usb/avr32dci/
  projects/nfsv4.1-client/sys/modules/viawd/
     - copied from r228883, head/sys/modules/viawd/
  projects/nfsv4.1-client/sys/sys/_kstack_cache.h
     - copied unchanged from r228883, head/sys/sys/_kstack_cache.h
Deleted:
  projects/nfsv4.1-client/sys/dev/cxgbe/common/t4fw_interface.h
  projects/nfsv4.1-client/sys/fs/ext2fs/ext2_readwrite.c
  projects/nfsv4.1-client/sys/libkern/gets.c
  projects/nfsv4.1-client/sys/modules/if_carp/
Modified:
  projects/nfsv4.1-client/sys/amd64/conf/NOTES
  projects/nfsv4.1-client/sys/amd64/include/_types.h
  projects/nfsv4.1-client/sys/arm/arm/irq_dispatch.S
  projects/nfsv4.1-client/sys/arm/arm/pmap.c
  projects/nfsv4.1-client/sys/arm/arm/vm_machdep.c
  projects/nfsv4.1-client/sys/arm/econa/ehci_ebus.c
  projects/nfsv4.1-client/sys/arm/econa/ohci_ec.c
  projects/nfsv4.1-client/sys/arm/include/_types.h
  projects/nfsv4.1-client/sys/arm/include/pmap.h
  projects/nfsv4.1-client/sys/boot/arm/at91/libat91/sd-card.c
  projects/nfsv4.1-client/sys/boot/forth/loader.conf
  projects/nfsv4.1-client/sys/boot/i386/boot0/boot0.S
  projects/nfsv4.1-client/sys/boot/i386/libi386/time.c
  projects/nfsv4.1-client/sys/cam/ata/ata_da.c
  projects/nfsv4.1-client/sys/cam/scsi/scsi_all.h
  projects/nfsv4.1-client/sys/cam/scsi/scsi_cd.c
  projects/nfsv4.1-client/sys/cam/scsi/scsi_da.c
  projects/nfsv4.1-client/sys/cam/scsi/scsi_target.c
  projects/nfsv4.1-client/sys/cam/scsi/scsi_xpt.c
  projects/nfsv4.1-client/sys/cddl/compat/opensolaris/kern/opensolaris_cmn_err.c
  projects/nfsv4.1-client/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
  projects/nfsv4.1-client/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
  projects/nfsv4.1-client/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c
  projects/nfsv4.1-client/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c
  projects/nfsv4.1-client/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_replay.c
  projects/nfsv4.1-client/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
  projects/nfsv4.1-client/sys/conf/NOTES
  projects/nfsv4.1-client/sys/conf/files
  projects/nfsv4.1-client/sys/conf/files.amd64
  projects/nfsv4.1-client/sys/conf/files.i386
  projects/nfsv4.1-client/sys/conf/kern.mk
  projects/nfsv4.1-client/sys/conf/kern.pre.mk
  projects/nfsv4.1-client/sys/contrib/ngatm/netnatm/msg/uni_ie.c
  projects/nfsv4.1-client/sys/contrib/pf/net/if_pfsync.c
  projects/nfsv4.1-client/sys/ddb/db_command.c
  projects/nfsv4.1-client/sys/ddb/db_ps.c
  projects/nfsv4.1-client/sys/ddb/db_thread.c
  projects/nfsv4.1-client/sys/ddb/ddb.h
  projects/nfsv4.1-client/sys/dev/aic7xxx/aicasm/aicasm_macro_scan.l
  projects/nfsv4.1-client/sys/dev/aic7xxx/aicasm/aicasm_scan.l
  projects/nfsv4.1-client/sys/dev/an/if_an.c
  projects/nfsv4.1-client/sys/dev/ata/ata-pci.h
  projects/nfsv4.1-client/sys/dev/ata/chipsets/ata-intel.c
  projects/nfsv4.1-client/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c
  projects/nfsv4.1-client/sys/dev/ath/ath_hal/ar5416/ar2133.c
  projects/nfsv4.1-client/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
  projects/nfsv4.1-client/sys/dev/ath/ath_hal/ar5416/ar5416_gpio.c
  projects/nfsv4.1-client/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
  projects/nfsv4.1-client/sys/dev/ath/ath_hal/ar5416/ar5416reg.h
  projects/nfsv4.1-client/sys/dev/ath/ath_hal/ar9002/ar9280.c
  projects/nfsv4.1-client/sys/dev/ath/ath_hal/ar9002/ar9285.c
  projects/nfsv4.1-client/sys/dev/ath/ath_hal/ar9002/ar9287.c
  projects/nfsv4.1-client/sys/dev/ath/ath_hal/ar9002/ar9287.h
  projects/nfsv4.1-client/sys/dev/ath/if_ath.c
  projects/nfsv4.1-client/sys/dev/bce/if_bce.c
  projects/nfsv4.1-client/sys/dev/bce/if_bcereg.h
  projects/nfsv4.1-client/sys/dev/bge/if_bge.c
  projects/nfsv4.1-client/sys/dev/bge/if_bgereg.h
  projects/nfsv4.1-client/sys/dev/bwi/if_bwi.c
  projects/nfsv4.1-client/sys/dev/bwn/if_bwn.c
  projects/nfsv4.1-client/sys/dev/bwn/if_bwnvar.h
  projects/nfsv4.1-client/sys/dev/bxe/bxe_reg.h
  projects/nfsv4.1-client/sys/dev/cfe/cfe_console.c
  projects/nfsv4.1-client/sys/dev/cm/smc90cx6.c
  projects/nfsv4.1-client/sys/dev/cpuctl/cpuctl.c
  projects/nfsv4.1-client/sys/dev/cxgb/common/cxgb_aq100x.c
  projects/nfsv4.1-client/sys/dev/cxgbe/adapter.h
  projects/nfsv4.1-client/sys/dev/cxgbe/common/common.h
  projects/nfsv4.1-client/sys/dev/cxgbe/common/t4_hw.c
  projects/nfsv4.1-client/sys/dev/cxgbe/common/t4_hw.h
  projects/nfsv4.1-client/sys/dev/cxgbe/offload.h
  projects/nfsv4.1-client/sys/dev/cxgbe/osdep.h
  projects/nfsv4.1-client/sys/dev/cxgbe/t4_ioctl.h
  projects/nfsv4.1-client/sys/dev/cxgbe/t4_l2t.c
  projects/nfsv4.1-client/sys/dev/cxgbe/t4_l2t.h
  projects/nfsv4.1-client/sys/dev/cxgbe/t4_main.c
  projects/nfsv4.1-client/sys/dev/cxgbe/t4_sge.c
  projects/nfsv4.1-client/sys/dev/dcons/dcons_os.c
  projects/nfsv4.1-client/sys/dev/de/if_de.c
  projects/nfsv4.1-client/sys/dev/drm/i915_drv.h
  projects/nfsv4.1-client/sys/dev/drm/mga_drv.h
  projects/nfsv4.1-client/sys/dev/e1000/e1000_80003es2lan.c
  projects/nfsv4.1-client/sys/dev/e1000/e1000_80003es2lan.h
  projects/nfsv4.1-client/sys/dev/e1000/e1000_82540.c
  projects/nfsv4.1-client/sys/dev/e1000/e1000_82541.c
  projects/nfsv4.1-client/sys/dev/e1000/e1000_82543.c
  projects/nfsv4.1-client/sys/dev/e1000/e1000_82571.c
  projects/nfsv4.1-client/sys/dev/e1000/e1000_82575.c
  projects/nfsv4.1-client/sys/dev/e1000/e1000_82575.h
  projects/nfsv4.1-client/sys/dev/e1000/e1000_api.c
  projects/nfsv4.1-client/sys/dev/e1000/e1000_api.h
  projects/nfsv4.1-client/sys/dev/e1000/e1000_defines.h
  projects/nfsv4.1-client/sys/dev/e1000/e1000_hw.h
  projects/nfsv4.1-client/sys/dev/e1000/e1000_ich8lan.c
  projects/nfsv4.1-client/sys/dev/e1000/e1000_ich8lan.h
  projects/nfsv4.1-client/sys/dev/e1000/e1000_mac.c
  projects/nfsv4.1-client/sys/dev/e1000/e1000_nvm.c
  projects/nfsv4.1-client/sys/dev/e1000/e1000_nvm.h
  projects/nfsv4.1-client/sys/dev/e1000/e1000_osdep.h
  projects/nfsv4.1-client/sys/dev/e1000/e1000_phy.c
  projects/nfsv4.1-client/sys/dev/e1000/e1000_phy.h
  projects/nfsv4.1-client/sys/dev/e1000/e1000_regs.h
  projects/nfsv4.1-client/sys/dev/e1000/e1000_vf.c
  projects/nfsv4.1-client/sys/dev/e1000/if_em.c
  projects/nfsv4.1-client/sys/dev/e1000/if_em.h
  projects/nfsv4.1-client/sys/dev/e1000/if_igb.c
  projects/nfsv4.1-client/sys/dev/e1000/if_igb.h
  projects/nfsv4.1-client/sys/dev/e1000/if_lem.c
  projects/nfsv4.1-client/sys/dev/e1000/if_lem.h
  projects/nfsv4.1-client/sys/dev/esp/ncr53c9x.c
  projects/nfsv4.1-client/sys/dev/fdc/fdc.c
  projects/nfsv4.1-client/sys/dev/fxp/if_fxp.c
  projects/nfsv4.1-client/sys/dev/gpio/gpioiic.c
  projects/nfsv4.1-client/sys/dev/hwpmc/hwpmc_core.c
  projects/nfsv4.1-client/sys/dev/hwpmc/hwpmc_powerpc.c
  projects/nfsv4.1-client/sys/dev/hwpmc/pmc_events.h
  projects/nfsv4.1-client/sys/dev/if_ndis/if_ndis.c
  projects/nfsv4.1-client/sys/dev/iicbus/iicbb.c
  projects/nfsv4.1-client/sys/dev/ipw/if_ipw.c
  projects/nfsv4.1-client/sys/dev/isp/isp_freebsd.c
  projects/nfsv4.1-client/sys/dev/iwi/if_iwi.c
  projects/nfsv4.1-client/sys/dev/iwn/if_iwn.c
  projects/nfsv4.1-client/sys/dev/ixgbe/ixgbe.c
  projects/nfsv4.1-client/sys/dev/ixgbe/ixgbe_osdep.h
  projects/nfsv4.1-client/sys/dev/ixgbe/ixv.c
  projects/nfsv4.1-client/sys/dev/malo/if_malo.c
  projects/nfsv4.1-client/sys/dev/md/md.c
  projects/nfsv4.1-client/sys/dev/msk/if_msk.c
  projects/nfsv4.1-client/sys/dev/mwl/if_mwl.c
  projects/nfsv4.1-client/sys/dev/netmap/if_em_netmap.h
  projects/nfsv4.1-client/sys/dev/netmap/if_igb_netmap.h
  projects/nfsv4.1-client/sys/dev/netmap/ixgbe_netmap.h
  projects/nfsv4.1-client/sys/dev/netmap/netmap.c
  projects/nfsv4.1-client/sys/dev/netmap/netmap_kern.h
  projects/nfsv4.1-client/sys/dev/ofw/ofw_console.c
  projects/nfsv4.1-client/sys/dev/pccard/pccardvar.h
  projects/nfsv4.1-client/sys/dev/pci/isa_pci.c
  projects/nfsv4.1-client/sys/dev/ral/rt2560.c
  projects/nfsv4.1-client/sys/dev/ral/rt2661.c
  projects/nfsv4.1-client/sys/dev/sio/sio.c
  projects/nfsv4.1-client/sys/dev/sound/pci/hda/hdac.c
  projects/nfsv4.1-client/sys/dev/sound/usb/uaudio.c
  projects/nfsv4.1-client/sys/dev/sound/usb/uaudio.h
  projects/nfsv4.1-client/sys/dev/speaker/spkr.c
  projects/nfsv4.1-client/sys/dev/spibus/spibusvar.h
  projects/nfsv4.1-client/sys/dev/syscons/syscons.c
  projects/nfsv4.1-client/sys/dev/syscons/syscons.h
  projects/nfsv4.1-client/sys/dev/ti/if_ti.c
  projects/nfsv4.1-client/sys/dev/twa/tw_osl.h
  projects/nfsv4.1-client/sys/dev/tws/tws.h
  projects/nfsv4.1-client/sys/dev/uart/uart_subr.c
  projects/nfsv4.1-client/sys/dev/uart/uart_tty.c
  projects/nfsv4.1-client/sys/dev/usb/controller/at91dci.c
  projects/nfsv4.1-client/sys/dev/usb/controller/at91dci.h
  projects/nfsv4.1-client/sys/dev/usb/controller/at91dci_atmelarm.c
  projects/nfsv4.1-client/sys/dev/usb/controller/atmegadci.c
  projects/nfsv4.1-client/sys/dev/usb/controller/atmegadci.h
  projects/nfsv4.1-client/sys/dev/usb/controller/atmegadci_atmelarm.c
  projects/nfsv4.1-client/sys/dev/usb/controller/avr32dci.c
  projects/nfsv4.1-client/sys/dev/usb/controller/avr32dci.h
  projects/nfsv4.1-client/sys/dev/usb/controller/ehci.c
  projects/nfsv4.1-client/sys/dev/usb/controller/ehci.h
  projects/nfsv4.1-client/sys/dev/usb/controller/ehci_ixp4xx.c
  projects/nfsv4.1-client/sys/dev/usb/controller/ehci_mv.c
  projects/nfsv4.1-client/sys/dev/usb/controller/ehci_pci.c
  projects/nfsv4.1-client/sys/dev/usb/controller/musb_otg.c
  projects/nfsv4.1-client/sys/dev/usb/controller/musb_otg.h
  projects/nfsv4.1-client/sys/dev/usb/controller/musb_otg_atmelarm.c
  projects/nfsv4.1-client/sys/dev/usb/controller/ohci.c
  projects/nfsv4.1-client/sys/dev/usb/controller/ohci.h
  projects/nfsv4.1-client/sys/dev/usb/controller/ohci_atmelarm.c
  projects/nfsv4.1-client/sys/dev/usb/controller/ohci_pci.c
  projects/nfsv4.1-client/sys/dev/usb/controller/ohci_s3c24x0.c
  projects/nfsv4.1-client/sys/dev/usb/controller/uhci.c
  projects/nfsv4.1-client/sys/dev/usb/controller/uhci.h
  projects/nfsv4.1-client/sys/dev/usb/controller/uhci_pci.c
  projects/nfsv4.1-client/sys/dev/usb/controller/usb_controller.c
  projects/nfsv4.1-client/sys/dev/usb/controller/uss820dci.c
  projects/nfsv4.1-client/sys/dev/usb/controller/uss820dci.h
  projects/nfsv4.1-client/sys/dev/usb/controller/uss820dci_atmelarm.c
  projects/nfsv4.1-client/sys/dev/usb/controller/xhci_pci.c
  projects/nfsv4.1-client/sys/dev/usb/controller/xhcireg.h
  projects/nfsv4.1-client/sys/dev/usb/input/ukbd.c
  projects/nfsv4.1-client/sys/dev/usb/net/if_axe.c
  projects/nfsv4.1-client/sys/dev/usb/serial/usb_serial.c
  projects/nfsv4.1-client/sys/dev/usb/usb_bus.h
  projects/nfsv4.1-client/sys/dev/usb/usb_controller.h
  projects/nfsv4.1-client/sys/dev/usb/usb_hub.c
  projects/nfsv4.1-client/sys/dev/usb/usb_if.m
  projects/nfsv4.1-client/sys/dev/usb/usb_transfer.c
  projects/nfsv4.1-client/sys/dev/usb/usbdevs
  projects/nfsv4.1-client/sys/dev/usb/wlan/if_rum.c
  projects/nfsv4.1-client/sys/dev/usb/wlan/if_run.c
  projects/nfsv4.1-client/sys/dev/usb/wlan/if_uath.c
  projects/nfsv4.1-client/sys/dev/usb/wlan/if_upgt.c
  projects/nfsv4.1-client/sys/dev/usb/wlan/if_ural.c
  projects/nfsv4.1-client/sys/dev/usb/wlan/if_urtw.c
  projects/nfsv4.1-client/sys/dev/usb/wlan/if_zyd.c
  projects/nfsv4.1-client/sys/dev/vxge/vxge-osdep.h
  projects/nfsv4.1-client/sys/dev/wi/if_wi.c
  projects/nfsv4.1-client/sys/dev/wpi/if_wpi.c
  projects/nfsv4.1-client/sys/dev/xen/console/console.c
  projects/nfsv4.1-client/sys/dev/xen/netback/netback.c
  projects/nfsv4.1-client/sys/fs/ext2fs/ext2_alloc.c
  projects/nfsv4.1-client/sys/fs/ext2fs/ext2_balloc.c
  projects/nfsv4.1-client/sys/fs/ext2fs/ext2_bmap.c
  projects/nfsv4.1-client/sys/fs/ext2fs/ext2_extern.h
  projects/nfsv4.1-client/sys/fs/ext2fs/ext2_inode.c
  projects/nfsv4.1-client/sys/fs/ext2fs/ext2_lookup.c
  projects/nfsv4.1-client/sys/fs/ext2fs/ext2_subr.c
  projects/nfsv4.1-client/sys/fs/ext2fs/ext2_vfsops.c
  projects/nfsv4.1-client/sys/fs/ext2fs/ext2_vnops.c
  projects/nfsv4.1-client/sys/fs/ext2fs/ext2fs.h
  projects/nfsv4.1-client/sys/fs/ext2fs/fs.h
  projects/nfsv4.1-client/sys/fs/msdosfs/msdosfs_conv.c
  projects/nfsv4.1-client/sys/fs/nfs/nfs_commonkrpc.c
  projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c
  projects/nfsv4.1-client/sys/fs/nfsserver/nfs_nfsdport.c
  projects/nfsv4.1-client/sys/fs/ntfs/ntfs_subr.c
  projects/nfsv4.1-client/sys/fs/ntfs/ntfs_subr.h
  projects/nfsv4.1-client/sys/fs/ntfs/ntfs_vnops.c
  projects/nfsv4.1-client/sys/gdb/gdb_cons.c
  projects/nfsv4.1-client/sys/geom/eli/g_eli.c
  projects/nfsv4.1-client/sys/i386/conf/NOTES
  projects/nfsv4.1-client/sys/i386/i386/locore.s
  projects/nfsv4.1-client/sys/i386/i386/mp_machdep.c
  projects/nfsv4.1-client/sys/i386/i386/pmap.c
  projects/nfsv4.1-client/sys/i386/include/_types.h
  projects/nfsv4.1-client/sys/i386/include/vmparam.h
  projects/nfsv4.1-client/sys/i386/xen/mp_machdep.c
  projects/nfsv4.1-client/sys/i386/xen/pmap.c
  projects/nfsv4.1-client/sys/ia64/ia64/ssc.c
  projects/nfsv4.1-client/sys/ia64/ia64/uma_machdep.c
  projects/nfsv4.1-client/sys/ia64/include/_types.h
  projects/nfsv4.1-client/sys/kern/kern_conf.c
  projects/nfsv4.1-client/sys/kern/kern_cons.c
  projects/nfsv4.1-client/sys/kern/kern_lock.c
  projects/nfsv4.1-client/sys/kern/kern_mutex.c
  projects/nfsv4.1-client/sys/kern/kern_ntptime.c
  projects/nfsv4.1-client/sys/kern/kern_proc.c
  projects/nfsv4.1-client/sys/kern/kern_racct.c
  projects/nfsv4.1-client/sys/kern/kern_resource.c
  projects/nfsv4.1-client/sys/kern/kern_rmlock.c
  projects/nfsv4.1-client/sys/kern/kern_rwlock.c
  projects/nfsv4.1-client/sys/kern/kern_shutdown.c
  projects/nfsv4.1-client/sys/kern/kern_sx.c
  projects/nfsv4.1-client/sys/kern/kern_synch.c
  projects/nfsv4.1-client/sys/kern/kern_tc.c
  projects/nfsv4.1-client/sys/kern/kern_thr.c
  projects/nfsv4.1-client/sys/kern/sched_ule.c
  projects/nfsv4.1-client/sys/kern/subr_kdb.c
  projects/nfsv4.1-client/sys/kern/subr_lock.c
  projects/nfsv4.1-client/sys/kern/subr_witness.c
  projects/nfsv4.1-client/sys/kern/sys_pipe.c
  projects/nfsv4.1-client/sys/kern/uipc_shm.c
  projects/nfsv4.1-client/sys/kern/uipc_sockbuf.c
  projects/nfsv4.1-client/sys/kern/vfs_cache.c
  projects/nfsv4.1-client/sys/kern/vfs_mountroot.c
  projects/nfsv4.1-client/sys/kern/vfs_subr.c
  projects/nfsv4.1-client/sys/kern/vfs_syscalls.c
  projects/nfsv4.1-client/sys/kern/vnode_if.src
  projects/nfsv4.1-client/sys/mips/adm5120/console.c
  projects/nfsv4.1-client/sys/mips/atheros/ar71xx_chip.c
  projects/nfsv4.1-client/sys/mips/atheros/ar71xx_ehci.c
  projects/nfsv4.1-client/sys/mips/atheros/ar71xx_gpio.c
  projects/nfsv4.1-client/sys/mips/atheros/ar71xx_ohci.c
  projects/nfsv4.1-client/sys/mips/atheros/ar724x_chip.c
  projects/nfsv4.1-client/sys/mips/atheros/ar91xx_chip.c
  projects/nfsv4.1-client/sys/mips/cavium/octeon_machdep.c
  projects/nfsv4.1-client/sys/mips/cavium/usb/octusb.c
  projects/nfsv4.1-client/sys/mips/cavium/usb/octusb.h
  projects/nfsv4.1-client/sys/mips/cavium/usb/octusb_octeon.c
  projects/nfsv4.1-client/sys/mips/conf/AR91XX_BASE
  projects/nfsv4.1-client/sys/mips/conf/AR91XX_BASE.hints
  projects/nfsv4.1-client/sys/mips/conf/TP-WN1043ND.hints
  projects/nfsv4.1-client/sys/mips/include/_types.h
  projects/nfsv4.1-client/sys/mips/rmi/xls_ehci.c
  projects/nfsv4.1-client/sys/mips/rt305x/rt305x_dotg.c
  projects/nfsv4.1-client/sys/modules/Makefile
  projects/nfsv4.1-client/sys/modules/aic7xxx/ahc/ahc_pci/Makefile
  projects/nfsv4.1-client/sys/modules/aic7xxx/ahd/Makefile
  projects/nfsv4.1-client/sys/modules/asr/Makefile
  projects/nfsv4.1-client/sys/modules/ath/Makefile
  projects/nfsv4.1-client/sys/modules/cxgbe/Makefile
  projects/nfsv4.1-client/sys/modules/nve/Makefile
  projects/nfsv4.1-client/sys/modules/pfsync/Makefile
  projects/nfsv4.1-client/sys/modules/splash/Makefile
  projects/nfsv4.1-client/sys/modules/usb/Makefile
  projects/nfsv4.1-client/sys/net/if.c
  projects/nfsv4.1-client/sys/net/if.h
  projects/nfsv4.1-client/sys/net/if_ethersubr.c
  projects/nfsv4.1-client/sys/net/if_types.h
  projects/nfsv4.1-client/sys/net/if_var.h
  projects/nfsv4.1-client/sys/net/route.c
  projects/nfsv4.1-client/sys/net/rtsock.c
  projects/nfsv4.1-client/sys/net80211/ieee80211.c
  projects/nfsv4.1-client/sys/net80211/ieee80211_acl.c
  projects/nfsv4.1-client/sys/net80211/ieee80211_hostap.c
  projects/nfsv4.1-client/sys/net80211/ieee80211_ht.c
  projects/nfsv4.1-client/sys/net80211/ieee80211_ioctl.c
  projects/nfsv4.1-client/sys/net80211/ieee80211_mesh.c
  projects/nfsv4.1-client/sys/net80211/ieee80211_proto.h
  projects/nfsv4.1-client/sys/net80211/ieee80211_var.h
  projects/nfsv4.1-client/sys/netinet/if_ether.c
  projects/nfsv4.1-client/sys/netinet/if_ether.h
  projects/nfsv4.1-client/sys/netinet/in.c
  projects/nfsv4.1-client/sys/netinet/in_var.h
  projects/nfsv4.1-client/sys/netinet/ip_carp.c
  projects/nfsv4.1-client/sys/netinet/ip_carp.h
  projects/nfsv4.1-client/sys/netinet/sctp.h
  projects/nfsv4.1-client/sys/netinet/sctp_asconf.c
  projects/nfsv4.1-client/sys/netinet/sctp_asconf.h
  projects/nfsv4.1-client/sys/netinet/sctp_auth.c
  projects/nfsv4.1-client/sys/netinet/sctp_auth.h
  projects/nfsv4.1-client/sys/netinet/sctp_bsd_addr.c
  projects/nfsv4.1-client/sys/netinet/sctp_bsd_addr.h
  projects/nfsv4.1-client/sys/netinet/sctp_cc_functions.c
  projects/nfsv4.1-client/sys/netinet/sctp_constants.h
  projects/nfsv4.1-client/sys/netinet/sctp_crc32.h
  projects/nfsv4.1-client/sys/netinet/sctp_dtrace_declare.h
  projects/nfsv4.1-client/sys/netinet/sctp_dtrace_define.h
  projects/nfsv4.1-client/sys/netinet/sctp_header.h
  projects/nfsv4.1-client/sys/netinet/sctp_indata.c
  projects/nfsv4.1-client/sys/netinet/sctp_indata.h
  projects/nfsv4.1-client/sys/netinet/sctp_input.c
  projects/nfsv4.1-client/sys/netinet/sctp_input.h
  projects/nfsv4.1-client/sys/netinet/sctp_os.h
  projects/nfsv4.1-client/sys/netinet/sctp_output.c
  projects/nfsv4.1-client/sys/netinet/sctp_output.h
  projects/nfsv4.1-client/sys/netinet/sctp_pcb.c
  projects/nfsv4.1-client/sys/netinet/sctp_pcb.h
  projects/nfsv4.1-client/sys/netinet/sctp_peeloff.c
  projects/nfsv4.1-client/sys/netinet/sctp_peeloff.h
  projects/nfsv4.1-client/sys/netinet/sctp_ss_functions.c
  projects/nfsv4.1-client/sys/netinet/sctp_structs.h
  projects/nfsv4.1-client/sys/netinet/sctp_sysctl.c
  projects/nfsv4.1-client/sys/netinet/sctp_sysctl.h
  projects/nfsv4.1-client/sys/netinet/sctp_timer.c
  projects/nfsv4.1-client/sys/netinet/sctp_timer.h
  projects/nfsv4.1-client/sys/netinet/sctp_uio.h
  projects/nfsv4.1-client/sys/netinet/sctp_usrreq.c
  projects/nfsv4.1-client/sys/netinet/sctp_var.h
  projects/nfsv4.1-client/sys/netinet/sctputil.c
  projects/nfsv4.1-client/sys/netinet/sctputil.h
  projects/nfsv4.1-client/sys/netinet6/icmp6.c
  projects/nfsv4.1-client/sys/netinet6/in6.c
  projects/nfsv4.1-client/sys/netinet6/in6_ifattach.c
  projects/nfsv4.1-client/sys/netinet6/in6_proto.c
  projects/nfsv4.1-client/sys/netinet6/in6_var.h
  projects/nfsv4.1-client/sys/netinet6/ip6_mroute.c
  projects/nfsv4.1-client/sys/netinet6/nd6.c
  projects/nfsv4.1-client/sys/netinet6/nd6_nbr.c
  projects/nfsv4.1-client/sys/netinet6/sctp6_usrreq.c
  projects/nfsv4.1-client/sys/netinet6/sctp6_var.h
  projects/nfsv4.1-client/sys/nfs/bootp_subr.c
  projects/nfsv4.1-client/sys/nfsclient/nfs_krpc.c
  projects/nfsv4.1-client/sys/nfsserver/nfs_serv.c
  projects/nfsv4.1-client/sys/ofed/include/asm/types.h
  projects/nfsv4.1-client/sys/ofed/include/linux/types.h
  projects/nfsv4.1-client/sys/pc98/cbus/scterm-sck.c
  projects/nfsv4.1-client/sys/pc98/cbus/scvtb.c
  projects/nfsv4.1-client/sys/pc98/cbus/sio.c
  projects/nfsv4.1-client/sys/powerpc/aim/locore32.S
  projects/nfsv4.1-client/sys/powerpc/aim/machdep.c
  projects/nfsv4.1-client/sys/powerpc/aim/mmu_oea.c
  projects/nfsv4.1-client/sys/powerpc/aim/mmu_oea64.c
  projects/nfsv4.1-client/sys/powerpc/aim/trap.c
  projects/nfsv4.1-client/sys/powerpc/aim/uma_machdep.c
  projects/nfsv4.1-client/sys/powerpc/include/_types.h
  projects/nfsv4.1-client/sys/powerpc/include/pmap.h
  projects/nfsv4.1-client/sys/powerpc/include/pmc_mdep.h
  projects/nfsv4.1-client/sys/powerpc/include/spr.h
  projects/nfsv4.1-client/sys/powerpc/include/vmparam.h
  projects/nfsv4.1-client/sys/powerpc/mambo/mambo_console.c
  projects/nfsv4.1-client/sys/powerpc/ps3/ehci_ps3.c
  projects/nfsv4.1-client/sys/powerpc/ps3/ohci_ps3.c
  projects/nfsv4.1-client/sys/powerpc/ps3/ps3-hv-asm.awk
  projects/nfsv4.1-client/sys/powerpc/ps3/ps3-hvcall.S
  projects/nfsv4.1-client/sys/powerpc/ps3/ps3-hvcall.h
  projects/nfsv4.1-client/sys/powerpc/ps3/ps3-hvcall.master
  projects/nfsv4.1-client/sys/powerpc/ps3/ps3_syscons.c
  projects/nfsv4.1-client/sys/security/mac/mac_framework.c
  projects/nfsv4.1-client/sys/sparc64/include/_types.h
  projects/nfsv4.1-client/sys/sparc64/sparc64/vm_machdep.c
  projects/nfsv4.1-client/sys/sys/cdefs.h
  projects/nfsv4.1-client/sys/sys/cons.h
  projects/nfsv4.1-client/sys/sys/elf_common.h
  projects/nfsv4.1-client/sys/sys/libkern.h
  projects/nfsv4.1-client/sys/sys/mman.h
  projects/nfsv4.1-client/sys/sys/mutex.h
  projects/nfsv4.1-client/sys/sys/param.h
  projects/nfsv4.1-client/sys/sys/pmc.h
  projects/nfsv4.1-client/sys/sys/proc.h
  projects/nfsv4.1-client/sys/sys/sockio.h
  projects/nfsv4.1-client/sys/sys/stdint.h
  projects/nfsv4.1-client/sys/sys/systm.h
  projects/nfsv4.1-client/sys/sys/taskqueue.h
  projects/nfsv4.1-client/sys/sys/timeffc.h
  projects/nfsv4.1-client/sys/sys/types.h
  projects/nfsv4.1-client/sys/sys/vnode.h
  projects/nfsv4.1-client/sys/vm/swap_pager.c
  projects/nfsv4.1-client/sys/vm/vm_glue.c
  projects/nfsv4.1-client/sys/vm/vm_meter.c
  projects/nfsv4.1-client/sys/vm/vm_object.c
  projects/nfsv4.1-client/sys/xen/xenstore/xenstore.c
Directory Properties:
  projects/nfsv4.1-client/sys/   (props changed)
  projects/nfsv4.1-client/sys/conf/   (props changed)
  projects/nfsv4.1-client/sys/contrib/dev/acpica/   (props changed)

Modified: projects/nfsv4.1-client/sys/amd64/conf/NOTES
==============================================================================
--- projects/nfsv4.1-client/sys/amd64/conf/NOTES	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/amd64/conf/NOTES	Mon Dec 26 00:10:42 2011	(r228884)
@@ -455,9 +455,11 @@ device		tpm
 #
 # ichwd: Intel ICH watchdog timer
 # amdsbwd: AMD SB7xx watchdog timer
+# viawd: VIA south bridge watchdog timer
 #
 device		ichwd
 device		amdsbwd
+device		viawd
 
 #
 # Temperature sensors:

Modified: projects/nfsv4.1-client/sys/amd64/include/_types.h
==============================================================================
--- projects/nfsv4.1-client/sys/amd64/include/_types.h	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/amd64/include/_types.h	Mon Dec 26 00:10:42 2011	(r228884)
@@ -48,7 +48,7 @@
 /*
  * Basic types upon which most other types are built.
  */
-typedef	__signed char		__int8_t;
+typedef	signed char		__int8_t;
 typedef	unsigned char		__uint8_t;
 typedef	short			__int16_t;
 typedef	unsigned short		__uint16_t;

Modified: projects/nfsv4.1-client/sys/arm/arm/irq_dispatch.S
==============================================================================
--- projects/nfsv4.1-client/sys/arm/arm/irq_dispatch.S	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/arm/arm/irq_dispatch.S	Mon Dec 26 00:10:42 2011	(r228884)
@@ -98,10 +98,9 @@ ASENTRY_NP(irq_entry)
 	PULLFRAMEFROMSVCANDEXIT
 	movs	pc, lr			/* Exit */
 
-	.bss
+	.data
 	.align	0
 
-
 	.global _C_LABEL(intrnames), _C_LABEL(sintrnames)
 	.global _C_LABEL(intrcnt), _C_LABEL(sintrcnt)
 _C_LABEL(intrnames): 

Modified: projects/nfsv4.1-client/sys/arm/arm/pmap.c
==============================================================================
--- projects/nfsv4.1-client/sys/arm/arm/pmap.c	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/arm/arm/pmap.c	Mon Dec 26 00:10:42 2011	(r228884)
@@ -4039,6 +4039,7 @@ pmap_zero_page_generic(vm_paddr_t phys, 
 	 * order to work without corruption when write-allocate is enabled.
 	 */
 	*cdst_pte = L2_S_PROTO | phys | L2_S_PROT(PTE_KERNEL, VM_PROT_WRITE);
+	PTE_SYNC(cdst_pte);
 	cpu_tlb_flushD_SE(cdstp);
 	cpu_cpwait();
 	if (off || size != PAGE_SIZE)

Modified: projects/nfsv4.1-client/sys/arm/arm/vm_machdep.c
==============================================================================
--- projects/nfsv4.1-client/sys/arm/arm/vm_machdep.c	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/arm/arm/vm_machdep.c	Mon Dec 26 00:10:42 2011	(r228884)
@@ -617,7 +617,6 @@ uma_small_alloc(uma_zone_t zone, int byt
 	void *ret;
 	struct arm_small_page *sp;
 	TAILQ_HEAD(,arm_small_page) *head;
-	static vm_pindex_t color;
 	vm_page_t m;
 
 	*flags = UMA_SLAB_PRIV;
@@ -650,8 +649,7 @@ uma_small_alloc(uma_zone_t zone, int byt
 		if (wait & M_ZERO)
 			pflags |= VM_ALLOC_ZERO;
 		for (;;) {
-			m = vm_page_alloc(NULL, color++, 
-			    pflags | VM_ALLOC_NOOBJ);
+			m = vm_page_alloc(NULL, 0, pflags | VM_ALLOC_NOOBJ);
 			if (m == NULL) {
 				if (wait & M_NOWAIT)
 					return (NULL);

Modified: projects/nfsv4.1-client/sys/arm/econa/ehci_ebus.c
==============================================================================
--- projects/nfsv4.1-client/sys/arm/econa/ehci_ebus.c	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/arm/econa/ehci_ebus.c	Mon Dec 26 00:10:42 2011	(r228884)
@@ -75,10 +75,6 @@ __FBSDID("$FreeBSD$");
 
 static device_attach_t ehci_ebus_attach;
 static device_detach_t ehci_ebus_detach;
-static device_shutdown_t ehci_ebus_shutdown;
-static device_suspend_t ehci_ebus_suspend;
-static device_resume_t ehci_ebus_resume;
-
 
 static void *ih_err;
 
@@ -86,45 +82,6 @@ static void *ih_err;
 #define	USB_BRIDGE_INTR_MASK   0x214
 
 static int
-ehci_ebus_suspend(device_t self)
-{
-	ehci_softc_t *sc = device_get_softc(self);
-	int err;
-
-	err = bus_generic_suspend(self);
-	if (err)
-		return (err);
-	ehci_suspend(sc);
-	return (0);
-}
-
-static int
-ehci_ebus_resume(device_t self)
-{
-	ehci_softc_t *sc = device_get_softc(self);
-
-	ehci_resume(sc);
-
-	bus_generic_resume(self);
-
-	return (0);
-}
-
-static int
-ehci_ebus_shutdown(device_t self)
-{
-	ehci_softc_t *sc = device_get_softc(self);
-	int err;
-
-	err = bus_generic_shutdown(self);
-	if (err)
-		return (err);
-	ehci_shutdown(sc);
-
-	return (0);
-}
-
-static int
 ehci_ebus_probe(device_t self)
 {
 
@@ -277,17 +234,17 @@ static device_method_t ehci_methods[] = 
 	DEVMETHOD(device_probe, ehci_ebus_probe),
 	DEVMETHOD(device_attach, ehci_ebus_attach),
 	DEVMETHOD(device_detach, ehci_ebus_detach),
-	DEVMETHOD(device_suspend, ehci_ebus_suspend),
-	DEVMETHOD(device_resume, ehci_ebus_resume),
-	DEVMETHOD(device_shutdown, ehci_ebus_shutdown),
+	DEVMETHOD(device_suspend, bus_generic_suspend),
+	DEVMETHOD(device_resume, bus_generic_resume),
+	DEVMETHOD(device_shutdown, bus_generic_shutdown),
 
 	DEVMETHOD_END
 };
 
 static driver_t ehci_driver = {
-	"ehci",
-	ehci_methods,
-	sizeof(ehci_softc_t),
+	.name = "ehci",
+	.methods = ehci_methods,
+	.size = sizeof(ehci_softc_t),
 };
 
 static devclass_t ehci_devclass;

Modified: projects/nfsv4.1-client/sys/arm/econa/ohci_ec.c
==============================================================================
--- projects/nfsv4.1-client/sys/arm/econa/ohci_ec.c	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/arm/econa/ohci_ec.c	Mon Dec 26 00:10:42 2011	(r228884)
@@ -220,15 +220,17 @@ static device_method_t ohci_methods[] = 
 	DEVMETHOD(device_probe, ohci_ec_probe),
 	DEVMETHOD(device_attach, ohci_ec_attach),
 	DEVMETHOD(device_detach, ohci_ec_detach),
+	DEVMETHOD(device_resume, bus_generic_resume),
+	DEVMETHOD(device_suspend, bus_generic_suspend),
 	DEVMETHOD(device_shutdown, bus_generic_shutdown),
 
 	DEVMETHOD_END
 };
 
 static driver_t ohci_driver = {
-	"ohci",
-	ohci_methods,
-	sizeof(struct ec_ohci_softc),
+	.name = "ohci",
+	.methods = ohci_methods,
+	.size = sizeof(struct ec_ohci_softc),
 };
 
 static devclass_t ohci_devclass;

Modified: projects/nfsv4.1-client/sys/arm/include/_types.h
==============================================================================
--- projects/nfsv4.1-client/sys/arm/include/_types.h	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/arm/include/_types.h	Mon Dec 26 00:10:42 2011	(r228884)
@@ -46,7 +46,7 @@
 /*
  * Basic types upon which most other types are built.
  */
-typedef	__signed char		__int8_t;
+typedef	signed char		__int8_t;
 typedef	unsigned char		__uint8_t;
 typedef	short			__int16_t;
 typedef	unsigned short		__uint16_t;

Modified: projects/nfsv4.1-client/sys/arm/include/pmap.h
==============================================================================
--- projects/nfsv4.1-client/sys/arm/include/pmap.h	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/arm/include/pmap.h	Mon Dec 26 00:10:42 2011	(r228884)
@@ -382,7 +382,8 @@ do {									\
 	if (PMAP_NEEDS_PTE_SYNC) {					\
 		cpu_dcache_wb_range((vm_offset_t)(pte), sizeof(pt_entry_t));\
 		cpu_l2cache_wb_range((vm_offset_t)(pte), sizeof(pt_entry_t));\
-	}\
+	} else								\
+		cpu_drain_writebuf();					\
 } while (/*CONSTCOND*/0)
 
 #define	PTE_SYNC_RANGE(pte, cnt)					\
@@ -392,7 +393,8 @@ do {									\
 		    (cnt) << 2); /* * sizeof(pt_entry_t) */		\
 		cpu_l2cache_wb_range((vm_offset_t)(pte), 		\
 		    (cnt) << 2); /* * sizeof(pt_entry_t) */		\
-	}								\
+	} else								\
+		cpu_drain_writebuf();					\
 } while (/*CONSTCOND*/0)
 
 extern pt_entry_t		pte_l1_s_cache_mode;

Modified: projects/nfsv4.1-client/sys/boot/arm/at91/libat91/sd-card.c
==============================================================================
--- projects/nfsv4.1-client/sys/boot/arm/at91/libat91/sd-card.c	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/boot/arm/at91/libat91/sd-card.c	Mon Dec 26 00:10:42 2011	(r228884)
@@ -94,14 +94,14 @@ MCIDeviceWaitReady(unsigned int timeout)
 	}	// End of if AT91C_MCI_RXBUFF
 }
 
-inline static unsigned int
+static inline unsigned int
 swap(unsigned int a)
 {
     return (((a & 0xff) << 24) | ((a & 0xff00) << 8) | ((a & 0xff0000) >> 8)
       | ((a & 0xff000000) >> 24));
 }
 
-inline static void
+static inline void
 wait_ready()
 {
 	int status;

Modified: projects/nfsv4.1-client/sys/boot/forth/loader.conf
==============================================================================
--- projects/nfsv4.1-client/sys/boot/forth/loader.conf	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/boot/forth/loader.conf	Mon Dec 26 00:10:42 2011	(r228884)
@@ -260,6 +260,7 @@ pf_load="NO"			# packet filter
 
 bridgestp_load="NO"		# if_bridge(4) support
 miibus_load="NO"		# miibus support, needed for some drivers
+carp_load="NO"			# carp(4) protocol
 if_ae_load="NO"			# Attansic/Atheros L2 FastEthernet
 if_age_load="NO"		# Attansic/Atheros L1 Gigabit Ethernet
 if_alc_load="NO"		# Atheros AR8131/AR8132 Ethernet
@@ -275,7 +276,6 @@ if_bridge_load="NO"		# if_bridge(4) devi
 if_bwi_load="NO"		# Broadcom BCM53xx IEEE 802.11b/g wireness NICs
 if_bwn_load="NO"		# Broadcom BCM43xx IEEE 802.11 wireless NICs
 if_bxe_load="NO"		# Broadcom NetXtreme II 10Gb Ethernet
-if_carp_load="NO"		# carp(4) devices
 if_cas_load="NO"		# Sun Cassini/Cassini+ and NS DP83065 Saturn
 if_cm_load="NO"			# SMC (90c26, 90c56, 90c66)
 if_cs_load="NO"			# Crystal Semiconductor CS8920

Modified: projects/nfsv4.1-client/sys/boot/i386/boot0/boot0.S
==============================================================================
--- projects/nfsv4.1-client/sys/boot/i386/boot0/boot0.S	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/boot/i386/boot0/boot0.S	Mon Dec 26 00:10:42 2011	(r228884)
@@ -413,6 +413,7 @@ got_key:
 	3:
 #endif /* ONLY_F_KEYS */
 #endif /* SIO */
+check_selection:
 		cmpb $0x5,%al			# F1..F6 or 1..6 ?
 #ifdef PXE /* enable PXE/INT18 using F6 */
 		jne 1f;
@@ -421,7 +422,6 @@ got_key:
 #endif /* PXE */
 		jae beep			# Not in F1..F5, beep
 
-check_selection:
 	/*
 	 * We have a selection.  If it's a bad selection go back to complain.
 	 * The bits in MNUOPT were set when the options were printed.

Modified: projects/nfsv4.1-client/sys/boot/i386/libi386/time.c
==============================================================================
--- projects/nfsv4.1-client/sys/boot/i386/libi386/time.c	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/boot/i386/libi386/time.c	Mon Dec 26 00:10:42 2011	(r228884)
@@ -62,7 +62,7 @@ bios_seconds(void)
  * Some BIOSes (notably qemu) don't correctly read the RTC
  * registers in an atomic way, sometimes returning bogus values.
  * Therefore we "debounce" the reading by accepting it only when
- * we got two identical values in succession.
+ * we got 8 identical values in succession.
  *
  * If we pass midnight, don't wrap back to 0.
  */
@@ -71,14 +71,16 @@ time(time_t *t)
 {
     static time_t lasttime;
     time_t now, check;
-    int try;
+    int same, try;
 
-    try = 0;
+    same = try = 0;
     check = bios_seconds();
     do {
 	now = check;
 	check = bios_seconds();
-    } while (now != check && ++try < 1000);
+	if (check != now)
+	    same = 0;
+    } while (++same < 8 && ++try < 1000);
 
     if (now < lasttime)
 	now += 24 * 3600;

Modified: projects/nfsv4.1-client/sys/cam/ata/ata_da.c
==============================================================================
--- projects/nfsv4.1-client/sys/cam/ata/ata_da.c	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/cam/ata/ata_da.c	Mon Dec 26 00:10:42 2011	(r228884)
@@ -165,6 +165,11 @@ static struct ada_quirk_entry ada_quirk_
 	},
 	{
 		/* Samsung Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "*", "SAMSUNG HD155UI*", "*" },
+		/*quirks*/ADA_Q_4K
+	},
+	{
+		/* Samsung Advanced Format (4k) drives */
 		{ T_DIRECT, SIP_MEDIA_FIXED, "*", "SAMSUNG HD204UI*", "*" },
 		/*quirks*/ADA_Q_4K
 	},
@@ -174,6 +179,16 @@ static struct ada_quirk_entry ada_quirk_
 		/*quirks*/ADA_Q_4K
 	},
 	{
+		/* Seagate Barracuda Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "*", "ST???DM*", "*" },
+		/*quirks*/ADA_Q_4K
+	},
+	{
+		/* Seagate Barracuda Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "*", "ST????DM*", "*" },
+		/*quirks*/ADA_Q_4K
+	},
+	{
 		/* Seagate Momentus Advanced Format (4k) drives */
 		{ T_DIRECT, SIP_MEDIA_FIXED, "*", "ST9500423AS*", "*" },
 		/*quirks*/ADA_Q_4K
@@ -185,6 +200,16 @@ static struct ada_quirk_entry ada_quirk_
 	},
 	{
 		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "*", "ST9640423AS*", "*" },
+		/*quirks*/ADA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "*", "ST9640424AS*", "*" },
+		/*quirks*/ADA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
 		{ T_DIRECT, SIP_MEDIA_FIXED, "*", "ST9750420AS*", "*" },
 		/*quirks*/ADA_Q_4K
 	},
@@ -194,6 +219,11 @@ static struct ada_quirk_entry ada_quirk_
 		/*quirks*/ADA_Q_4K
 	},
 	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "*", "ST9750423AS*", "*" },
+		/*quirks*/ADA_Q_4K
+	},
+	{
 		/* Seagate Momentus Thin Advanced Format (4k) drives */
 		{ T_DIRECT, SIP_MEDIA_FIXED, "*", "ST???LT*", "*" },
 		/*quirks*/ADA_Q_4K

Modified: projects/nfsv4.1-client/sys/cam/scsi/scsi_all.h
==============================================================================
--- projects/nfsv4.1-client/sys/cam/scsi/scsi_all.h	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/cam/scsi/scsi_all.h	Mon Dec 26 00:10:42 2011	(r228884)
@@ -932,6 +932,7 @@ struct ata_pass_16 {
 #define	WRITE_12		0xAA
 #define	WRITE_VERIFY_12		0xAE
 #define	READ_ELEMENT_STATUS	0xB8
+#define	READ_CD			0xBE
 
 /* Maintenance In Service Action Codes */
 #define	REPORT_IDENTIFYING_INFRMATION		0x05
@@ -1348,6 +1349,17 @@ struct scsi_read_capacity_data_long
 {
 	uint8_t addr[8];
 	uint8_t length[4];
+#define	SRC16_PROT_EN		0x01
+#define	SRC16_P_TYPE		0x0e
+	uint8_t prot;
+#define	SRC16_LBPPBE		0x0f
+#define	SRC16_PI_EXPONENT	0xf0
+#define	SRC16_PI_EXPONENT_SHIFT	4
+	uint8_t prot_lbppbe;
+#define	SRC16_LALBA		0x3fff
+#define	SRC16_LBPRZ		0x4000
+#define	SRC16_LBPME		0x8000
+	uint8_t lalba_lbp[2];
 };
 
 struct scsi_report_luns

Modified: projects/nfsv4.1-client/sys/cam/scsi/scsi_cd.c
==============================================================================
--- projects/nfsv4.1-client/sys/cam/scsi/scsi_cd.c	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/cam/scsi/scsi_cd.c	Mon Dec 26 00:10:42 2011	(r228884)
@@ -1483,6 +1483,14 @@ cdstart(struct cam_periph *periph, union
 					/* dxfer_len */ bp->bio_bcount,
 					/* sense_len */ SSD_FULL_SIZE,
 					/* timeout */ 30000);
+			/* Use READ CD command for audio tracks. */
+			if (softc->params.blksize == 2352) {
+				start_ccb->csio.cdb_io.cdb_bytes[0] = READ_CD;
+				start_ccb->csio.cdb_io.cdb_bytes[9] = 0xf8;
+				start_ccb->csio.cdb_io.cdb_bytes[10] = 0;
+				start_ccb->csio.cdb_io.cdb_bytes[11] = 0;
+				start_ccb->csio.cdb_len = 12;
+			}
 			start_ccb->ccb_h.ccb_state = CD_CCB_BUFFER_IO;
 
 			
@@ -2880,6 +2888,13 @@ cdcheckmedia(struct cam_periph *periph)
 
 	softc->flags |= CD_FLAG_VALID_TOC;
 
+	/* If the first track is audio, correct sector size. */
+	if ((softc->toc.entries[0].control & 4) == 0) {
+		softc->disk->d_sectorsize = softc->params.blksize = 2352;
+		softc->disk->d_mediasize =
+		    (off_t)softc->params.blksize * softc->params.disksize;
+	}
+
 bailout:
 
 	/*

Modified: projects/nfsv4.1-client/sys/cam/scsi/scsi_da.c
==============================================================================
--- projects/nfsv4.1-client/sys/cam/scsi/scsi_da.c	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/cam/scsi/scsi_da.c	Mon Dec 26 00:10:42 2011	(r228884)
@@ -82,14 +82,17 @@ typedef enum {
 	DA_FLAG_WENT_IDLE	= 0x040,
 	DA_FLAG_RETRY_UA	= 0x080,
 	DA_FLAG_OPEN		= 0x100,
-	DA_FLAG_SCTX_INIT	= 0x200
+	DA_FLAG_SCTX_INIT	= 0x200,
+	DA_FLAG_CAN_RC16	= 0x400,
+	DA_FLAG_CAN_LBPME	= 0x800
 } da_flags;
 
 typedef enum {
 	DA_Q_NONE		= 0x00,
 	DA_Q_NO_SYNC_CACHE	= 0x01,
 	DA_Q_NO_6_BYTE		= 0x02,
-	DA_Q_NO_PREVENT		= 0x04
+	DA_Q_NO_PREVENT		= 0x04,
+	DA_Q_4K			= 0x08
 } da_quirks;
 
 typedef enum {
@@ -112,6 +115,8 @@ struct disk_params {
 	u_int8_t  secs_per_track;
 	u_int32_t secsize;	/* Number of bytes/sector */
 	u_int64_t sectors;	/* total number sectors */
+	u_int     stripesize;
+	u_int     stripeoffset;
 };
 
 struct da_softc {
@@ -564,7 +569,223 @@ static struct da_quirk_entry da_quirk_ta
 		 */
 		{T_DIRECT, SIP_MEDIA_REMOVABLE, "Sony", "Sony DSC", "*"},
 		/*quirks*/ DA_Q_NO_SYNC_CACHE | DA_Q_NO_PREVENT
-	}
+	},
+	/* ATA/SATA devices over SAS/USB/... */
+	{
+		/* Hitachi Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "Hitachi", "H??????????E3*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Samsung Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "SAMSUNG HD155UI*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Samsung Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "SAMSUNG", "HD155UI*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Samsung Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "SAMSUNG HD204UI*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Samsung Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "SAMSUNG", "HD204UI*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Barracuda Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "ST????DL*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Barracuda Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ST????DL", "*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Barracuda Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "ST???DM*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Barracuda Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ST???DM*", "*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Barracuda Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "ST????DM*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Barracuda Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ST????DM", "*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "ST9500423AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ST950042", "3AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "ST9500424AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ST950042", "4AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "ST9640423AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ST964042", "3AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "ST9640424AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ST964042", "4AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "ST9750420AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ST975042", "0AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "ST9750422AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ST975042", "2AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "ST9750423AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ST975042", "3AS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Thin Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "ST???LT*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* Seagate Momentus Thin Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ST???LT*", "*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Caviar Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "WDC WD????RS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Caviar Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "WDC WD??", "??RS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Caviar Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "WDC WD????RX*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Caviar Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "WDC WD??", "??RX*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Caviar Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "WDC WD??????RS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Caviar Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "WDC WD??", "????RS*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Caviar Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "WDC WD??????RX*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Caviar Green Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "WDC WD??", "????RX*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Scorpio Black Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "WDC WD???PKT*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Scorpio Black Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "WDC WD??", "?PKT*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Scorpio Black Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "WDC WD?????PKT*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Scorpio Black Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "WDC WD??", "???PKT*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Scorpio Blue Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "WDC WD???PVT*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Scorpio Blue Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "WDC WD??", "?PVT*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Scorpio Blue Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "WDC WD?????PVT*", "*" },
+		/*quirks*/DA_Q_4K
+	},
+	{
+		/* WDC Scorpio Blue Advanced Format (4k) drives */
+		{ T_DIRECT, SIP_MEDIA_FIXED, "WDC WD??", "???PVT*", "*" },
+		/*quirks*/DA_Q_4K
+	},
 };
 
 static	disk_strategy_t	dastrategy;
@@ -585,7 +806,7 @@ static  int		daerror(union ccb *ccb, u_i
 static void		daprevent(struct cam_periph *periph, int action);
 static int		dagetcapacity(struct cam_periph *periph);
 static void		dasetgeom(struct cam_periph *periph, uint32_t block_len,
-				  uint64_t maxsector);
+				  uint64_t maxsector, u_int lbppbe, u_int lalba);
 static timeout_t	dasendorderedtag;
 static void		dashutdown(void *arg, int howto);
 
@@ -687,6 +908,8 @@ daopen(struct disk *dp)
 
 		softc->disk->d_sectorsize = softc->params.secsize;
 		softc->disk->d_mediasize = softc->params.secsize * (off_t)softc->params.sectors;
+		softc->disk->d_stripesize = softc->params.stripesize;
+		softc->disk->d_stripeoffset = softc->params.stripeoffset;
 		/* XXX: these are not actually "firmware" values, so they may be wrong */
 		softc->disk->d_fwsectors = softc->params.secs_per_track;
 		softc->disk->d_fwheads = softc->params.heads;
@@ -1312,6 +1535,14 @@ daregister(struct cam_periph *periph, vo
 	else if (softc->minimum_cmd_size > 12)
 		softc->minimum_cmd_size = 16;
 
+	/* Predict whether device may support READ CAPACITY(16). */
+	if (SID_ANSI_REV(&cgd->inq_data) >= SCSI_REV_SPC3 ||
+	    (SID_ANSI_REV(&cgd->inq_data) >= SCSI_REV_SPC &&
+	     (cgd->inq_data.spc3_flags & SPC3_SID_PROTECT))) {
+		softc->flags |= DA_FLAG_CAN_RC16;
+		softc->state = DA_STATE_PROBE2;
+	}
+
 	/*
 	 * Register this media as a disk.
 	 */
@@ -1701,10 +1932,14 @@ dadone(struct cam_periph *periph, union 
 			struct disk_params *dp;
 			uint32_t block_size;
 			uint64_t maxsector;
+			u_int lbppbe;	/* LB per physical block exponent. */
+			u_int lalba;	/* Lowest aligned LBA. */
 
 			if (softc->state == DA_STATE_PROBE) {
 				block_size = scsi_4btoul(rdcap->length);
 				maxsector = scsi_4btoul(rdcap->addr);
+				lbppbe = 0;
+				lalba = 0;
 
 				/*
 				 * According to SBC-2, if the standard 10
@@ -1724,6 +1959,8 @@ dadone(struct cam_periph *periph, union 
 			} else {
 				block_size = scsi_4btoul(rcaplong->length);
 				maxsector = scsi_8btou64(rcaplong->addr);
+				lbppbe = rcaplong->prot_lbppbe & SRC16_LBPPBE;
+				lalba = scsi_2btoul(rcaplong->lalba_lbp);
 			}
 
 			/*
@@ -1741,7 +1978,12 @@ dadone(struct cam_periph *periph, union 
 				announce_buf[0] = '\0';
 				cam_periph_invalidate(periph);
 			} else {
-				dasetgeom(periph, block_size, maxsector);
+				dasetgeom(periph, block_size, maxsector,
+				    lbppbe, lalba & SRC16_LALBA);
+				if (lalba & SRC16_LBPME)
+					softc->flags |= DA_FLAG_CAN_LBPME;
+				else
+					softc->flags &= ~DA_FLAG_CAN_LBPME;
 				dp = &softc->params;
 				snprintf(announce_buf, sizeof(announce_buf),
 				        "%juMB (%ju %u byte sectors: %dH %dS/T "
@@ -1808,6 +2050,24 @@ dadone(struct cam_periph *periph, union 
 					    &ascq, /*show_errors*/ 1);
 				}
 				/*
+				 * If we tried READ CAPACITY(16) and failed,
+				 * fallback to READ CAPACITY(10).
+				 */
+				if ((softc->state == DA_STATE_PROBE2) &&
+				    (softc->flags & DA_FLAG_CAN_RC16) &&
+				    (((csio->ccb_h.status & CAM_STATUS_MASK) ==
+					CAM_REQ_INVALID) ||
+				     ((have_sense) &&
+				      (error_code == SSD_CURRENT_ERROR) &&
+				      (sense_key == SSD_KEY_ILLEGAL_REQUEST)))) {
+					softc->flags &= ~DA_FLAG_CAN_RC16;
+					softc->state = DA_STATE_PROBE;
+					free(rdcap, M_SCSIDA);
+					xpt_release_ccb(done_ccb);
+					xpt_schedule(periph, priority);
+					return;
+				} else
+				/*
 				 * Attach to anything that claims to be a
 				 * direct access or optical disk device,
 				 * as long as it doesn't return a "Logical
@@ -1977,13 +2237,18 @@ dagetcapacity(struct cam_periph *periph)
 	struct scsi_read_capacity_data_long *rcaplong;
 	uint32_t block_len;
 	uint64_t maxsector;
-	int error;
+	int error, rc16failed;
 	u_int32_t sense_flags;
+	u_int lbppbe;	/* Logical blocks per physical block exponent. */
+	u_int lalba;	/* Lowest aligned LBA. */
 
 	softc = (struct da_softc *)periph->softc;
 	block_len = 0;
 	maxsector = 0;
+	lbppbe = 0;
+	lalba = 0;
 	error = 0;
+	rc16failed = 0;
 	sense_flags = SF_RETRY_UA;
 	if (softc->flags & DA_FLAG_PACK_REMOVABLE)
 		sense_flags |= SF_NO_PRINT;
@@ -1991,11 +2256,63 @@ dagetcapacity(struct cam_periph *periph)
 	/* Do a read capacity */
 	rcap = (struct scsi_read_capacity_data *)malloc(sizeof(*rcaplong),
 							M_SCSIDA,
-							M_NOWAIT);
+							M_NOWAIT | M_ZERO);
 	if (rcap == NULL)
 		return (ENOMEM);
-		
+	rcaplong = (struct scsi_read_capacity_data_long *)rcap;
+
 	ccb = cam_periph_getccb(periph, CAM_PRIORITY_NORMAL);
+
+	/* Try READ CAPACITY(16) first if we think it should work. */
+	if (softc->flags & DA_FLAG_CAN_RC16) {
+		scsi_read_capacity_16(&ccb->csio,
+			      /*retries*/ 4,
+			      /*cbfcnp*/ dadone,
+			      /*tag_action*/ MSG_SIMPLE_Q_TAG,
+			      /*lba*/ 0,
+			      /*reladr*/ 0,
+			      /*pmi*/ 0,
+			      rcaplong,
+			      /*sense_len*/ SSD_FULL_SIZE,
+			      /*timeout*/ 60000);
+		ccb->ccb_h.ccb_bp = NULL;
+
+		error = cam_periph_runccb(ccb, daerror,
+				  /*cam_flags*/CAM_RETRY_SELTO,
+				  sense_flags,
+				  softc->disk->d_devstat);
+
+		if ((ccb->ccb_h.status & CAM_DEV_QFRZN) != 0)
+			cam_release_devq(ccb->ccb_h.path,
+				 /*relsim_flags*/0,
+				 /*reduction*/0,
+				 /*timeout*/0,
+				 /*getcount_only*/0);
+
+		if (error == 0)
+			goto rc16ok;
+
+		/* If we got ILLEGAL REQUEST, do not prefer RC16 any more. */
+		if ((ccb->ccb_h.status & CAM_STATUS_MASK) ==
+		     CAM_REQ_INVALID) {
+			softc->flags &= ~DA_FLAG_CAN_RC16;
+		} else if (((ccb->ccb_h.status & CAM_STATUS_MASK) ==
+		     CAM_SCSI_STATUS_ERROR) &&
+		    (ccb->csio.scsi_status == SCSI_STATUS_CHECK_COND) &&
+		    (ccb->ccb_h.status & CAM_AUTOSNS_VALID) &&
+		    ((ccb->ccb_h.flags & CAM_SENSE_PHYS) == 0) &&
+		    ((ccb->ccb_h.flags & CAM_SENSE_PTR) == 0)) {
+			int sense_key, error_code, asc, ascq;
+
+			scsi_extract_sense(&ccb->csio.sense_data,
+				   &error_code, &sense_key, &asc, &ascq);
+			if (sense_key == SSD_KEY_ILLEGAL_REQUEST)
+				softc->flags &= ~DA_FLAG_CAN_RC16;
+		}
+		rc16failed = 1;
+	}
+
+	/* Do READ CAPACITY(10). */
 	scsi_read_capacity(&ccb->csio,
 			   /*retries*/4,
 			   /*cbfncp*/dadone,
@@ -2021,13 +2338,12 @@ dagetcapacity(struct cam_periph *periph)
 		block_len = scsi_4btoul(rcap->length);
 		maxsector = scsi_4btoul(rcap->addr);
 
-		if (maxsector != 0xffffffff)
+		if (maxsector != 0xffffffff || rc16failed)
 			goto done;
 	} else
 		goto done;
 
-	rcaplong = (struct scsi_read_capacity_data_long *)rcap;
-
+	/* If READ CAPACITY(10) returned overflow, use READ CAPACITY(16) */
 	scsi_read_capacity_16(&ccb->csio,
 			      /*retries*/ 4,
 			      /*cbfcnp*/ dadone,
@@ -2053,8 +2369,11 @@ dagetcapacity(struct cam_periph *periph)
 				 /*getcount_only*/0);
 
 	if (error == 0) {
+rc16ok:
 		block_len = scsi_4btoul(rcaplong->length);
 		maxsector = scsi_8btou64(rcaplong->addr);
+		lbppbe = rcaplong->prot_lbppbe & SRC16_LBPPBE;
+		lalba = scsi_2btoul(rcaplong->lalba_lbp);
 	}
 
 done:
@@ -2065,8 +2384,14 @@ done:
 			    "unsupportable block size %ju\n",
 			    (uintmax_t) block_len);
 			error = EINVAL;
-		} else
-			dasetgeom(periph, block_len, maxsector);
+		} else {
+			dasetgeom(periph, block_len, maxsector,
+			    lbppbe, lalba & SRC16_LALBA);
+			if (lalba & SRC16_LBPME)
+				softc->flags |= DA_FLAG_CAN_LBPME;
+			else
+				softc->flags &= ~DA_FLAG_CAN_LBPME;
+		}
 	}
 
 	xpt_release_ccb(ccb);
@@ -2077,7 +2402,8 @@ done:
 }
 
 static void
-dasetgeom(struct cam_periph *periph, uint32_t block_len, uint64_t maxsector)
+dasetgeom(struct cam_periph *periph, uint32_t block_len, uint64_t maxsector,
+    u_int lbppbe, u_int lalba)
 {
 	struct ccb_calc_geometry ccg;
 	struct da_softc *softc;
@@ -2088,6 +2414,17 @@ dasetgeom(struct cam_periph *periph, uin
 	dp = &softc->params;
 	dp->secsize = block_len;
 	dp->sectors = maxsector + 1;
+	if (lbppbe > 0) {
+		dp->stripesize = block_len << lbppbe;
+		dp->stripeoffset = (dp->stripesize - block_len * lalba) %
+		    dp->stripesize;
+	} else if (softc->quirks & DA_Q_4K) {
+		dp->stripesize = 4096;
+		dp->stripeoffset = 0;
+	} else {
+		dp->stripesize = 0;
+		dp->stripeoffset = 0;
+	}
 	/*
 	 * Have the controller provide us with a geometry
 	 * for this disk.  The only time the geometry

Modified: projects/nfsv4.1-client/sys/cam/scsi/scsi_target.c
==============================================================================
--- projects/nfsv4.1-client/sys/cam/scsi/scsi_target.c	Sun Dec 25 22:05:33 2011	(r228883)
+++ projects/nfsv4.1-client/sys/cam/scsi/scsi_target.c	Mon Dec 26 00:10:42 2011	(r228884)
@@ -96,12 +96,9 @@ struct targ_softc {
 	targ_state		 state;
 	struct selinfo		 read_select;
 	struct devstat		 device_stats;
-	struct callout		destroy_dev_callout;
-	struct mtx		destroy_mtx;
 };
 
 static d_open_t		targopen;
-static d_close_t	targclose;
 static d_read_t		targread;
 static d_write_t	targwrite;
 static d_ioctl_t	targioctl;
@@ -119,7 +116,6 @@ static struct cdevsw targ_cdevsw = {
 	.d_version =	D_VERSION,
 	.d_flags =	D_NEEDGIANT,
 	.d_open =	targopen,
-	.d_close =	targclose,
 	.d_read =	targread,
 	.d_write =	targwrite,
 	.d_ioctl =	targioctl,
@@ -152,15 +148,12 @@ static void		targfreeccb(struct targ_sof
 static struct targ_cmd_descr *
 			targgetdescr(struct targ_softc *softc);
 static periph_init_t	targinit;
-static void		targclone(void *arg, struct ucred *cred, char *name,
-				  int namelen, struct cdev **dev);
 static void		targasync(void *callback_arg, u_int32_t code,
 				  struct cam_path *path, void *arg);
 static void		abort_all_pending(struct targ_softc *softc);
 static void		notify_user(struct targ_softc *softc);
 static int		targcamstatus(cam_status status);
 static size_t		targccblen(xpt_opcode func_code);
-static void		targdestroy(void *);
 
 static struct periph_driver targdriver =
 {
@@ -171,66 +164,18 @@ PERIPHDRIVER_DECLARE(targ, targdriver);
 
 static MALLOC_DEFINE(M_TARG, "TARG", "TARG data");
 
-/*
- * Create softc and initialize it. Only one proc can open each targ device.
- * There is no locking here because a periph doesn't get created until an
- * ioctl is issued to do so, and that can't happen until this method returns.
- */
-static int
-targopen(struct cdev *dev, int flags, int fmt, struct thread *td)
-{
-	struct targ_softc *softc;
-
-	if (dev->si_drv1 != 0) {
-		return (EBUSY);
-	}
-	
-	/* Mark device busy before any potentially blocking operations */
-	dev->si_drv1 = (void *)~0;
-
-	/* Create the targ device, allocate its softc, initialize it */
-	if ((dev->si_flags & SI_NAMED) == 0) {
-		make_dev(&targ_cdevsw, dev2unit(dev), UID_ROOT, GID_WHEEL, 0600,
-			 "targ%d", dev2unit(dev));
-	}
-	softc = malloc(sizeof(*softc), M_TARG,
-	       M_WAITOK | M_ZERO);
-	dev->si_drv1 = softc;
-	softc->state = TARG_STATE_OPENED;
-	softc->periph = NULL;
-	softc->path = NULL;
-
-	TAILQ_INIT(&softc->pending_ccb_queue);
-	TAILQ_INIT(&softc->work_queue);
-	TAILQ_INIT(&softc->abort_queue);
-	TAILQ_INIT(&softc->user_ccb_queue);

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***

From owner-svn-src-projects@FreeBSD.ORG  Mon Dec 26 18:12:27 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id E38471065734;
	Mon, 26 Dec 2011 18:12:27 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id CF1DD8FC14;
	Mon, 26 Dec 2011 18:12:27 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBQICRdx016606;
	Mon, 26 Dec 2011 18:12:27 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBQICRgP016604;
	Mon, 26 Dec 2011 18:12:27 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201112261812.pBQICRgP016604@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Mon, 26 Dec 2011 18:12:27 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228899 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 26 Dec 2011 18:12:28 -0000

Author: pho
Date: Mon Dec 26 18:12:27 2011
New Revision: 228899
URL: http://svn.freebsd.org/changeset/base/228899

Log:
  Using a private fstab simplifies recovery from a panic.
  Add a filter for uninteresting error message.

Modified:
  projects/stress2/misc/quota10.sh

Modified: projects/stress2/misc/quota10.sh
==============================================================================
--- projects/stress2/misc/quota10.sh	Mon Dec 26 16:47:45 2011	(r228898)
+++ projects/stress2/misc/quota10.sh	Mon Dec 26 18:12:27 2011	(r228899)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright (c) 2008 Peter Holm <pho@FreeBSD.org>
+# Copyright (c) 2008, 2011 Peter Holm <pho@FreeBSD.org>
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -37,9 +37,10 @@
 mounts=15		# Number of parallel scripts
 mdstart=$mdstart	# Use md unit numbers from this point
 D=$diskimage
+export PATH_FSTAB=/tmp/fstab
 
 if [ $# -eq 0 ]; then
-	cp -p /etc/fstab /etc/fstab.save
+	rm -f $PATH_FSTAB
 	for i in `jot $mounts`; do
 		m=$(( i + mdstart - 1 ))
 		[ ! -d ${mntpoint}$m ] && mkdir ${mntpoint}$m
@@ -50,7 +51,7 @@ if [ $# -eq 0 ]; then
 		mdconfig -a -t vnode -f $D$m -u $m
 		bsdlabel -w md$m auto
 		newfs md${m}${part} > /dev/null 2>&1
-		echo "/dev/md${m}${part} ${mntpoint}$m ufs rw,userquota 2 2" >> /etc/fstab
+		echo "/dev/md${m}${part} ${mntpoint}$m ufs rw,userquota 2 2" >> $PATH_FSTAB
 		mount ${mntpoint}$m
 		edquota -u -f ${mntpoint}$m -e ${mntpoint}$m:100000:110000:15000:16000 root
 		umount ${mntpoint}$m
@@ -74,14 +75,14 @@ if [ $# -eq 0 ]; then
 		mdconfig -d -u $m
 		rm -f $D$m
 	done
-
-	mv /etc/fstab.save /etc/fstab
-
+	rm -f $PATH_FSTAB
 else
 	if [ $1 = find ]; then
 		while [ -r /tmp/$0 ]; do
+			(
 			quotaon  ${mntpoint}$2
 			quotaoff ${mntpoint}$2
+			) 2>&1 | egrep -v "No such file or directory"
 		done
 		echo "Done 1 @ `date '+%T'`"
 	else

From owner-svn-src-projects@FreeBSD.ORG  Wed Dec 28 14:48:33 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id E773F1065675;
	Wed, 28 Dec 2011 14:48:33 +0000 (UTC)
	(envelope-from gber@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id D4CFA8FC16;
	Wed, 28 Dec 2011 14:48:33 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBSEmXK4011076;
	Wed, 28 Dec 2011 14:48:33 GMT (envelope-from gber@svn.freebsd.org)
Received: (from gber@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBSEmXGa011066;
	Wed, 28 Dec 2011 14:48:33 GMT (envelope-from gber@svn.freebsd.org)
Message-Id: <201112281448.pBSEmXGa011066@svn.freebsd.org>
From: Grzegorz Bernacki <gber@FreeBSD.org>
Date: Wed, 28 Dec 2011 14:48:33 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228928 - in projects/armv6/sys/arm: arm include
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 28 Dec 2011 14:48:34 -0000

Author: gber
Date: Wed Dec 28 14:48:33 2011
New Revision: 228928
URL: http://svn.freebsd.org/changeset/base/228928

Log:
  arm: Implement separate per-cpu structures.
  
  It's still needs some cleanup. Accessors for pcpu and tls should be
  moved to some armv6 generic file.
  
  Obtained from:	Marvell, Semihalf

Modified:
  projects/armv6/sys/arm/arm/bcopyinout.S
  projects/armv6/sys/arm/arm/bcopyinout_xscale.S
  projects/armv6/sys/arm/arm/copystr.S
  projects/armv6/sys/arm/arm/cpufunc_asm_pj4b.S
  projects/armv6/sys/arm/arm/fusu.S
  projects/armv6/sys/arm/arm/machdep.c
  projects/armv6/sys/arm/arm/swtch.S
  projects/armv6/sys/arm/include/asmacros.h
  projects/armv6/sys/arm/include/cpufunc.h

Modified: projects/armv6/sys/arm/arm/bcopyinout.S
==============================================================================
--- projects/armv6/sys/arm/arm/bcopyinout.S	Wed Dec 28 13:01:12 2011	(r228927)
+++ projects/armv6/sys/arm/arm/bcopyinout.S	Wed Dec 28 14:48:33 2011	(r228928)
@@ -53,14 +53,19 @@ __FBSDID("$FreeBSD$");
 	.text
 	.align	0
 
-#ifdef MULTIPROCESSOR
-.Lcpu_info:
-	.word	_C_LABEL(cpu_info)
+#ifdef _ARM_ARCH_6
+#define GET_PCB(tmp) \
+	mrc p15, 0, tmp, c13, c0, 4; \
+	add	tmp, tmp, #(PC_CURPCB)
 #else
 .Lcurpcb:
-	.word _C_LABEL(__pcpu) + PC_CURPCB
+	.word	_C_LABEL(__pcpu) + PC_CURPCB
+
+#define GET_PCB(tmp) \
+	ldr	tmp, .Lcurpcb
 #endif
 
+
 #define SAVE_REGS	stmfd	sp!, {r4-r11}
 #define RESTORE_REGS	ldmfd	sp!, {r4-r11}
 		
@@ -110,18 +115,9 @@ ENTRY(copyin)
 
 .Lnormal:
 	SAVE_REGS
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0-r2, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r4, .Lcpu_info
-	ldr	r4, [r4, r0, lsl #2]
-	ldr	r4, [r4, #CI_CURPCB]
-	ldmfd	sp!, {r0-r2, r14}
-#else
-	ldr	r4, .Lcurpcb
+	GET_PCB(r4)
 	ldr	r4, [r4]
-#endif
+
 
 	ldr	r5, [r4, #PCB_ONFAULT]
 	adr	r3, .Lcopyfault
@@ -356,18 +352,8 @@ ENTRY(copyout)
 
 .Lnormale:
 	SAVE_REGS
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0-r2, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r4, .Lcpu_info
-	ldr	r4, [r4, r0, lsl #2]
-	ldr	r4, [r4, #CI_CURPCB]
-	ldmfd	sp!, {r0-r2, r14}
-#else
-	ldr	r4, .Lcurpcb
+	GET_PCB(r4)
 	ldr	r4, [r4]
-#endif
 
 	ldr	r5, [r4, #PCB_ONFAULT]
 	adr	r3, .Lcopyfault
@@ -560,18 +546,9 @@ ENTRY(copyout)
  * else EFAULT if a page fault occurred.
  */
 ENTRY(badaddr_read_1)
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0-r1, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r2, .Lcpu_info
-	ldr	r2, [r2, r0, lsl #2]
-	ldr	r2, [r2, #CI_CURPCB]
-	ldmfd	sp!, {r0-r1, r14}
-#else
-	ldr	r2, .Lcurpcb
+	GET_PCB(r2)
 	ldr	r2, [r2]
-#endif
+
 	ldr	ip, [r2, #PCB_ONFAULT]
 	adr	r3, 1f
 	str	r3, [r2, #PCB_ONFAULT]
@@ -594,18 +571,9 @@ ENTRY(badaddr_read_1)
  * else EFAULT if a page fault occurred.
  */
 ENTRY(badaddr_read_2)
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0-r1, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r2, .Lcpu_info
-	ldr	r2, [r2, r0, lsl #2]
-	ldr	r2, [r2, #CI_CURPCB]
-	ldmfd	sp!, {r0-r1, r14}
-#else
-	ldr	r2, .Lcurpcb
+	GET_PCB(r2)
 	ldr	r2, [r2]
-#endif
+
 	ldr	ip, [r2, #PCB_ONFAULT]
 	adr	r3, 1f
 	str	r3, [r2, #PCB_ONFAULT]
@@ -628,18 +596,9 @@ ENTRY(badaddr_read_2)
  * else EFAULT if a page fault occurred.
  */
 ENTRY(badaddr_read_4)
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0-r1, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r2, .Lcpu_info
-	ldr	r2, [r2, r0, lsl #2]
-	ldr	r2, [r2, #CI_CURPCB]
-	ldmfd	sp!, {r0-r1, r14}
-#else
-	ldr	r2, .Lcurpcb
+	GET_PCB(r2)
 	ldr	r2, [r2]
-#endif
+
 	ldr	ip, [r2, #PCB_ONFAULT]
 	adr	r3, 1f
 	str	r3, [r2, #PCB_ONFAULT]

Modified: projects/armv6/sys/arm/arm/bcopyinout_xscale.S
==============================================================================
--- projects/armv6/sys/arm/arm/bcopyinout_xscale.S	Wed Dec 28 13:01:12 2011	(r228927)
+++ projects/armv6/sys/arm/arm/bcopyinout_xscale.S	Wed Dec 28 14:48:33 2011	(r228928)
@@ -41,12 +41,15 @@ __FBSDID("$FreeBSD$");
 	.text
 	.align	0
 
-#ifdef MULTIPROCESSOR
-.Lcpu_info:
-	.word	_C_LABEL(cpu_info)
+#ifdef _ARM_ARCH_6
+#define GET_PCB(tmp) \
+	mrc p15, 0, tmp, c13, c0, 4; \
+	add	tmp, tmp, #(PC_CURPCB)
 #else
 .Lcurpcb:
 	.word	_C_LABEL(__pcpu) + PC_CURPCB
+#define GET_PCB(tmp) \
+	ldr	tmp, .Lcurpcb
 #endif
 
 /*
@@ -85,18 +88,8 @@ ENTRY(copyin)
 .Lnormal:
 	stmfd	sp!, {r10-r11, lr}
 
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0-r2}
-	bl	_C_LABEL(cpu_number)
-	ldr	r10, .Lcpu_info
-	ldmfd	sp!, {r0-r2}
-	ldr	r10, [r10, r0, lsl #2]
-	ldr	r10, [r10, #CI_CURPCB]
-#else
-	ldr	r10, .Lcurpcb
+	GET_PCB(r10)
 	ldr	r10, [r10]
-#endif
 
 	mov	r3, #0x00
 	adr	ip, .Lcopyin_fault
@@ -536,18 +529,8 @@ ENTRY(copyout)
 .Lnormale:									
 	stmfd	sp!, {r10-r11, lr}
 
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0-r2}
-	bl	_C_LABEL(cpu_number)
-	ldr	r10, .Lcpu_info
-	ldmfd	sp!, {r0-r2}
-	ldr	r10, [r10, r0, lsl #2]
-	ldr	r10, [r10, #CI_CURPCB]
-#else
-	ldr	r10, .Lcurpcb
+	GET_PCB(r10)
 	ldr	r10, [r10]
-#endif
 
 	mov	r3, #0x00
 	adr	ip, .Lcopyout_fault

Modified: projects/armv6/sys/arm/arm/copystr.S
==============================================================================
--- projects/armv6/sys/arm/arm/copystr.S	Wed Dec 28 13:01:12 2011	(r228927)
+++ projects/armv6/sys/arm/arm/copystr.S	Wed Dec 28 14:48:33 2011	(r228928)
@@ -49,12 +49,17 @@ __FBSDID("$FreeBSD$");
 
 	.text
 	.align	0
-#ifdef MULTIPROCESSOR
-.Lcpu_info:
-	.word	_C_LABEL(cpu_info)
+
+#ifdef _ARM_ARCH_6
+#define GET_PCB(tmp) \
+	mrc p15, 0, tmp, c13, c0, 4; \
+	add	tmp, tmp, #(PC_CURPCB)
 #else
 .Lpcb:
 	.word	_C_LABEL(__pcpu) + PC_CURPCB
+
+#define GET_PCB(tmp) \
+	ldr	tmp, .Lpcb
 #endif
 
 /*
@@ -108,18 +113,8 @@ ENTRY(copyinstr)
 	moveq	r0, #ENAMETOOLONG
 	beq	2f
 
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0-r3, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r4, .Lcpu_info
-	ldr	r4, [r4, r0, lsl #2]
-	ldr	r4, [r4, #CI_CURPCB]
-	ldmfd	sp!, {r0-r3, r14}
-#else
-	ldr	r4, .Lpcb
+	GET_PCB(r4)
 	ldr	r4, [r4]
-#endif
 
 #ifdef DIAGNOSTIC
 	teq	r4, #0x00000000
@@ -165,18 +160,8 @@ ENTRY(copyoutstr)
 	moveq	r0, #ENAMETOOLONG
 	beq	2f
 
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0-r3, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r4, .Lcpu_info
-	ldr	r4, [r4, r0, lsl #2]
-	ldr	r4, [r4, #CI_CURPCB]
-	ldmfd	sp!, {r0-r3, r14}
-#else
-	ldr	r4, .Lpcb
+	GET_PCB(r4)
 	ldr	r4, [r4]
-#endif
 
 #ifdef DIAGNOSTIC
 	teq	r4, #0x00000000

Modified: projects/armv6/sys/arm/arm/cpufunc_asm_pj4b.S
==============================================================================
--- projects/armv6/sys/arm/arm/cpufunc_asm_pj4b.S	Wed Dec 28 13:01:12 2011	(r228927)
+++ projects/armv6/sys/arm/arm/cpufunc_asm_pj4b.S	Wed Dec 28 14:48:33 2011	(r228928)
@@ -177,6 +177,28 @@ ENTRY(pj4b_sleep)
 	mcr	p15, 0, r0, c7, c0, 4	/* wait for interrupt */
 	RET
 
+ENTRY(get_core_id)
+	mrc p15, 0, r0, c0, c0, 5
+	RET
+
+/* Use Privileged Thread Id register as a holder for pcpu pointer */
+ENTRY(get_pcpu)
+	mrc p15, 0, r0, c13, c0, 4
+	RET
+
+ENTRY(set_pcpu)
+	mcr p15, 0, r0, c13, c0, 4
+	RET
+
+/* Use Privileged Thread Id register as a holder for tls pointer */
+ENTRY(get_tls)
+	mrc p15, 0, r0, c13, c0, 3
+	RET
+
+ENTRY(set_tls)
+	mcr p15, 0, r0, c13, c0, 3
+	RET
+
 ENTRY(pj4b_config)
 	/* Set Auxiliary Debug Modes Control 2 register */
 	mrc	p15, 1, r0, c15, c1, 2

Modified: projects/armv6/sys/arm/arm/fusu.S
==============================================================================
--- projects/armv6/sys/arm/arm/fusu.S	Wed Dec 28 13:01:12 2011	(r228927)
+++ projects/armv6/sys/arm/arm/fusu.S	Wed Dec 28 14:48:33 2011	(r228928)
@@ -39,12 +39,15 @@
 #include "assym.s"
 __FBSDID("$FreeBSD$");
 
-#ifdef MULTIPROCESSOR
-.Lcpu_info:
-	.word	_C_LABEL(cpu_info)
+#ifdef _ARM_ARCH_6
+#define GET_PCB(tmp) \
+	mrc p15, 0, tmp, c13, c0, 4; \
+	add	tmp, tmp, #(PC_CURPCB)
 #else
 .Lcurpcb:
 	.word	_C_LABEL(__pcpu) + PC_CURPCB
+#define GET_PCB(tmp) \
+	ldr	tmp, .Lcurpcb
 #endif
 
 /*
@@ -54,18 +57,8 @@ __FBSDID("$FreeBSD$");
 
 ENTRY_NP(casuword32)
 ENTRY(casuword)
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r2, .Lcpu_info
-	ldr	r2, [r2, r0, lsl #2]
-	ldr	r2, [r2, #CI_CURPCB]
-	ldmfd	sp!, {r0, r14}
-#else
-	ldr	r3, .Lcurpcb
+	GET_PCB(r3)
 	ldr	r3, [r3]
-#endif
 
 #ifdef DIAGNOSTIC
 	teq	r3, #0x00000000
@@ -101,18 +94,8 @@ ENTRY(casuword)
 
 ENTRY_NP(fuword32)
 ENTRY(fuword)
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r2, .Lcpu_info
-	ldr	r2, [r2, r0, lsl #2]
-	ldr	r2, [r2, #CI_CURPCB]
-	ldmfd	sp!, {r0, r14}
-#else
-	ldr	r2, .Lcurpcb
+	GET_PCB(r2)
 	ldr	r2, [r2]
-#endif
 
 #ifdef DIAGNOSTIC
 	teq	r2, #0x00000000
@@ -135,18 +118,8 @@ ENTRY(fuword)
  */
 
 ENTRY(fusword)
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r2, .Lcpu_info
-	ldr	r2, [r2, r0, lsl #2]
-	ldr	r2, [r2, #CI_CURPCB]
-	ldmfd	sp!, {r0, r14}
-#else
-	ldr	r2, .Lcurpcb
+	GET_PCB(r2)
 	ldr	r2, [r2]
-#endif
 
 #ifdef DIAGNOSTIC
 	teq	r2, #0x00000000
@@ -180,18 +153,8 @@ ENTRY(fuswintr)
 	mvnne	r0, #0x00000000
 	RETne
 
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r2, .Lcpu_info
-	ldr	r2, [r2, r0, lsl #2]
-	ldr	r2, [r2, #CI_CURPCB]
-	ldmfd	sp!, {r0, r14}
-#else
-	ldr	r2, .Lcurpcb
+	GET_PCB(r2)
 	ldr	r2, [r2]
-#endif
 
 #ifdef DIAGNOSTIC
 	teq	r2, #0x00000000
@@ -229,18 +192,8 @@ _C_LABEL(block_userspace_access):
  */
 
 ENTRY(fubyte)
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r2, .Lcpu_info
-	ldr	r2, [r2, r0, lsl #2]
-	ldr	r2, [r2, #CI_CURPCB]
-	ldmfd	sp!, {r0, r14}
-#else
-	ldr	r2, .Lcurpcb
+	GET_PCB(r2)
 	ldr	r2, [r2]
-#endif
 
 #ifdef DIAGNOSTIC
 	teq	r2, #0x00000000
@@ -303,18 +256,8 @@ fusupcbfaulttext:
 
 ENTRY_NP(suword32)
 ENTRY(suword)
-#ifdef MULTIPROCESSOR
-	/* XXX Probably not appropriate for non-Hydra SMPs */
-	stmfd	sp!, {r0, r1, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r2, .Lcpu_info
-	ldr	r2, [r2, r0, lsl #2]
-	ldr	r2, [r2, #CI_CURPCB]
-	ldmfd	sp!, {r0, r1, r14}
-#else
-	ldr	r2, .Lcurpcb
+	GET_PCB(r2)
 	ldr	r2, [r2]
-#endif
 
 #ifdef DIAGNOSTIC
 	teq	r2, #0x00000000
@@ -343,17 +286,8 @@ ENTRY(suswintr)
 	mvnne	r0, #0x00000000
 	RETne
 
-#ifdef MULTIPROCESSOR
-	stmfd	sp!, {r0, r1, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r2, .Lcpu_info
-	ldr	r2, [r2, r0, lsl #2]
-	ldr	r2, [r2, #CI_CURPCB]
-	ldmfd	sp!, {r0, r1, r14}
-#else
-	ldr	r2, .Lcurpcb
+	GET_PCB(r2)
 	ldr	r2, [r2]
-#endif
 
 #ifdef DIAGNOSTIC
 	teq	r2, #0x00000000
@@ -382,17 +316,8 @@ ENTRY(suswintr)
  */
 
 ENTRY(susword)
-#ifdef MULTIPROCESSOR
-	stmfd	sp!, {r0, r1, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r2, .Lcpu_info
-	ldr	r2, [r2, r0, lsl #2]
-	ldr	r2, [r2, #CI_CURPCB]
-	ldmfd	sp!, {r0, r1, r14}
-#else
-	ldr	r2, .Lcurpcb
+	GET_PCB(r2)
 	ldr	r2, [r2]
-#endif
 
 #ifdef DIAGNOSTIC
 	teq	r2, #0x00000000
@@ -421,17 +346,8 @@ ENTRY(susword)
  */
 
 ENTRY(subyte)
-#ifdef MULTIPROCESSOR
-	stmfd	sp!, {r0, r1, r14}
-	bl	_C_LABEL(cpu_number)
-	ldr	r2, .Lcpu_info
-	ldr	r2, [r2, r0, lsl #2]
-	ldr	r2, [r2, #CI_CURPCB]
-	ldmfd	sp!, {r0, r1, r14}
-#else
-	ldr	r2, .Lcurpcb
+	GET_PCB(r2)
 	ldr	r2, [r2]
-#endif
 
 
 #ifdef DIAGNOSTIC

Modified: projects/armv6/sys/arm/arm/machdep.c
==============================================================================
--- projects/armv6/sys/arm/arm/machdep.c	Wed Dec 28 13:01:12 2011	(r228927)
+++ projects/armv6/sys/arm/arm/machdep.c	Wed Dec 28 14:48:33 2011	(r228928)
@@ -717,6 +717,7 @@ void
 pcpu0_init(void)
 {
 
+	set_pcpu(pcpup);
 	pcpu_init(pcpup, 0, sizeof(struct pcpu));
 	PCPU_SET(curthread, &thread0);
 }

Modified: projects/armv6/sys/arm/arm/swtch.S
==============================================================================
--- projects/armv6/sys/arm/arm/swtch.S	Wed Dec 28 13:01:12 2011	(r228927)
+++ projects/armv6/sys/arm/arm/swtch.S	Wed Dec 28 14:48:33 2011	(r228928)
@@ -92,41 +92,21 @@ __FBSDID("$FreeBSD$");
  */
 
 #define DOMAIN_CLIENT	0x01
-#define IRQdisable \
-	mrs	r14, cpsr ; \
-	orr	r14, r14, #(I32_bit) ; \
-	msr	cpsr_c, r14 ; \
-
-#define IRQenable \
-	mrs	r14, cpsr ; \
-	bic	r14, r14, #(I32_bit) ; \
-	msr	cpsr_c, r14 ; \
-
-/*
- * These are used for switching the translation table/DACR.
- * Since the vector page can be invalid for a short time, we must
- * disable both regular IRQs *and* FIQs.
- *
- * XXX: This is not necessary if the vector table is relocated.
- */
-#define IRQdisableALL \
-	mrs	r14, cpsr ; \
-	orr	r14, r14, #(I32_bit | F32_bit) ; \
-	msr	cpsr_c, r14
-
-#define IRQenableALL \
-	mrs	r14, cpsr ; \
-	bic	r14, r14, #(I32_bit | F32_bit) ; \
-	msr	cpsr_c, r14
-	
+
+#ifdef _ARM_ARCH_6
+#define GET_PCB(tmp) \
+	mrc p15, 0, tmp, c13, c0, 4; \
+	add	tmp, tmp, #(PC_CURPCB)
+#else
 .Lcurpcb:
 	.word	_C_LABEL(__pcpu) + PC_CURPCB
+
+#define GET_PCB(tmp) \
+	ldr	tmp, .Lcurpcb
+#endif
+
 .Lcpufuncs:	
 	.word	_C_LABEL(cpufuncs)
-.Lblock_userspace_access:
-	.word	_C_LABEL(block_userspace_access)
-.Lcpu_do_powersave:
-	.word	_C_LABEL(cpu_do_powersave)
 .Lblocked_lock:
 	.word	_C_LABEL(blocked_lock)
 ENTRY(cpu_throw)
@@ -202,7 +182,7 @@ ENTRY(cpu_throw)
 #endif
 
 	/* We have a new curthread now so make a note it */
-	ldr	r6, .Lcurthread
+	GET_CURTHREAD_PTR(r6)
 	str	r5, [r6]
 
 	/* Set the new tp */
@@ -215,7 +195,7 @@ ENTRY(cpu_throw)
 	str	r6, [r4, #8] /* ARM_RAS_END */
 
 	/* Hook in a new pcb */
-	ldr	r6, .Lcurpcb
+	GET_PCB(r6)
 	str	r7, [r6]
 
 	ldmfd	sp!, {r4-r7, pc}
@@ -228,20 +208,13 @@ ENTRY(cpu_switch)
 	/* rem: r0 = old lwp */
 	/* rem: interrupts are disabled */
 
-#ifdef MULTIPROCESSOR
-	/* XXX use curcpu() */
-	ldr	r2, .Lcpu_info_store
-	str	r2, [r6, #(L_CPU)]
-#endif
-
 	/* Process is now on a processor. */
-
 	/* We have a new curthread now so make a note it */
-	ldr	r7, .Lcurthread
+	GET_CURTHREAD_PTR(r7)
 	str	r1, [r7]
 
 	/* Hook in a new pcb */
-	ldr	r7, .Lcurpcb
+	GET_PCB(r7)
 	ldr	r2, [r1, #TD_PCB]
 	str	r2, [r7]
 
@@ -414,7 +387,7 @@ ENTRY(cpu_switch)
 	/* Release the old thread */
 	str	r6, [r4, #TD_LOCK]
 	ldr	r6, .Lblocked_lock
-	ldr	r3, .Lcurthread
+	GET_CURTHREAD_PTR(r3)
 	ldr	r3, [r3]
 
 1:
@@ -452,15 +425,6 @@ ENTRY(cpu_switch)
 	ldr	r13, [r7, #(PCB_SP)]
 #endif
 
-	/* rem: r6 = lock */
-	/* rem: r7 = new pcb */
-
-#ifdef ARMFPE
-	add	r0, r7, #(USER_SIZE) & 0x00ff
-	add	r0, r0, #(USER_SIZE) & 0xff00 
-	bl	_C_LABEL(arm_fpe_core_changecontext)
-#endif
-
 	/* rem: r5 = new lwp's proc */
 	/* rem: r6 = lock */
 	/* rem: r7 = new PCB */

Modified: projects/armv6/sys/arm/include/asmacros.h
==============================================================================
--- projects/armv6/sys/arm/include/asmacros.h	Wed Dec 28 13:01:12 2011	(r228927)
+++ projects/armv6/sys/arm/include/asmacros.h	Wed Dec 28 14:48:33 2011	(r228928)
@@ -43,6 +43,7 @@
 #ifdef _KERNEL
 
 #ifdef LOCORE
+#include "opt_global.h"
 
 /*
  * ASM macros for pushing and pulling trapframes from the stack
@@ -155,9 +156,20 @@
 	.type	name, %object ; \
 name:
 
-#define	EMPTY
+#ifdef _ARM_ARCH_6
+#define	AST_LOCALS
+#define GET_CURTHREAD_PTR(tmp) \
+	mrc p15, 0, tmp, c13, c0, 4; \
+	add	tmp, tmp, #(PC_CURTHREAD)
+#else
+#define	AST_LOCALS							;\
+.Lcurthread:								;\
+	.word	_C_LABEL(__pcpu) + PC_CURTHREAD
+
+#define GET_CURTHREAD_PTR(tmp) \
+	ldr	tmp, .Lcurthread
+#endif
 
-		
 #define	DO_AST								\
 	ldr	r0, [sp]		/* Get the SPSR from stack */	;\
 	mrs	r4, cpsr		/* save CPSR */			;\
@@ -167,7 +179,7 @@ name:
 	teq	r0, #(PSR_USR32_MODE)					;\
 	bne	2f			/* Nope, get out now */		;\
 	bic	r4, r4, #(I32_bit|F32_bit)				;\
-1:	ldr	r5, .Lcurthread						;\
+1:	GET_CURTHREAD_PTR(r5)						;\
 	ldr	r5, [r5]						;\
 	ldr	r1, [r5, #(TD_FLAGS)]					;\
 	and	r1, r1, #(TDF_ASTPENDING|TDF_NEEDRESCHED)		;\
@@ -181,11 +193,6 @@ name:
 	b	1b							;\
 2:
 
-
-#define	AST_LOCALS							;\
-.Lcurthread:								;\
-	.word	_C_LABEL(__pcpu) + PC_CURTHREAD
-
 #endif /* LOCORE */
 
 #endif /* _KERNEL */

Modified: projects/armv6/sys/arm/include/cpufunc.h
==============================================================================
--- projects/armv6/sys/arm/include/cpufunc.h	Wed Dec 28 13:01:12 2011	(r228927)
+++ projects/armv6/sys/arm/include/cpufunc.h	Wed Dec 28 14:48:33 2011	(r228928)
@@ -474,6 +474,11 @@ void	pj4bv7_setup			(char *string);
 void	pj4bv6_setup			(char *string);
 void	pj4b_config			(void);
 
+int	 get_core_id			(void);
+void	 set_pcpu			(void *);
+void	 set_tls			(void *);
+void	*get_tls			(void);
+
 void	armadaxp_idcache_wbinv_all	(void);
 
 void 	cortexa_setup			(char *);

From owner-svn-src-projects@FreeBSD.ORG  Wed Dec 28 15:03:35 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id AE5B3106566B;
	Wed, 28 Dec 2011 15:03:35 +0000 (UTC)
	(envelope-from gber@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 9B3688FC14;
	Wed, 28 Dec 2011 15:03:35 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBSF3Z3k011579;
	Wed, 28 Dec 2011 15:03:35 GMT (envelope-from gber@svn.freebsd.org)
Received: (from gber@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBSF3ZlM011571;
	Wed, 28 Dec 2011 15:03:35 GMT (envelope-from gber@svn.freebsd.org)
Message-Id: <201112281503.pBSF3ZlM011571@svn.freebsd.org>
From: Grzegorz Bernacki <gber@FreeBSD.org>
Date: Wed, 28 Dec 2011 15:03:35 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228929 - in projects/armv6:
	lib/libthr/arch/arm/include sys/arm/arm sys/arm/include
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 28 Dec 2011 15:03:35 -0000

Author: gber
Date: Wed Dec 28 15:03:34 2011
New Revision: 228929
URL: http://svn.freebsd.org/changeset/base/228929

Log:
  Get rid of shared RAS area for SMP systems.
  
  Obtained from:	Marvell, Semihalf

Modified:
  projects/armv6/lib/libthr/arch/arm/include/pthread_md.h
  projects/armv6/sys/arm/arm/genassym.c
  projects/armv6/sys/arm/arm/machdep.c
  projects/armv6/sys/arm/arm/swtch.S
  projects/armv6/sys/arm/arm/vm_machdep.c
  projects/armv6/sys/arm/include/asmacros.h
  projects/armv6/sys/arm/include/sysarch.h

Modified: projects/armv6/lib/libthr/arch/arm/include/pthread_md.h
==============================================================================
--- projects/armv6/lib/libthr/arch/arm/include/pthread_md.h	Wed Dec 28 14:48:33 2011	(r228928)
+++ projects/armv6/lib/libthr/arch/arm/include/pthread_md.h	Wed Dec 28 15:03:34 2011	(r228929)
@@ -59,7 +59,7 @@ void		_tcb_dtor(struct tcb *);
 static __inline void
 _tcb_set(struct tcb *tcb)
 {
-	*((struct tcb **)ARM_TP_ADDRESS) = tcb;
+	sysarch(ARM_SET_TP, tcb);
 }
 
 /*
@@ -68,7 +68,10 @@ _tcb_set(struct tcb *tcb)
 static __inline struct tcb *
 _tcb_get(void)
 {
-	return (*((struct tcb **)ARM_TP_ADDRESS));
+	struct tcb *tcb;
+	sysarch(ARM_GET_TP, &tcb);
+
+	return (tcb);
 }
 
 extern struct pthread *_thr_initial;

Modified: projects/armv6/sys/arm/arm/genassym.c
==============================================================================
--- projects/armv6/sys/arm/arm/genassym.c	Wed Dec 28 14:48:33 2011	(r228928)
+++ projects/armv6/sys/arm/arm/genassym.c	Wed Dec 28 15:03:34 2011	(r228929)
@@ -105,9 +105,11 @@ ASSYM(TF_PC, offsetof(struct trapframe, 
 ASSYM(P_PID, offsetof(struct proc, p_pid));
 ASSYM(P_FLAG, offsetof(struct proc, p_flag));
 
+#if !defined(SMP)
 ASSYM(ARM_TP_ADDRESS, ARM_TP_ADDRESS);
 ASSYM(ARM_RAS_START, ARM_RAS_START);
 ASSYM(ARM_RAS_END, ARM_RAS_END);
+#endif
 ASSYM(PAGE_SIZE, PAGE_SIZE);
 ASSYM(PDESIZE, PDESIZE);
 ASSYM(PMAP_DOMAIN_KERNEL, PMAP_DOMAIN_KERNEL);

Modified: projects/armv6/sys/arm/arm/machdep.c
==============================================================================
--- projects/armv6/sys/arm/arm/machdep.c	Wed Dec 28 14:48:33 2011	(r228928)
+++ projects/armv6/sys/arm/arm/machdep.c	Wed Dec 28 15:03:34 2011	(r228929)
@@ -264,9 +264,11 @@ static void
 cpu_startup(void *dummy)
 {
 	struct pcb *pcb = thread0.td_pcb;
+#ifndef SMP
 #ifndef ARM_CACHE_LOCK_ENABLE
 	vm_page_t m;
 #endif
+#endif
 
 	cpu_setup("");
 	identify_arm_cpu();
@@ -308,6 +310,7 @@ cpu_startup(void *dummy)
 	vector_page_setprot(VM_PROT_READ);
 	pmap_set_pcb_pagedir(pmap_kernel(), pcb);
 	pmap_postinit();
+#ifndef SMP
 #ifdef ARM_CACHE_LOCK_ENABLE
 	pmap_kenter_user(ARM_TP_ADDRESS, ARM_TP_ADDRESS);
 	arm_lock_cache_line(ARM_TP_ADDRESS);
@@ -317,6 +320,7 @@ cpu_startup(void *dummy)
 #endif
 	*(uint32_t *)ARM_RAS_START = 0;
 	*(uint32_t *)ARM_RAS_END = 0xffffffff;
+#endif
 }
 
 SYSINIT(cpu, SI_SUB_CPU, SI_ORDER_FIRST, cpu_startup, NULL);

Modified: projects/armv6/sys/arm/arm/swtch.S
==============================================================================
--- projects/armv6/sys/arm/arm/swtch.S	Wed Dec 28 14:48:33 2011	(r228928)
+++ projects/armv6/sys/arm/arm/swtch.S	Wed Dec 28 15:03:34 2011	(r228929)
@@ -85,12 +85,6 @@
 #include <machine/armreg.h>
 __FBSDID("$FreeBSD$");
 
-
-/*
- * New experimental definitions of IRQdisable and IRQenable
- * These keep FIQ's enabled since FIQ's are special.
- */
-
 #define DOMAIN_CLIENT	0x01
 
 #ifdef _ARM_ARCH_6
@@ -109,6 +103,7 @@ __FBSDID("$FreeBSD$");
 	.word	_C_LABEL(cpufuncs)
 .Lblocked_lock:
 	.word	_C_LABEL(blocked_lock)
+
 ENTRY(cpu_throw)
 	mov	r5, r1
 
@@ -187,13 +182,16 @@ ENTRY(cpu_throw)
 
 	/* Set the new tp */
 	ldr	r6, [r5, #(TD_MD + MD_TP)]
+#ifndef SMP
 	ldr	r4, =ARM_TP_ADDRESS
 	str	r6, [r4]
 	ldr	r6, [r5, #(TD_MD + MD_RAS_START)]
 	str	r6, [r4, #4] /* ARM_RAS_START */
 	ldr	r6, [r5, #(TD_MD + MD_RAS_END)]
 	str	r6, [r4, #8] /* ARM_RAS_END */
-
+#else
+	mcr p15, 0, r6, c13, c0, 3
+#endif
 	/* Hook in a new pcb */
 	GET_PCB(r6)
 	str	r7, [r6]
@@ -242,6 +240,7 @@ ENTRY(cpu_switch)
 	 * NOTE: We can now use r8-r13 until it is time to restore
 	 * them for the new process.
 	 */
+#ifndef SMP
 	/* Store the old tp */
 	ldr	r3, =ARM_TP_ADDRESS
 	ldr	r9, [r3]
@@ -258,7 +257,16 @@ ENTRY(cpu_switch)
 	str	r9, [r3, #4]
 	ldr	r9, [r1, #(TD_MD + MD_RAS_END)]
 	str	r9, [r3, #8]
+#else
+	/* Store the old tp */
+	mrc p15, 0, r9, c13, c0, 3
+	str	r9, [r0, #(TD_MD + MD_TP)]
 
+	/* Set the new tp */
+	ldr	r9, [r1, #(TD_MD + MD_TP)]
+	mcr p15, 0, r9, c13, c0, 3
+#endif
+	
 	/* Get the user structure for the new process in r9 */
 	ldr	r9, [r1, #(TD_PCB)]
 

Modified: projects/armv6/sys/arm/arm/vm_machdep.c
==============================================================================
--- projects/armv6/sys/arm/arm/vm_machdep.c	Wed Dec 28 14:48:33 2011	(r228928)
+++ projects/armv6/sys/arm/arm/vm_machdep.c	Wed Dec 28 15:03:34 2011	(r228929)
@@ -146,7 +146,11 @@ cpu_fork(register struct thread *td1, re
 	/* Setup to release spin count in fork_exit(). */
 	td2->td_md.md_spinlock_count = 1;
 	td2->td_md.md_saved_cspr = 0;
+#if !defined(SMP)
 	td2->td_md.md_tp = *(register_t *)ARM_TP_ADDRESS;
+#else
+	td2->td_md.md_tp = (register_t) get_tls();
+#endif
 }
 				
 void
@@ -373,7 +377,11 @@ cpu_set_user_tls(struct thread *td, void
 		td->td_md.md_tp = (register_t)tls_base;
 	else {
 		critical_enter();
+#if !defined(SMP)
 		*(register_t *)ARM_TP_ADDRESS = (register_t)tls_base;
+#else
+		set_tls((void *)tls_base);
+#endif
 		critical_exit();
 	}
 	return (0);

Modified: projects/armv6/sys/arm/include/asmacros.h
==============================================================================
--- projects/armv6/sys/arm/include/asmacros.h	Wed Dec 28 14:48:33 2011	(r228928)
+++ projects/armv6/sys/arm/include/asmacros.h	Wed Dec 28 15:03:34 2011	(r228929)
@@ -59,7 +59,7 @@
  * NOTE: r13 and r14 are stored separately as a work around for the
  * SA110 rev 2 STM^ bug
  */
-
+#ifndef SMP
 #define PUSHFRAME							   \
 	str	lr, [sp, #-4]!;		/* Push the return address */	   \
 	sub	sp, sp, #(4*17);	/* Adjust the stack pointer */	   \
@@ -74,6 +74,17 @@
 	str	r1, [r0];						   \
 	mov	r1, #0xffffffff;					   \
 	str	r1, [r0, #4];
+#else
+#define PUSHFRAME							   \
+	str	lr, [sp, #-4]!;		/* Push the return address */	   \
+	sub	sp, sp, #(4*17);	/* Adjust the stack pointer */	   \
+	stmia	sp, {r0-r12};		/* Push the user mode registers */ \
+	add	r0, sp, #(4*13);	/* Adjust the stack pointer */	   \
+	stmia	r0, {r13-r14}^;		/* Push the user mode registers */ \
+        mov     r0, r0;                 /* NOP for previous instruction */ \
+	mrs	r0, spsr_all;		/* Put the SPSR on the stack */	   \
+	str	r0, [sp, #-4]!;
+#endif
 
 /*
  * PULLFRAME - macro to pull a trap frame from the stack in the current mode
@@ -98,7 +109,7 @@
  * NOTE: r13 and r14 are stored separately as a work around for the
  * SA110 rev 2 STM^ bug
  */
-
+#ifndef SMP
 #define PUSHFRAMEINSVC							   \
 	stmdb	sp, {r0-r3};		/* Save 4 registers */		   \
 	mov	r0, lr;			/* Save xxx32 r14 */		   \
@@ -133,6 +144,30 @@
 	strhi   r3, [r0, #16];          /* the RAS_START location.      */ \
 	mrs     r0, spsr_all;                                              \
 	str     r0, [sp, #-4]!
+#else
+#define PUSHFRAMEINSVC							   \
+	stmdb	sp, {r0-r3};		/* Save 4 registers */		   \
+	mov	r0, lr;			/* Save xxx32 r14 */		   \
+	mov	r1, sp;			/* Save xxx32 sp */		   \
+	mrs	r3, spsr;		/* Save xxx32 spsr */		   \
+	mrs     r2, cpsr;		/* Get the CPSR */		   \
+	bic     r2, r2, #(PSR_MODE);	/* Fix for SVC mode */		   \
+	orr     r2, r2, #(PSR_SVC32_MODE);				   \
+	msr     cpsr_c, r2;		/* Punch into SVC mode */	   \
+	mov	r2, sp;			/* Save	SVC sp */		   \
+	str	r0, [sp, #-4]!;		/* Push return address */	   \
+	str	lr, [sp, #-4]!;		/* Push SVC lr */		   \
+	str	r2, [sp, #-4]!;		/* Push SVC sp */		   \
+	msr     spsr_all, r3;		/* Restore correct spsr */	   \
+	ldmdb	r1, {r0-r3};		/* Restore 4 regs from xxx mode */ \
+	sub	sp, sp, #(4*15);	/* Adjust the stack pointer */	   \
+	stmia	sp, {r0-r12};		/* Push the user mode registers */ \
+	add	r0, sp, #(4*13);	/* Adjust the stack pointer */	   \
+	stmia	r0, {r13-r14}^;		/* Push the user mode registers */ \
+        mov     r0, r0;                 /* NOP for previous instruction */ \
+	mrs	r0, spsr_all;		/* Put the SPSR on the stack */	   \
+	str	r0, [sp, #-4]!
+#endif
 
 /*
  * PULLFRAMEFROMSVCANDEXIT - macro to pull a trap frame from the stack

Modified: projects/armv6/sys/arm/include/sysarch.h
==============================================================================
--- projects/armv6/sys/arm/include/sysarch.h	Wed Dec 28 14:48:33 2011	(r228928)
+++ projects/armv6/sys/arm/include/sysarch.h	Wed Dec 28 15:03:34 2011	(r228929)
@@ -50,9 +50,11 @@
  * if ARM_RAS_END moves in relation to ARM_RAS_START (look for occurrances
  * of ldr/str rm,[rn, #4]).
  */
+#if !defined(SMP)
 #define ARM_TP_ADDRESS		(ARM_VECTORS_HIGH + 0x1000)
 #define ARM_RAS_START		(ARM_TP_ADDRESS + 4)
 #define ARM_RAS_END		(ARM_TP_ADDRESS + 8)
+#endif
 
 #ifndef LOCORE
 

From owner-svn-src-projects@FreeBSD.ORG  Wed Dec 28 15:15:00 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id B934F106564A;
	Wed, 28 Dec 2011 15:15:00 +0000 (UTC)
	(envelope-from gber@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id A3D728FC0A;
	Wed, 28 Dec 2011 15:15:00 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBSFF0OZ011947;
	Wed, 28 Dec 2011 15:15:00 GMT (envelope-from gber@svn.freebsd.org)
Received: (from gber@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBSFF0K5011940;
	Wed, 28 Dec 2011 15:15:00 GMT (envelope-from gber@svn.freebsd.org)
Message-Id: <201112281515.pBSFF0K5011940@svn.freebsd.org>
From: Grzegorz Bernacki <gber@FreeBSD.org>
Date: Wed, 28 Dec 2011 15:15:00 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228930 - in projects/armv6/sys/arm: arm include
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 28 Dec 2011 15:15:00 -0000

Author: gber
Date: Wed Dec 28 15:15:00 2011
New Revision: 228930
URL: http://svn.freebsd.org/changeset/base/228930

Log:
  Make low level code SMP aware.
  
  - implement crude TBL broadcasting
  - implement RFO in cache operations
  - use SHARED bit in page descriptor for SMP
  - create defines for different cache/memory model setup
  - cleanup a little
  
  Obtained from:	Marvell, Semihalf

Modified:
  projects/armv6/sys/arm/arm/cpufunc.c
  projects/armv6/sys/arm/arm/cpufunc_asm_pj4b.S
  projects/armv6/sys/arm/arm/pmap-v6.c
  projects/armv6/sys/arm/include/cpufunc.h
  projects/armv6/sys/arm/include/pmap.h
  projects/armv6/sys/arm/include/pte.h

Modified: projects/armv6/sys/arm/arm/cpufunc.c
==============================================================================
--- projects/armv6/sys/arm/arm/cpufunc.c	Wed Dec 28 15:03:34 2011	(r228929)
+++ projects/armv6/sys/arm/arm/cpufunc.c	Wed Dec 28 15:15:00 2011	(r228930)
@@ -571,10 +571,10 @@ struct cpu_functions pj4bv6_cpufuncs = {
 	armv6_idcache_wbinv_all,	/* idcache_wbinv_all	*/
 	pj4b_idcache_wbinv_range,	/* idcache_wbinv_all	*/
 
-	pj4b_l2cache_wbinv_all,		/* l2cache_wbinv_all	*/
-	pj4b_l2cache_wbinv_range,	/* l2cache_wbinv_range	*/
-	pj4b_l2cache_inv_range,		/* l2cache_inv_range	*/
-	pj4b_l2cache_wb_range,		/* l2cache_wb_range	*/
+	(void *)cpufunc_nullop,		/* l2cache_wbinv_all	*/
+	(void *)cpufunc_nullop,		/* l2cache_wbinv_range	*/
+	(void *)cpufunc_nullop,		/* l2cache_inv_range	*/
+	(void *)cpufunc_nullop,		/* l2cache_wb_range	*/
 
 	/* Other functions */
 
@@ -1298,7 +1298,7 @@ set_cpufuncs()
 		pmap_pte_init_generic();
 		goto out;
 	} else if (cputype == CPU_ID_ARM926EJS  || cputype == CPU_ID_ARM926ES ||
-	    cputype == CPU_ID_ARM1026EJS)
+	    cputype == CPU_ID_ARM1026EJS) {
 		cpufuncs = armv5_ec_cpufuncs;
 		get_cachetype_cp15();
 		pmap_pte_init_generic();
@@ -2241,34 +2241,33 @@ pj4bv6_setup(char *args)
 {
 	int cpuctrl;
 
-	cpuctrl = CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_SYST_ENABLE
-	    | CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE
-	    | CPU_CONTROL_BPRD_ENABLE  | CPU_CONTROL_V6_EXTPAGE
-	    | CPU_CONTROL_L2_ENABLE ;
-
+	cpuctrl = CPU_CONTROL_MMU_ENABLE;
 #ifndef ARM32_DISABLE_ALIGNMENT_FAULTS
 	cpuctrl |= CPU_CONTROL_AFLT_ENABLE;
 #endif
-
+	cpuctrl |= CPU_CONTROL_DC_ENABLE;
+	cpuctrl |= (0xf << 3);
 #ifdef __ARMEB__
 	cpuctrl |= CPU_CONTROL_BEND_ENABLE;
 #endif
-
+	cpuctrl |= CPU_CONTROL_SYST_ENABLE;
+	cpuctrl |= CPU_CONTROL_BPRD_ENABLE;
+	cpuctrl |= CPU_CONTROL_IC_ENABLE;
 	if (vector_page == ARM_VECTORS_HIGH)
 		cpuctrl |= CPU_CONTROL_VECRELOC;
+	cpuctrl |= (0x5 << 16);
+	cpuctrl |= CPU_CONTROL_V6_EXTPAGE;
+	/* XXX not yet */
+	/* cpuctrl |= CPU_CONTROL_L2_ENABLE; */
 
-	/* Clear out the cache */
+	/* Make sure caches are clean.  */
 	cpu_idcache_wbinv_all();
 	cpu_l2cache_wbinv_all();
 
-	/* Now really make sure they are clean.  */
-	__asm __volatile ("mcr\tp15, 0, r0, c7, c7, 0" : : );
-
 	/* Set the control register */
 	ctrl = cpuctrl;
 	cpu_control(0xffffffff, cpuctrl);
 
-	/* And again. */
 	cpu_idcache_wbinv_all();
 	cpu_l2cache_wbinv_all();
 }
@@ -2279,20 +2278,21 @@ pj4bv7_setup(args)
 {
 	int cpuctrl;
 
-	cpuctrl = CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_DC_ENABLE
-	    | (0xf << 3) | CPU_CONTROL_BPRD_ENABLE
-	    | CPU_CONTROL_IC_ENABLE | (0x5 << 16) | (1 < 22)
-	    | CPU_CONTROL_V6_EXTPAGE;
-
+	cpuctrl = CPU_CONTROL_MMU_ENABLE;
 #ifndef ARM32_DISABLE_ALIGNMENT_FAULTS
 	cpuctrl |= CPU_CONTROL_AFLT_ENABLE;
 #endif
+	cpuctrl |= CPU_CONTROL_DC_ENABLE;
+	cpuctrl |= (0xf << 3);
+	cpuctrl |= CPU_CONTROL_BPRD_ENABLE;
+	cpuctrl |= CPU_CONTROL_IC_ENABLE;
 	if (vector_page == ARM_VECTORS_HIGH)
 		cpuctrl |= CPU_CONTROL_VECRELOC;
+	cpuctrl |= (0x5 << 16) | (1 < 22);
+	cpuctrl |= CPU_CONTROL_V6_EXTPAGE;
 
 	/* Clear out the cache */
 	cpu_idcache_wbinv_all();
-	cpu_l2cache_wbinv_all();
 
 	/* Set the control register */
 	ctrl = cpuctrl;
@@ -2300,7 +2300,6 @@ pj4bv7_setup(args)
 
 	/* And again. */
 	cpu_idcache_wbinv_all();
-	cpu_l2cache_wbinv_all();
 }
 #endif /* CPU_MV_PJ4B */
 

Modified: projects/armv6/sys/arm/arm/cpufunc_asm_pj4b.S
==============================================================================
--- projects/armv6/sys/arm/arm/cpufunc_asm_pj4b.S	Wed Dec 28 15:03:34 2011	(r228929)
+++ projects/armv6/sys/arm/arm/cpufunc_asm_pj4b.S	Wed Dec 28 15:15:00 2011	(r228930)
@@ -65,23 +65,18 @@ ENTRY(pj4b_icache_sync_range)
 	RET
 
 ENTRY(pj4b_dcache_inv_range)
-	sub	r1, r1, #1
-	add	r1, r0, r1
-	mcrr	p15, 0, r1, r0, c6	/* invalidate DC range */
-	mcr	p15, 0, r0, c7, c10, 4	/* drain the write buffer */
-	RET
-
-ENTRY(pj4b_dcache_wb_range)
-	sub	r1, r1, #1
-	add	r1, r0, r1
-	mcrr	p15, 0, r1, r0, c12	/* clean DC range */
-	mcr	p15, 0, r0, c7, c10, 4	/* drain the write buffer */
-	RET
-
-ENTRY(pj4b_dcache_wbinv_range)
-	sub	r1, r1, #1
-	add	r1, r0, r1
-	mcrr	p15, 0, r1, r0, c14	/* clean and invalidate DC range */
+	ldr	ip, .Lpj4b_cache_line_size
+	ldr	ip, [ip]
+	sub	r1, r1, #1		/* Don't overrun */
+	sub	r3, ip, #1
+	and	r2, r0, r3
+	add	r1, r1, r2
+	bic	r0, r0, r3
+1:
+	mcr	p15, 0, r0, c7, c6, 1
+	add	r0, r0, ip
+	subs	r1, r1, ip
+	bpl	1b
 	mcr	p15, 0, r0, c7, c10, 4	/* drain the write buffer */
 	RET
 
@@ -101,18 +96,6 @@ ENTRY(armv6_dcache_wbinv_all)
 ENTRY(pj4b_idcache_wbinv_range)
 	sub	r1, r1, #1
 	add	r1, r0, r1
-	mcrr	p15, 0, r1, r0, c5	/* invalidate IC range */
-	mcrr	p15, 0, r1, r0, c14	/* clean and invalidate DC range */
-	mcr	p15, 0, r0, c7, c10, 4	/* drain the write buffer */
-	RET
-
-ENTRY(pj4b_l2cache_wbinv_all)
-	mcr	p15, 1, r0, c7, c11, 0	/* L2C clean all */
-	mcr	p15, 1, r0, c7, c7, 0	/* L2C invalidate all */
-	mcr	p15, 0, r0, c7, c10, 4	/* drain the write buffer */
-	RET
-
-ENTRY(pj4b_l2cache_wbinv_range)
 	ldr	ip, .Lpj4b_cache_line_size
 	ldr	ip, [ip]
 	sub	r1, r1, #1		/* Don't overrun */
@@ -121,14 +104,20 @@ ENTRY(pj4b_l2cache_wbinv_range)
 	add	r1, r1, r2
 	bic	r0, r0, r3
 1:
-	mcr	p15, 1, r0, c7, c15, 1	/* L2C clean and invalidate entry */
+#ifdef SMP
+	/* Request for ownership */
+	ldr	r2, [r0]
+	str	r2, [r0]
+#endif
+	mcr	p15, 0, r0, c7, c5, 1
+	mcr	p15, 0, r0, c7, c14, 1	/* L2C clean and invalidate entry */
 	add	r0, r0, ip
 	subs	r1, r1, ip
 	bpl	1b
 	mcr	p15, 0, r0, c7, c10, 4	/* drain the write buffer */
 	RET
 
-ENTRY(pj4b_l2cache_wb_range)
+ENTRY(pj4b_dcache_wbinv_range)
 	ldr	ip, .Lpj4b_cache_line_size
 	ldr	ip, [ip]
 	sub	r1, r1, #1		/* Don't overrun */
@@ -137,14 +126,19 @@ ENTRY(pj4b_l2cache_wb_range)
 	add	r1, r1, r2
 	bic	r0, r0, r3
 1:
-	mcr	p15, 1, r0, c7, c11, 1	/* L2C clean single entry by MVA */
+#ifdef SMP
+	/* Request for ownership */
+	ldr	r2, [r0]
+	str	r2, [r0]
+#endif
+	mcr	p15, 0, r0, c7, c14, 1
 	add	r0, r0, ip
 	subs	r1, r1, ip
 	bpl	1b
 	mcr	p15, 0, r0, c7, c10, 4	/* drain the write buffer */
 	RET
 
-ENTRY(pj4b_l2cache_inv_range)
+ENTRY(pj4b_dcache_wb_range)
 	ldr	ip, .Lpj4b_cache_line_size
 	ldr	ip, [ip]
 	sub	r1, r1, #1		/* Don't overrun */
@@ -153,7 +147,12 @@ ENTRY(pj4b_l2cache_inv_range)
 	add	r1, r1, r2
 	bic	r0, r0, r3
 1:
-	mcr	p15, 1, r0, c7, c7, 1	/* L2C invalidate single entry by MVA */
+#ifdef SMP
+	/* Request for ownership */
+	ldr	r2, [r0]
+	str	r2, [r0]
+#endif
+	mcr	p15, 0, r0, c7, c10, 1	/* L2C clean single entry by MVA */
 	add	r0, r0, ip
 	subs	r1, r1, ip
 	bpl	1b
@@ -208,5 +207,10 @@ ENTRY(pj4b_config)
 	orr	r0, r0, #(1 << 29)
 	orr	r0, r0, #(1 << 30)
 	mcr	p15, 1, r0, c15, c1, 2
-
+#if defined(SMP)
+	/* Set SMP mode in Auxiliary Control Register */
+	mrc	p15, 0, r0, c1, c0, 1
+	orr	r0, r0, #(1 << 5)
+	mcr	p15, 0, r0, c1, c0, 1
+#endif
 	RET

Modified: projects/armv6/sys/arm/arm/pmap-v6.c
==============================================================================
--- projects/armv6/sys/arm/arm/pmap-v6.c	Wed Dec 28 15:03:34 2011	(r228929)
+++ projects/armv6/sys/arm/arm/pmap-v6.c	Wed Dec 28 15:15:00 2011	(r228930)
@@ -476,13 +476,15 @@ void
 pmap_pte_init_mmu_v6(void)
 {
 
-	pte_l1_s_cache_mode = ARM_L1S_NRML_IWT_OWT;
-	pte_l2_l_cache_mode = ARM_L2L_NRML_IWT_OWT;
-	pte_l2_s_cache_mode = ARM_L2S_NRML_IWT_OWT;
-
-	pte_l1_s_cache_mode_pt = ARM_L1S_NRML_IWT_OWT;
-	pte_l2_l_cache_mode_pt = ARM_L2L_NRML_IWT_OWT;
-	pte_l2_s_cache_mode_pt = ARM_L2S_NRML_IWT_OWT;
+	if (PTE_PAGETABLE >= 3)
+		pmap_needs_pte_sync = 1;
+	pte_l1_s_cache_mode = l1_mem_types[PTE_CACHE];
+	pte_l2_l_cache_mode = l2l_mem_types[PTE_CACHE];
+	pte_l2_s_cache_mode = l2s_mem_types[PTE_CACHE];
+
+	pte_l1_s_cache_mode_pt = l1_mem_types[PTE_PAGETABLE];
+	pte_l2_l_cache_mode_pt = l2l_mem_types[PTE_PAGETABLE];
+	pte_l2_s_cache_mode_pt = l2s_mem_types[PTE_PAGETABLE];
 
 }
 
@@ -2065,11 +2067,16 @@ pmap_kenter_internal(vm_offset_t va, vm_
 		if (opte == 0)
 			l2b->l2b_occupancy++;
 	}
-	*pte = L2_S_PROTO | pa;
-	pmap_set_prot(pte, VM_PROT_READ | VM_PROT_WRITE, flags & KENTER_USER);
 
-	if (flags & KENTER_CACHE)
-		*pte |= pte_l2_s_cache_mode;
+	if (flags & KENTER_CACHE) {
+		*pte = L2_S_PROTO | pa | pte_l2_s_cache_mode;
+		pmap_set_prot(pte, VM_PROT_READ | VM_PROT_WRITE,
+		    flags & KENTER_USER);
+	} else {
+		*pte = L2_S_PROTO | pa;
+		pmap_set_prot(pte, VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE,
+		    0);
+	}
 
 	PDEBUG(1, printf("pmap_kenter: pte = %08x, opte = %08x, npte = %08x\n",
 	    (uint32_t) pte, opte, *pte));
@@ -2615,6 +2622,9 @@ do_l2b_alloc:
 		 *   so no need to re-do referenced emulation here.
 		 */
 		npte |= L2_S_PROTO;
+#ifdef SMP
+		npte |= L2_SHARED;
+#endif
 
 		nflags |= PVF_REF;
 

Modified: projects/armv6/sys/arm/include/cpufunc.h
==============================================================================
--- projects/armv6/sys/arm/include/cpufunc.h	Wed Dec 28 15:03:34 2011	(r228929)
+++ projects/armv6/sys/arm/include/cpufunc.h	Wed Dec 28 15:15:00 2011	(r228930)
@@ -176,6 +176,8 @@ extern u_int cputype;
 #define cpu_faultstatus()	cpufuncs.cf_faultstatus()
 #define cpu_faultaddress()	cpufuncs.cf_faultaddress()
 
+#ifndef SMP
+
 #define	cpu_tlb_flushID()	cpufuncs.cf_tlb_flushID()
 #define	cpu_tlb_flushID_SE(e)	cpufuncs.cf_tlb_flushID_SE(e)
 #define	cpu_tlb_flushI()	cpufuncs.cf_tlb_flushI()
@@ -183,6 +185,45 @@ extern u_int cputype;
 #define	cpu_tlb_flushD()	cpufuncs.cf_tlb_flushD()
 #define	cpu_tlb_flushD_SE(e)	cpufuncs.cf_tlb_flushD_SE(e)
 
+#else
+void tlb_broadcast(int);
+
+#define	cpu_tlb_flushID() do { \
+	cpufuncs.cf_tlb_flushID(); \
+	tlb_broadcast(7); \
+} while(0)
+
+#define	cpu_tlb_flushID_SE(e) do { \
+	cpufuncs.cf_tlb_flushID_SE(e); \
+	tlb_broadcast(7); \
+} while(0)
+
+
+#define	cpu_tlb_flushI() do { \
+	cpufuncs.cf_tlb_flushI(); \
+	tlb_broadcast(7); \
+} while(0)
+
+
+#define	cpu_tlb_flushI_SE(e) do { \
+	cpufuncs.cf_tlb_flushI_SE(e); \
+	tlb_broadcast(7); \
+} while(0)
+
+
+#define	cpu_tlb_flushD() do { \
+	cpufuncs.cf_tlb_flushD(); \
+	tlb_broadcast(7); \
+} while(0)
+
+
+#define	cpu_tlb_flushD_SE(e) do { \
+	cpufuncs.cf_tlb_flushD_SE(e); \
+	tlb_broadcast(7); \
+} while(0)
+
+#endif
+
 #define	cpu_icache_sync_all()	cpufuncs.cf_icache_sync_all()
 #define	cpu_icache_sync_range(a, s) cpufuncs.cf_icache_sync_range((a), (s))
 
@@ -442,11 +483,6 @@ void	pj4b_dcache_wb_range		(vm_offset_t,
 
 void	pj4b_idcache_wbinv_range	(vm_offset_t, vm_size_t);
 
-void	pj4b_l2cache_wbinv_range	(vm_offset_t, vm_size_t);
-void	pj4b_l2cache_inv_range		(vm_offset_t, vm_size_t);
-void	pj4b_l2cache_wb_range		(vm_offset_t, vm_size_t);
-void	pj4b_l2cache_wbinv_all		(void);
-
 void	pj4b_drain_readbuf		(void);
 void	pj4b_flush_brnchtgt_all		(void);
 void	pj4b_flush_brnchtgt_va		(u_int);

Modified: projects/armv6/sys/arm/include/pmap.h
==============================================================================
--- projects/armv6/sys/arm/include/pmap.h	Wed Dec 28 15:03:34 2011	(r228929)
+++ projects/armv6/sys/arm/include/pmap.h	Wed Dec 28 15:15:00 2011	(r228930)
@@ -55,8 +55,12 @@
 /*
  * Pte related macros
  */
+#ifdef SMP
+#define PTE_NOCACHE	2
+#else
 #define PTE_NOCACHE	1
-#define PTE_CACHE	6
+#endif
+#define PTE_CACHE	4
 #define PTE_PAGETABLE	4
 
 enum mem_type {
@@ -351,14 +355,21 @@ extern int pmap_needs_pte_sync;
 #define	L2_S_PROT_MASK		(L2_S_PROT_U|L2_S_PROT_R)
 #define	L2_S_WRITABLE(pte)	(!(pte & L2_APX))
 
+#ifndef SMP
 #define	L1_S_CACHE_MASK		(L1_S_TEX_MASK|L1_S_B|L1_S_C)
 #define	L2_L_CACHE_MASK		(L2_L_TEX_MASK|L2_B|L2_C)
 #define	L2_S_CACHE_MASK		(L2_S_TEX_MASK|L2_B|L2_C)
+#else
+#define	L1_S_CACHE_MASK		(L1_S_TEX_MASK|L1_S_B|L1_S_C|L1_SHARED)
+#define	L2_L_CACHE_MASK		(L2_L_TEX_MASK|L2_B|L2_C|L2_SHARED)
+#define	L2_S_CACHE_MASK		(L2_S_TEX_MASK|L2_B|L2_C|L2_SHARED)
+#endif  /* SMP */
 
 #define	L1_S_PROTO		(L1_TYPE_S)
 #define	L1_C_PROTO		(L1_TYPE_C)
 #define	L2_S_PROTO		(L2_TYPE_S)
 
+#ifndef SMP
 #define ARM_L1S_STRONG_ORD	(0)
 #define ARM_L1S_DEVICE_NOSHARE	(L1_S_TEX(2))
 #define ARM_L1S_DEVICE_SHARE	(L1_S_B)
@@ -382,7 +393,31 @@ extern int pmap_needs_pte_sync;
 #define ARM_L2S_NRML_IWT_OWT	(L2_C)
 #define ARM_L2S_NRML_IWB_OWB	(L2_C|L2_B)
 #define ARM_L2S_NRML_IWBA_OWBA	(L2_S_TEX(1)|L2_C|L2_B)
+#else
+#define ARM_L1S_STRONG_ORD	(0)
+#define ARM_L1S_DEVICE_NOSHARE	(L1_S_TEX(2))
+#define ARM_L1S_DEVICE_SHARE	(L1_S_B)
+#define ARM_L1S_NRML_NOCACHE	(L1_S_TEX(1)|L1_SHARED)
+#define ARM_L1S_NRML_IWT_OWT	(L1_S_C|L1_SHARED)
+#define ARM_L1S_NRML_IWB_OWB	(L1_S_C|L1_S_B|L1_SHARED)
+#define ARM_L1S_NRML_IWBA_OWBA	(L1_S_TEX(1)|L1_S_C|L1_S_B|L1_SHARED)
 
+#define ARM_L2L_STRONG_ORD	(0)
+#define ARM_L2L_DEVICE_NOSHARE	(L2_L_TEX(2))
+#define ARM_L2L_DEVICE_SHARE	(L2_B)
+#define ARM_L2L_NRML_NOCACHE	(L2_L_TEX(1)|L2_SHARED)
+#define ARM_L2L_NRML_IWT_OWT	(L2_C|L2_SHARED)
+#define ARM_L2L_NRML_IWB_OWB	(L2_C|L2_B|L2_SHARED)
+#define ARM_L2L_NRML_IWBA_OWBA	(L2_L_TEX(1)|L2_C|L2_B|L2_SHARED)
+
+#define ARM_L2S_STRONG_ORD	(0)
+#define ARM_L2S_DEVICE_NOSHARE	(L2_S_TEX(2))
+#define ARM_L2S_DEVICE_SHARE	(L2_B)
+#define ARM_L2S_NRML_NOCACHE	(L2_S_TEX(1)|L2_SHARED)
+#define ARM_L2S_NRML_IWT_OWT	(L2_C|L2_SHARED)
+#define ARM_L2S_NRML_IWB_OWB	(L2_C|L2_B|L2_SHARED)
+#define ARM_L2S_NRML_IWBA_OWBA	(L2_S_TEX(1)|L2_C|L2_B|L2_SHARED)
+#endif /* SMP */
 #endif /* ARM_NMMUS > 1 */
 
 #if (ARM_MMU_SA1 == 1) && (ARM_NMMUS == 1)

Modified: projects/armv6/sys/arm/include/pte.h
==============================================================================
--- projects/armv6/sys/arm/include/pte.h	Wed Dec 28 15:03:34 2011	(r228929)
+++ projects/armv6/sys/arm/include/pte.h	Wed Dec 28 15:15:00 2011	(r228930)
@@ -37,32 +37,13 @@
 #ifndef _MACHINE_PTE_H_
 #define _MACHINE_PTE_H_
 
-#define PDSHIFT		20		/* LOG2(NBPDR) */
-#define NBPD		(1 << PDSHIFT)	/* bytes/page dir */
-#define NPTEPD		(NBPD / PAGE_SIZE)
-
 #ifndef LOCORE
 typedef	uint32_t	pd_entry_t;		/* page directory entry */
 typedef	uint32_t	pt_entry_t;		/* page table entry */
 #endif
 
-#define PD_MASK		0xfff00000	/* page directory address bits */
-#define PT_MASK		0x000ff000	/* page table address bits */
-
 #define PG_FRAME	0xfffff000
 
-/* The PT_SIZE definition is misleading... A page table is only 0x400
- * bytes long. But since VM mapping can only be done to 0x1000 a single
- * 1KB blocks cannot be steered to a va by itself. Therefore the
- * pages tables are allocated in blocks of 4. i.e. if a 1 KB block
- * was allocated for a PT then the other 3KB would also get mapped
- * whenever the 1KB was mapped.
- */
- 
-#define PT_RSIZE	0x0400		/* Real page table size */
-#define PT_SIZE		0x1000
-#define PD_SIZE		0x4000
-
 /* Page table types and masks */
 #define L1_PAGE		0x01	/* L1 page table mapping */
 #define L1_SECTION	0x02	/* L1 section mapping */
@@ -73,27 +54,6 @@ typedef	uint32_t	pt_entry_t;		/* page ta
 #define L2_MASK		0x03	/* Mask for L2 entry type */
 #define L2_INVAL	0x00	/* L2 invalid type */
 
-/* PTE construction macros */
-#define	L2_LPTE(p, a, f)	((p) | PT_AP(a) | L2_LPAGE | (f))
-#define L2_SPTE(p, a, f)	((p) | PT_AP(a) | L2_SPAGE | (f))
-#define L2_PTE(p, a)		L2_SPTE((p), (a), PT_CACHEABLE)
-#define L2_PTE_NC(p, a)		L2_SPTE((p), (a), PT_B)
-#define L2_PTE_NC_NB(p, a)	L2_SPTE((p), (a), 0)
-#define L1_SECPTE(p, a, f)	((p) | ((a) << AP_SECTION_SHIFT) | (f) \
-				| L1_SECTION | PT_U)
-
-#define L1_PTE(p)	((p) | 0x00 | L1_PAGE | PT_U)
-#define L1_SEC(p, c)	L1_SECPTE((p), AP_KRW, (c))
-
-#define L1_SEC_SIZE	(1 << PDSHIFT)
-#define L2_LPAGE_SIZE	(NBPG * 16)
-
-/* Domain types */
-#define DOMAIN_FAULT		0x00
-#define DOMAIN_CLIENT		0x01
-#define DOMAIN_RESERVED		0x02
-#define DOMAIN_MANAGER		0x03
-
 /* L1 and L2 address masks */
 #define L1_ADDR_MASK		0xfffffc00
 #define L2_ADDR_MASK		0xfffff000
@@ -260,6 +220,7 @@ typedef	uint32_t	pt_entry_t;		/* page ta
 #define	L2_AP2(x)	((x) << 8)	/* access permissions (sp 2) */
 #define	L2_AP3(x)	((x) << 10)	/* access permissions (sp 3) */
 
+#define	L2_SHARED	(1 << 10)
 #define	L2_APX		(1 << 9)
 #define	L2_XN		(1 << 0)
 #define	L2_L_TEX_MASK	(0x7 << 12)	/* Type Extension */
@@ -324,7 +285,7 @@ typedef	uint32_t	pt_entry_t;		/* page ta
  *
  * Cache attributes with L2 present, S = 0
  * T E X C B   L1 i-cache L1 d-cache L1 DC WP  L2 cacheable write coalesce
- * 0 0 0 0 0 	N	  N 		- 	N		N 
+ * 0 0 0 0 0	N	  N		-	N		N
  * 0 0 0 0 1	N	  N		-	N		Y
  * 0 0 0 1 0	Y	  Y		WT	N		Y
  * 0 0 0 1 1	Y	  Y		WB	Y		Y
@@ -351,7 +312,7 @@ typedef	uint32_t	pt_entry_t;		/* page ta
  *
   * Cache attributes with L2 present, S = 1
  * T E X C B   L1 i-cache L1 d-cache L1 DC WP  L2 cacheable write coalesce
- * 0 0 0 0 0 	N	  N 		- 	N		N 
+ * 0 0 0 0 0	N	  N		-	N		N
  * 0 0 0 0 1	N	  N		-	N		Y
  * 0 0 0 1 0	Y	  Y		-	N		Y
  * 0 0 0 1 1	Y	  Y		WT	Y		Y

From owner-svn-src-projects@FreeBSD.ORG  Wed Dec 28 15:20:56 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 4F804106564A;
	Wed, 28 Dec 2011 15:20:56 +0000 (UTC)
	(envelope-from gber@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 3CFFB8FC17;
	Wed, 28 Dec 2011 15:20:56 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBSFKuMk012151;
	Wed, 28 Dec 2011 15:20:56 GMT (envelope-from gber@svn.freebsd.org)
Received: (from gber@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBSFKu9I012147;
	Wed, 28 Dec 2011 15:20:56 GMT (envelope-from gber@svn.freebsd.org)
Message-Id: <201112281520.pBSFKu9I012147@svn.freebsd.org>
From: Grzegorz Bernacki <gber@FreeBSD.org>
Date: Wed, 28 Dec 2011 15:20:56 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228931 - in projects/armv6/sys/arm: arm include
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 28 Dec 2011 15:20:56 -0000

Author: gber
Date: Wed Dec 28 15:20:55 2011
New Revision: 228931
URL: http://svn.freebsd.org/changeset/base/228931

Log:
  Add architecture related SMP code.
  
  This work is based on MIPS approach mainly because it is very simple and
  works good as a initial implementation. We can consider more sophisticated
  schema like for example powerpc implementation which uses kobj.
  
  Obtained from:	Marvell, Semihalf

Modified:
  projects/armv6/sys/arm/arm/locore.S
  projects/armv6/sys/arm/arm/mp_machdep.c
  projects/armv6/sys/arm/include/smp.h

Modified: projects/armv6/sys/arm/arm/locore.S
==============================================================================
--- projects/armv6/sys/arm/arm/locore.S	Wed Dec 28 15:15:00 2011	(r228930)
+++ projects/armv6/sys/arm/arm/locore.S	Wed Dec 28 15:20:55 2011	(r228931)
@@ -1,6 +1,7 @@
 /*	$NetBSD: locore.S,v 1.14 2003/04/20 16:21:40 thorpej Exp $	*/
 
 /*-
+ * Copyright 2011 Semihalf
  * Copyright (C) 1994-1997 Mark Brinicombe
  * Copyright (C) 1994 Brini
  * All rights reserved.
@@ -40,7 +41,7 @@
 __FBSDID("$FreeBSD$");
 
 /* What size should this really be ? It is only used by initarm() */
-#define INIT_ARM_STACK_SIZE	2048
+#define INIT_ARM_STACK_SIZE	(2048 * 4)
 
 /*
  * This is for kvm_mkdb, and should be the address of the beginning
@@ -228,10 +229,15 @@ Lstartup_pagetable:
 mmu_init_table:
 	/* fill all table VA==PA */
 	/* map SDRAM VA==PA, WT cacheable */
+#if !defined(SMP)
 	MMU_INIT(PHYSADDR, PHYSADDR , 64, L1_TYPE_S|L1_S_C|L1_S_AP(AP_KRW))
 	/* map VA 0xc0000000..0xc3ffffff to PA */
 	MMU_INIT(KERNBASE, PHYSADDR, 64, L1_TYPE_S|L1_S_C|L1_S_AP(AP_KRW))
-
+#else
+	MMU_INIT(PHYSADDR, PHYSADDR , 64, L1_TYPE_S|L1_SHARED|L1_S_AP(AP_KRW))
+	/* map VA 0xc0000000..0xc3ffffff to PA */
+	MMU_INIT(KERNBASE, PHYSADDR, 64, L1_TYPE_S|L1_SHARED|L1_S_AP(AP_KRW))
+#endif
 	.word 0	/* end of table */
 #endif
 .Lstart:
@@ -246,6 +252,11 @@ mmu_init_table:
 
 .Lvirt_done:
 	.word	virt_done
+#if defined(SMP)
+.Lmpvirt_done:
+	.word	mpvirt_done
+#endif
+
 .Lmainreturned:
 	.asciz	"main() returned"
 	.align	0
@@ -260,6 +271,118 @@ svcstk:
 .Lcpufuncs:
 	.word	_C_LABEL(cpufuncs)
 
+#if defined(SMP)
+Lsramaddr:
+	.word	0xffff0080
+
+/* Use carefully!!! Changes r0, r1 */
+#define	AP_DEBUG(tmp)			\
+	mrc	p15, 0, r1, c0, c0, 5;	\
+	ldr	r0, Lsramaddr;		\
+	add	r0, r1, lsl #2;		\
+	mov	r1, tmp;		\
+	str	r1, [r0], #0x0000;
+
+
+ASENTRY_NP(mptramp)
+	mov	r0, #0
+	mcr	p15, 0, r0, c7, c7, 0
+
+	AP_DEBUG(#1)
+
+	mrs	r3, cpsr_all
+	bic	r3, r3, #(PSR_MODE)
+	orr	r3, r3, #(PSR_SVC32_MODE)
+        msr	cpsr_all, r3
+
+	mrc	p15, 0, r0, c0, c0, 5
+	and	r0, #0x0f		/* Get CPU ID */
+
+	/* Read boot address for CPU */
+	mov	r1, #0x100
+	mul	r0, r0, r1
+	ldr	r1, Lpmureg
+	add	r0, r0, r1
+	ldr	r1, [r0], #0x00
+
+	mov pc, r1
+
+Lpmureg:
+        .word   0xd0022124
+
+ASENTRY_NP(mpentry)
+
+	AP_DEBUG(#2)
+
+	/* Make sure interrupts are disabled. */
+	mrs	r7, cpsr
+	orr	r7, r7, #(I32_bit|F32_bit)
+	msr	cpsr_c, r7
+
+	/* Disable MMU for a while */
+	mrc	p15, 0, r2, c1, c0, 0
+	bic	r2, r2, #(CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_DC_ENABLE |\
+	    CPU_CONTROL_WBUF_ENABLE)
+	bic	r2, r2, #(CPU_CONTROL_IC_ENABLE)
+	bic	r2, r2, #(CPU_CONTROL_BPRD_ENABLE)
+	mcr	p15, 0, r2, c1, c0, 0
+
+	nop
+	nop
+	nop
+
+	AP_DEBUG(#3)
+
+Ltag:
+	ldr	r0, Lstartup_pagetable
+	mcr	p15, 0, r0, c2, c0, 0	/* Set TTB */
+	mcr	p15, 0, r0, c8, c7, 0	/* Flush TLB */
+
+#if defined(CPU_ARM11) || defined(CPU_MV_PJ4B)
+	mov	r0, #0
+	mcr	p15, 0, r0, c13, c0, 1	/* Set ASID to 0 */
+#endif
+
+	AP_DEBUG(#4)
+
+	/* Set the Domain Access register.  Very important! */
+	mov	r0, #((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2)) | DOMAIN_CLIENT)
+	mcr	p15, 0, r0, c3, c0, 0
+	/* Enable MMU */
+	mrc	p15, 0, r0, c1, c0, 0
+#if defined(CPU_ARM11) || defined(CPU_MV_PJ4B)
+	orr	r0, r0, #CPU_CONTROL_V6_EXTPAGE
+#endif
+	orr	r0, r0, #(CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_DC_ENABLE)
+	mcr	p15, 0, r0, c1, c0, 0
+	nop
+	nop
+	nop
+	CPWAIT(r0)
+
+	adr	r1, .Lstart
+	ldmia	r1, {r1, r2, sp}	/* Set initial stack and */
+	mrc	p15, 0, r0, c0, c0, 5
+	mov	r1, #2048
+	mul	r2, r1, r0
+	sub	sp, sp, r2
+	str	r1, [sp]
+	ldr	pc, .Lmpvirt_done
+
+mpvirt_done:
+
+	mov	fp, #0			/* trace back starts here */
+	bl	_C_LABEL(init_secondary)	/* Off we go */
+
+	adr	r0, .Lmpreturned
+	b	_C_LABEL(panic)
+	/* NOTREACHED */
+
+.Lmpreturned:
+	.asciz	"main() returned"
+	.align	0
+#endif
+
 ENTRY_NP(cpu_halt)
 	mrs     r2, cpsr
 	bic	r2, r2, #(PSR_MODE)

Modified: projects/armv6/sys/arm/arm/mp_machdep.c
==============================================================================
--- projects/armv6/sys/arm/arm/mp_machdep.c	Wed Dec 28 15:15:00 2011	(r228930)
+++ projects/armv6/sys/arm/arm/mp_machdep.c	Wed Dec 28 15:20:55 2011	(r228931)
@@ -28,34 +28,43 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/bus.h>
+#include <sys/kernel.h>
 #include <sys/lock.h>
 #include <sys/mutex.h>
 #include <sys/proc.h>
 #include <sys/pcpu.h>
 #include <sys/sched.h>
 #include <sys/smp.h>
+#include <sys/ktr.h>
 
 #include <vm/vm.h>
 #include <vm/vm_extern.h>
 #include <vm/vm_kern.h>
+#include <vm/pmap.h>
 
+#include <machine/cpu.h>
 #include <machine/smp.h>
+#include <machine/pcb.h>
+#include <machine/pte.h>
+#include <machine/intr.h>
 
 extern struct pcpu __pcpu[];
-
 /* used to hold the AP's until we are ready to release them */
-static struct mtx ap_boot_mtx;
+struct mtx ap_boot_mtx;
+struct pcb stoppcbs[MAXCPU];
 
 /* # of Applications processors */
-int mp_naps;
+volatile int mp_naps;
 
 /* Set to 1 once we're ready to let the APs out of the pen. */
-static volatile int aps_ready = 0;
+volatile int aps_ready = 0;
+
+static int ipi_handler(void *arg);
+void set_stackptrs(int cpu);
 
 /* Temporary variables for init_secondary()  */
 void *dpcpu;
 
-
 /* Determine if we running MP machine */
 int
 cpu_mp_probe(void)
@@ -73,10 +82,12 @@ start_ap(int cpu)
 
 	cpus = mp_naps;
 
+	dpcpu = (void *)kmem_alloc(kernel_map, DPCPU_SIZE);
 	if (platform_mp_start_ap(cpu) != 0)
 		return (-1);			/* could not start AP */
 
 	for (ms = 0; ms < 5000; ++ms) {
+		cpu_dcache_wbinv_all();
 		if (mp_naps > cpus)
 			return (0);		/* success */
 		else
@@ -86,7 +97,6 @@ start_ap(int cpu)
 	return (-2);
 }
 
-
 /* Initialize and fire up non-boot processors */
 void
 cpu_mp_start(void)
@@ -95,74 +105,89 @@ cpu_mp_start(void)
 
 	mtx_init(&ap_boot_mtx, "ap boot", NULL, MTX_SPIN);
 
-	for (i = 1; i < mp_maxid; i++) {
+	for (i = 1; i < mp_ncpus; i++) {
 		error = start_ap(i);
 		if (error) {
 			printf("AP #%d failed to start\n", i);
 			continue;
 		}
+
+		printf("AP #%d started\n", i);
 		CPU_SET(i, &all_cpus);
 	}
-
-
-	return;
 }
 
 /* Introduce rest of cores to the world */
 void
 cpu_mp_announce(void)
 {
-	return;
+
 }
 
+extern vm_paddr_t pmap_pa;
 void
 init_secondary(int cpu)
 {
 	struct pcpu *pc;
-	void *dpcpu;
 
-	/* Per-cpu initialization */
+	pj4b_config();
+
+	pj4bv6_setup(NULL);
+
+	setttb(pmap_pa);
+	cpu_tlb_flushID();
+
 	pc = &__pcpu[cpu];
+	set_pcpu(pc);
 	pcpu_init(pc, cpu, sizeof(struct pcpu));
 
-	dpcpu = (void *)kmem_alloc(kernel_map, DPCPU_SIZE);
 	dpcpu_init(dpcpu, cpu);
 
+	/* Provide stack pointers for other processor modes. */
+	set_stackptrs(cpu);
+
 	/* Signal our startup to BSP */
 	mp_naps++;
+	cpu_dcache_wbinv_all();
 
 	/* Spin until the BSP releases the APs */
 	while (!aps_ready)
-		;
+		cpu_dcache_wbinv_all();
 
 	/* Initialize curthread */
 	KASSERT(PCPU_GET(idlethread) != NULL, ("no idle thread"));
-	PCPU_SET(curthread, PCPU_GET(idlethread));
-
+	pc->pc_curthread = pc->pc_idlethread;
+	pc->pc_curpcb = pc->pc_idlethread->td_pcb;
 
 	mtx_lock_spin(&ap_boot_mtx);
 
-	printf("SMP: AP CPU #%d Launched!\n", cpu);
-
+	cpu_dcache_wbinv_all();
 	smp_cpus++;
+	cpu_dcache_wbinv_all();
 
 	if (smp_cpus == mp_ncpus) {
 		/* enable IPI's, tlb shootdown, freezes etc */
+		cpu_dcache_wbinv_all();
 		atomic_store_rel_int(&smp_started, 1);
-		/*
-		 * XXX do we really need it
-		 * smp_active = 1;
-		 */
+		cpu_dcache_wbinv_all();
+		smp_active = 1;
 	}
 
 	mtx_unlock_spin(&ap_boot_mtx);
 
+	/* Enable ipi */
+	arm_unmask_irq(0);
+	enable_interrupts(I32_bit);
+
+	cpu_dcache_wbinv_all();
 	while (smp_started == 0)
-		;
+		cpu_dcache_wbinv_all();
 
 	/* Start per-CPU event timers. */
 	cpu_initclocks_ap();
 
+	CTR0(KTR_SMP, "go into scheduler");
+
 	/* Enter the scheduler */
 	sched_throw(NULL);
 
@@ -170,10 +195,102 @@ init_secondary(int cpu)
 	/* NOTREACHED */
 }
 
+static int
+ipi_handler(void *arg)
+{
+	u_int	cpu, ipi;
+
+	cpu = PCPU_GET(cpuid);
+
+	ipi = pic_ipi_get();
+
+	while ((ipi != 0x3ff)) {
+		switch (ipi) {
+		case IPI_RENDEZVOUS:
+			CTR0(KTR_SMP, "IPI_RENDEZVOUS");
+			smp_rendezvous_action();
+			break;
+
+		case IPI_AST:
+			CTR0(KTR_SMP, "IPI_AST");
+			break;
+
+		case IPI_STOP:
+		case IPI_STOP_HARD:
+			/*
+			 * IPI_STOP_HARD is mapped to IPI_STOP so it is not
+			 * necessary to add it in the switch.
+			 */
+			CTR0(KTR_SMP, "IPI_STOP or IPI_STOP_HARD");
+
+			savectx(&stoppcbs[cpu]);
+
+			/* Indicate we are stopped */
+			CPU_SET_ATOMIC(cpu, &stopped_cpus);
+
+			/* Wait for restart */
+			while (!CPU_ISSET(cpu, &started_cpus))
+				cpu_spinwait();
+
+			CPU_CLR_ATOMIC(cpu, &started_cpus);
+			CPU_CLR_ATOMIC(cpu, &stopped_cpus);
+			CTR0(KTR_SMP, "IPI_STOP (restart)");
+			break;
+		case IPI_PREEMPT:
+			CTR1(KTR_SMP, "%s: IPI_PREEMPT", __func__);
+			sched_preempt(curthread);
+			break;
+		case IPI_HARDCLOCK:
+			CTR1(KTR_SMP, "%s: IPI_HARDCLOCK", __func__);
+			hardclockintr();
+			break;
+		case IPI_TLB:
+			CTR1(KTR_SMP, "%s: IPI_TLB", __func__);
+			cpufuncs.cf_tlb_flushID();
+			break;
+		default:
+			panic("Unknown IPI 0x%0x on cpu %d", ipi, curcpu);
+		}
+
+		pic_ipi_clear(ipi);
+		ipi = pic_ipi_get();
+	}
+
+	return (FILTER_HANDLED);
+}
+
+static void
+release_aps(void *dummy __unused)
+{
+
+	if (mp_ncpus == 1)
+		return;
+
+	/*
+	 * IPI handler
+	 */
+	arm_setup_irqhandler("ipi", ipi_handler, NULL, NULL, 0,
+	    INTR_TYPE_MISC | INTR_EXCL, NULL);
+
+	/* Enable ipi */
+	arm_unmask_irq(0);
+
+	atomic_store_rel_int(&aps_ready, 1);
+	cpu_dcache_wbinv_all();
+	printf("Release APs\n");
+	while (smp_started == 0) {
+		cpu_dcache_wbinv_all();
+		DELAY(5000);
+	}
+}
+
+SYSINIT(start_aps, SI_SUB_SMP, SI_ORDER_FIRST, release_aps, NULL);
+
 struct cpu_group *
 cpu_topo(void)
 {
-	return (smp_topo_1level(CG_SHARE_L2, 4, 0));
+
+	return (smp_topo_1level(CG_SHARE_L2, 1, 0));
 }
 
 void
@@ -187,21 +304,37 @@ cpu_mp_setmaxid(void)
 void
 ipi_all_but_self(u_int ipi)
 {
+	cpuset_t other_cpus;
 
-	return;
+	other_cpus = all_cpus;
+	CPU_CLR(PCPU_GET(cpuid), &other_cpus);
+	CTR2(KTR_SMP, "%s: ipi: %x", __func__, ipi);
+	platform_ipi_send(other_cpus, ipi);
 }
 
 void
 ipi_cpu(int cpu, u_int ipi)
 {
+	cpuset_t cpus;
 
-	return;
+	CPU_SET(cpu, &cpus);
+
+	CTR3(KTR_SMP, "%s: cpu: %d, ipi: %x", __func__, cpu, ipi);
+	platform_ipi_send(cpus, ipi);
 }
 
 void
 ipi_selected(cpuset_t cpus, u_int ipi)
 {
 
-	return;
+	CTR2(KTR_SMP, "%s: ipi: %x", __func__, ipi);
+	platform_ipi_send(cpus, ipi);
 }
 
+void
+tlb_broadcast(int ipi)
+{
+
+	if (smp_started)
+		ipi_all_but_self(ipi);
+}

Modified: projects/armv6/sys/arm/include/smp.h
==============================================================================
--- projects/armv6/sys/arm/include/smp.h	Wed Dec 28 15:15:00 2011	(r228930)
+++ projects/armv6/sys/arm/include/smp.h	Wed Dec 28 15:20:55 2011	(r228931)
@@ -11,6 +11,7 @@
 #define IPI_STOP	4
 #define IPI_STOP_HARD	5
 #define IPI_HARDCLOCK	6
+#define IPI_TLB		7
 
 void	init_secondary(int cpu);
 
@@ -18,10 +19,16 @@ void	ipi_all_but_self(u_int ipi);
 void	ipi_cpu(int cpu, u_int ipi);
 void	ipi_selected(cpuset_t cpus, u_int ipi);
 
+/* PIC interface */
+void	pic_ipi_send(cpuset_t cpus, u_int ipi);
+void	pic_ipi_clear(int ipi);
+int	pic_ipi_get(void);
+
 /* Platform interface */
 void	platform_mp_setmaxid(void);
 int	platform_mp_probe(void);
 int	platform_mp_start_ap(int cpuid);
 
+void	platform_ipi_send(cpuset_t cpus, u_int ipi);
 
 #endif /* !_MACHINE_SMP_H_ */

From owner-svn-src-projects@FreeBSD.ORG  Wed Dec 28 15:26:38 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id C550E106566B;
	Wed, 28 Dec 2011 15:26:38 +0000 (UTC)
	(envelope-from gber@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id B308C8FC14;
	Wed, 28 Dec 2011 15:26:38 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBSFQcmb012365;
	Wed, 28 Dec 2011 15:26:38 GMT (envelope-from gber@svn.freebsd.org)
Received: (from gber@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBSFQcuk012361;
	Wed, 28 Dec 2011 15:26:38 GMT (envelope-from gber@svn.freebsd.org)
Message-Id: <201112281526.pBSFQcuk012361@svn.freebsd.org>
From: Grzegorz Bernacki <gber@FreeBSD.org>
Date: Wed, 28 Dec 2011 15:26:38 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228932 - in projects/armv6/sys/arm/mv: . armadaxp
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 28 Dec 2011 15:26:39 -0000

Author: gber
Date: Wed Dec 28 15:26:38 2011
New Revision: 228932
URL: http://svn.freebsd.org/changeset/base/228932

Log:
  Implement ARM SMP related functions for Armada XP.
  
  - implement IPI
  - setup stacks for each core
  - low level bootstrap code
  
  Obtained from:	Marvell, Semihalf

Modified:
  projects/armv6/sys/arm/mv/armadaxp/armadaxp_mp.c
  projects/armv6/sys/arm/mv/mpic.c
  projects/armv6/sys/arm/mv/mv_machdep.c

Modified: projects/armv6/sys/arm/mv/armadaxp/armadaxp_mp.c
==============================================================================
--- projects/armv6/sys/arm/mv/armadaxp/armadaxp_mp.c	Wed Dec 28 15:20:55 2011	(r228931)
+++ projects/armv6/sys/arm/mv/armadaxp/armadaxp_mp.c	Wed Dec 28 15:26:38 2011	(r228932)
@@ -36,21 +36,24 @@
 
 #include <arm/mv/mvwin.h>
 
-/* XXX move to separate header files*/
-#define IPI_SELF		0
-#define IPI_ALL			1
-#define IPI_ALL_BUT_SELF	2
-void mpic_ipi_send(int cpus, u_int ipi);
 static int platform_get_ncpus(void);
 
 #define MV_AXP_CPU_DIVCLK_BASE		(MV_BASE + 0x18700)
-#define MV_AXP_CPU_DIVCLK_CTRL0			0x00
-#define MV_AXP_CPU_DIVCLK_CTRL2_RATIO_FULL0	0x08
-#define MV_AXP_CPU_DIVCLK_CTRL2_RATIO_FULL1	0x0c
+#define CPU_DIVCLK_CTRL0		0x00
+#define CPU_DIVCLK_CTRL2_RATIO_FULL0	0x08
+#define CPU_DIVCLK_CTRL2_RATIO_FULL1	0x0c
 
 #define MV_COHERENCY_FABRIC_BASE	(MV_MBUS_BRIDGE_BASE + 0x200)
-#define MV_COHER_FABRIC_CTRL		0x00
-#define MV_COHER_FABRIC_CONF		0x04
+#define COHER_FABRIC_CTRL		0x00
+#define COHER_FABRIC_CONF		0x04
+
+#define CPU_PMU(x)			(MV_BASE + 0x22100 + (0x100 * (x)))
+#define CPU_PMU_BOOT			0x24
+
+#define MP				(MV_BASE + 0x20800)
+#define MP_SW_RESET(x)			((x) * 8)
+
+#define CPU_RESUME_CONTROL		(0x20988)
 
 /* Coherency Fabric registers */
 static uint32_t
@@ -60,14 +63,12 @@ read_coher_fabric(uint32_t reg)
 	return (bus_space_read_4(fdtbus_bs_tag, MV_COHERENCY_FABRIC_BASE, reg));
 }
 
-#ifdef not_yet
 static void
 write_coher_fabric(uint32_t reg, uint32_t val)
 {
 
 	bus_space_write_4(fdtbus_bs_tag, MV_COHERENCY_FABRIC_BASE, reg, val);
 }
-#endif
 
 /* Coherency Fabric registers */
 static uint32_t
@@ -84,17 +85,6 @@ write_cpu_clkdiv(uint32_t reg, uint32_t 
 	bus_space_write_4(fdtbus_bs_tag, MV_AXP_CPU_DIVCLK_BASE, reg, val);
 }
 
-#if 0
-static void
-hello_message(void)
-{
-	uint32_t cpuid;
-
-	__asm __volatile("mrc p15, 0, %0, c0, c0, 5" : "=r" (cpuid));
-	printf("CPU AP #%d is ready to serve you my sire.\n", cpuid);
-}
-#endif
-
 void
 platform_mp_setmaxid(void)
 {
@@ -111,45 +101,84 @@ platform_mp_probe(void)
 	return (mp_ncpus > 1);
 }
 
+void mpentry(void);
+void mptramp(void);
+
+static void
+initialize_coherency_fabric(void)
+{
+	uint32_t val, cpus, mask;
+
+	cpus = platform_get_ncpus() - 1;
+	mask = (1 << cpus) - 1;
+	val = read_coher_fabric(COHER_FABRIC_CTRL);
+	val |= (mask << 24);
+	write_coher_fabric(COHER_FABRIC_CTRL, val);
+
+	val = read_coher_fabric(COHER_FABRIC_CONF);
+	val |= (mask << 24);
+	write_coher_fabric(COHER_FABRIC_CONF, val);
+}
+
+
 int
 platform_mp_start_ap(int cpuid)
 {
-	uint32_t reg;
+	uint32_t reg, *ptr;
 
 	if (cpuid == 1) {
+		/* Copy boot code to SRAM */
+		*((unsigned int*)(0xf1020240)) = 0xffff0101;
+		*((unsigned int*)(0xf1008500)) = 0xffff0003;
+
+		pmap_kenter_nocache(0x880f0000, 0xffff0000);
+		reg = 0x880f0000;
+
+		for (ptr = (uint32_t *)mptramp; ptr < (uint32_t *)mpentry;
+		    ptr++, reg += 4)
+			*((uint32_t *)reg) = *ptr;
+
 		if (mp_ncpus > 1) {
-			reg = read_cpu_clkdiv(MV_AXP_CPU_DIVCLK_CTRL2_RATIO_FULL0);
+			reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL0);
 			reg &= 0x00ffffff;
 			reg |= 0x01000000;
-			write_cpu_clkdiv(MV_AXP_CPU_DIVCLK_CTRL2_RATIO_FULL0, reg);
+			write_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL0, reg);
 		}
 		if (mp_ncpus > 2) {
-			reg = read_cpu_clkdiv(MV_AXP_CPU_DIVCLK_CTRL2_RATIO_FULL1);
+			reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL1);
 			reg &= 0xff00ffff;
 			reg |= 0x00010000;
-			write_cpu_clkdiv(MV_AXP_CPU_DIVCLK_CTRL2_RATIO_FULL1, reg);
+			write_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL1, reg);
 		}
 		if (mp_ncpus > 3) {
-			reg = read_cpu_clkdiv(MV_AXP_CPU_DIVCLK_CTRL2_RATIO_FULL1);
+			reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL1);
 			reg &= 0x00ffffff;
 			reg |= 0x01000000;
-			write_cpu_clkdiv(MV_AXP_CPU_DIVCLK_CTRL2_RATIO_FULL1, reg);
+			write_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL1, reg);
 		}
 
-		reg = read_cpu_clkdiv(MV_AXP_CPU_DIVCLK_CTRL0);
+		reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL0);
 		reg |= ((0x1 << (mp_ncpus - 1)) - 1) << 21;
-		write_cpu_clkdiv(MV_AXP_CPU_DIVCLK_CTRL0, reg);
-		reg = read_cpu_clkdiv(MV_AXP_CPU_DIVCLK_CTRL0);
+		write_cpu_clkdiv(CPU_DIVCLK_CTRL0, reg);
+		reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL0);
 		reg |= 0x01000000;
-		write_cpu_clkdiv(MV_AXP_CPU_DIVCLK_CTRL0, reg);
+		write_cpu_clkdiv(CPU_DIVCLK_CTRL0, reg);
 
 		DELAY(100);
 		reg &= ~(0xf << 21);
-		write_cpu_clkdiv(MV_AXP_CPU_DIVCLK_CTRL0, reg);
+		write_cpu_clkdiv(CPU_DIVCLK_CTRL0, reg);
 		DELAY(100);
 
+		bus_space_write_4(fdtbus_bs_tag, MV_BASE, CPU_RESUME_CONTROL, 0);
+
+		initialize_coherency_fabric();
+
 	}
 
+	bus_space_write_4(fdtbus_bs_tag, CPU_PMU(cpuid), CPU_PMU_BOOT,
+	    pmap_kextract(mpentry));
+	bus_space_write_4(fdtbus_bs_tag, MP, MP_SW_RESET(cpuid), 0);
+
 	return (0);
 }
 
@@ -157,14 +186,12 @@ static int
 platform_get_ncpus(void)
 {
 
-	return ((read_coher_fabric(MV_COHER_FABRIC_CONF) & 0xf) + 1);
+	return ((read_coher_fabric(COHER_FABRIC_CONF) & 0xf) + 1);
 }
 
-#ifdef not_yet
-static void
-platform_ipi_send(int cpu, u_int ipi)
+void
+platform_ipi_send(cpuset_t cpus, u_int ipi)
 {
 
-	mpic_ipi_send(cpu, ipi);
+	pic_ipi_send(cpus, ipi);
 }
-#endif

Modified: projects/armv6/sys/arm/mv/mpic.c
==============================================================================
--- projects/armv6/sys/arm/mv/mpic.c	Wed Dec 28 15:20:55 2011	(r228931)
+++ projects/armv6/sys/arm/mv/mpic.c	Wed Dec 28 15:26:38 2011	(r228932)
@@ -36,11 +36,15 @@ __FBSDID("$FreeBSD$");
 #include <sys/systm.h>
 #include <sys/bus.h>
 #include <sys/kernel.h>
+#include <sys/cpuset.h>
 #include <sys/ktr.h>
 #include <sys/module.h>
 #include <sys/rman.h>
+
 #include <machine/bus.h>
 #include <machine/intr.h>
+#include <machine/cpufunc.h>
+#include <machine/smp.h>
 
 #include <dev/ofw/ofw_bus.h>
 #include <dev/ofw/ofw_bus_subr.h>
@@ -56,22 +60,29 @@ __FBSDID("$FreeBSD$");
 #define MPIC_ISE		0x30
 #define MPIC_ICE		0x34
 
-#define MPIC_TASK_PRI		0xeb0
-#define MPIC_IIACK		0xeb4
-#define MPIC_ISM		0xeb8
-#define MPIC_ICM		0xebc
+
+#define MPIC_IN_DOORBELL	0x78
+#define MPIC_IN_DOORBELL_MASK	0x7c
+#define MPIC_CTP		0xb0
+#define MPIC_CTP		0xb0
+#define MPIC_IIACK		0xb4
+#define MPIC_ISM		0xb8
+#define MPIC_ICM		0xbc
 #define MPIC_ERR_MASK		0xec0
 
 struct mv_mpic_softc {
-	struct resource	*	mpic_res[1];
+	struct resource	*	mpic_res[2];
 	bus_space_tag_t		mpic_bst;
 	bus_space_handle_t	mpic_bsh;
+	bus_space_tag_t		cpu_bst;
+	bus_space_handle_t	cpu_bsh;
 	int			mpic_high_regs;
 	int			mpic_error_regs;
 };
 
 static struct resource_spec mv_mpic_spec[] = {
 	{ SYS_RES_MEMORY,	0,	RF_ACTIVE },
+	{ SYS_RES_MEMORY,	1,	RF_ACTIVE },
 	{ -1, 0 }
 };
 
@@ -86,6 +97,11 @@ uint32_t	mv_mpic_get_cause_err(void);
 static void	arm_mask_irq_err(uintptr_t);
 static void	arm_unmask_irq_err(uintptr_t);
 
+#define MPIC_CPU_WRITE(softc, reg, val) \
+    bus_space_write_4((softc)->cpu_bst, (softc)->cpu_bsh, (reg), (val))
+#define MPIC_CPU_READ(softc, reg) \
+    bus_space_read_4((softc)->cpu_bst, (softc)->cpu_bsh, (reg))
+
 static int
 mv_mpic_probe(device_t dev)
 {
@@ -118,10 +134,12 @@ mv_mpic_attach(device_t dev)
 	sc->mpic_bst = rman_get_bustag(sc->mpic_res[0]);
 	sc->mpic_bsh = rman_get_bushandle(sc->mpic_res[0]);
 
+	sc->cpu_bst = rman_get_bustag(sc->mpic_res[1]);
+	sc->cpu_bsh = rman_get_bushandle(sc->mpic_res[1]);
+
 	bus_space_write_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
 	    MPIC_CTRL, 1);
-	bus_space_write_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
-	    MPIC_TASK_PRI, 0);
+	MPIC_CPU_WRITE(mv_mpic_sc, MPIC_CTP, 0);
 
 	return (0);
 }
@@ -168,14 +186,12 @@ void
 arm_mask_irq(uintptr_t nb)
 {
 
-	bus_space_write_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
-	    MPIC_TASK_PRI, 1);
+	MPIC_CPU_WRITE(mv_mpic_sc, MPIC_CTP, 1);
 
 	if (nb < MAIN_IRQS) {
 		bus_space_write_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
 		    MPIC_ICE, nb);
-		bus_space_write_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
-		    MPIC_ISM, nb);
+		MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ISM, nb);
 	} else
 		arm_mask_irq_err(nb);
 }
@@ -188,27 +204,26 @@ arm_mask_irq_err(uintptr_t nb)
 	uint8_t bit_off;
 
 	bit_off = nb - MAIN_IRQS;
-	mask = bus_space_read_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
-	    MPIC_ERR_MASK);
+	mask = MPIC_CPU_READ(mv_mpic_sc, MPIC_ERR_MASK);
 	mask &= ~(1 << bit_off);
-	bus_space_write_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
-	    MPIC_ERR_MASK, mask);
+	MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ERR_MASK, mask);
 }
 
 void
 arm_unmask_irq(uintptr_t nb)
 {
 
-	bus_space_write_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
-	    MPIC_TASK_PRI, 0);
+	MPIC_CPU_WRITE(mv_mpic_sc, MPIC_CTP, 0);
 
 	if (nb < MAIN_IRQS) {
 		bus_space_write_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
 		    MPIC_ISE, nb);
-		bus_space_write_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
-		    MPIC_ICM, nb);
+		MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ICM, nb);
 	} else
 		arm_unmask_irq_err(nb);
+
+	if (nb == 0)
+		MPIC_CPU_WRITE(mv_mpic_sc, MPIC_IN_DOORBELL_MASK, 0xffffffff);
 }
 
 void
@@ -219,23 +234,19 @@ arm_unmask_irq_err(uintptr_t nb)
 
 	bus_space_write_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
 	    MPIC_ISE, IRQ_ERR);
-	bus_space_write_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
-	    MPIC_ICM, IRQ_ERR);
+	MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ICM, IRQ_ERR);
 
 	bit_off = nb - MAIN_IRQS;
-	mask = bus_space_read_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
-	    MPIC_ERR_MASK);
+	mask = MPIC_CPU_READ(mv_mpic_sc, MPIC_ERR_MASK);
 	mask |= (1 << bit_off);
-	bus_space_write_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
-	    MPIC_ERR_MASK, mask);
+	MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ERR_MASK, mask);
 }
 
 uint32_t
 mv_mpic_get_cause(void)
 {
 
-	return (bus_space_read_4(mv_mpic_sc->mpic_bst,
-	    mv_mpic_sc->mpic_bsh, MPIC_IIACK));
+	return (MPIC_CPU_READ(mv_mpic_sc, MPIC_IIACK));
 }
 
 uint32_t
@@ -254,13 +265,41 @@ mv_mpic_get_cause_err(void)
 	return (MAIN_IRQS + bit_off);
 }
 
+#if defined(SMP)
 void
-mpic_send_ipi(int cpus, u_int ipi)
+pic_ipi_send(cpuset_t cpus, u_int ipi)
 {
-	uint32_t val;
+	uint32_t val, i;
 
-	val = cpus | ipi | 0xf00;
+	val = 0x01000000;
+	for (i = 0; i < MAXCPU; i++)
+		if (!CPU_ISSET(i, &cpus))
+			val |= (1 << (8 + i));
+	val |= ipi | 0xf00;
 	bus_space_write_4(mv_mpic_sc->mpic_bst, mv_mpic_sc->mpic_bsh,
 	    MPIC_SOFT_INT, val);
 
 }
+
+int
+pic_ipi_get(void)
+{
+	uint32_t val;
+
+	val = MPIC_CPU_READ(mv_mpic_sc, MPIC_IN_DOORBELL);
+	if (val)
+		return (ffs(val) - 1);
+
+	return (0x3ff);
+}
+
+void
+pic_ipi_clear(int ipi)
+{
+	uint32_t val;
+
+	val = ~(1 << ipi);
+	MPIC_CPU_WRITE(mv_mpic_sc, MPIC_IN_DOORBELL, val);
+}
+
+#endif

Modified: projects/armv6/sys/arm/mv/mv_machdep.c
==============================================================================
--- projects/armv6/sys/arm/mv/mv_machdep.c	Wed Dec 28 15:20:55 2011	(r228931)
+++ projects/armv6/sys/arm/mv/mv_machdep.c	Wed Dec 28 15:26:38 2011	(r228932)
@@ -133,6 +133,7 @@ vm_paddr_t phys_avail[10];
 vm_paddr_t dump_avail[4];
 vm_offset_t physical_pages;
 vm_offset_t pmap_bootstrap_lastaddr;
+vm_paddr_t pmap_pa;
 
 const struct pmap_devmap *pmap_devmap_bootstrap_table;
 struct pv_addr systempage;
@@ -142,6 +143,8 @@ struct pv_addr undstack;
 struct pv_addr abtstack;
 struct pv_addr kernelstack;
 
+void set_stackptrs(int cpu);
+
 static struct trapframe proc0_tf;
 
 static struct mem_region availmem_regions[FDT_MEM_REGIONS];
@@ -424,10 +427,10 @@ initarm(void *mdp, void *unused __unused
 	dpcpu_init((void *)dpcpu.pv_va, 0);
 
 	/* Allocate stacks for all modes */
-	valloc_pages(irqstack, IRQ_STACK_SIZE);
-	valloc_pages(abtstack, ABT_STACK_SIZE);
-	valloc_pages(undstack, UND_STACK_SIZE);
-	valloc_pages(kernelstack, KSTACK_PAGES);
+	valloc_pages(irqstack, (IRQ_STACK_SIZE * MAXCPU));
+	valloc_pages(abtstack, (ABT_STACK_SIZE * MAXCPU));
+	valloc_pages(undstack, (UND_STACK_SIZE * MAXCPU));
+	valloc_pages(kernelstack, (KSTACK_PAGES * MAXCPU));
 
 	init_param1();
 
@@ -488,6 +491,7 @@ initarm(void *mdp, void *unused __unused
 
 	cpu_domains((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL * 2)) |
 	    DOMAIN_CLIENT);
+	pmap_pa = kernel_l1pt.pv_pa;
 	setttb(kernel_l1pt.pv_pa);
 	cpu_tlb_flushID();
 	cpu_domains(DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL * 2));
@@ -536,12 +540,8 @@ initarm(void *mdp, void *unused __unused
 	 * of the stack memory.
 	 */
 	cpu_control(CPU_CONTROL_MMU_ENABLE, CPU_CONTROL_MMU_ENABLE);
-	set_stackptr(PSR_IRQ32_MODE,
-	    irqstack.pv_va + IRQ_STACK_SIZE * PAGE_SIZE);
-	set_stackptr(PSR_ABT32_MODE,
-	    abtstack.pv_va + ABT_STACK_SIZE * PAGE_SIZE);
-	set_stackptr(PSR_UND32_MODE,
-	    undstack.pv_va + UND_STACK_SIZE * PAGE_SIZE);
+
+	set_stackptrs(0);
 
 	/*
 	 * We must now clean the cache again....
@@ -594,6 +594,18 @@ initarm(void *mdp, void *unused __unused
 	    sizeof(struct pcb)));
 }
 
+void
+set_stackptrs(int cpu)
+{
+
+	set_stackptr(PSR_IRQ32_MODE,
+	    irqstack.pv_va + ((IRQ_STACK_SIZE * PAGE_SIZE) * (cpu + 1)));
+	set_stackptr(PSR_ABT32_MODE,
+	    abtstack.pv_va + ((ABT_STACK_SIZE * PAGE_SIZE) * (cpu + 1)));
+	set_stackptr(PSR_UND32_MODE,
+	    undstack.pv_va + ((UND_STACK_SIZE * PAGE_SIZE) * (cpu + 1)));
+}
+
 #define MPP_PIN_MAX		68
 #define MPP_PIN_CELLS		2
 #define MPP_PINS_PER_REG	8
@@ -736,9 +748,9 @@ static struct pmap_devmap fdt_devmap[FDT
 static int
 platform_sram_devmap(struct pmap_devmap *map)
 {
+#if !defined(SOC_MV_ARMADAXP)
 	phandle_t child, root;
 	u_long base, size;
-
 	/*
 	 * SRAM range.
 	 */
@@ -766,7 +778,9 @@ moveon:
 
 	return (0);
 out:
+#endif
 	return (ENOENT);
+
 }
 
 /*

From owner-svn-src-projects@FreeBSD.ORG  Thu Dec 29 11:35:12 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id F0DA3106566B;
	Thu, 29 Dec 2011 11:35:12 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id DC7648FC1B;
	Thu, 29 Dec 2011 11:35:12 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBTBZCaM054279;
	Thu, 29 Dec 2011 11:35:12 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBTBZCcC054277;
	Thu, 29 Dec 2011 11:35:12 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201112291135.pBTBZCcC054277@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Thu, 29 Dec 2011 11:35:12 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228948 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 29 Dec 2011 11:35:13 -0000

Author: pho
Date: Thu Dec 29 11:35:12 2011
New Revision: 228948
URL: http://svn.freebsd.org/changeset/base/228948

Log:
  Use the global configuration file for MD(4) operations. Limit run time to
  half an hour.

Modified:
  projects/stress2/misc/snap.sh

Modified: projects/stress2/misc/snap.sh
==============================================================================
--- projects/stress2/misc/snap.sh	Thu Dec 29 08:27:37 2011	(r228947)
+++ projects/stress2/misc/snap.sh	Thu Dec 29 11:35:12 2011	(r228948)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright (c) 2008 Peter Holm <pho@FreeBSD.org>
+# Copyright (c) 2008, 2011 Peter Holm <pho@FreeBSD.org>
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -30,24 +30,26 @@
 
 [ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
 
-mount | grep "/dev/md0 on /mnt" > /dev/null && umount /mnt
+. ../default.cfg
+
+mount | grep -q "/dev/md$mdstart on $mntpoint" && umount $mntpoint
 rm -f /tmp/.snap/pho
 trap "rm -f /tmp/.snap/pho" 0
 
-for i in `jot 128`; do
+for i in `jot 2`; do
    mksnap_ffs /tmp /tmp/.snap/pho
-   mdconfig -a -t vnode -f /tmp/.snap/pho -u 0 -o readonly
-   mount -r /dev/md0 /mnt
+   mdconfig -a -t vnode -f /tmp/.snap/pho -u $mdstart -o readonly
+   mount -r /dev/md$mdstart $mntpoint
 
-   ls -l /mnt > /dev/null
+   ls -l $mntpoint > /dev/null
 
-   umount /mnt
-   mdconfig -d -u 0
+   umount $mntpoint
+   mdconfig -d -u $mdstart
    rm -f /tmp/.snap/pho
 done
 
 
-for i in `jot 128`; do
+for i in `jot 2`; do
    mksnap_ffs /tmp /tmp/.snap/pho
    rm -f /tmp/.snap/pho
 done

From owner-svn-src-projects@FreeBSD.ORG  Thu Dec 29 11:36:25 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 8BB411065670;
	Thu, 29 Dec 2011 11:36:25 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 773DA8FC0A;
	Thu, 29 Dec 2011 11:36:25 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBTBaP4Z054353;
	Thu, 29 Dec 2011 11:36:25 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBTBaPjp054351;
	Thu, 29 Dec 2011 11:36:25 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201112291136.pBTBaPjp054351@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Thu, 29 Dec 2011 11:36:25 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228949 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 29 Dec 2011 11:36:25 -0000

Author: pho
Date: Thu Dec 29 11:36:24 2011
New Revision: 228949
URL: http://svn.freebsd.org/changeset/base/228949

Log:
  Use the global configuration file for MD(4) operations.

Modified:
  projects/stress2/misc/snap2-1.sh

Modified: projects/stress2/misc/snap2-1.sh
==============================================================================
--- projects/stress2/misc/snap2-1.sh	Thu Dec 29 11:35:12 2011	(r228948)
+++ projects/stress2/misc/snap2-1.sh	Thu Dec 29 11:36:24 2011	(r228949)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright (c) 2008 Peter Holm <pho@FreeBSD.org>
+# Copyright (c) 2008, 2011 Peter Holm <pho@FreeBSD.org>
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -30,6 +30,8 @@
 
 [ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
 
+. ../default.cfg
+
 # Regression test: Delete an active md device
 #
 # panic(c088cd33,deadc000,c0943aa0,0,c08753e1) at panic+0x14b
@@ -43,16 +45,16 @@
 rm -f /tmp/.snap/pho
 [ -d /tmp/.snap ] || mkdir /tmp/.snap
 trap "rm -f /tmp/.snap/pho" 0
-mount | grep "/mnt" | grep md0 > /dev/null && umount /mnt
-mdconfig -l | grep -q md0 &&  mdconfig -d -u 0
+mount | grep "$mntpoint" | grep -q md$mdstart && umount $mntpoint
+mdconfig -l | grep -q md$mdstart &&  mdconfig -d -u $mdstart
 
 mksnap_ffs /tmp /tmp/.snap/pho
-mdconfig -a -t vnode -o readonly -f /tmp/.snap/pho -u 0
-mount -o ro /dev/md0 /mnt
+mdconfig -a -t vnode -o readonly -f /tmp/.snap/pho -u $mdstart
+mount -o ro /dev/md$mdstart $mntpoint
 
-ls -lR /mnt > /dev/null 2>&1 &
-mdconfig -d -u 0 > /dev/null 2>&1
+ls -lR $mntpoint > /dev/null 2>&1 &
+mdconfig -d -u $mdstart > /dev/null 2>&1
 
-umount -f /mnt
-mdconfig -d -u 0
+umount -f $mntpoint
+mdconfig -d -u $mdstart
 rm -f /tmp/.snap/pho

From owner-svn-src-projects@FreeBSD.ORG  Thu Dec 29 11:37:16 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 944161065678;
	Thu, 29 Dec 2011 11:37:16 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 64D7F8FC13;
	Thu, 29 Dec 2011 11:37:16 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBTBbGnJ054409;
	Thu, 29 Dec 2011 11:37:16 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBTBbG34054407;
	Thu, 29 Dec 2011 11:37:16 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201112291137.pBTBbG34054407@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Thu, 29 Dec 2011 11:37:16 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228950 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 29 Dec 2011 11:37:16 -0000

Author: pho
Date: Thu Dec 29 11:37:15 2011
New Revision: 228950
URL: http://svn.freebsd.org/changeset/base/228950

Log:
  Use the global configuration file for MD(4) operations. Limit run time to
  half an hour.

Modified:
  projects/stress2/misc/snap3.sh

Modified: projects/stress2/misc/snap3.sh
==============================================================================
--- projects/stress2/misc/snap3.sh	Thu Dec 29 11:36:24 2011	(r228949)
+++ projects/stress2/misc/snap3.sh	Thu Dec 29 11:37:15 2011	(r228950)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright (c) 2008 Peter Holm <pho@FreeBSD.org>
+# Copyright (c) 2008, 2011 Peter Holm <pho@FreeBSD.org>
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -30,29 +30,35 @@
 
 [ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
 
+. ../default.cfg
+
 # Test with two snapshots
 # 20070506 Page fault in g_io_request+0x7f
 
-mount | grep "/dev/md0 on /mnt" > /dev/null && umount /mnt
+mount | grep -q /tmp || exit 1 # /tmp must be a mount point for this test
 rm -f /tmp/.snap/pho.1
 rm -f /tmp/.snap/pho.2
 trap "rm -f /tmp/.snap/pho.?" 0
-mount | grep "/mnt" | grep md5 > /dev/null && umount /mnt
-mdconfig -l | grep -q md5 &&  mdconfig -d -u 5
-mdconfig -l | grep -q md6 &&  mdconfig -d -u 6
+mount | grep $mntpoint | grep -q md && umount $mntpoint
+m1=$mdstart
+m2=$((m1 + 1))
+mdconfig -l | grep -q md$m1 &&  mdconfig -d -u $m1
+mdconfig -l | grep -q md$m2 &&  mdconfig -d -u $m2
 
-for i in `jot 64`; do
+start=`date '+%s'`
+while [ `date '+%s'` -lt $((start + 1800)) ]; do
    mksnap_ffs /tmp /tmp/.snap/pho.1
    mksnap_ffs /tmp /tmp/.snap/pho.2
-   mdconfig -a -t vnode -f /tmp/.snap/pho.1 -u 5 -o readonly
-   mdconfig -a -t vnode -f /tmp/.snap/pho.2 -u 6 -o readonly
-   mount -o ro /dev/md5 /mnt
-
-   sleep 3
-
-   umount /mnt
-   mdconfig -d -u 5
-   mdconfig -d -u 6
-   rm -f /tmp/.snap/pho.1
-   rm -f /tmp/.snap/pho.2
+   if [ -r /tmp/.snap/pho.1 -a  -r /tmp/.snap/pho.2 ]; then
+	   mdconfig -a -t vnode -f /tmp/.snap/pho.1 -u $m1 -o readonly
+	   mdconfig -a -t vnode -f /tmp/.snap/pho.2 -u $m2 -o readonly
+	   mount -o ro /dev/md$m1 $mntpoint
+
+	   sleep 3
+
+	   umount $mntpoint
+	   mdconfig -d -u $m1
+	   mdconfig -d -u $m2
+   fi
+   rm -f /tmp/.snap/pho.1 /tmp/.snap/pho.2
 done

From owner-svn-src-projects@FreeBSD.ORG  Thu Dec 29 11:38:03 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 3C6BC106566B;
	Thu, 29 Dec 2011 11:38:03 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 27A858FC15;
	Thu, 29 Dec 2011 11:38:03 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBTBc3an054468;
	Thu, 29 Dec 2011 11:38:03 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBTBc28Y054466;
	Thu, 29 Dec 2011 11:38:02 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201112291138.pBTBc28Y054466@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Thu, 29 Dec 2011 11:38:02 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228951 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 29 Dec 2011 11:38:03 -0000

Author: pho
Date: Thu Dec 29 11:38:02 2011
New Revision: 228951
URL: http://svn.freebsd.org/changeset/base/228951

Log:
  Use the global configuration file for MD(4) operations. Limit run time to
  half an hour.

Modified:
  projects/stress2/misc/snap4.sh

Modified: projects/stress2/misc/snap4.sh
==============================================================================
--- projects/stress2/misc/snap4.sh	Thu Dec 29 11:37:15 2011	(r228950)
+++ projects/stress2/misc/snap4.sh	Thu Dec 29 11:38:02 2011	(r228951)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright (c) 2008 Peter Holm <pho@FreeBSD.org>
+# Copyright (c) 2008, 2011 Peter Holm <pho@FreeBSD.org>
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -32,21 +32,24 @@
 
 # Test with snapshot file unlinked before unmount
 
-mount | grep "/dev/md0 on /mnt" > /dev/null && umount /mnt
-mdconfig -l | grep -q md0 &&  mdconfig -d -u 0
+. ../default.cfg
+
+mount | grep -q "/dev/md$mdstart on $mntpoint" && umount $mntpoint
+mdconfig -l | grep -q md$mdstart &&  mdconfig -d -u $mdstart
 rm -f /tmp/.snap/pho
 trap "rm -f /tmp/.snap/pho" 0
 
-for i in `jot 64`; do
+start=`date '+%s'`
+while [ `date '+%s'` -lt $((start + 1800)) ]; do
    mksnap_ffs /tmp /tmp/.snap/pho
-   mdconfig -a -t vnode -f /tmp/.snap/pho -u 0 -o readonly
-   mount -o ro /dev/md0 /mnt
+   mdconfig -a -t vnode -f /tmp/.snap/pho -u $mdstart -o readonly
+   mount -o ro /dev/md$mdstart $mntpoint
 
-   ls -l /mnt > /dev/null
+   ls -l $mntpoint > /dev/null
    rm -f /tmp/.snap/pho
    sleep 1
 
-   umount /mnt
-   mdconfig -d -u 0
+   umount $mntpoint
+   mdconfig -d -u $mdstart
    rm -f /tmp/.snap/pho
 done

From owner-svn-src-projects@FreeBSD.ORG  Thu Dec 29 12:33:42 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 84E881065670;
	Thu, 29 Dec 2011 12:33:42 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 565008FC1A;
	Thu, 29 Dec 2011 12:33:42 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBTCXgon056306;
	Thu, 29 Dec 2011 12:33:42 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBTCXgsX056304;
	Thu, 29 Dec 2011 12:33:42 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201112291233.pBTCXgsX056304@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Thu, 29 Dec 2011 12:33:42 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228954 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 29 Dec 2011 12:33:42 -0000

Author: pho
Date: Thu Dec 29 12:33:41 2011
New Revision: 228954
URL: http://svn.freebsd.org/changeset/base/228954

Log:
  Use the global configuration file and limit runtime to 30 minutes.

Modified:
  projects/stress2/misc/snap5-1.sh

Modified: projects/stress2/misc/snap5-1.sh
==============================================================================
--- projects/stress2/misc/snap5-1.sh	Thu Dec 29 12:33:27 2011	(r228953)
+++ projects/stress2/misc/snap5-1.sh	Thu Dec 29 12:33:41 2011	(r228954)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright (c) 2008 Peter Holm <pho@FreeBSD.org>
+# Copyright (c) 2008, 2011 Peter Holm <pho@FreeBSD.org>
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -30,26 +30,30 @@
 
 [ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
 
-[ ! -d /mnt2 ] && mkdir /mnt2
+. ../default.cfg
+
+mnt2=${mntpoint}2
+[ ! -d $mnt2 ] && mkdir $mnt2
 
 trap "rm -f /tmp/.snap/pho" 0
-for i in `jot 64`; do
-   if mount | grep -q "/dev/md0 on /mnt2"; then
-      umount /mnt2 || exit 2
+start=`date '+%s'`
+while [ `date '+%s'` -lt $((start + 1800)) ]; do
+   if mount | grep -q "/dev/md$mdstart on $mnt2"; then
+      umount $mnt2 || exit 2
    fi
-   if mdconfig -l | grep -q md0; then
-      mdconfig -d -u 0 || exit 3
+   if mdconfig -l | grep -q md$mdstart; then
+      mdconfig -d -u $mdstart || exit 3
    fi
    rm -f /tmp/.snap/pho
 
    date '+%T'
    mksnap_ffs /tmp /tmp/.snap/pho || continue
-   mdconfig -a -t vnode -f /tmp/.snap/pho -u 0 -o readonly || exit 4
-   mount -o ro /dev/md0 /mnt2 || exit 5
+   mdconfig -a -t vnode -f /tmp/.snap/pho -u $mdstart -o readonly || exit 4
+   mount -o ro /dev/md$mdstart $mnt2 || exit 5
 
-   ls -l /mnt2 > /dev/null
+   ls -l $mnt2 > /dev/null
    r=`head -c4 /dev/urandom | od -N2 -tu4 | sed -ne '1s/  *$//;1s/.* //p'`
    sleep $(( r % 120 ))
 done
-mount | grep -q "/dev/md0 on /mnt2" && umount /mnt2
-mdconfig -l | grep -q md0 && mdconfig -d -u 0
+mount | grep -q "/dev/md$mdstart on $mnt2" && umount $mnt2
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart

From owner-svn-src-projects@FreeBSD.ORG  Thu Dec 29 18:17:13 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id E6274106566C;
	Thu, 29 Dec 2011 18:17:12 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id CE3368FC08;
	Thu, 29 Dec 2011 18:17:12 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBTIHC29067130;
	Thu, 29 Dec 2011 18:17:12 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBTIHCtY067127;
	Thu, 29 Dec 2011 18:17:12 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201112291817.pBTIHCtY067127@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Thu, 29 Dec 2011 18:17:12 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228964 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 29 Dec 2011 18:17:13 -0000

Author: pho
Date: Thu Dec 29 18:17:12 2011
New Revision: 228964
URL: http://svn.freebsd.org/changeset/base/228964

Log:
  Use global configuration file and limit run time to 30 minutes.

Modified:
  projects/stress2/misc/snap5.sh
  projects/stress2/misc/snap7.sh

Modified: projects/stress2/misc/snap5.sh
==============================================================================
--- projects/stress2/misc/snap5.sh	Thu Dec 29 17:46:24 2011	(r228963)
+++ projects/stress2/misc/snap5.sh	Thu Dec 29 18:17:12 2011	(r228964)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright (c) 2008 Peter Holm <pho@FreeBSD.org>
+# Copyright (c) 2008, 2011 Peter Holm <pho@FreeBSD.org>
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -30,23 +30,28 @@
 
 [ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
 
-[ ! -d /mnt2 ] && mkdir /mnt2
-mount | grep "/dev/md0 on /mnt2" > /dev/null && umount /mnt2
-mdconfig -l | grep md0 > /dev/null &&  mdconfig -d -u 0
+. ../default.cfg
+
+mount | grep -q /tmp || exit 1 # /tmp must be a mount point for this test
+mnt2=${mntpoint}2
+[ ! -d $mnt2 ] && mkdir $mnt2
+mount | grep -q "/dev/md$mdstart on $mnt2" && umount $mnt2
+mdconfig -l | grep -q md$mdstart &&  mdconfig -d -u $mdstart
 rm -f /tmp/.snap/pho
 trap "rm -f /tmp/.snap/pho" 0
 
-for i in `jot 64`; do
+start=`date '+%s'`
+while [ `date '+%s'` -lt $((start + 1800)) ]; do
    date '+%T'
    mksnap_ffs /tmp /tmp/.snap/pho
-   mdconfig -a -t vnode -f /tmp/.snap/pho -u 0 -o readonly
-   mount -o ro /dev/md0 /mnt2
+   mdconfig -a -t vnode -f /tmp/.snap/pho -u $mdstart -o readonly
+   mount -o ro /dev/md$mdstart $mnt2
 
-   ls -l /mnt2 > /dev/null
+   ls -l $mnt2 > /dev/null
    r=`head -c4 /dev/urandom | od -N2 -tu4 | sed -ne '1s/  *$//;1s/.* //p'`
    sleep $(( r % 120 ))
 
-   umount /mnt2
-   mdconfig -d -u 0
+   umount $mnt2
+   mdconfig -d -u $mdstart
    rm -f /tmp/.snap/pho
 done

Modified: projects/stress2/misc/snap7.sh
==============================================================================
--- projects/stress2/misc/snap7.sh	Thu Dec 29 17:46:24 2011	(r228963)
+++ projects/stress2/misc/snap7.sh	Thu Dec 29 18:17:12 2011	(r228964)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright (c) 2008 Peter Holm <pho@FreeBSD.org>
+# Copyright (c) 2008, 2011 Peter Holm <pho@FreeBSD.org>
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -30,24 +30,27 @@
 
 [ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
 
+. ../default.cfg
+
 # Test with unmount and paralless access to mountpoint
 # 20070508 page fault in g_io_request+0xa6
 
-mount | grep "/dev/md0 on /mnt" > /dev/null && umount /mnt
+mount | grep -q "/dev/md$mdstart on $mntpoint" && umount $mntpoint
 rm -f /tmp/.snap/pho.1
 trap "rm -f /tmp/.snap/pho.1" 0
-mount | grep "/mnt" | grep md0 > /dev/null && umount /mnt
-mdconfig -l | grep -q md0 &&  mdconfig -d -u 0
+mount | grep "$mntpoint" | grep -q md$mdstart && umount $mntpoint
+mdconfig -l | grep -q md$mdstart &&  mdconfig -d -u $mdstart
 
-for i in `jot 64`; do
+start=`date '+%s'`
+while [ `date '+%s'` -lt $((start + 1800)) ]; do
    mksnap_ffs /tmp /tmp/.snap/pho.1
-   mdconfig -a -t vnode -f /tmp/.snap/pho.1 -u 0 -o readonly
-   sh -c "while true; do ls /mnt > /dev/null;done" &
+   mdconfig -a -t vnode -f /tmp/.snap/pho.1 -u $mdstart -o readonly
+   sh -c "while true; do ls $mntpoint > /dev/null;done" &
    for i in `jot 64`; do
-      mount -o ro /dev/md0 /mnt
-      umount /mnt
+      mount -o ro /dev/md$mdstart $mntpoint
+      umount $mntpoint
    done
    kill $!
-   mdconfig -d -u 0
+   mdconfig -d -u $mdstart
    rm -f /tmp/.snap/pho.1
 done

From owner-svn-src-projects@FreeBSD.ORG  Thu Dec 29 18:18:42 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id C814E106566B;
	Thu, 29 Dec 2011 18:18:42 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 9D9088FC1A;
	Thu, 29 Dec 2011 18:18:42 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBTIIgtm067211;
	Thu, 29 Dec 2011 18:18:42 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBTIIgsA067210;
	Thu, 29 Dec 2011 18:18:42 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201112291818.pBTIIgsA067210@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Thu, 29 Dec 2011 18:18:42 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228965 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 29 Dec 2011 18:18:42 -0000

Author: pho
Date: Thu Dec 29 18:18:42 2011
New Revision: 228965
URL: http://svn.freebsd.org/changeset/base/228965

Log:
  This test is not really a stress- nor regression test.

Deleted:
  projects/stress2/misc/snapbackup.sh

From owner-svn-src-projects@FreeBSD.ORG  Thu Dec 29 19:01:30 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 58BB1106566B;
	Thu, 29 Dec 2011 19:01:30 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 2DF118FC08;
	Thu, 29 Dec 2011 19:01:30 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBTJ1UPt068719;
	Thu, 29 Dec 2011 19:01:30 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBTJ1TW8068717;
	Thu, 29 Dec 2011 19:01:29 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201112291901.pBTJ1TW8068717@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Thu, 29 Dec 2011 19:01:29 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228968 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 29 Dec 2011 19:01:30 -0000

Author: pho
Date: Thu Dec 29 19:01:29 2011
New Revision: 228968
URL: http://svn.freebsd.org/changeset/base/228968

Log:
  Clean up script and add SU+J tests.

Modified:
  projects/stress2/misc/newfs.sh

Modified: projects/stress2/misc/newfs.sh
==============================================================================
--- projects/stress2/misc/newfs.sh	Thu Dec 29 18:40:58 2011	(r228967)
+++ projects/stress2/misc/newfs.sh	Thu Dec 29 19:01:29 2011	(r228968)
@@ -32,35 +32,28 @@
 
 . ../default.cfg
 
-size=1  # Gb
-[ `df -k $(dirname $diskimage) | tail -1 | awk '{print $4'}` -lt $((size * 1024 * 1024)) ] && \
-	echo "Not enough disk space." && exit 1
-truncate -s ${size}G $diskimage
+mount | grep "$mntpoint" | grep md${mdstart}$part > /dev/null && umount $mntpoint
+mdconfig -l | grep md$mdstart > /dev/null &&  mdconfig -d -u $mdstart
 
-mount | grep "$mntpoint" | grep md${mdstart}${part} > /dev/null && umount $mntpoint
-mdconfig -l | grep md${mdstart} > /dev/null &&  mdconfig -d -u ${mdstart}
+mdconfig -a -t swap -s 1g -u $mdstart
+bsdlabel -w md$mdstart auto
 
-mdconfig -a -t vnode -f $diskimage -u ${mdstart}
-bsdlabel -w md${mdstart} auto
-
-
-for opt in "-O1" "-O2" "-O2 -U"; do
+for opt in -O1 -O2 -U -j; do
 	blocksize=4096
 	while [ $blocksize -le 65536 ]; do
 		for i in 8 4 2 1; do
 			fragsize=$((blocksize / i))
-			echo "newfs $opt -b $blocksize -f $fragsize md${mdstart}${part}"
-			newfs $opt -b $blocksize -f $fragsize  md${mdstart}${part} > /dev/null
-			mount /dev/md${mdstart}${part} $mntpoint
+			echo "`date '+%T'` newfs $opt -b $blocksize -f $fragsize md${mdstart}${part}"
+			newfs $opt -b $blocksize -f $fragsize  md${mdstart}$part > /dev/null
+			mount /dev/md${mdstart}$part $mntpoint
 			export RUNDIR=$mntpoint/stressX
 			export runRUNTIME=4m
-			(cd ..; ./run.sh disk.cfg) 
-			while mount | grep "$mntpoint" | grep -q md${mdstart}${part}; do
-				umount $mntpoint > /dev/null 2>&1
+			(cd ..; ./run.sh disk.cfg > /dev/null 2>&1) 
+			while mount | grep "$mntpoint" | grep -q md${mdstart}$part; do
+				umount $mntpoint > /dev/null 2>&1 || sleep 1
 			done
 		done
 		blocksize=$((blocksize * 2))
 	done
 done
-mdconfig -d -u ${mdstart}
-rm -f $diskimage
+mdconfig -d -u $mdstart

From owner-svn-src-projects@FreeBSD.ORG  Fri Dec 30 13:46:21 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id D6F41106564A;
	Fri, 30 Dec 2011 13:46:21 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id C1A5E8FC08;
	Fri, 30 Dec 2011 13:46:21 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBUDkLkH015735;
	Fri, 30 Dec 2011 13:46:21 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBUDkLJW015734;
	Fri, 30 Dec 2011 13:46:21 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201112301346.pBUDkLJW015734@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Fri, 30 Dec 2011 13:46:21 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228995 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 30 Dec 2011 13:46:22 -0000

Author: pho
Date: Fri Dec 30 13:46:21 2011
New Revision: 228995
URL: http://svn.freebsd.org/changeset/base/228995

Log:
  One more tmpfs(5) test added.

Added:
  projects/stress2/misc/tmpfs6.sh   (contents, props changed)

Added: projects/stress2/misc/tmpfs6.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/stress2/misc/tmpfs6.sh	Fri Dec 30 13:46:21 2011	(r228995)
@@ -0,0 +1,112 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2010 Peter Holm <pho@FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# panic: deadlkres: possible deadlock detected for 0xc8576a00, blocked for 1801792 ticks
+
+# Scenario by kib@
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+odir=`pwd`
+cd /tmp
+sed '1,/^EOF/d' < $odir/$0 > tmpfs6.c
+cc -o tmpfs6 -Wall tmpfs6.c
+rm -f tmpfs6.c
+
+mount | grep $mntpoint | grep -q tmpfs && umount $mntpoint
+mount -t tmpfs tmpfs  $mntpoint
+
+(cd $mntpoint; /tmp/tmpfs6)
+rm -f /tmp/tmpfs6
+
+while mount | grep $mntpoint | grep -q tmpfs; do
+	umount $mntpoint || sleep 1
+done
+exit
+EOF
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <err.h>
+
+int pagesize;
+
+#define FILESIZE (32 * 1024)
+char wbuffer[FILESIZE];
+
+void 
+test(void)
+{
+	int fd;
+	int len;
+	void *addr;
+	char filename[80];
+
+	snprintf(filename, sizeof(filename), "file.%07d", getpid());
+	if ((fd = open(filename, O_CREAT | O_TRUNC | O_RDWR, S_IRWXU)) == -1)
+		err(1, "open(%s)", filename);
+
+	if ((len = write(fd, wbuffer, FILESIZE)) != len)
+		err(1, "write()");
+
+	fsync(fd);
+
+	if ((addr = mmap(NULL, FILESIZE, PROT_READ | PROT_WRITE , MAP_SHARED, fd, 0)) == MAP_FAILED)
+		err(1, "mmap()");
+
+	if (lseek(fd, 0, SEEK_SET) != 0)
+		err(1, "lseek()");
+
+	if ((len = write(fd, addr, FILESIZE)) != len)
+		err(1, "write() 2");
+
+	if (munmap(addr, FILESIZE) == -1)
+		err(1, "munmap()");
+	close(fd);
+	unlink(filename);
+
+}
+
+int 
+main(int argc, char **argv)
+{
+	int i;
+
+	for (i = 0; i < 10000; i++)
+		test();
+
+	return (0);
+}

From owner-svn-src-projects@FreeBSD.ORG  Fri Dec 30 13:48:28 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 99B1C106564A;
	Fri, 30 Dec 2011 13:48:28 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 8383A8FC12;
	Fri, 30 Dec 2011 13:48:28 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBUDmSAQ015828;
	Fri, 30 Dec 2011 13:48:28 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBUDmSkq015826;
	Fri, 30 Dec 2011 13:48:28 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201112301348.pBUDmSkq015826@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Fri, 30 Dec 2011 13:48:28 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228996 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 30 Dec 2011 13:48:28 -0000

Author: pho
Date: Fri Dec 30 13:48:27 2011
New Revision: 228996
URL: http://svn.freebsd.org/changeset/base/228996

Log:
  Added two new mkfifo tests.

Added:
  projects/stress2/misc/mkfifo.sh   (contents, props changed)
  projects/stress2/misc/mkfifo2c.sh   (contents, props changed)

Added: projects/stress2/misc/mkfifo.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/stress2/misc/mkfifo.sh	Fri Dec 30 13:48:27 2011	(r228996)
@@ -0,0 +1,84 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2011 Peter Holm <pho@FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+# Hunt for "panic: ufsdirhash_newblk: bad offset"
+
+# but page fault seen in scheduler() due to a _thread_lock_flags() call on
+# an inactive td.
+
+# Run with mkfifo.cfg on a 2g swap backed MD
+
+. ../default.cfg
+
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart &&  mdconfig -d -u $mdstart
+
+mdconfig -a -t swap -s 2g -u $mdstart || exit 1
+bsdlabel -w md$mdstart auto
+
+newfs -j md${mdstart}$part > /dev/null
+mount /dev/md${mdstart}$part $mntpoint
+chmod 777 $mntpoint
+
+export runRUNTIME=30m
+export RUNDIR=$mntpoint/stressX
+
+export TESTPROGS="
+testcases/creat/creat
+testcases/fts/fts
+testcases/link/link
+testcases/lockf/lockf
+testcases/mkdir/mkdir
+testcases/mkfifo/mkfifo
+testcases/openat/openat
+testcases/rename/rename
+testcases/rw/rw
+testcases/swap/swap
+"
+export creatLOAD=100
+export ftsLOAD=100
+export linkLOAD=100
+export lockfLOAD=100
+export mkdirLOAD=100
+export mkfifoLOAD=100
+export openatLOAD=100
+export renameLOAD=100
+export rwLOAD=100
+export swapLOAD=100
+
+
+su $testuser -c 'cd ..; ./testcases/run/run $TESTPROGS'
+
+while mount | grep $mntpoint | grep -q /dev/md; do
+	umount $mntpoint || sleep 1
+done
+mdconfig -d -u $mdstart

Added: projects/stress2/misc/mkfifo2c.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/stress2/misc/mkfifo2c.sh	Fri Dec 30 13:48:27 2011	(r228996)
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2011 Peter Holm <pho@FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD: projects/stress2/misc/suj.sh 210724 2010-08-01 10:33:03Z pho $
+#
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+# "bad offset" panic after up 10:57 on leopard3
+
+# Run with mkfifo.cfg on a 2g swap backed MD
+
+. ../default.cfg
+
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart &&  mdconfig -d -u $mdstart
+
+mdconfig -a -t swap -s 2g -u $mdstart || exit 1
+bsdlabel -w md$mdstart auto
+
+newfs -j md${mdstart}$part > /dev/null
+mount /dev/md${mdstart}$part $mntpoint
+chmod 777 $mntpoint
+
+export runRUNTIME=30m
+export RUNDIR=$mntpoint/stressX
+
+export TESTPROGS="
+testcases/fts/fts
+testcases/link/link
+testcases/mkfifo/mkfifo
+testcases/mkdir/mkdir
+testcases/rename/rename
+testcases/swap/swap
+"
+
+export ftsLOAD=100
+export linkLOAD=100
+export mkdirLOAD=100
+export mkfifoLOAD=100
+export renameLOAD=100
+export swapLOAD=100
+
+export renameINCARNATIONS=4
+export swapINCARNATIONS=4
+export linkINCARNATIONS=12
+export mkdirINCARNATIONS=20
+export mkfifoINCARNATIONS=22
+export ftsINCARNATIONS=2
+
+export HOG=1
+
+su $testuser -c 'cd ..; ./testcases/run/run $TESTPROGS'
+
+while mount | grep $mntpoint | grep -q /dev/md; do
+	umount $mntpoint || sleep 1
+done
+mdconfig -d -u $mdstart

From owner-svn-src-projects@FreeBSD.ORG  Fri Dec 30 13:50:16 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id C0F58106566B;
	Fri, 30 Dec 2011 13:50:16 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 922228FC13;
	Fri, 30 Dec 2011 13:50:16 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBUDoGRu015918;
	Fri, 30 Dec 2011 13:50:16 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBUDoGQK015917;
	Fri, 30 Dec 2011 13:50:16 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201112301350.pBUDoGQK015917@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Fri, 30 Dec 2011 13:50:16 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228997 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 30 Dec 2011 13:50:16 -0000

Author: pho
Date: Fri Dec 30 13:50:16 2011
New Revision: 228997
URL: http://svn.freebsd.org/changeset/base/228997

Log:
  Disk full test scenario added.

Added:
  projects/stress2/misc/dfull.sh   (contents, props changed)

Added: projects/stress2/misc/dfull.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/stress2/misc/dfull.sh	Fri Dec 30 13:50:16 2011	(r228997)
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2011 Peter Holm <pho@FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# Processes stuck in "ufs" seen.
+# Looping softdep_request_cleanup() seen
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+mount | grep "$mntpoint" | grep md${mdstart}$part > /dev/null && umount $mntpoint
+mdconfig -l | grep md$mdstart > /dev/null &&  mdconfig -d -u $mdstart
+
+mdconfig -a -t swap -s 512m -u $mdstart
+bsdlabel -w md$mdstart auto
+newfs -U md${mdstart}$part > /dev/null
+mount /dev/md${mdstart}$part $mntpoint
+
+export RUNDIR=${mntpoint}/stressX
+set `df -ik $mntpoint | tail -1 | awk '{print $4,$7}'`
+export KBLOCKS=$(($1 * 10))
+export INODES=$(($2 * 10))
+export runRUNTIME=30m
+export RUNTIME=1m
+
+(cd ..; ./run.sh disk.cfg > /dev/null 2>&1)
+
+while mount | grep $mntpoint | grep -q /dev/md; do
+	umount $mntpoint || sleep 1
+done
+mdconfig -d -u $mdstart

From owner-svn-src-projects@FreeBSD.ORG  Fri Dec 30 13:53:05 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 6F036106564A;
	Fri, 30 Dec 2011 13:53:05 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 066F28FC15;
	Fri, 30 Dec 2011 13:53:05 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBUDr4vR016029;
	Fri, 30 Dec 2011 13:53:04 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBUDr4JY016028;
	Fri, 30 Dec 2011 13:53:04 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201112301353.pBUDr4JY016028@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Fri, 30 Dec 2011 13:53:04 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r228998 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 30 Dec 2011 13:53:05 -0000

Author: pho
Date: Fri Dec 30 13:53:04 2011
New Revision: 228998
URL: http://svn.freebsd.org/changeset/base/228998

Log:
  One more disk full scenario added.

Added:
  projects/stress2/misc/ffs_syncvnode2.sh   (contents, props changed)

Added: projects/stress2/misc/ffs_syncvnode2.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/stress2/misc/ffs_syncvnode2.sh	Fri Dec 30 13:53:04 2011	(r228998)
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2011 Peter Holm <pho@FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# Lock seen with:
+#  1001 61985 61981   0  52  0   9624   1028 ufs    D+   0  0:22,89 mkdir
+#  1001 61986 61981   0  52  0   9624   1028 ufs    D+   0  0:21,63 mkdir
+#  1001 61987 61981   0  52  0   9624   1028 ufs    D+   0  0:23,39 mkdir
+
+# Fixed in rxxxxxx.
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart &&  mdconfig -d -u $mdstart
+
+mdconfig -a -t swap -s 2g -u $mdstart || exit 1
+bsdlabel -w md$mdstart auto
+
+newfs -U md${mdstart}$part > /dev/null
+
+mount /dev/md${mdstart}$part $mntpoint
+chmod 777 $mntpoint
+
+export runRUNTIME=30m
+export RUNDIR=$mntpoint/stressX
+
+set `df -ik /mnt | tail -1 | awk '{print $4,$7}'`
+export KBLOCKS=$(($1 * 4))
+export INODES=$(($2 * 4))
+
+su $testuser -c 'cd ..; ./run.sh disk.cfg'
+
+while mount | grep $mntpoint | grep -q /dev/md; do
+	umount $mntpoint || sleep 1
+done
+mdconfig -d -u $mdstart

From owner-svn-src-projects@FreeBSD.ORG  Sat Dec 31 00:03:13 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 844B4106564A;
	Sat, 31 Dec 2011 00:03:13 +0000 (UTC)
	(envelope-from rmacklem@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 67BF68FC12;
	Sat, 31 Dec 2011 00:03:13 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBV03Dlh037130;
	Sat, 31 Dec 2011 00:03:13 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Received: (from rmacklem@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBV03DoZ037127;
	Sat, 31 Dec 2011 00:03:13 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Message-Id: <201112310003.pBV03DoZ037127@svn.freebsd.org>
From: Rick Macklem <rmacklem@FreeBSD.org>
Date: Sat, 31 Dec 2011 00:03:13 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r229048 - in projects/nfsv4.1-client/sys/fs: nfs
	nfsclient
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 31 Dec 2011 00:03:13 -0000

Author: rmacklem
Date: Sat Dec 31 00:03:13 2011
New Revision: 229048
URL: http://svn.freebsd.org/changeset/base/229048

Log:
  Move session related fields out of the nfsclclient and nfsmount
  structures and into a separate structure. This will help prepare
  the session code so that it can be used for Data Server (DS)
  connections as well as the Metadata Server (MDS) connection.

Modified:
  projects/nfsv4.1-client/sys/fs/nfs/nfsclstate.h
  projects/nfsv4.1-client/sys/fs/nfsclient/nfsmount.h

Modified: projects/nfsv4.1-client/sys/fs/nfs/nfsclstate.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfsclstate.h	Fri Dec 30 23:41:24 2011	(r229047)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfsclstate.h	Sat Dec 31 00:03:13 2011	(r229048)
@@ -44,17 +44,27 @@ LIST_HEAD(nfscldeleghash, nfscldeleg);
 #define	NFSCLDELEGHASH(c, f, l)						\
 	(&((c)->nfsc_deleghash[ncl_hash((f), (l)) % NFSCLDELEGHASHSIZE]))
 
+/* Structure for NFSv4.1 session stuff. */
+struct nfsclsession {
+	struct mtx	nfsess_mtx;
+	struct nfsslot	nfsess_cbslots[NFSV4_CBSLOTS];
+	nfsquad_t	nfsess_clientid;
+	uint32_t	nfsess_slotseq[64];	/* Max for 64bit nm_slots */
+	uint64_t	nfsess_slots;
+	uint32_t	nfsess_sequenceid;
+	uint16_t	nfsess_foreslots;
+	uint8_t		nfsess_sessionid[NFSX_V4SESSIONID];
+};
+
 struct nfsclclient {
 	LIST_ENTRY(nfsclclient) nfsc_list;
 	struct nfsclownerhead	nfsc_owner;
 	struct nfscldeleghead	nfsc_deleg;
 	struct nfscldeleghash	nfsc_deleghash[NFSCLDELEGHASHSIZE];
 	struct nfsv4lock nfsc_lock;
-	struct	nfsslot nfsc_cbslots[NFSV4_CBSLOTS]; /* NFSv4.1 cb slot table */
-	uint8_t	nfsc_sessionid[NFSX_V4SESSIONID]; /* NFSv4.1 session id */
+	struct nfsclsession	nfsc_sess;
 	struct proc	*nfsc_renewthread;
 	struct nfsmount	*nfsc_nmp;
-	nfsquad_t	nfsc_clientid;
 	time_t		nfsc_expire;
 	u_int32_t	nfsc_clientidrev;
 	u_int32_t	nfsc_renew;
@@ -65,6 +75,15 @@ struct nfsclclient {
 	u_int8_t	nfsc_id[1];	/* Malloc'd to correct length */
 };
 
+#define	nfsc_mtx	nfsc_sess.nfsess_mtx
+#define	nfsc_cbslots	nfsc_sess.nfsess_cbslots
+#define	nfsc_clientid	nfsc_sess.nfsess_clientid
+#define	nfsc_slotseq	nfsc_sess.nfsess_slotseq
+#define	nfsc_slots	nfsc_sess.nfsess_slots
+#define	nfsc_sequenceid	nfsc_sess.nfsess_sequenceid
+#define	nfsc_foreslots	nfsc_sess.nfsess_foreslots
+#define	nfsc_sessionid	nfsc_sess.nfsess_sessionid
+
 /*
  * Bits for nfsc_flags.
  */

Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfsmount.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfsmount.h	Fri Dec 30 23:41:24 2011	(r229047)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfsmount.h	Sat Dec 31 00:03:13 2011	(r229048)
@@ -74,10 +74,6 @@ struct	nfsmount {
 	u_int64_t nm_clval;		/* identifies which clientid */
 	u_int64_t nm_fsid[2];		/* NFSv4 fsid */
 	int	nm_minorvers;		/* Minor version # for NFSv4 */
-	uint32_t nm_slotseq[64];	/* Max for 64bit nm_slots */
-	uint64_t nm_slots;		/* NFSv4.1 session slots */
-	uint32_t nm_sequenceid;		/* NFSv4.1 sequence number */
-	u_int16_t nm_foreslots;		/* Number of fore channel slots */
 	u_int16_t nm_krbnamelen;	/* Krb5 host principal, if any */
 	u_int16_t nm_dirpathlen;	/* and mount dirpath, for V4 */
 	u_int16_t nm_srvkrbnamelen;	/* and the server's target name */

From owner-svn-src-projects@FreeBSD.ORG  Sat Dec 31 00:12:52 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 30139106566C;
	Sat, 31 Dec 2011 00:12:52 +0000 (UTC)
	(envelope-from rmacklem@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 1E3A28FC16;
	Sat, 31 Dec 2011 00:12:52 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBV0CqA7037505;
	Sat, 31 Dec 2011 00:12:52 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Received: (from rmacklem@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBV0CpmW037501;
	Sat, 31 Dec 2011 00:12:51 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Message-Id: <201112310012.pBV0CpmW037501@svn.freebsd.org>
From: Rick Macklem <rmacklem@FreeBSD.org>
Date: Sat, 31 Dec 2011 00:12:51 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r229050 - in projects/nfsv4.1-client/sys/fs: nfs
	nfsclient
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 31 Dec 2011 00:12:52 -0000

Author: rmacklem
Date: Sat Dec 31 00:12:51 2011
New Revision: 229050
URL: http://svn.freebsd.org/changeset/base/229050

Log:
  Modify the nfscl_setsequence() and nfscl_freeslot() functions so
  that they use the new nfsclsession structure. Also, rename and
  move them to the common module, since they are called by code
  in the common module and may be useful for a NFSv4.1 server someday.

Modified:
  projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c
  projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
  projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clstate.c

Modified: projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c	Sat Dec 31 00:09:33 2011	(r229049)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c	Sat Dec 31 00:12:51 2011	(r229050)
@@ -3541,3 +3541,80 @@ nfsv4_seqsess_cacherep(uint32_t slotid, 
 	slots[slotid].nfssl_inprog = 0;
 }
 
+/*
+ * Generate the xdr for an NFSv4.1 Sequence Operation.
+ */
+APPLESTATIC void
+nfsv4_setsequence(struct nfsrv_descript *nd, struct nfsclsession *sep,
+    int dont_replycache)
+{
+	uint32_t *tl, slotseq = 0;
+	int i, maxslot, slotpos;
+	uint64_t bitval;
+	uint8_t sessionid[NFSX_V4SESSIONID];
+
+	/* Find an unused slot. */
+	slotpos = -1;
+	maxslot = -1;
+	mtx_lock(&sep->nfsess_mtx);
+	do {
+		bitval = 1;
+		for (i = 0; i < sep->nfsess_foreslots; i++) {
+			if ((bitval & sep->nfsess_slots) == 0) {
+				slotpos = i;
+				sep->nfsess_slots |= bitval;
+				sep->nfsess_slotseq[i]++;
+				slotseq = sep->nfsess_slotseq[i];
+				break;
+			}
+			bitval <<= 1;
+		}
+		if (slotpos == -1)
+			(void)mtx_sleep(&sep->nfsess_slots, &sep->nfsess_mtx,
+			    PZERO, "nfsclseq", 0);
+	} while (slotpos == -1);
+	/* Now, find the highest slot in use. (nfsc_slots is 64bits) */
+	bitval = 1;
+	for (i = 0; i < 64; i++) {
+		if ((bitval & sep->nfsess_slots) != 0)
+			maxslot = i;
+		bitval <<= 1;
+	}
+	bcopy(sep->nfsess_sessionid, sessionid, NFSX_V4SESSIONID);
+	mtx_unlock(&sep->nfsess_mtx);
+	KASSERT(maxslot >= 0, ("nfscl_setsequence neg maxslot"));
+
+	/* Build the Sequence arguments. */
+	NFSM_BUILD(tl, uint32_t *, NFSX_V4SESSIONID + 4 * NFSX_UNSIGNED);
+	bcopy(sessionid, tl, NFSX_V4SESSIONID);
+	tl += NFSX_V4SESSIONID / NFSX_UNSIGNED;
+	nd->nd_slotseq = tl;
+	*tl++ = txdr_unsigned(slotseq);
+	*tl++ = txdr_unsigned(slotpos);
+	*tl++ = txdr_unsigned(maxslot);
+	if (dont_replycache == 0)
+		*tl = newnfs_true;
+	else
+		*tl = newnfs_false;
+	nd->nd_flag |= ND_HASSEQUENCE;
+}
+
+/*
+ * Free a session slot.
+ */
+APPLESTATIC void
+nfsv4_freeslot(struct nfsclsession *sep, int slot)
+{
+	uint64_t bitval;
+
+	bitval = 1;
+	if (slot > 0)
+		bitval <<= slot;
+	mtx_lock(&sep->nfsess_mtx);
+	if ((bitval & sep->nfsess_slots) == 0)
+		printf("freeing free slot!!\n");
+	sep->nfsess_slots &= ~bitval;
+	wakeup(&sep->nfsess_slots);
+	mtx_unlock(&sep->nfsess_mtx);
+}
+

Modified: projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h	Sat Dec 31 00:09:33 2011	(r229049)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h	Sat Dec 31 00:12:51 2011	(r229050)
@@ -260,6 +260,8 @@ void newnfs_sndunlock(int *);
 int nfsv4_seqsession(uint32_t, uint32_t, uint32_t, struct nfsslot *,
     struct mbuf **, uint16_t);
 void nfsv4_seqsess_cacherep(uint32_t, struct nfsslot *, struct mbuf *);
+void nfsv4_setsequence(struct nfsrv_descript *, struct nfsclsession *, int);
+void nfsv4_freeslot(struct nfsclsession *, int);
 
 /* nfs_clcomsubs.c */
 void nfsm_uiombuf(struct nfsrv_descript *, struct uio *, int);
@@ -498,8 +500,6 @@ void nfscl_deleggetmodtime(vnode_t, stru
 int nfscl_tryclose(struct nfsclopen *, struct ucred *,
     struct nfsmount *, NFSPROC_T *);
 void nfscl_cleanup(NFSPROC_T *);
-void nfscl_setsequence(struct nfsrv_descript *, struct nfsmount *, int);
-void nfscl_freeslot(struct nfsmount *, int);
 
 /* nfs_clport.c */
 int nfscl_nget(mount_t, vnode_t, struct nfsfh *,

Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clstate.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clstate.c	Sat Dec 31 00:09:33 2011	(r229049)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clstate.c	Sat Dec 31 00:12:51 2011	(r229050)
@@ -4368,85 +4368,3 @@ nfscl_errmap(struct nfsrv_descript *nd)
 	return (txdr_unsigned(*defaulterrp));
 }
 
-/*
- * Generate the xdr for an NFSv4.1 Sequence Operation.
- */
-APPLESTATIC void
-nfscl_setsequence(struct nfsrv_descript *nd, struct nfsmount *nmp,
-    int dont_replycache)
-{
-	uint32_t *tl, slotseq = 0;
-	int i, maxslot, slotpos;
-	uint64_t bitval;
-	uint8_t sessionid[NFSX_V4SESSIONID];
-
-	/* Find an unused slot. */
-	slotpos = -1;
-	maxslot = -1;
-	NFSLOCKMNT(nmp);
-	do {
-		bitval = 1;
-		for (i = 0; i < nmp->nm_foreslots; i++) {
-			if ((bitval & nmp->nm_slots) == 0) {
-				slotpos = i;
-				nmp->nm_slots |= bitval;
-				nmp->nm_slotseq[i]++;
-				slotseq = nmp->nm_slotseq[i];
-				break;
-			}
-			bitval <<= 1;
-		}
-		if (slotpos == -1)
-			(void)mtx_sleep(&nmp->nm_slots, &nmp->nm_mtx, PZERO,
-			    "nfsclseq", 0);
-	} while (slotpos == -1);
-	/* Now, find the highest slot in use. (nm_slots is 64bits) */
-	bitval = 1;
-	for (i = 0; i < 64; i++) {
-		if ((bitval & nmp->nm_slots) != 0)
-			maxslot = i;
-		bitval <<= 1;
-	}
-	if (nmp->nm_clp != NULL)
-		bcopy(nmp->nm_clp->nfsc_sessionid, sessionid, NFSX_V4SESSIONID);
-	else {
-		printf("nfscl_setsequence: NULL sessionid\n");
-		bzero(sessionid, NFSX_V4SESSIONID);
-	}
-	NFSUNLOCKMNT(nmp);
-	KASSERT(maxslot >= 0, ("nfscl_setsequence neg maxslot"));
-
-	/* Build the Sequence arguments. */
-	NFSM_BUILD(tl, uint32_t *, NFSX_V4SESSIONID + 4 * NFSX_UNSIGNED);
-	bcopy(sessionid, tl, NFSX_V4SESSIONID);
-	tl += NFSX_V4SESSIONID / NFSX_UNSIGNED;
-	nd->nd_slotseq = tl;
-	*tl++ = txdr_unsigned(slotseq);
-	*tl++ = txdr_unsigned(slotpos);
-	*tl++ = txdr_unsigned(maxslot);
-	if (dont_replycache == 0)
-		*tl = newnfs_true;
-	else
-		*tl = newnfs_false;
-	nd->nd_flag |= ND_HASSEQUENCE;
-}
-
-/*
- * Free a session slot.
- */
-void
-nfscl_freeslot(struct nfsmount *nmp, int slot)
-{
-	uint64_t bitval;
-
-	bitval = 1;
-	if (slot > 0)
-		bitval <<= slot;
-	NFSLOCKMNT(nmp);
-	if ((bitval & nmp->nm_slots) == 0)
-		printf("freeing free slot!!\n");
-	nmp->nm_slots &= ~bitval;
-	wakeup(&nmp->nm_slots);
-	NFSUNLOCKMNT(nmp);
-}
-

From owner-svn-src-projects@FreeBSD.ORG  Sat Dec 31 00:35:12 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 5F7141065675;
	Sat, 31 Dec 2011 00:35:12 +0000 (UTC)
	(envelope-from rmacklem@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 4C8478FC18;
	Sat, 31 Dec 2011 00:35:12 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBV0ZC0v038298;
	Sat, 31 Dec 2011 00:35:12 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Received: (from rmacklem@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBV0ZCXP038293;
	Sat, 31 Dec 2011 00:35:12 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Message-Id: <201112310035.pBV0ZCXP038293@svn.freebsd.org>
From: Rick Macklem <rmacklem@FreeBSD.org>
Date: Sat, 31 Dec 2011 00:35:12 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r229051 - in projects/nfsv4.1-client/sys/fs: nfs
	nfsclient
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 31 Dec 2011 00:35:12 -0000

Author: rmacklem
Date: Sat Dec 31 00:35:11 2011
New Revision: 229051
URL: http://svn.freebsd.org/changeset/base/229051

Log:
  Add an argument to nfscl_reqstart() that is a pointer to the
  new session structure, so that it can optionally override use
  of the default one in the nfsclclient structure. For now, this
  new argument is always passed in as NULL to maintain default
  behaviour.

Modified:
  projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
  projects/nfsv4.1-client/sys/fs/nfs/nfscl.h
  projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c
  projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c

Modified: projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h	Sat Dec 31 00:12:51 2011	(r229050)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h	Sat Dec 31 00:35:11 2011	(r229051)
@@ -69,6 +69,7 @@ struct nfsclowner;
 struct nfsclopen;
 struct nfsclopenhead;
 struct nfsclclient;
+struct nfsclsession;
 struct nfscllockowner;
 struct nfscllock;
 struct nfscldeleg;
@@ -266,7 +267,7 @@ void nfsv4_freeslot(struct nfsclsession 
 /* nfs_clcomsubs.c */
 void nfsm_uiombuf(struct nfsrv_descript *, struct uio *, int);
 void nfscl_reqstart(struct nfsrv_descript *, int, struct nfsmount *,
-    u_int8_t *, int, u_int32_t **);
+    u_int8_t *, int, u_int32_t **, struct nfsclsession *);
 nfsuint64 *nfscl_getcookie(struct nfsnode *, off_t off, int);
 void nfscl_fillsattr(struct nfsrv_descript *, struct vattr *,
       vnode_t, int, u_int32_t);

Modified: projects/nfsv4.1-client/sys/fs/nfs/nfscl.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfscl.h	Sat Dec 31 00:12:51 2011	(r229050)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfscl.h	Sat Dec 31 00:35:11 2011	(r229051)
@@ -49,7 +49,7 @@ struct nfsv4node {
  */
 #define	NFSCL_REQSTART(n, p, v) 					\
 	nfscl_reqstart((n), (p), VFSTONFS((v)->v_mount), 		\
-	    VTONFS(v)->n_fhp->nfh_fh, VTONFS(v)->n_fhp->nfh_len, NULL)
+	    VTONFS(v)->n_fhp->nfh_fh, VTONFS(v)->n_fhp->nfh_len, NULL, NULL)
 
 /*
  * These two macros convert between a lease duration and renew interval.

Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c	Sat Dec 31 00:12:51 2011	(r229050)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c	Sat Dec 31 00:35:11 2011	(r229051)
@@ -121,7 +121,7 @@ static int nfs_bigrequest[NFSV41_NPROCS]
  */
 APPLESTATIC void
 nfscl_reqstart(struct nfsrv_descript *nd, int procnum, struct nfsmount *nmp,
-    u_int8_t *nfhp, int fhlen, u_int32_t **opcntpp)
+    u_int8_t *nfhp, int fhlen, u_int32_t **opcntpp, struct nfsclsession *sep)
 {
 	struct mbuf *mb;
 	u_int32_t *tl;
@@ -186,7 +186,12 @@ nfscl_reqstart(struct nfsrv_descript *nd
 		    nfsv4_opflag[nfsv4_opmap[procnum].op].needsseq > 0) {
 			NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED);
 			*tl = txdr_unsigned(NFSV4OP_SEQUENCE);
-			nfscl_setsequence(nd, nmp, nfs_bigreply[procnum]);
+			if (sep == NULL)
+				nfsv4_setsequence(nd, &nmp->nm_clp->nfsc_sess,
+				    nfs_bigreply[procnum]);
+			else
+				nfsv4_setsequence(nd, sep,
+				    nfs_bigreply[procnum]);
 		}
 		if (nfsv4_opflag[nfsv4_opmap[procnum].op].needscfh > 0) {
 			NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED);

Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c	Sat Dec 31 00:12:51 2011	(r229050)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c	Sat Dec 31 00:35:11 2011	(r229051)
@@ -341,7 +341,7 @@ nfsrpc_openrpc(struct nfsmount *nmp, vno
 
 	dp = *dpp;
 	*dpp = NULL;
-	nfscl_reqstart(nd, NFSPROC_OPEN, nmp, nfhp, fhlen, NULL);
+	nfscl_reqstart(nd, NFSPROC_OPEN, nmp, nfhp, fhlen, NULL, NULL);
 	NFSM_BUILD(tl, u_int32_t *, 5 * NFSX_UNSIGNED);
 	*tl++ = txdr_unsigned(op->nfso_own->nfsow_seqid);
 	*tl++ = txdr_unsigned(mode & NFSV4OPEN_ACCESSBOTH);
@@ -687,7 +687,7 @@ nfsrpc_closerpc(struct nfsrv_descript *n
 	int error;
 
 	nfscl_reqstart(nd, NFSPROC_CLOSE, nmp, op->nfso_fh,
-	    op->nfso_fhlen, NULL);
+	    op->nfso_fhlen, NULL, NULL);
 	NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED + NFSX_STATEID);
 	*tl++ = txdr_unsigned(op->nfso_own->nfsow_seqid);
 	*tl++ = op->nfso_stateid.seqid;
@@ -726,7 +726,7 @@ nfsrpc_openconfirm(vnode_t vp, u_int8_t 
 	nmp = VFSTONFS(vnode_mount(vp));
 	if (NFSHASNFSV4N(nmp))
 		return (0);		/* No confirmation for NFSv4.1. */
-	nfscl_reqstart(nd, NFSPROC_OPENCONFIRM, nmp, nfhp, fhlen, NULL);
+	nfscl_reqstart(nd, NFSPROC_OPENCONFIRM, nmp, nfhp, fhlen, NULL, NULL);
 	NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED + NFSX_STATEID);
 	*tl++ = op->nfso_stateid.seqid;
 	*tl++ = op->nfso_stateid.other[0];
@@ -781,7 +781,7 @@ if (error) printf("exch=%d\n",error);
 if (error) printf("aft crs=%d\n",error);
 		return (error);
 	}
-	nfscl_reqstart(nd, NFSPROC_SETCLIENTID, nmp, NULL, 0, NULL);
+	nfscl_reqstart(nd, NFSPROC_SETCLIENTID, nmp, NULL, 0, NULL, NULL);
 	NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
 	*tl++ = txdr_unsigned(nfsboottime.tv_sec);
 	*tl = txdr_unsigned(rev++);
@@ -850,7 +850,8 @@ if (error) printf("aft crs=%d\n",error);
 	    /*
 	     * and confirm it.
 	     */
-	    nfscl_reqstart(nd, NFSPROC_SETCLIENTIDCFRM, nmp, NULL, 0, NULL);
+	    nfscl_reqstart(nd, NFSPROC_SETCLIENTIDCFRM, nmp, NULL, 0, NULL,
+		NULL);
 	    NFSM_BUILD(tl, u_int32_t *, 4 * NFSX_UNSIGNED);
 	    *tl++ = clp->nfsc_clientid.lval[0];
 	    *tl++ = clp->nfsc_clientid.lval[1];
@@ -865,7 +866,7 @@ if (error) printf("aft crs=%d\n",error);
 	    nd->nd_mrep = NULL;
 	    if (nd->nd_repstat == 0) {
 		nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, nmp->nm_fh,
-		    nmp->nm_fhsize, NULL);
+		    nmp->nm_fhsize, NULL, NULL);
 		NFSZERO_ATTRBIT(&attrbits);
 		NFSSETBIT_ATTRBIT(&attrbits, NFSATTRBIT_LEASETIME);
 		(void) nfsrv_putattrbit(nd, &attrbits);
@@ -932,7 +933,7 @@ nfsrpc_getattrnovp(struct nfsmount *nmp,
 	int error, vers = NFS_VER2;
 	nfsattrbit_t attrbits;
 	
-	nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, fhp, fhlen, NULL);
+	nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, fhp, fhlen, NULL, NULL);
 	if (nd->nd_flag & ND_NFSV4) {
 		vers = NFS_VER4;
 		NFSGETATTR_ATTRBIT(&attrbits);
@@ -3715,7 +3716,7 @@ nfsrpc_locku(struct nfsrv_descript *nd, 
 	int error;
 
 	nfscl_reqstart(nd, NFSPROC_LOCKU, nmp, lp->nfsl_open->nfso_fh,
-	    lp->nfsl_open->nfso_fhlen, NULL);
+	    lp->nfsl_open->nfso_fhlen, NULL, NULL);
 	NFSM_BUILD(tl, u_int32_t *, NFSX_STATEID + 6 * NFSX_UNSIGNED);
 	*tl++ = txdr_unsigned(type);
 	*tl = txdr_unsigned(lp->nfsl_seqid);
@@ -3763,7 +3764,7 @@ nfsrpc_lock(struct nfsrv_descript *nd, s
 	int error, size;
 	uint8_t own[NFSV4CL_LOCKNAMELEN + NFSX_V4FHMAX];
 
-	nfscl_reqstart(nd, NFSPROC_LOCK, nmp, nfhp, fhlen, NULL);
+	nfscl_reqstart(nd, NFSPROC_LOCK, nmp, nfhp, fhlen, NULL, NULL);
 	NFSM_BUILD(tl, u_int32_t *, 7 * NFSX_UNSIGNED);
 	if (type == F_RDLCK)
 		*tl++ = txdr_unsigned(NFSV4LOCKT_READ);
@@ -4025,7 +4026,7 @@ nfsrpc_renew(struct nfsclclient *clp, st
 	nmp = clp->nfsc_nmp;
 	if (nmp == NULL)
 		return (0);
-	nfscl_reqstart(nd, NFSPROC_RENEW, nmp, NULL, 0, NULL);
+	nfscl_reqstart(nd, NFSPROC_RENEW, nmp, NULL, 0, NULL, NULL);
 	if (!NFSHASNFSV4N(nmp)) {
 		/* NFSv4.1 just uses a Sequence Op and not a Renew. */
 		NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
@@ -4056,10 +4057,12 @@ nfsrpc_rellockown(struct nfsmount *nmp, 
 
 	if (NFSHASNFSV4N(nmp)) {
 		/* For NFSv4.1, do a FreeStateID. */
-		nfscl_reqstart(nd, NFSPROC_FREESTATEID, nmp, NULL, 0, NULL);
+		nfscl_reqstart(nd, NFSPROC_FREESTATEID, nmp, NULL, 0, NULL,
+		    NULL);
 		nfsm_stateidtom(nd, &lp->nfsl_stateid, NFSSTATEID_PUTSTATEID);
 	} else {
-		nfscl_reqstart(nd, NFSPROC_RELEASELCKOWN, nmp, NULL, 0, NULL);
+		nfscl_reqstart(nd, NFSPROC_RELEASELCKOWN, nmp, NULL, 0, NULL,
+		    NULL);
 		NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
 		*tl++ = nmp->nm_clp->nfsc_clientid.lval[0];
 		*tl = nmp->nm_clp->nfsc_clientid.lval[1];
@@ -4091,7 +4094,7 @@ nfsrpc_getdirpath(struct nfsmount *nmp, 
 	int error, cnt, len, setnil;
 	u_int32_t *opcntp;
 
-	nfscl_reqstart(nd, NFSPROC_PUTROOTFH, nmp, NULL, 0, &opcntp);
+	nfscl_reqstart(nd, NFSPROC_PUTROOTFH, nmp, NULL, 0, &opcntp, NULL);
 	cp = dirpath;
 	cnt = 0;
 	do {
@@ -4159,7 +4162,7 @@ nfsrpc_delegreturn(struct nfscldeleg *dp
 	int error;
 
 	nfscl_reqstart(nd, NFSPROC_DELEGRETURN, nmp, dp->nfsdl_fh,
-	    dp->nfsdl_fhlen, NULL);
+	    dp->nfsdl_fhlen, NULL, NULL);
 	NFSM_BUILD(tl, u_int32_t *, NFSX_STATEID);
 	*tl++ = dp->nfsdl_stateid.seqid;
 	*tl++ = dp->nfsdl_stateid.other[0];
@@ -4264,7 +4267,7 @@ nfsrpc_exchangeid(struct nfsmount *nmp, 
 	int error;
 	static uint32_t rev = 0;
 
-	nfscl_reqstart(nd, NFSPROC_EXCHANGEID, nmp, NULL, 0, NULL);
+	nfscl_reqstart(nd, NFSPROC_EXCHANGEID, nmp, NULL, 0, NULL, NULL);
 	NFSM_BUILD(tl, uint32_t *, 2 * NFSX_UNSIGNED);
 	*tl++ = txdr_unsigned(nfsboottime.tv_sec);	/* Client owner */
 	*tl = txdr_unsigned(rev++);
@@ -4314,7 +4317,7 @@ nfsrpc_createsession(struct nfsmount *nm
 	struct nfsrv_descript *nd = &nfsd;
 	int error, irdcnt;
 
-	nfscl_reqstart(nd, NFSPROC_CREATESESSION, nmp, NULL, 0, NULL);
+	nfscl_reqstart(nd, NFSPROC_CREATESESSION, nmp, NULL, 0, NULL, NULL);
 	NFSM_BUILD(tl, uint32_t *, 4 * NFSX_UNSIGNED);
 	*tl++ = clp->nfsc_clientid.lval[0];
 	*tl++ = clp->nfsc_clientid.lval[1];
@@ -4408,7 +4411,7 @@ nfsrpc_destroysession(struct nfsmount *n
 	struct nfsrv_descript *nd = &nfsd;
 	int error;
 
-	nfscl_reqstart(nd, NFSPROC_DESTROYSESSION, nmp, NULL, 0, NULL);
+	nfscl_reqstart(nd, NFSPROC_DESTROYSESSION, nmp, NULL, 0, NULL, NULL);
 	NFSM_BUILD(tl, uint32_t *, NFSX_V4SESSIONID);
 	bcopy(clp->nfsc_sessionid, tl, NFSX_V4SESSIONID);
 	nd->nd_flag |= ND_USEGSSNAME;
@@ -4422,7 +4425,7 @@ nfsrpc_destroysession(struct nfsmount *n
 }
 
 /*
- * Do the NFSv4.1 Destroy Session.
+ * Do the NFSv4.1 Destroy Client.
  */
 int
 nfsrpc_destroyclient(struct nfsmount *nmp, struct nfsclclient *clp,
@@ -4433,7 +4436,7 @@ nfsrpc_destroyclient(struct nfsmount *nm
 	struct nfsrv_descript *nd = &nfsd;
 	int error;
 
-	nfscl_reqstart(nd, NFSPROC_DESTROYCLIENT, nmp, NULL, 0, NULL);
+	nfscl_reqstart(nd, NFSPROC_DESTROYCLIENT, nmp, NULL, 0, NULL, NULL);
 	NFSM_BUILD(tl, uint32_t *, 2 * NFSX_UNSIGNED);
 	*tl++ = clp->nfsc_clientid.lval[0];
 	*tl = clp->nfsc_clientid.lval[1];

From owner-svn-src-projects@FreeBSD.ORG  Sat Dec 31 00:51:16 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id ADD6F106566B;
	Sat, 31 Dec 2011 00:51:16 +0000 (UTC)
	(envelope-from rmacklem@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 823BD8FC12;
	Sat, 31 Dec 2011 00:51:16 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBV0pGpe038936;
	Sat, 31 Dec 2011 00:51:16 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Received: (from rmacklem@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBV0pGtp038934;
	Sat, 31 Dec 2011 00:51:16 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Message-Id: <201112310051.pBV0pGtp038934@svn.freebsd.org>
From: Rick Macklem <rmacklem@FreeBSD.org>
Date: Sat, 31 Dec 2011 00:51:16 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r229055 - projects/nfsv4.1-client/sys/fs/nfsclient
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 31 Dec 2011 00:51:16 -0000

Author: rmacklem
Date: Sat Dec 31 00:51:16 2011
New Revision: 229055
URL: http://svn.freebsd.org/changeset/base/229055

Log:
  Modify the nfsrpc_exchangeid() and nfsrpc_createsession() functions
  to use the new session structure. Later these functions will get
  extra arguments that will allow them to use a session structure
  other than the default one in the nfsclclient structure.

Modified:
  projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c

Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c	Sat Dec 31 00:47:54 2011	(r229054)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c	Sat Dec 31 00:51:16 2011	(r229055)
@@ -4295,7 +4295,7 @@ printf("exch err=%d reps=%d\n",error,nd-
 		NFSM_DISSECT(tl, u_int32_t *, 4 * NFSX_UNSIGNED);
 		clp->nfsc_clientid.lval[0] = *tl++;
 		clp->nfsc_clientid.lval[1] = *tl++;
-		nmp->nm_sequenceid = fxdr_unsigned(uint32_t, *tl++);
+		clp->nfsc_sequenceid = fxdr_unsigned(uint32_t, *tl++);
 		v41flags = fxdr_unsigned(uint32_t, *tl);
 printf("v41fl=0x%x\n", v41flags);
 	}
@@ -4321,8 +4321,8 @@ nfsrpc_createsession(struct nfsmount *nm
 	NFSM_BUILD(tl, uint32_t *, 4 * NFSX_UNSIGNED);
 	*tl++ = clp->nfsc_clientid.lval[0];
 	*tl++ = clp->nfsc_clientid.lval[1];
-	*tl++ = txdr_unsigned(nmp->nm_sequenceid);
-printf("nmpseq0=0x%x\n",nmp->nm_sequenceid);
+	*tl++ = txdr_unsigned(clp->nfsc_sequenceid);
+printf("clseq0=0x%x\n",clp->nfsc_sequenceid);
 	if (nfscl_enablecallb != 0 && nfs_numnfscbd > 0)
 		*tl = txdr_unsigned(NFSV4CRSESS_PERSIST |
 		    NFSV4CRSESS_CONNBACKCHAN);
@@ -4370,8 +4370,8 @@ printf("nmpseq0=0x%x\n",nmp->nm_sequence
 		    2 * NFSX_UNSIGNED);
 		bcopy(tl, clp->nfsc_sessionid, NFSX_V4SESSIONID);
 		tl += NFSX_V4SESSIONID / NFSX_UNSIGNED;
-		nmp->nm_sequenceid = fxdr_unsigned(uint32_t, *tl++);
-printf("nmseq=0x%x\n",nmp->nm_sequenceid);
+		clp->nfsc_sequenceid = fxdr_unsigned(uint32_t, *tl++);
+printf("clseq=0x%x\n",clp->nfsc_sequenceid);
 printf("crfl=0x%x\n",fxdr_unsigned(uint32_t, *tl));
 		/* Don't care about replied flags for now. */
 
@@ -4379,8 +4379,8 @@ printf("crfl=0x%x\n",fxdr_unsigned(uint3
 		NFSM_DISSECT(tl, uint32_t *, 7 * NFSX_UNSIGNED);
 printf("cr %d %d %d %d %d\n",fxdr_unsigned(uint32_t, *tl),fxdr_unsigned(uint32_t, *(tl+1)),fxdr_unsigned(uint32_t, *(tl+2)),fxdr_unsigned(uint32_t, *(tl+3)),fxdr_unsigned(uint32_t, *(tl+4)));
 		tl += 5;		/* Skip the other counts. */		
-		nmp->nm_foreslots = fxdr_unsigned(uint16_t, *tl++);
-printf("fore slots=%d\n", nmp->nm_foreslots);
+		clp->nfsc_foreslots = fxdr_unsigned(uint16_t, *tl++);
+printf("fore slots=%d\n", clp->nfsc_foreslots);
 		irdcnt = fxdr_unsigned(int, *tl);
 		if (irdcnt > 0) {
 printf("got an ird cnt=%d\n",irdcnt);

From owner-svn-src-projects@FreeBSD.ORG  Sat Dec 31 01:06:51 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 931351065677;
	Sat, 31 Dec 2011 01:06:51 +0000 (UTC)
	(envelope-from rmacklem@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 67A9F8FC17;
	Sat, 31 Dec 2011 01:06:51 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBV16pbI039447;
	Sat, 31 Dec 2011 01:06:51 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Received: (from rmacklem@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBV16pqH039445;
	Sat, 31 Dec 2011 01:06:51 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Message-Id: <201112310106.pBV16pqH039445@svn.freebsd.org>
From: Rick Macklem <rmacklem@FreeBSD.org>
Date: Sat, 31 Dec 2011 01:06:51 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r229056 - projects/nfsv4.1-client/sys/fs/nfsclient
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 31 Dec 2011 01:06:51 -0000

Author: rmacklem
Date: Sat Dec 31 01:06:51 2011
New Revision: 229056
URL: http://svn.freebsd.org/changeset/base/229056

Log:
  Initialize the mutex in the nfsclsession structure inside the
  nfsclclient structure. This mutex is used to serialize modifications
  of fields in the nfsclsession structure.

Modified:
  projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clstate.c

Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clstate.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clstate.c	Sat Dec 31 00:51:16 2011	(r229055)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clstate.c	Sat Dec 31 01:06:51 2011	(r229056)
@@ -721,7 +721,9 @@ nfscl_getcl(struct mount *mp, struct ucr
 			idlen += sizeof (u_int64_t) + 16; /* 16 random bytes */
 		MALLOC(newclp, struct nfsclclient *,
 		    sizeof (struct nfsclclient) + idlen - 1, M_NFSCLCLIENT,
-		    M_WAITOK);
+		    M_WAITOK | M_ZERO);
+		mtx_init(&newclp->nfsc_mtx, "ClientID lock", NULL,
+		    MTX_DEF | MTX_DUPOK);
 	}
 	NFSLOCKCLSTATE();
 	/*
@@ -731,8 +733,10 @@ nfscl_getcl(struct mount *mp, struct ucr
 	 */
 	if ((mp->mnt_kern_flag & MNTK_UNMOUNTF) != 0) {
 		NFSUNLOCKCLSTATE();
-		if (newclp != NULL)
+		if (newclp != NULL) {
+			mtx_destroy(&newclp->nfsc_mtx);
 			free(newclp, M_NFSCLCLIENT);
+		}
 		return (EBADF);
 	}
 	clp = nmp->nm_clp;
@@ -742,7 +746,6 @@ nfscl_getcl(struct mount *mp, struct ucr
 			return (EACCES);
 		}
 		clp = newclp;
-		NFSBZERO((caddr_t)clp, sizeof(struct nfsclclient) + idlen - 1);
 		clp->nfsc_idlen = idlen;
 		LIST_INIT(&clp->nfsc_owner);
 		TAILQ_INIT(&clp->nfsc_deleg);
@@ -761,8 +764,10 @@ nfscl_getcl(struct mount *mp, struct ucr
 			nfscl_start_renewthread(clp);
 	} else {
 		NFSUNLOCKCLSTATE();
-		if (newclp != NULL)
-			FREE((caddr_t)newclp, M_NFSCLCLIENT);
+		if (newclp != NULL) {
+			mtx_destroy(&newclp->nfsc_mtx);
+			free(newclp, M_NFSCLCLIENT);
+		}
 	}
 	NFSLOCKCLSTATE();
 	while ((clp->nfsc_flags & NFSCLFLAGS_HASCLIENTID) == 0 && !igotlock &&

From owner-svn-src-projects@FreeBSD.ORG  Sat Dec 31 02:08:52 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 3014E106564A;
	Sat, 31 Dec 2011 02:08:52 +0000 (UTC)
	(envelope-from rmacklem@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 14F3A8FC08;
	Sat, 31 Dec 2011 02:08:52 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBV28qS2041671;
	Sat, 31 Dec 2011 02:08:52 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Received: (from rmacklem@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBV28p2h041664;
	Sat, 31 Dec 2011 02:08:51 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Message-Id: <201112310208.pBV28p2h041664@svn.freebsd.org>
From: Rick Macklem <rmacklem@FreeBSD.org>
Date: Sat, 31 Dec 2011 02:08:51 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r229064 - in projects/nfsv4.1-client/sys/fs: nfs
	nfsclient nfsserver
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 31 Dec 2011 02:08:52 -0000

Author: rmacklem
Date: Sat Dec 31 02:08:51 2011
New Revision: 229064
URL: http://svn.freebsd.org/changeset/base/229064

Log:
  Add an optional argument to newnfs_request() that is a pointer to
  the new session structure. If this argument is NULL, it will use
  the default session structure in the nfsclclient structure. This
  prepares the code to be used for Data Server sessions as well as
  the default Metadata Server session.

Modified:
  projects/nfsv4.1-client/sys/fs/nfs/nfs_commonkrpc.c
  projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c
  projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
  projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clport.c
  projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c
  projects/nfsv4.1-client/sys/fs/nfsserver/nfs_nfsdstate.c

Modified: projects/nfsv4.1-client/sys/fs/nfs/nfs_commonkrpc.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfs_commonkrpc.c	Sat Dec 31 01:33:25 2011	(r229063)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfs_commonkrpc.c	Sat Dec 31 02:08:51 2011	(r229064)
@@ -491,7 +491,7 @@ int
 newnfs_request(struct nfsrv_descript *nd, struct nfsmount *nmp,
     struct nfsclient *clp, struct nfssockreq *nrp, vnode_t vp,
     struct thread *td, struct ucred *cred, u_int32_t prog, u_int32_t vers,
-    u_char *retsum, int toplevel, u_int64_t *xidp)
+    u_char *retsum, int toplevel, u_int64_t *xidp, struct nfsclsession *sep)
 {
 	u_int32_t retseq, retval, *tl;
 	time_t waituntil;
@@ -785,6 +785,9 @@ tryagain:
 	nd->nd_dpos = NFSMTOD(nd->nd_md, caddr_t);
 	nd->nd_repstat = 0;
 	if (nd->nd_procnum != NFSPROC_NULL) {
+		/* If sep == NULL, set it to the default in nfsclclient. */
+		if (sep == NULL && nmp != NULL && nmp->nm_clp != NULL)
+			sep = &nmp->nm_clp->nfsc_sess;
 		/*
 		 * and now the actual NFS xdr.
 		 */
@@ -814,19 +817,19 @@ if (nmp != NULL && i == NFSV4OP_SEQUENCE
 			if (nmp != NULL && i == NFSV4OP_SEQUENCE && j == 0) {
 				NFSM_DISSECT(tl, uint32_t *, NFSX_V4SESSIONID +
 				    5 * NFSX_UNSIGNED);
-				NFSLOCKMNT(nmp);
+				mtx_lock(&sep->nfsess_mtx);
 				tl += NFSX_V4SESSIONID / NFSX_UNSIGNED;
 				retseq = fxdr_unsigned(uint32_t, *tl++);
 				slot = fxdr_unsigned(int, *tl++);
 				freeslot = slot;
-				if (retseq != nmp->nm_slotseq[slot])
+				if (retseq != sep->nfsess_slotseq[slot])
 					printf("retseq diff 0x%x\n", retseq);
 				retval = fxdr_unsigned(uint32_t, *++tl);
 #ifdef notyet
-				if ((retval + 1) < nmp->nm_foreslots)
-					nmp->nm_foreslots = (retval + 1);
-				else if ((retval + 1) > nmp->nm_foreslots)
-					nmp->nm_foreslots = (retval < 64) ?
+				if ((retval + 1) < sep->nfsess_foreslots)
+					sep->nfsess_foreslots = (retval + 1);
+				else if ((retval + 1) > sep->nfsess_foreslots)
+					sep->nfsess_foreslots = (retval < 64) ?
 					    (retval + 1) : 64;
 #else
 				/*
@@ -837,24 +840,24 @@ if (nmp != NULL && i == NFSV4OP_SEQUENCE
 				 * In other words, is it N or N-1?
 				 * For now, play it safe and assume the
 				 * worst cases of the above, such that
-				 * nm_foreslots might be one less than the
+				 * nfsess_foreslots might be one less than the
 				 * server specified. This is safe, whereas
-				 * setting nm_foreslots one greater than
+				 * setting nfsess_foreslots one greater than
 				 * the server intended could cause grief.
 				 */
-				if (retval < nmp->nm_foreslots)
+				if (retval < sep->nfsess_foreslots)
 {
 printf("foreslots shrinking %d\n", retval);
-					nmp->nm_foreslots = retval;
+					sep->nfsess_foreslots = retval;
 }
-				else if (retval > nmp->nm_foreslots)
+				else if (retval > sep->nfsess_foreslots)
 {
 printf("foreslots growing %d\n", retval);
-					nmp->nm_foreslots = (retval < 64) ?
+					sep->nfsess_foreslots = (retval < 64) ?
 					    retval : 64;
 }
 #endif	/* notyet */
-				NFSUNLOCKMNT(nmp);
+				mtx_unlock(&sep->nfsess_mtx);
 
 				/* Grab the op and status for the next one. */
 				if (opcnt > 1) {
@@ -890,11 +893,11 @@ printf("foreslots growing %d\n", retval)
 					(void) nfs_catnap(PZERO, 0, "nfstry");
 				trylater_delay *= 2;
 				if (slot != -1) {
-					NFSLOCKMNT(nmp);
-					nmp->nm_slotseq[slot]++;
+					mtx_lock(&sep->nfsess_mtx);
+					sep->nfsess_slotseq[slot]++;
 					*nd->nd_slotseq = txdr_unsigned(
-					    nmp->nm_slotseq[slot]);
-					NFSUNLOCKMNT(nmp);
+					    sep->nfsess_slotseq[slot]);
+					mtx_unlock(&sep->nfsess_mtx);
 				}
 				m_freem(nd->nd_mrep);
 				nd->nd_mrep = NULL;
@@ -915,7 +918,7 @@ printf("foreslots growing %d\n", retval)
 		if ((nd->nd_flag & ND_NFSV4) != 0) {
 			/* Free the slot, as required. */
 			if (freeslot != -1)
-				nfscl_freeslot(nmp, freeslot);
+				nfsv4_freeslot(sep, freeslot);
 			/*
 			 * If this op is Putfh, throw its results away.
 			 */

Modified: projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c	Sat Dec 31 01:33:25 2011	(r229063)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c	Sat Dec 31 02:08:51 2011	(r229064)
@@ -3003,7 +3003,7 @@ nfsrv_getuser(int procnum, uid_t uid, gi
 		(void) nfsm_strtom(nd, name, len);
 	}
 	error = newnfs_request(nd, NULL, NULL, &nfsrv_nfsuserdsock, NULL, NULL,
-		cred, RPCPROG_NFSUSERD, RPCNFSUSERD_VERS, NULL, 0, NULL);
+		cred, RPCPROG_NFSUSERD, RPCNFSUSERD_VERS, NULL, 0, NULL, NULL);
 	NFSFREECRED(cred);
 	if (!error) {
 		mbuf_freem(nd->nd_mrep);

Modified: projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h	Sat Dec 31 01:33:25 2011	(r229063)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h	Sat Dec 31 02:08:51 2011	(r229064)
@@ -599,7 +599,8 @@ void newnfs_restore_sigmask(struct threa
 int newnfs_msleep(struct thread *, void *, struct mtx *, int, char *, int);
 int newnfs_request(struct nfsrv_descript *, struct nfsmount *,
     struct nfsclient *, struct nfssockreq *, vnode_t, NFSPROC_T *,
-    struct ucred *, u_int32_t, u_int32_t, u_char *, int, u_int64_t *);
+    struct ucred *, u_int32_t, u_int32_t, u_char *, int, u_int64_t *,
+    struct nfsclsession *);
 int newnfs_connect(struct nfsmount *, struct nfssockreq *,
     struct ucred *, NFSPROC_T *, int);
 void newnfs_disconnect(struct nfssockreq *);

Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clport.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clport.c	Sat Dec 31 01:33:25 2011	(r229063)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clport.c	Sat Dec 31 02:08:51 2011	(r229064)
@@ -857,7 +857,7 @@ nfscl_request(struct nfsrv_descript *nd,
 	else
 		vers = NFS_VER2;
 	ret = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, vp, p, cred,
-		NFS_PROG, vers, NULL, 1, NULL);
+		NFS_PROG, vers, NULL, 1, NULL, NULL);
 	return (ret);
 }
 

Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c	Sat Dec 31 01:33:25 2011	(r229063)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c	Sat Dec 31 02:08:51 2011	(r229064)
@@ -377,7 +377,7 @@ nfsrpc_openrpc(struct nfsmount *nmp, vno
 	if (syscred)
 		nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, vp, p, cred,
-	    NFS_PROG, NFS_VER4, NULL, 1, NULL);
+	    NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 	if (error)
 		return (error);
 	NFSCL_INCRSEQID(op->nfso_own->nfsow_seqid, nd);
@@ -697,7 +697,7 @@ nfsrpc_closerpc(struct nfsrv_descript *n
 	if (syscred)
 		nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
-	    NFS_PROG, NFS_VER4, NULL, 1, NULL);
+	    NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 	if (error)
 		return (error);
 	NFSCL_INCRSEQID(op->nfso_own->nfsow_seqid, nd);
@@ -835,7 +835,7 @@ if (error) printf("aft crs=%d\n",error);
 	*tl = txdr_unsigned(clp->nfsc_cbident);
 	nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
-		NFS_PROG, NFS_VER4, NULL, 1, NULL);
+		NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 	if (error)
 		return (error);
 	if (nd->nd_repstat == 0) {
@@ -859,7 +859,7 @@ if (error) printf("aft crs=%d\n",error);
 	    *tl = confirm.lval[1];
 	    nd->nd_flag |= ND_USEGSSNAME;
 	    error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p,
-		cred, NFS_PROG, NFS_VER4, NULL, 1, NULL);
+		cred, NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 	    if (error)
 		return (error);
 	    mbuf_freem(nd->nd_mrep);
@@ -872,7 +872,7 @@ if (error) printf("aft crs=%d\n",error);
 		(void) nfsrv_putattrbit(nd, &attrbits);
 		nd->nd_flag |= ND_USEGSSNAME;
 		error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p,
-		    cred, NFS_PROG, NFS_VER4, NULL, 1, NULL);
+		    cred, NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 		if (error)
 		    return (error);
 		if (nd->nd_repstat == 0) {
@@ -945,7 +945,7 @@ nfsrpc_getattrnovp(struct nfsmount *nmp,
 	if (syscred)
 		nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
-	    NFS_PROG, vers, NULL, 1, xidp);
+	    NFS_PROG, vers, NULL, 1, xidp, NULL);
 	if (error)
 		return (error);
 	if (nd->nd_repstat == 0) {
@@ -3734,7 +3734,7 @@ nfsrpc_locku(struct nfsrv_descript *nd, 
 	if (syscred)
 		nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
-	    NFS_PROG, NFS_VER4, NULL, 1, NULL);
+	    NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 	NFSCL_INCRSEQID(lp->nfsl_seqid, nd);
 	if (error)
 		return (error);
@@ -3805,7 +3805,7 @@ nfsrpc_lock(struct nfsrv_descript *nd, s
 	if (syscred)
 		nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, vp, p, cred,
-	    NFS_PROG, NFS_VER4, NULL, 1, NULL);
+	    NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 	if (error)
 		return (error);
 	if (newone)
@@ -4035,7 +4035,7 @@ nfsrpc_renew(struct nfsclclient *clp, st
 	}
 	nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
-		NFS_PROG, NFS_VER4, NULL, 1, NULL);
+		NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 	if (error)
 		return (error);
 	error = nd->nd_repstat;
@@ -4072,7 +4072,7 @@ nfsrpc_rellockown(struct nfsmount *nmp, 
 	}
 	nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
-	    NFS_PROG, NFS_VER4, NULL, 1, NULL);
+	    NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 	if (error)
 		return (error);
 	error = nd->nd_repstat;
@@ -4127,7 +4127,7 @@ nfsrpc_getdirpath(struct nfsmount *nmp, 
 	*tl = txdr_unsigned(NFSV4OP_GETFH);
 	nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
-		NFS_PROG, NFS_VER4, NULL, 1, NULL);
+		NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 	if (error)
 		return (error);
 printf("dirp ret=%d\n", nd->nd_repstat);
@@ -4171,7 +4171,7 @@ nfsrpc_delegreturn(struct nfscldeleg *dp
 	if (syscred)
 		nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
-	    NFS_PROG, NFS_VER4, NULL, 1, NULL);
+	    NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 	if (error)
 		return (error);
 	error = nd->nd_repstat;
@@ -4287,7 +4287,7 @@ nfsrpc_exchangeid(struct nfsmount *nmp, 
 	txdr_nfsv4time(&verstime, tl);
 	nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
-	    NFS_PROG, NFS_VER4, NULL, 1, NULL);
+	    NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 printf("exch err=%d reps=%d\n",error,nd->nd_repstat);
 	if (error != 0)
 		return (error);
@@ -4362,7 +4362,7 @@ printf("clseq0=0x%x\n",clp->nfsc_sequenc
 	*tl = 0;				/* No additional gids */
 	nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
-	    NFS_PROG, NFS_VER4, NULL, 1, NULL);
+	    NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 	if (error != 0)
 		return (error);
 	if (nd->nd_repstat == 0) {
@@ -4416,7 +4416,7 @@ nfsrpc_destroysession(struct nfsmount *n
 	bcopy(clp->nfsc_sessionid, tl, NFSX_V4SESSIONID);
 	nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
-	    NFS_PROG, NFS_VER4, NULL, 1, NULL);
+	    NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 	if (error != 0)
 		return (error);
 	error = nd->nd_repstat;
@@ -4442,7 +4442,7 @@ nfsrpc_destroyclient(struct nfsmount *nm
 	*tl = clp->nfsc_clientid.lval[1];
 	nd->nd_flag |= ND_USEGSSNAME;
 	error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
-	    NFS_PROG, NFS_VER4, NULL, 1, NULL);
+	    NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL);
 	if (error != 0)
 		return (error);
 	error = nd->nd_repstat;

Modified: projects/nfsv4.1-client/sys/fs/nfsserver/nfs_nfsdstate.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsserver/nfs_nfsdstate.c	Sat Dec 31 01:33:25 2011	(r229063)
+++ projects/nfsv4.1-client/sys/fs/nfsserver/nfs_nfsdstate.c	Sat Dec 31 02:08:51 2011	(r229064)
@@ -3775,7 +3775,8 @@ nfsrv_docallback(struct nfsclient *clp, 
 	newnfs_sndunlock(&clp->lc_req.nr_lock);
 	if (!error) {
 		error = newnfs_request(nd, NULL, clp, &clp->lc_req, NULL,
-		    NULL, cred, clp->lc_program, NFSV4_CBVERS, NULL, 1, NULL);
+		    NULL, cred, clp->lc_program, NFSV4_CBVERS, NULL, 1, NULL,
+		    NULL);
 	}
 	NFSFREECRED(cred);
 

From owner-svn-src-projects@FreeBSD.ORG  Sat Dec 31 04:05:13 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id A47CA106566B;
	Sat, 31 Dec 2011 04:05:13 +0000 (UTC)
	(envelope-from rmacklem@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 789338FC08;
	Sat, 31 Dec 2011 04:05:13 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBV45Dt9045602;
	Sat, 31 Dec 2011 04:05:13 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Received: (from rmacklem@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBV45DLZ045599;
	Sat, 31 Dec 2011 04:05:13 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Message-Id: <201112310405.pBV45DLZ045599@svn.freebsd.org>
From: Rick Macklem <rmacklem@FreeBSD.org>
Date: Sat, 31 Dec 2011 04:05:13 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r229066 - in projects/nfsv4.1-client/sys/fs: nfs
	nfsclient
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 31 Dec 2011 04:05:13 -0000

Author: rmacklem
Date: Sat Dec 31 04:05:13 2011
New Revision: 229066
URL: http://svn.freebsd.org/changeset/base/229066

Log:
  Add an argument to nfsrpc_exchangeid() to specify the exchange flags
  to be used.

Modified:
  projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
  projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c

Modified: projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h	Sat Dec 31 03:02:59 2011	(r229065)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h	Sat Dec 31 04:05:13 2011	(r229066)
@@ -433,7 +433,7 @@ int nfsrpc_delegreturn(struct nfscldeleg
 int nfsrpc_getacl(vnode_t, struct ucred *, NFSPROC_T *, NFSACL_T *, void *);
 int nfsrpc_setacl(vnode_t, struct ucred *, NFSPROC_T *, NFSACL_T *, void *);
 int nfsrpc_exchangeid(struct nfsmount *, struct nfsclclient *,
-    struct ucred *, NFSPROC_T *);
+    uint32_t, struct ucred *, NFSPROC_T *);
 int nfsrpc_createsession(struct nfsmount *, struct nfsclclient *,
     struct ucred *, NFSPROC_T *);
 int nfsrpc_destroysession(struct nfsmount *, struct nfsclclient *,

Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c	Sat Dec 31 03:02:59 2011	(r229065)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c	Sat Dec 31 04:05:13 2011	(r229066)
@@ -774,7 +774,8 @@ nfsrpc_setclient(struct nfsmount *nmp, s
 	if (nfsboottime.tv_sec == 0)
 		NFSSETBOOTTIME(nfsboottime);
 	if (NFSHASNFSV4N(nmp)) {
-		error = nfsrpc_exchangeid(nmp, clp, cred, p);
+		error = nfsrpc_exchangeid(nmp, clp, NFSV4EXCH_USEPNFSMDS |
+		    NFSV4EXCH_USENONPNFS, cred, p);
 if (error) printf("exch=%d\n",error);
 		if (error == 0)
 			error = nfsrpc_createsession(nmp, clp, cred, p);
@@ -4258,7 +4259,7 @@ nfsrpc_setaclrpc(vnode_t vp, struct ucre
  */
 int
 nfsrpc_exchangeid(struct nfsmount *nmp, struct nfsclclient *clp,
-    struct ucred *cred, NFSPROC_T *p)
+    uint32_t exchflags, struct ucred *cred, NFSPROC_T *p)
 {
 	uint32_t *tl, v41flags;
 	struct nfsrv_descript nfsd;
@@ -4274,7 +4275,7 @@ nfsrpc_exchangeid(struct nfsmount *nmp, 
 	(void) nfsm_strtom(nd, clp->nfsc_id, clp->nfsc_idlen);
 
 	NFSM_BUILD(tl, u_int32_t *, 3 * NFSX_UNSIGNED);
-	*tl++ = txdr_unsigned(NFSV4EXCH_USENONPNFS);
+	*tl++ = txdr_unsigned(exchflags);
 	*tl++ = txdr_unsigned(NFSV4EXCH_SP4NONE);
 
 	/* Set the implementation id4 */

From owner-svn-src-projects@FreeBSD.ORG  Sat Dec 31 23:56:58 2011
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id A481E106566C;
	Sat, 31 Dec 2011 23:56:58 +0000 (UTC)
	(envelope-from rmacklem@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 927848FC0C;
	Sat, 31 Dec 2011 23:56:58 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBVNuwN3088586;
	Sat, 31 Dec 2011 23:56:58 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Received: (from rmacklem@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBVNuwOL088581;
	Sat, 31 Dec 2011 23:56:58 GMT
	(envelope-from rmacklem@svn.freebsd.org)
Message-Id: <201112312356.pBVNuwOL088581@svn.freebsd.org>
From: Rick Macklem <rmacklem@FreeBSD.org>
Date: Sat, 31 Dec 2011 23:56:58 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r229163 - in projects/nfsv4.1-client/sys/fs: nfs
	nfsclient
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 31 Dec 2011 23:56:58 -0000

Author: rmacklem
Date: Sat Dec 31 23:56:58 2011
New Revision: 229163
URL: http://svn.freebsd.org/changeset/base/229163

Log:
  Add the "glue" needed for the 4 NFSv4.1 Ops that are used for
  handling NFSV4.1 pNFS layouts. This also includes flags and
  error return values used by these Operations.
  The functions that implement
  these operations will be coming soon.

Modified:
  projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c
  projects/nfsv4.1-client/sys/fs/nfs/nfsport.h
  projects/nfsv4.1-client/sys/fs/nfs/nfsproto.h
  projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c

Modified: projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c	Sat Dec 31 23:41:19 2011	(r229162)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfs_commonsubs.c	Sat Dec 31 23:56:58 2011	(r229163)
@@ -133,9 +133,9 @@ struct nfsv4_opflag nfsv4_opflag[NFSV41_
 	{ 0, 0, 0, 0, LK_EXCLUSIVE, 1 },		/* Get Dir Deleg */
 	{ 0, 0, 0, 0, LK_EXCLUSIVE, 1 },		/* Get Device Info */
 	{ 0, 0, 0, 0, LK_EXCLUSIVE, 1 },		/* Get Device List */
-	{ 0, 0, 0, 0, LK_EXCLUSIVE, 1 },		/* Layout Commit */
-	{ 0, 0, 0, 0, LK_EXCLUSIVE, 1 },		/* Layout Get */
-	{ 0, 0, 0, 0, LK_EXCLUSIVE, 1 },		/* Layout Return */
+	{ 0, 1, 0, 0, LK_EXCLUSIVE, 1 },		/* Layout Commit */
+	{ 0, 1, 0, 0, LK_EXCLUSIVE, 1 },		/* Layout Get */
+	{ 0, 1, 0, 0, LK_EXCLUSIVE, 1 },		/* Layout Return */
 	{ 0, 0, 0, 0, LK_EXCLUSIVE, 1 },		/* Secinfo No name */
 	{ 0, 0, 0, 0, LK_EXCLUSIVE, 1 },		/* Sequence */
 	{ 0, 0, 0, 0, LK_EXCLUSIVE, 1 },		/* Set SSV */
@@ -166,7 +166,7 @@ static struct nfsuserlruhead nfsuserlruh
  */
 int nfs_bigreply[NFSV41_NPROCS] = { 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 
 /* local functions */
 static int nfsrv_skipace(struct nfsrv_descript *nd, int *acesizep);

Modified: projects/nfsv4.1-client/sys/fs/nfs/nfsport.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfsport.h	Sat Dec 31 23:41:19 2011	(r229162)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfsport.h	Sat Dec 31 23:56:58 2011	(r229163)
@@ -343,11 +343,15 @@
 #define	NFSPROC_DESTROYSESSION	43
 #define	NFSPROC_DESTROYCLIENT	44
 #define	NFSPROC_FREESTATEID	45
+#define	NFSPROC_LAYOUTGET	46
+#define	NFSPROC_GETDEVICEINFO	47
+#define	NFSPROC_LAYOUTCOMMIT	48
+#define	NFSPROC_LAYOUTRETURN	49
 
 /*
  * Must be defined as one higher than the last NFSv4.1 Proc# above.
  */
-#define	NFSV41_NPROCS		46
+#define	NFSV41_NPROCS		50
 
 #endif	/* NFS_V3NPROCS */
 
@@ -818,6 +822,7 @@ void newnfs_realign(struct mbuf **);
 #define	NFSSTA_TIMEO		0x10000000  /* Experiencing a timeout */
 #define	NFSSTA_LOCKTIMEO	0x20000000  /* Experiencing a lockd timeout */
 #define	NFSSTA_HASSETFSID	0x40000000  /* Has set the fsid */
+#define	NFSSTA_PNFS		0x80000000  /* pNFS is enabled */
 
 #define	NFSHASNFSV3(n)		((n)->nm_flag & NFSMNT_NFSV3)
 #define	NFSHASNFSV4(n)		((n)->nm_flag & NFSMNT_NFSV4)
@@ -838,6 +843,7 @@ void newnfs_realign(struct mbuf **);
 #define	NFSHASPRIVACY(n)	((n)->nm_flag & NFSMNT_PRIVACY)
 #define	NFSSETWRITEVERF(n)	((n)->nm_state |= NFSSTA_HASWRITEVERF)
 #define	NFSSETHASSETFSID(n)	((n)->nm_state |= NFSSTA_HASSETFSID)
+#define	NFSHASPNFS(n)		((n)->nm_state & NFSSTA_PNFS)
 
 /*
  * Gets the stats field out of the mount structure.

Modified: projects/nfsv4.1-client/sys/fs/nfs/nfsproto.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfsproto.h	Sat Dec 31 23:41:19 2011	(r229162)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfsproto.h	Sat Dec 31 23:56:58 2011	(r229163)
@@ -149,6 +149,7 @@
 
 /* NFSv4.1 specific errors. */
 #define	NFSERR_BADSLOT		10053
+#define	NFSERR_LAYOUTTRYLATER	10058
 #define	NFSERR_SEQMISORDERED	10063
 #define	NFSERR_SEQUENCEPOS	10064
 #define	NFSERR_OPNOTINSESS	10071
@@ -198,6 +199,7 @@
 #define	NFSX_V4TIME		(NFSX_HYPER + NFSX_UNSIGNED)
 #define	NFSX_V4SETTIME		(NFSX_UNSIGNED + NFSX_V4TIME)
 #define	NFSX_V4SESSIONID	16
+#define	NFSX_V4DEVICEID		16
 
 /* sizes common to multiple NFS versions */
 #define	NFSX_FHMAX		(NFSX_V4FHMAX)
@@ -274,11 +276,15 @@
 #define	NFSPROC_DESTROYSESSION	43
 #define	NFSPROC_DESTROYCLIENT	44
 #define	NFSPROC_FREESTATEID	45
+#define	NFSPROC_LAYOUTGET	46
+#define	NFSPROC_GETDEVICEINFO	47
+#define	NFSPROC_LAYOUTCOMMIT	48
+#define	NFSPROC_LAYOUTRETURN	49
 
 /*
  * Must be defined as one higher than the last NFSv4.1 Proc# above.
  */
-#define	NFSV41_NPROCS		46
+#define	NFSV41_NPROCS		50
 
 #endif	/* NFS_V3NPROCS */
 
@@ -526,6 +532,23 @@
 #define	NFSV4SEQ_DEVIDCHANGED		0x00000800
 #define	NFSV4SEQ_DEVIDDELETED		0x00001000
 
+/* Flags for Layout. */
+#define	NFSLAYOUTRETURN_FILE		1
+#define	NFSLAYOUTRETURN_FSID		2
+#define	NFSLAYOUTRETURN_ALL		3
+
+#define	NFSLAYOUT_NFSV4_1_FILES		0x1
+#define	NFSLAYOUT_OSD2_OBJECTS		0x2
+#define	NFSLAYOUT_BLOCK_VOLUME		0x3
+
+#define	NFSLAYOUTIOMODE_READ		1
+#define	NFSLAYOUTIOMODE_RW		2
+#define	NFSLAYOUTIOMODE_ANY		3
+
+/* Flags for Get Device Info. */
+#define	NFSDEVICEIDNOTIFY_CHANGEBIT	0x1
+#define	NFSDEVICEIDNOTIFY_DELETEBIT	0x2
+
 /* Conversion macros */
 #define	vtonfsv2_mode(t,m) 						\
 		txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : 	\

Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c	Sat Dec 31 23:41:19 2011	(r229162)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c	Sat Dec 31 23:56:58 2011	(r229163)
@@ -104,6 +104,10 @@ static struct {
 	{ NFSV4OP_DESTROYSESSION, 1, "DestroySession", 14, },
 	{ NFSV4OP_DESTROYCLIENTID, 1, "DestroyClient", 13, },
 	{ NFSV4OP_FREESTATEID, 1, "FreeStateID", 11, },
+	{ NFSV4OP_LAYOUTGET, 1, "LayoutGet", 9, },
+	{ NFSV4OP_GETDEVINFO, 1, "GetDeviceInfo", 13, },
+	{ NFSV4OP_LAYOUTCOMMIT, 1, "LayoutCommit", 12, },
+	{ NFSV4OP_LAYOUTRETURN, 1, "LayoutReturn", 12, },
 };
 
 
@@ -112,7 +116,8 @@ static struct {
  */
 static int nfs_bigrequest[NFSV41_NPROCS] = {
 	0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0
 };
 
 /*