svn commit: r246727 - in user/attilio/vmcontention: cddl/contrib/opensolaris/cmd/zdb cddl/contrib/opensolaris/cmd/zfs cddl/contrib/opensolaris/cmd/zpool kerberos5/libexec/digest-service lib/clang l...

Attilio Rao attilio at FreeBSD.org
Wed Feb 13 01:25:22 UTC 2013


Author: attilio
Date: Wed Feb 13 01:25:17 2013
New Revision: 246727
URL: http://svnweb.freebsd.org/changeset/base/246727

Log:
  MFC

Added:
  user/attilio/vmcontention/sys/arm/allwinner/a10_wdog.c
     - copied unchanged from r246726, head/sys/arm/allwinner/a10_wdog.c
  user/attilio/vmcontention/sys/arm/allwinner/a10_wdog.h
     - copied unchanged from r246726, head/sys/arm/allwinner/a10_wdog.h
  user/attilio/vmcontention/sys/boot/fdt/help.fdt
     - copied unchanged from r246726, head/sys/boot/fdt/help.fdt
  user/attilio/vmcontention/sys/kern/subr_bus_dma.c
     - copied unchanged from r246726, head/sys/kern/subr_bus_dma.c
  user/attilio/vmcontention/sys/sys/memdesc.h
     - copied unchanged from r246726, head/sys/sys/memdesc.h
Modified:
  user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zdb/zdb.c
  user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zfs/zfs.8
  user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7
  user/attilio/vmcontention/kerberos5/libexec/digest-service/Makefile
  user/attilio/vmcontention/lib/clang/clang.build.mk
  user/attilio/vmcontention/lib/libc/arm/aeabi/Makefile.inc
  user/attilio/vmcontention/lib/libc/gen/fts.c
  user/attilio/vmcontention/lib/libvmmapi/vmmapi.c
  user/attilio/vmcontention/lib/libvmmapi/vmmapi.h
  user/attilio/vmcontention/share/man/man9/vfs_busy.9
  user/attilio/vmcontention/sys/amd64/include/vmm.h   (contents, props changed)
  user/attilio/vmcontention/sys/amd64/include/vmm_dev.h   (contents, props changed)
  user/attilio/vmcontention/sys/amd64/vmm/io/ppt.c
  user/attilio/vmcontention/sys/amd64/vmm/vmm.c
  user/attilio/vmcontention/sys/amd64/vmm/vmm_dev.c
  user/attilio/vmcontention/sys/arm/allwinner/a10_machdep.c
  user/attilio/vmcontention/sys/arm/allwinner/files.a10
  user/attilio/vmcontention/sys/arm/arm/busdma_machdep-v6.c
  user/attilio/vmcontention/sys/arm/arm/busdma_machdep.c
  user/attilio/vmcontention/sys/boot/arm/uboot/Makefile
  user/attilio/vmcontention/sys/boot/fdt/dts/cubieboard.dts
  user/attilio/vmcontention/sys/boot/powerpc/ps3/Makefile
  user/attilio/vmcontention/sys/boot/powerpc/uboot/Makefile
  user/attilio/vmcontention/sys/bsm/audit_kevents.h
  user/attilio/vmcontention/sys/cam/cam_ccb.h
  user/attilio/vmcontention/sys/cam/cam_xpt.c
  user/attilio/vmcontention/sys/cam/ctl/ctl_frontend_cam_sim.c
  user/attilio/vmcontention/sys/cam/ctl/scsi_ctl.c
  user/attilio/vmcontention/sys/cam/scsi/scsi_pass.c
  user/attilio/vmcontention/sys/cam/scsi/scsi_target.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_diff.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_traverse.h
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/refcount.h
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
  user/attilio/vmcontention/sys/conf/files
  user/attilio/vmcontention/sys/dev/aac/aac_cam.c
  user/attilio/vmcontention/sys/dev/advansys/advansys.c
  user/attilio/vmcontention/sys/dev/advansys/adwcam.c
  user/attilio/vmcontention/sys/dev/aha/aha.c
  user/attilio/vmcontention/sys/dev/ahb/ahb.c
  user/attilio/vmcontention/sys/dev/ahci/ahci.c
  user/attilio/vmcontention/sys/dev/aic/aic.c
  user/attilio/vmcontention/sys/dev/aic7xxx/aic79xx_osm.c
  user/attilio/vmcontention/sys/dev/aic7xxx/aic7xxx_osm.c
  user/attilio/vmcontention/sys/dev/amr/amr_cam.c
  user/attilio/vmcontention/sys/dev/arcmsr/arcmsr.c
  user/attilio/vmcontention/sys/dev/ata/ata-dma.c
  user/attilio/vmcontention/sys/dev/ata/atapi-cam.c
  user/attilio/vmcontention/sys/dev/ath/if_ath.c
  user/attilio/vmcontention/sys/dev/ath/if_ath_alq.c
  user/attilio/vmcontention/sys/dev/ath/if_ath_alq.h
  user/attilio/vmcontention/sys/dev/ath/if_ath_misc.h
  user/attilio/vmcontention/sys/dev/buslogic/bt.c
  user/attilio/vmcontention/sys/dev/ciss/ciss.c
  user/attilio/vmcontention/sys/dev/ciss/cissvar.h
  user/attilio/vmcontention/sys/dev/dpt/dpt_scsi.c
  user/attilio/vmcontention/sys/dev/firewire/sbp.c
  user/attilio/vmcontention/sys/dev/hpt27xx/osm_bsd.c
  user/attilio/vmcontention/sys/dev/hptiop/hptiop.c
  user/attilio/vmcontention/sys/dev/hptmv/entry.c
  user/attilio/vmcontention/sys/dev/hptrr/hptrr_osm_bsd.c
  user/attilio/vmcontention/sys/dev/iir/iir.c
  user/attilio/vmcontention/sys/dev/isci/isci_io_request.c
  user/attilio/vmcontention/sys/dev/isp/isp_pci.c
  user/attilio/vmcontention/sys/dev/isp/isp_sbus.c
  user/attilio/vmcontention/sys/dev/mfi/mfi.c
  user/attilio/vmcontention/sys/dev/mfi/mfi_cam.c
  user/attilio/vmcontention/sys/dev/mfi/mfivar.h
  user/attilio/vmcontention/sys/dev/mly/mly.c
  user/attilio/vmcontention/sys/dev/mly/mlyvar.h
  user/attilio/vmcontention/sys/dev/mps/mps.c
  user/attilio/vmcontention/sys/dev/mps/mps_sas.c
  user/attilio/vmcontention/sys/dev/mps/mpsvar.h
  user/attilio/vmcontention/sys/dev/mpt/mpt_cam.c
  user/attilio/vmcontention/sys/dev/mvs/mvs.c
  user/attilio/vmcontention/sys/dev/siis/siis.c
  user/attilio/vmcontention/sys/dev/sym/sym_hipd.c
  user/attilio/vmcontention/sys/dev/trm/trm.c
  user/attilio/vmcontention/sys/dev/twa/tw_osl.h
  user/attilio/vmcontention/sys/dev/twa/tw_osl_cam.c
  user/attilio/vmcontention/sys/dev/twa/tw_osl_freebsd.c
  user/attilio/vmcontention/sys/dev/tws/tws.h
  user/attilio/vmcontention/sys/dev/tws/tws_cam.c
  user/attilio/vmcontention/sys/dev/virtio/scsi/virtio_scsi.c
  user/attilio/vmcontention/sys/dev/wds/wd7000.c
  user/attilio/vmcontention/sys/ia64/ia64/busdma_machdep.c
  user/attilio/vmcontention/sys/ia64/ia64/dump_machdep.c
  user/attilio/vmcontention/sys/ia64/ia64/genassym.c
  user/attilio/vmcontention/sys/ia64/ia64/machdep.c
  user/attilio/vmcontention/sys/ia64/ia64/support.S
  user/attilio/vmcontention/sys/ia64/include/proc.h
  user/attilio/vmcontention/sys/kern/kern_sysctl.c
  user/attilio/vmcontention/sys/kern/subr_uio.c
  user/attilio/vmcontention/sys/mips/mips/busdma_machdep.c
  user/attilio/vmcontention/sys/net/if.c
  user/attilio/vmcontention/sys/net/if_var.h
  user/attilio/vmcontention/sys/net80211/ieee80211_freebsd.c
  user/attilio/vmcontention/sys/net80211/ieee80211_input.c
  user/attilio/vmcontention/sys/net80211/ieee80211_mesh.c
  user/attilio/vmcontention/sys/netinet/ip_carp.c
  user/attilio/vmcontention/sys/netinet/ip_carp.h
  user/attilio/vmcontention/sys/netinet/sctp_indata.c
  user/attilio/vmcontention/sys/netinet/sctp_output.c
  user/attilio/vmcontention/sys/netinet/sctp_pcb.c
  user/attilio/vmcontention/sys/netinet/sctp_pcb.h
  user/attilio/vmcontention/sys/netinet/sctp_usrreq.c
  user/attilio/vmcontention/sys/powerpc/powerpc/busdma_machdep.c
  user/attilio/vmcontention/sys/powerpc/ps3/ps3cdrom.c
  user/attilio/vmcontention/sys/powerpc/wii/wii_gpio.c
  user/attilio/vmcontention/sys/powerpc/wii/wii_ipc.c
  user/attilio/vmcontention/sys/powerpc/wii/wii_pic.c
  user/attilio/vmcontention/sys/security/audit/audit_private.h
  user/attilio/vmcontention/sys/sparc64/include/bus_dma.h
  user/attilio/vmcontention/sys/sparc64/sparc64/bus_machdep.c
  user/attilio/vmcontention/sys/sparc64/sparc64/iommu.c
  user/attilio/vmcontention/sys/sys/bus_dma.h
  user/attilio/vmcontention/sys/sys/uio.h
  user/attilio/vmcontention/sys/x86/x86/busdma_machdep.c
  user/attilio/vmcontention/tools/regression/sockets/unix_cmsg/README
  user/attilio/vmcontention/tools/regression/sockets/unix_cmsg/unix_cmsg.c
  user/attilio/vmcontention/tools/regression/sockets/unix_cmsg/unix_cmsg.t
  user/attilio/vmcontention/tools/tools/ath/athalq/ar5210_ds.c
  user/attilio/vmcontention/tools/tools/ath/athalq/ar5211_ds.c
  user/attilio/vmcontention/tools/tools/ath/athalq/ar5212_ds.c
  user/attilio/vmcontention/tools/tools/ath/athalq/ar5416_ds.c
  user/attilio/vmcontention/tools/tools/ath/athalq/main.c
  user/attilio/vmcontention/usr.bin/clang/bugpoint/Makefile
  user/attilio/vmcontention/usr.bin/clang/clang-tblgen/Makefile
  user/attilio/vmcontention/usr.bin/clang/llc/Makefile
  user/attilio/vmcontention/usr.bin/clang/lli/Makefile
  user/attilio/vmcontention/usr.bin/clang/llvm-ar/Makefile
  user/attilio/vmcontention/usr.bin/clang/llvm-as/Makefile
  user/attilio/vmcontention/usr.bin/clang/llvm-bcanalyzer/Makefile
  user/attilio/vmcontention/usr.bin/clang/llvm-diff/Makefile
  user/attilio/vmcontention/usr.bin/clang/llvm-dis/Makefile
  user/attilio/vmcontention/usr.bin/clang/llvm-extract/Makefile
  user/attilio/vmcontention/usr.bin/clang/llvm-link/Makefile
  user/attilio/vmcontention/usr.bin/clang/llvm-mc/Makefile
  user/attilio/vmcontention/usr.bin/clang/llvm-nm/Makefile
  user/attilio/vmcontention/usr.bin/clang/llvm-objdump/Makefile
  user/attilio/vmcontention/usr.bin/clang/llvm-prof/Makefile
  user/attilio/vmcontention/usr.bin/clang/llvm-ranlib/Makefile
  user/attilio/vmcontention/usr.bin/clang/llvm-rtdyld/Makefile
  user/attilio/vmcontention/usr.bin/clang/macho-dump/Makefile
  user/attilio/vmcontention/usr.bin/clang/opt/Makefile
  user/attilio/vmcontention/usr.bin/clang/tblgen/Makefile
  user/attilio/vmcontention/usr.bin/kdump/kdump.c
  user/attilio/vmcontention/usr.bin/kdump/mksubr
  user/attilio/vmcontention/usr.bin/procstat/procstat_files.c
  user/attilio/vmcontention/usr.sbin/bhyve/bhyverun.c
  user/attilio/vmcontention/usr.sbin/bhyvectl/bhyvectl.c
Directory Properties:
  user/attilio/vmcontention/   (props changed)
  user/attilio/vmcontention/cddl/contrib/opensolaris/   (props changed)
  user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zfs/   (props changed)
  user/attilio/vmcontention/lib/libc/   (props changed)
  user/attilio/vmcontention/lib/libvmmapi/   (props changed)
  user/attilio/vmcontention/sys/   (props changed)
  user/attilio/vmcontention/sys/amd64/vmm/   (props changed)
  user/attilio/vmcontention/sys/boot/   (props changed)
  user/attilio/vmcontention/sys/cddl/contrib/opensolaris/   (props changed)
  user/attilio/vmcontention/sys/conf/   (props changed)
  user/attilio/vmcontention/usr.bin/procstat/   (props changed)
  user/attilio/vmcontention/usr.sbin/bhyve/   (props changed)
  user/attilio/vmcontention/usr.sbin/bhyvectl/   (props changed)

Modified: user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zdb/zdb.c
==============================================================================
--- user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zdb/zdb.c	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zdb/zdb.c	Wed Feb 13 01:25:17 2013	(r246727)
@@ -983,7 +983,7 @@ visit_indirect(spa_t *spa, const dnode_p
 		arc_buf_t *buf;
 		uint64_t fill = 0;
 
-		err = arc_read_nolock(NULL, spa, bp, arc_getbuf_func, &buf,
+		err = arc_read(NULL, spa, bp, arc_getbuf_func, &buf,
 		    ZIO_PRIORITY_ASYNC_READ, ZIO_FLAG_CANFAIL, &flags, zb);
 		if (err)
 			return (err);
@@ -2001,9 +2001,8 @@ zdb_count_block(zdb_cb_t *zcb, zilog_t *
 	    bp, NULL, NULL, ZIO_FLAG_CANFAIL)), ==, 0);
 }
 
-/* ARGSUSED */
 static int
-zdb_blkptr_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp, arc_buf_t *pbuf,
+zdb_blkptr_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp,
     const zbookmark_t *zb, const dnode_phys_t *dnp, void *arg)
 {
 	zdb_cb_t *zcb = arg;
@@ -2410,7 +2409,7 @@ typedef struct zdb_ddt_entry {
 /* ARGSUSED */
 static int
 zdb_ddt_add_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp,
-    arc_buf_t *pbuf, const zbookmark_t *zb, const dnode_phys_t *dnp, void *arg)
+    const zbookmark_t *zb, const dnode_phys_t *dnp, void *arg)
 {
 	avl_tree_t *t = arg;
 	avl_index_t where;

Modified: user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zfs/zfs.8
==============================================================================
--- user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zfs/zfs.8	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zfs/zfs.8	Wed Feb 13 01:25:17 2013	(r246727)
@@ -28,7 +28,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd February 10, 2012
+.Dd February 10, 2013
 .Dt ZFS 8
 .Os
 .Sh NAME

Modified: user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7
==============================================================================
--- user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7	Wed Feb 13 01:25:17 2013	(r246727)
@@ -22,7 +22,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd February 8, 2012
+.Dd February 8, 2013
 .Dt ZPOOL-FEATURES 7
 .Os
 .Sh NAME

Modified: user/attilio/vmcontention/kerberos5/libexec/digest-service/Makefile
==============================================================================
--- user/attilio/vmcontention/kerberos5/libexec/digest-service/Makefile	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/kerberos5/libexec/digest-service/Makefile	Wed Feb 13 01:25:17 2013	(r246727)
@@ -11,7 +11,7 @@ CFLAGS+=	-I${KRB5DIR}/kdc \
 DPADD=	${LIBHDB} ${LIBKDC} ${LIBHEIMIPCS} ${LIBKRB5} ${LIBROKEN} ${LIBASN1} ${LIBCRYPTO} \
 	${LIBCRYPT} ${LIBVERS}
 LDADD=	-lhdb -lkdc ${LIBHEIMIPCS} -lkrb5 -lroken -lasn1 -lcrypto -lcrypt \
-	${LIBVERS}
+	${LIBVERS} -lheimntlm
 
 .include <bsd.prog.mk>
 

Modified: user/attilio/vmcontention/lib/clang/clang.build.mk
==============================================================================
--- user/attilio/vmcontention/lib/clang/clang.build.mk	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/lib/clang/clang.build.mk	Wed Feb 13 01:25:17 2013	(r246727)
@@ -19,7 +19,15 @@ CFLAGS+=	-fno-strict-aliasing
 
 TARGET_ARCH?=	${MACHINE_ARCH}
 BUILD_ARCH?=	${MACHINE_ARCH}
-TARGET_TRIPLE?=	${TARGET_ARCH:C/amd64/x86_64/}-unknown-freebsd10.0
+
+.if (${TARGET_ARCH} == "arm" || ${TARGET_ARCH} == "armv6") && \
+    ${MK_ARM_EABI} != "no"
+TARGET_ABI=	gnueabi
+.else
+TARGET_ABI=	unknown
+.endif
+
+TARGET_TRIPLE?=	${TARGET_ARCH:C/amd64/x86_64/}-${TARGET_ABI}-freebsd10.0
 BUILD_TRIPLE?=	${BUILD_ARCH:C/amd64/x86_64/}-unknown-freebsd10.0
 CFLAGS+=	-DLLVM_DEFAULT_TARGET_TRIPLE=\"${TARGET_TRIPLE}\" \
 		-DLLVM_HOSTTRIPLE=\"${BUILD_TRIPLE}\" \

Modified: user/attilio/vmcontention/lib/libc/arm/aeabi/Makefile.inc
==============================================================================
--- user/attilio/vmcontention/lib/libc/arm/aeabi/Makefile.inc	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/lib/libc/arm/aeabi/Makefile.inc	Wed Feb 13 01:25:17 2013	(r246727)
@@ -7,5 +7,24 @@ SRCS+=	aeabi_atexit.c		\
 	aeabi_float.c		\
 	aeabi_unwind_cpp.c
 
+# Add the aeabi_mem* functions. While they live in compiler-rt they call into
+# libc. This causes issues when other parts of libc call these functions.
+# We work around this by including these functions in libc but mark them as
+# hidden so users of libc will not pick up these versions.
+.PATH: ${.CURDIR}/../../contrib/compiler-rt/lib/arm
+
+SRCS+=	aeabi_memcmp.S		\
+	aeabi_memcpy.S		\
+	aeabi_memmove.S		\
+	aeabi_memset.S
+
+# Mark the functions as hidden so they are not available outside of libc.
+CFLAGS.aeabi_memcmp.S=	-DVISIBILITY_HIDDEN
+CFLAGS.aeabi_memcpy.S=	-DVISIBILITY_HIDDEN
+CFLAGS.aeabi_memmove.S=	-DVISIBILITY_HIDDEN
+CFLAGS.aeabi_memset.S=	-DVISIBILITY_HIDDEN
+CFLAGS+=		${CFLAGS.${.IMPSRC:T}}
+
+
 SYM_MAPS+=${.CURDIR}/arm/aeabi/Symbol.map
 

Modified: user/attilio/vmcontention/lib/libc/gen/fts.c
==============================================================================
--- user/attilio/vmcontention/lib/libc/gen/fts.c	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/lib/libc/gen/fts.c	Wed Feb 13 01:25:17 2013	(r246727)
@@ -1119,7 +1119,8 @@ fts_safe_changedir(FTS *sp, FTSENT *p, i
 	newfd = fd;
 	if (ISSET(FTS_NOCHDIR))
 		return (0);
-	if (fd < 0 && (newfd = _open(path, O_RDONLY | O_CLOEXEC, 0)) < 0)
+	if (fd < 0 && (newfd = _open(path, O_RDONLY | O_DIRECTORY |
+	    O_CLOEXEC, 0)) < 0)
 		return (-1);
 	if (_fstat(newfd, &sb)) {
 		ret = -1;

Modified: user/attilio/vmcontention/lib/libvmmapi/vmmapi.c
==============================================================================
--- user/attilio/vmcontention/lib/libvmmapi/vmmapi.c	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/lib/libvmmapi/vmmapi.c	Wed Feb 13 01:25:17 2013	(r246727)
@@ -250,34 +250,6 @@ vm_get_register(struct vmctx *ctx, int v
 }
 
 int
-vm_get_pinning(struct vmctx *ctx, int vcpu, int *host_cpuid)
-{
-	int error;
-	struct vm_pin vmpin;
-
-	bzero(&vmpin, sizeof(vmpin));
-	vmpin.vm_cpuid = vcpu;
-
-	error = ioctl(ctx->fd, VM_GET_PINNING, &vmpin);
-	*host_cpuid = vmpin.host_cpuid;
-	return (error);
-}
-
-int
-vm_set_pinning(struct vmctx *ctx, int vcpu, int host_cpuid)
-{
-	int error;
-	struct vm_pin vmpin;
-
-	bzero(&vmpin, sizeof(vmpin));
-	vmpin.vm_cpuid = vcpu;
-	vmpin.host_cpuid = host_cpuid;
-
-	error = ioctl(ctx->fd, VM_SET_PINNING, &vmpin);
-	return (error);
-}
-
-int
 vm_run(struct vmctx *ctx, int vcpu, uint64_t rip, struct vm_exit *vmexit)
 {
 	int error;

Modified: user/attilio/vmcontention/lib/libvmmapi/vmmapi.h
==============================================================================
--- user/attilio/vmcontention/lib/libvmmapi/vmmapi.h	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/lib/libvmmapi/vmmapi.h	Wed Feb 13 01:25:17 2013	(r246727)
@@ -56,8 +56,6 @@ int	vm_get_desc(struct vmctx *ctx, int v
 		    uint64_t *base, uint32_t *limit, uint32_t *access);
 int	vm_set_register(struct vmctx *ctx, int vcpu, int reg, uint64_t val);
 int	vm_get_register(struct vmctx *ctx, int vcpu, int reg, uint64_t *retval);
-int	vm_get_pinning(struct vmctx *ctx, int vcpu, int *host_cpuid);
-int	vm_set_pinning(struct vmctx *ctx, int vcpu, int host_cpuid);
 int	vm_run(struct vmctx *ctx, int vcpu, uint64_t rip,
 	       struct vm_exit *ret_vmexit);
 int	vm_apicid2vcpu(struct vmctx *ctx, int apicid);

Modified: user/attilio/vmcontention/share/man/man9/vfs_busy.9
==============================================================================
--- user/attilio/vmcontention/share/man/man9/vfs_busy.9	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/share/man/man9/vfs_busy.9	Wed Feb 13 01:25:17 2013	(r246727)
@@ -26,7 +26,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd June 14, 2010
+.Dd February 11, 2013
 .Dt VFS_BUSY 9
 .Os
 .Sh NAME
@@ -84,6 +84,8 @@ The mount point is being unmounted
 .Dv ( MNTK_UNMOUNT
 is set).
 .El
+.Sh SEE ALSO
+.Xr vfs_unbusy 9
 .Sh AUTHORS
 This manual page was written by
 .An Chad David Aq davidc at acns.ab.ca .

Modified: user/attilio/vmcontention/sys/amd64/include/vmm.h
==============================================================================
--- user/attilio/vmcontention/sys/amd64/include/vmm.h	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/sys/amd64/include/vmm.h	Wed Feb 13 01:25:17 2013	(r246727)
@@ -102,8 +102,6 @@ int vm_get_seg_desc(struct vm *vm, int v
 		    struct seg_desc *ret_desc);
 int vm_set_seg_desc(struct vm *vm, int vcpu, int reg,
 		    struct seg_desc *desc);
-int vm_get_pinning(struct vm *vm, int vcpu, int *cpuid);
-int vm_set_pinning(struct vm *vm, int vcpu, int cpuid);
 int vm_run(struct vm *vm, struct vm_run *vmrun);
 int vm_inject_event(struct vm *vm, int vcpu, int type,
 		    int vector, uint32_t error_code, int error_code_valid);

Modified: user/attilio/vmcontention/sys/amd64/include/vmm_dev.h
==============================================================================
--- user/attilio/vmcontention/sys/amd64/include/vmm_dev.h	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/sys/amd64/include/vmm_dev.h	Wed Feb 13 01:25:17 2013	(r246727)
@@ -51,11 +51,6 @@ struct vm_seg_desc {			/* data or code s
 	struct seg_desc desc;
 };
 
-struct vm_pin {
-	int		vm_cpuid;
-	int		host_cpuid;	/* -1 to unpin */
-};
-
 struct vm_run {
 	int		cpuid;
 	uint64_t	rip;		/* start running here */
@@ -142,8 +137,6 @@ struct vm_x2apic {
 
 enum {
 	IOCNUM_RUN,
-	IOCNUM_SET_PINNING,
-	IOCNUM_GET_PINNING,
 	IOCNUM_MAP_MEMORY,
 	IOCNUM_GET_MEMORY_SEG,
 	IOCNUM_SET_REGISTER,
@@ -168,10 +161,6 @@ enum {
 
 #define	VM_RUN		\
 	_IOWR('v', IOCNUM_RUN, struct vm_run)
-#define	VM_SET_PINNING	\
-	_IOW('v', IOCNUM_SET_PINNING, struct vm_pin)
-#define	VM_GET_PINNING	\
-	_IOWR('v', IOCNUM_GET_PINNING, struct vm_pin)
 #define	VM_MAP_MEMORY	\
 	_IOWR('v', IOCNUM_MAP_MEMORY, struct vm_memory_segment)
 #define	VM_GET_MEMORY_SEG \

Modified: user/attilio/vmcontention/sys/amd64/vmm/io/ppt.c
==============================================================================
--- user/attilio/vmcontention/sys/amd64/vmm/io/ppt.c	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/sys/amd64/vmm/io/ppt.c	Wed Feb 13 01:25:17 2013	(r246727)
@@ -402,31 +402,6 @@ pptintr(void *arg)
 		return (FILTER_HANDLED);
 }
 
-/*
- * XXX
- * When we try to free the MSI resource the kernel will bind the thread to
- * the host cpu was originally handling the MSI. The function freeing the
- * MSI vector (apic_free_vector()) will panic the kernel if the thread
- * is already bound to a cpu.
- * 
- * So, we temporarily unbind the vcpu thread before freeing the MSI resource.
- */
-static void
-PPT_TEARDOWN_MSI(struct vm *vm, int vcpu, struct pptdev *ppt)
-{
-	int pincpu = -1;
-
-	vm_get_pinning(vm, vcpu, &pincpu);
-
-	if (pincpu >= 0)
-		vm_set_pinning(vm, vcpu, -1);
-
-	ppt_teardown_msi(ppt);
-
-	if (pincpu >= 0)
-		vm_set_pinning(vm, vcpu, pincpu);
-}
-
 int
 ppt_setup_msi(struct vm *vm, int vcpu, int bus, int slot, int func,
 	      int destcpu, int vector, int numvec)
@@ -447,7 +422,7 @@ ppt_setup_msi(struct vm *vm, int vcpu, i
 		return (EBUSY);
 
 	/* Free any allocated resources */
-	PPT_TEARDOWN_MSI(vm, vcpu, ppt);
+	ppt_teardown_msi(ppt);
 
 	if (numvec == 0)		/* nothing more to do */
 		return (0);
@@ -513,7 +488,7 @@ ppt_setup_msi(struct vm *vm, int vcpu, i
 	}
 	
 	if (i < numvec) {
-		PPT_TEARDOWN_MSI(vm, vcpu, ppt);
+		ppt_teardown_msi(ppt);
 		return (ENXIO);
 	}
 

Modified: user/attilio/vmcontention/sys/amd64/vmm/vmm.c
==============================================================================
--- user/attilio/vmcontention/sys/amd64/vmm/vmm.c	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/sys/amd64/vmm/vmm.c	Wed Feb 13 01:25:17 2013	(r246727)
@@ -70,7 +70,6 @@ struct vcpu {
 	int		flags;
 	enum vcpu_state	state;
 	struct mtx	mtx;
-	int		pincpu;		/* host cpuid this vcpu is bound to */
 	int		hostcpu;	/* host cpuid this vcpu last ran on */
 	uint64_t	guest_msrs[VMM_MSR_NUM];
 	struct vlapic	*vlapic;
@@ -81,18 +80,6 @@ struct vcpu {
 	enum x2apic_state x2apic_state;
 	int		nmi_pending;
 };
-#define	VCPU_F_PINNED	0x0001
-
-#define	VCPU_PINCPU(vm, vcpuid)	\
-    ((vm->vcpu[vcpuid].flags & VCPU_F_PINNED) ? vm->vcpu[vcpuid].pincpu : -1)
-
-#define	VCPU_UNPIN(vm, vcpuid)	(vm->vcpu[vcpuid].flags &= ~VCPU_F_PINNED)
-
-#define	VCPU_PIN(vm, vcpuid, host_cpuid)				\
-do {									\
-	vm->vcpu[vcpuid].flags |= VCPU_F_PINNED;			\
-	vm->vcpu[vcpuid].pincpu = host_cpuid;				\
-} while(0)
 
 #define	vcpu_lock_init(v)	mtx_init(&((v)->mtx), "vcpu lock", 0, MTX_SPIN)
 #define	vcpu_lock(v)		mtx_lock_spin(&((v)->mtx))
@@ -594,52 +581,6 @@ vm_set_seg_desc(struct vm *vm, int vcpu,
 	return (VMSETDESC(vm->cookie, vcpu, reg, desc));
 }
 
-int
-vm_get_pinning(struct vm *vm, int vcpuid, int *cpuid)
-{
-
-	if (vcpuid < 0 || vcpuid >= VM_MAXCPU)
-		return (EINVAL);
-
-	*cpuid = VCPU_PINCPU(vm, vcpuid);
-
-	return (0);
-}
-
-int
-vm_set_pinning(struct vm *vm, int vcpuid, int host_cpuid)
-{
-	struct thread *td;
-
-	if (vcpuid < 0 || vcpuid >= VM_MAXCPU)
-		return (EINVAL);
-
-	td = curthread;		/* XXXSMP only safe when muxing vcpus */
-
-	/* unpin */
-	if (host_cpuid < 0) {
-		VCPU_UNPIN(vm, vcpuid);
-		thread_lock(td);
-		sched_unbind(td);
-		thread_unlock(td);
-		return (0);
-	}
-
-	if (CPU_ABSENT(host_cpuid))
-		return (EINVAL);
-
-	/*
-	 * XXX we should check that 'host_cpuid' has not already been pinned
-	 * by another vm.
-	 */
-	thread_lock(td);
-	sched_bind(td, host_cpuid);
-	thread_unlock(td);
-	VCPU_PIN(vm, vcpuid, host_cpuid);
-
-	return (0);
-}
-
 static void
 restore_guest_fpustate(struct vcpu *vcpu)
 {

Modified: user/attilio/vmcontention/sys/amd64/vmm/vmm_dev.c
==============================================================================
--- user/attilio/vmcontention/sys/amd64/vmm/vmm_dev.c	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/sys/amd64/vmm/vmm_dev.c	Wed Feb 13 01:25:17 2013	(r246727)
@@ -144,7 +144,6 @@ vmmdev_ioctl(struct cdev *cdev, u_long c
 	struct vm_memory_segment *seg;
 	struct vm_register *vmreg;
 	struct vm_seg_desc* vmsegdesc;
-	struct vm_pin *vmpin;
 	struct vm_run *vmrun;
 	struct vm_event *vmevent;
 	struct vm_lapic_irq *vmirq;
@@ -170,7 +169,6 @@ vmmdev_ioctl(struct cdev *cdev, u_long c
 	 */
 	switch (cmd) {
 	case VM_RUN:
-	case VM_SET_PINNING:
 	case VM_GET_REGISTER:
 	case VM_SET_REGISTER:
 	case VM_GET_SEGMENT_DESCRIPTOR:
@@ -301,16 +299,6 @@ vmmdev_ioctl(struct cdev *cdev, u_long c
 		vmirq = (struct vm_lapic_irq *)data;
 		error = lapic_set_intr(sc->vm, vmirq->cpuid, vmirq->vector);
 		break;
-	case VM_SET_PINNING:
-		vmpin = (struct vm_pin *)data;
-		error = vm_set_pinning(sc->vm, vmpin->vm_cpuid,
-				       vmpin->host_cpuid);
-		break;
-	case VM_GET_PINNING:
-		vmpin = (struct vm_pin *)data;
-		error = vm_get_pinning(sc->vm, vmpin->vm_cpuid,
-				       &vmpin->host_cpuid);
-		break;
 	case VM_MAP_MEMORY:
 		seg = (struct vm_memory_segment *)data;
 		error = vm_malloc(sc->vm, seg->gpa, seg->len);

Modified: user/attilio/vmcontention/sys/arm/allwinner/a10_machdep.c
==============================================================================
--- user/attilio/vmcontention/sys/arm/allwinner/a10_machdep.c	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/sys/arm/allwinner/a10_machdep.c	Wed Feb 13 01:25:17 2013	(r246727)
@@ -49,16 +49,16 @@ __FBSDID("$FreeBSD$");
 
 #include <dev/fdt/fdt_common.h>
 
+#include <arm/allwinner/a10_wdog.h>
+
 /* Start of address space used for bootstrap map */
 #define DEVMAP_BOOTSTRAP_MAP_START      0xE0000000
 
-void (*a10_cpu_reset)(void);
 
 vm_offset_t
 initarm_lastaddr(void)
 {
 
-	a10_cpu_reset = NULL;
 	return (DEVMAP_BOOTSTRAP_MAP_START - ARM_NOCACHE_KVA_SIZE);
 }
 
@@ -113,10 +113,7 @@ bus_dma_get_range_nb(void)
 void
 cpu_reset()
 {
-	if (a10_cpu_reset)
-		(*a10_cpu_reset)();
-	else
-		printf("no cpu_reset implementation\n");
+	a10wd_watchdog_reset();
 	printf("Reset failed!\n");
 	while (1);
 }

Copied: user/attilio/vmcontention/sys/arm/allwinner/a10_wdog.c (from r246726, head/sys/arm/allwinner/a10_wdog.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/attilio/vmcontention/sys/arm/allwinner/a10_wdog.c	Wed Feb 13 01:25:17 2013	(r246727, copy of r246726, head/sys/arm/allwinner/a10_wdog.c)
@@ -0,0 +1,193 @@
+/*-
+ * Copyright (c) 2013 Oleksandr Tymoshenko <gonzo at freebsd.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/watchdog.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/module.h>
+#include <sys/mutex.h>
+#include <sys/rman.h>
+
+#include <dev/fdt/fdt_common.h>
+#include <dev/ofw/openfirm.h>
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
+
+#include <machine/bus.h>
+#include <machine/cpufunc.h>
+#include <machine/machdep.h>
+#include <machine/fdt.h>
+
+#include <arm/allwinner/a10_wdog.h>
+
+#define	READ(_sc, _r) bus_read_4((_sc)->res, (_r))
+#define	WRITE(_sc, _r, _v) bus_write_4((_sc)->res, (_r), (_v))
+
+#define	WDOG_CTRL		0x00
+#define		WDOG_CTRL_RESTART	(1 << 0)
+#define	WDOG_MODE		0x04
+#define		WDOG_MODE_INTVL_SHIFT	3
+#define		WDOG_MODE_RST_EN	(1 << 1)
+#define		WDOG_MODE_EN		(1 << 0)
+
+struct a10wd_interval {
+	uint64_t	milliseconds;
+	unsigned int	value;
+};
+
+struct a10wd_interval wd_intervals[] = {
+	{   500,	 0 },
+	{  1000,	 1 },
+	{  2000,	 2 },
+	{  3000,	 3 },
+	{  4000,	 4 },
+	{  5000,	 5 },
+	{  6000,	 6 },
+	{  8000,	 7 },
+	{ 10000,	 8 },
+	{ 12000,	 9 },
+	{ 14000,	10 },
+	{ 16000,	11 },
+	{ 0,		 0 } /* sentinel */
+};
+
+static struct a10wd_softc *a10wd_sc = NULL;
+
+struct a10wd_softc {
+	device_t		dev;
+	struct resource *	res;
+	struct mtx		mtx;
+};
+
+static void a10wd_watchdog_fn(void *private, u_int cmd, int *error);
+
+static int
+a10wd_probe(device_t dev)
+{
+
+	if (ofw_bus_is_compatible(dev, "allwinner,sun4i-wdt")) {
+		device_set_desc(dev, "Allwinner A10 Watchdog");
+		return (BUS_PROBE_DEFAULT);
+	}
+
+	return (ENXIO);
+}
+
+static int
+a10wd_attach(device_t dev)
+{
+	struct a10wd_softc *sc;
+	int rid;
+
+	if (a10wd_sc != NULL)
+		return (ENXIO);
+
+	sc = device_get_softc(dev);
+	sc->dev = dev;
+
+	rid = 0;
+	sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
+	if (sc->res == NULL) {
+		device_printf(dev, "could not allocate memory resource\n");
+		return (ENXIO);
+	}
+
+	a10wd_sc = sc;
+	mtx_init(&sc->mtx, "A10 Watchdog", "a10wd", MTX_DEF);
+	EVENTHANDLER_REGISTER(watchdog_list, a10wd_watchdog_fn, sc, 0);
+
+	return (0);
+}
+
+static void
+a10wd_watchdog_fn(void *private, u_int cmd, int *error)
+{
+	struct a10wd_softc *sc;
+	uint64_t ms;
+	int i;
+
+	sc = private;
+	mtx_lock(&sc->mtx);
+
+	cmd &= WD_INTERVAL;
+
+	if (cmd > 0) {
+		ms = ((uint64_t)1 << (cmd & WD_INTERVAL)) / 1000000;
+		i = 0;
+		while (wd_intervals[i].milliseconds && 
+		    (ms > wd_intervals[i].milliseconds))
+			i++;
+		if (wd_intervals[i].milliseconds) {
+			WRITE(sc, WDOG_MODE, 
+			    (wd_intervals[i].value << WDOG_MODE_INTVL_SHIFT) |
+			    WDOG_MODE_EN | WDOG_MODE_RST_EN);
+			WRITE(sc, WDOG_CTRL, WDOG_CTRL_RESTART);
+		}
+	}
+	else
+		WRITE(sc, WDOG_MODE, 0);
+
+	mtx_unlock(&sc->mtx);
+}
+
+void
+a10wd_watchdog_reset()
+{
+
+	if (a10wd_sc == NULL) {
+		printf("Reset: watchdog device has not been initialized\n");
+		return;
+	}
+
+	WRITE(a10wd_sc, WDOG_MODE, 
+	    (wd_intervals[0].value << WDOG_MODE_INTVL_SHIFT) |
+	    WDOG_MODE_EN | WDOG_MODE_RST_EN);
+
+	while(1)
+		;
+
+}
+
+static device_method_t a10wd_methods[] = {
+	DEVMETHOD(device_probe, a10wd_probe),
+	DEVMETHOD(device_attach, a10wd_attach),
+
+	DEVMETHOD_END
+};
+
+static driver_t a10wd_driver = {
+	"a10wd",
+	a10wd_methods,
+	sizeof(struct a10wd_softc),
+};
+static devclass_t a10wd_devclass;
+
+DRIVER_MODULE(a10wd, simplebus, a10wd_driver, a10wd_devclass, 0, 0);

Copied: user/attilio/vmcontention/sys/arm/allwinner/a10_wdog.h (from r246726, head/sys/arm/allwinner/a10_wdog.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/attilio/vmcontention/sys/arm/allwinner/a10_wdog.h	Wed Feb 13 01:25:17 2013	(r246727, copy of r246726, head/sys/arm/allwinner/a10_wdog.h)
@@ -0,0 +1,35 @@
+/*-
+ * Copyright (c) 2013 Oleksandr Tymoshenko <gonzo at freebsd.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ *
+ */
+#ifndef	__A10_WDOG_H__
+#define	__A10_WDOG_H__
+
+void a10wd_watchdog_reset(void);
+
+#endif /*__A10_WDOG_H__*/
+

Modified: user/attilio/vmcontention/sys/arm/allwinner/files.a10
==============================================================================
--- user/attilio/vmcontention/sys/arm/allwinner/files.a10	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/sys/arm/allwinner/files.a10	Wed Feb 13 01:25:17 2013	(r246727)
@@ -12,6 +12,7 @@ arm/arm/irq_dispatch.S			standard
 arm/allwinner/a10_clk.c			standard
 arm/allwinner/a10_gpio.c		optional	gpio
 arm/allwinner/a10_ehci.c		optional	ehci
+arm/allwinner/a10_wdog.c		standard
 arm/allwinner/timer.c			standard
 arm/allwinner/aintc.c			standard
 arm/allwinner/bus_space.c		standard

Modified: user/attilio/vmcontention/sys/arm/arm/busdma_machdep-v6.c
==============================================================================
--- user/attilio/vmcontention/sys/arm/arm/busdma_machdep-v6.c	Wed Feb 13 01:19:31 2013	(r246726)
+++ user/attilio/vmcontention/sys/arm/arm/busdma_machdep-v6.c	Wed Feb 13 01:25:17 2013	(r246727)
@@ -46,11 +46,11 @@ __FBSDID("$FreeBSD$");
 #include <sys/kernel.h>
 #include <sys/ktr.h>
 #include <sys/lock.h>
+#include <sys/memdesc.h>
 #include <sys/proc.h>
 #include <sys/mutex.h>
-#include <sys/mbuf.h>
-#include <sys/uio.h>
 #include <sys/sysctl.h>
+#include <sys/uio.h>
 
 #include <vm/vm.h>
 #include <vm/vm_page.h>
@@ -111,6 +111,7 @@ struct bounce_page {
 	vm_offset_t	vaddr;		/* kva of bounce buffer */
 	bus_addr_t	busaddr;	/* Physical address */
 	vm_offset_t	datavaddr;	/* kva of client data */
+	bus_addr_t	dataaddr;	/* client physical address */
 	bus_size_t	datacount;	/* client data count */
 	STAILQ_ENTRY(bounce_page) links;
 };
@@ -119,7 +120,6 @@ struct sync_list {
 	vm_offset_t	vaddr;		/* kva of bounce buffer */
 	bus_addr_t	busaddr;	/* Physical address */
 	bus_size_t	datacount;	/* client data count */
-	STAILQ_ENTRY(sync_list) slinks;
 };
 
 int busdma_swi_pending;
@@ -156,15 +156,15 @@ struct bus_dmamap {
 	int		       pagesneeded;
 	int		       pagesreserved;
 	bus_dma_tag_t	       dmat;
-	void		      *buf;		/* unmapped buffer pointer */
-	bus_size_t	       buflen;		/* unmapped buffer length */
+	struct memdesc	       mem;
 	pmap_t		       pmap;
 	bus_dmamap_callback_t *callback;
 	void		      *callback_arg;
 	int		      flags;
 #define DMAMAP_COHERENT		(1 << 0)
 	STAILQ_ENTRY(bus_dmamap) links;
-	STAILQ_HEAD(,sync_list)	slist;
+	int		       sync_count;
+	struct sync_list       slist[];
 };
 
 static STAILQ_HEAD(, bus_dmamap) bounce_map_waitinglist;
@@ -176,11 +176,16 @@ static int alloc_bounce_pages(bus_dma_ta
 static int reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map,
 				int commit);
 static bus_addr_t add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map,
-				   vm_offset_t vaddr, bus_size_t size);
+				  vm_offset_t vaddr, bus_addr_t addr,
+				  bus_size_t size);
 static void free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage);
 int run_filter(bus_dma_tag_t dmat, bus_addr_t paddr);
-static int _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map,
+static void _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map,
     void *buf, bus_size_t buflen, int flags);
+static void _bus_dmamap_count_phys(bus_dma_tag_t dmat, bus_dmamap_t map,
+    vm_paddr_t buf, bus_size_t buflen, int flags);
+static int _bus_dmamap_reserve_pages(bus_dma_tag_t dmat, bus_dmamap_t map,
+    int flags);
 
 static busdma_bufalloc_t coherent_allocator;	/* Cache of coherent buffers */
 static busdma_bufalloc_t standard_allocator;	/* Cache of standard buffers */
@@ -493,17 +498,18 @@ out:
 int
 bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
 {
+	int mapsize;
 	int error;
 
 	error = 0;
 
-	*mapp = (bus_dmamap_t)malloc(sizeof(**mapp), M_DEVBUF,
-					     M_NOWAIT | M_ZERO);
+	mapsize = sizeof(**mapp) + (sizeof(struct sync_list) * dmat->nsegments);
+	*mapp = (bus_dmamap_t)malloc(mapsize, M_DEVBUF, M_NOWAIT | M_ZERO);
 	if (*mapp == NULL) {
 		CTR3(KTR_BUSDMA, "%s: tag %p error %d", __func__, dmat, ENOMEM);
 		return (ENOMEM);
 	}
-	STAILQ_INIT(&((*mapp)->slist));
+	(*mapp)->sync_count = 0;
 
 	if (dmat->segments == NULL) {
 		dmat->segments = (bus_dma_segment_t *)malloc(
@@ -578,8 +584,7 @@ bus_dmamap_create(bus_dma_tag_t dmat, in
 int
 bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)
 {
-	if (STAILQ_FIRST(&map->bpages) != NULL ||
-	    STAILQ_FIRST(&map->slist) != NULL) {
+	if (STAILQ_FIRST(&map->bpages) != NULL || map->sync_count != 0) {
 		CTR3(KTR_BUSDMA, "%s: tag %p error %d",
 		    __func__, dmat, EBUSY);
 		return (EBUSY);
@@ -606,6 +611,7 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, voi
 	struct busdma_bufzone *bufzone;
 	vm_memattr_t memattr;
 	int mflags;
+	int mapsize;
 
 	if (flags & BUS_DMA_NOWAIT)
 		mflags = M_NOWAIT;
@@ -614,15 +620,15 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, voi
 
 	/* ARM non-snooping caches need a map for the VA cache sync structure */
 
-	*mapp = (bus_dmamap_t)malloc(sizeof(**mapp), M_DEVBUF,
-					     M_NOWAIT | M_ZERO);
+	mapsize = sizeof(**mapp) + (sizeof(struct sync_list) * dmat->nsegments);
+	*mapp = (bus_dmamap_t)malloc(mapsize, M_DEVBUF, M_NOWAIT | M_ZERO);
 	if (*mapp == NULL) {
 		CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
 		    __func__, dmat, dmat->flags, ENOMEM);
 		return (ENOMEM);
 	}
 
-	STAILQ_INIT(&((*mapp)->slist));
+	(*mapp)->sync_count = 0;
 
 	if (dmat->segments == NULL) {
 		dmat->segments = (bus_dma_segment_t *)malloc(
@@ -733,7 +739,37 @@ bus_dmamem_free(bus_dma_tag_t dmat, void
 	CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags);
 }
 
-static int
+static void
+_bus_dmamap_count_phys(bus_dma_tag_t dmat, bus_dmamap_t map, vm_paddr_t buf,
+    bus_size_t buflen, int flags)
+{
+	bus_addr_t curaddr;
+	bus_size_t sgsize;
+
+	if (map->pagesneeded == 0) {
+		CTR5(KTR_BUSDMA, "lowaddr= %d, boundary= %d, alignment= %d"
+		    " map= %p, pagesneeded= %d",
+		    dmat->lowaddr, dmat->boundary, dmat->alignment,
+		    map, map->pagesneeded);
+		/*
+		 * Count the number of bounce pages
+		 * needed in order to complete this transfer
+		 */
+		curaddr = buf;
+		while (buflen != 0) {
+			sgsize = MIN(buflen, dmat->maxsegsz);
+			if (run_filter(dmat, curaddr) != 0) {
+				sgsize = MIN(sgsize, PAGE_SIZE);
+				map->pagesneeded++;
+			}
+			curaddr += sgsize;
+			buflen -= sgsize;
+		}
+		CTR1(KTR_BUSDMA, "pagesneeded= %d", map->pagesneeded);
+	}
+}
+
+static void
 _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map,
     void *buf, bus_size_t buflen, int flags)
 {
@@ -754,12 +790,11 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm
 		vendaddr = (vm_offset_t)buf + buflen;
 
 		while (vaddr < vendaddr) {
-			if (__predict_true(map->pmap == pmap_kernel()))
+			if (__predict_true(map->pmap == kernel_pmap))
 				paddr = pmap_kextract(vaddr);
 			else
 				paddr = pmap_extract(map->pmap, vaddr);
-			if (((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) &&
-			    run_filter(dmat, paddr) != 0) {
+			if (run_filter(dmat, paddr) != 0) {
 				map->pagesneeded++;
 			}
 			vaddr += (PAGE_SIZE - ((vm_offset_t)vaddr & PAGE_MASK));
@@ -767,72 +802,190 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm
 		}
 		CTR1(KTR_BUSDMA, "pagesneeded= %d", map->pagesneeded);
 	}
+}
+
+static int
+_bus_dmamap_reserve_pages(bus_dma_tag_t dmat, bus_dmamap_t map, int flags)
+{
 
 	/* Reserve Necessary Bounce Pages */
-	if (map->pagesneeded != 0) {
-		mtx_lock(&bounce_lock);
-		if (flags & BUS_DMA_NOWAIT) {
-			if (reserve_bounce_pages(dmat, map, 0) != 0) {
-				map->pagesneeded = 0;
-				mtx_unlock(&bounce_lock);
-				return (ENOMEM);
-			}
-		} else {
-			if (reserve_bounce_pages(dmat, map, 1) != 0) {
-				/* Queue us for resources */
-				map->dmat = dmat;
-				map->buf = buf;
-				map->buflen = buflen;
-				STAILQ_INSERT_TAIL(&bounce_map_waitinglist,
-				    map, links);
-				mtx_unlock(&bounce_lock);
-				return (EINPROGRESS);
-			}
+	mtx_lock(&bounce_lock);
+	if (flags & BUS_DMA_NOWAIT) {
+		if (reserve_bounce_pages(dmat, map, 0) != 0) {
+			map->pagesneeded = 0;
+			mtx_unlock(&bounce_lock);
+			return (ENOMEM);
+		}
+	} else {
+		if (reserve_bounce_pages(dmat, map, 1) != 0) {
+			/* Queue us for resources */
+			STAILQ_INSERT_TAIL(&bounce_map_waitinglist, map, links);
+			mtx_unlock(&bounce_lock);
+			return (EINPROGRESS);
 		}
-		mtx_unlock(&bounce_lock);
 	}
+	mtx_unlock(&bounce_lock);
 
 	return (0);
 }
 
 /*
- * Utility function to load a linear buffer. lastaddrp holds state
- * between invocations (for multiple-buffer loads).  segp contains
+ * Add a single contiguous physical range to the segment list.
+ */
+static int
+_bus_dmamap_addseg(bus_dma_tag_t dmat, bus_dmamap_t map, bus_addr_t curaddr,
+		   bus_size_t sgsize, bus_dma_segment_t *segs, int *segp)
+{
+	bus_addr_t baddr, bmask;
+	int seg;
+
+	/*
+	 * Make sure we don't cross any boundaries.
+	 */
+	bmask = ~(dmat->boundary - 1);
+	if (dmat->boundary > 0) {
+		baddr = (curaddr + dmat->boundary) & bmask;
+		if (sgsize > (baddr - curaddr))
+			sgsize = (baddr - curaddr);
+	}
+
+	if (dmat->ranges) {
+		struct arm32_dma_range *dr;
+
+		dr = _bus_dma_inrange(dmat->ranges, dmat->_nranges,
+		    curaddr);
+		if (dr == NULL) {
+			_bus_dmamap_unload(dmat, map);
+			return (EINVAL);
+		}
+		/*
+		 * In a valid DMA range.  Translate the physical
+		 * memory address to an address in the DMA window.
+		 */
+		curaddr = (curaddr - dr->dr_sysbase) + dr->dr_busbase;
+	}
+
+	/*
+	 * Insert chunk into a segment, coalescing with
+	 * previous segment if possible.
+	 */
+	seg = *segp;
+	if (seg == -1) {
+		seg = 0;
+		segs[seg].ds_addr = curaddr;
+		segs[seg].ds_len = sgsize;
+	} else {
+		if (curaddr == segs[seg].ds_addr + segs[seg].ds_len &&
+		    (segs[seg].ds_len + sgsize) <= dmat->maxsegsz &&
+		    (dmat->boundary == 0 ||
+		     (segs[seg].ds_addr & bmask) == (curaddr & bmask)))
+			segs[seg].ds_len += sgsize;
+		else {
+			if (++seg >= dmat->nsegments)
+				return (0);
+			segs[seg].ds_addr = curaddr;
+			segs[seg].ds_len = sgsize;
+		}
+	}
+	*segp = seg;
+	return (sgsize);
+}
+
+/*
+ * Utility function to load a physical buffer.  segp contains
  * the starting segment on entrace, and the ending segment on exit.
- * first indicates if this is the first invocation of this function.
  */
-static __inline int
+int
+_bus_dmamap_load_phys(bus_dma_tag_t dmat,
+		      bus_dmamap_t map,
+		      vm_paddr_t buf, bus_size_t buflen,
+		      int flags,
+		      bus_dma_segment_t *segs,
+		      int *segp)
+{
+	bus_addr_t curaddr;
+	bus_size_t sgsize;
+	int error;
+
+	if (segs == NULL)
+		segs = dmat->segments;
+

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


More information about the svn-src-user mailing list