From owner-svn-src-projects@FreeBSD.ORG Mon Dec 26 00:10:43 2011 Return-Path: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +# Copyright (c) 2008, 2011 Peter Holm # 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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 __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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 #include #include +#include #include #include #include #include #include #include +#include #include #include #include +#include +#include #include +#include +#include +#include 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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 -/* 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 #include #include +#include #include #include #include + #include #include +#include +#include #include #include @@ -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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +# Copyright (c) 2008, 2011 Peter Holm # 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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +# Copyright (c) 2008, 2011 Peter Holm # 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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +# Copyright (c) 2008, 2011 Peter Holm # 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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +# Copyright (c) 2008, 2011 Peter Holm # 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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +# Copyright (c) 2008, 2011 Peter Holm # 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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +# Copyright (c) 2008, 2011 Peter Holm # 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 +# Copyright (c) 2008, 2011 Peter Holm # 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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +# 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 +#include +#include +#include +#include +#include +#include +#include + +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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +# 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 +# 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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +# 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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +# 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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 }; /*