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