From owner-svn-src-user@FreeBSD.ORG Wed Feb 13 01:25:22 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 51EA070D; Wed, 13 Feb 2013 01:25:22 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 26CABEC; Wed, 13 Feb 2013 01:25:22 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id r1D1PMNC062214; Wed, 13 Feb 2013 01:25:22 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id r1D1PIIN062189; Wed, 13 Feb 2013 01:25:18 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201302130125.r1D1PIIN062189@svn.freebsd.org> From: Attilio Rao Date: Wed, 13 Feb 2013 01:25:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: 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... X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Feb 2013 01:25:22 -0000 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 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@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 +#include + /* 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 + * 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 +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#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 + * 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 #include #include +#include #include #include -#include -#include #include +#include #include #include @@ -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 ***