svn commit: r252383 - in user/attilio/vmcontention: bin/ed bin/sh contrib/smbfs/mount_smbfs etc etc/defaults etc/mtree include lib lib/libfetch lib/libprocstat lib/libutil rescue/rescue sbin/mdconf...
Attilio Rao
attilio at FreeBSD.org
Sat Jun 29 18:04:01 UTC 2013
Author: attilio
Date: Sat Jun 29 18:03:55 2013
New Revision: 252383
URL: http://svnweb.freebsd.org/changeset/base/252383
Log:
MFC
Added:
user/attilio/vmcontention/sys/arm/arm/generic_timer.c
- copied unchanged from r252379, head/sys/arm/arm/generic_timer.c
user/attilio/vmcontention/sys/boot/fdt/dts/exynos5250-arndale.dts
- copied unchanged from r252379, head/sys/boot/fdt/dts/exynos5250-arndale.dts
user/attilio/vmcontention/sys/boot/fdt/dts/exynos5250.dtsi
- copied unchanged from r252379, head/sys/boot/fdt/dts/exynos5250.dtsi
Deleted:
user/attilio/vmcontention/contrib/smbfs/mount_smbfs/Makefile
Modified:
user/attilio/vmcontention/bin/ed/re.c
user/attilio/vmcontention/bin/sh/eval.c
user/attilio/vmcontention/etc/defaults/rc.conf
user/attilio/vmcontention/etc/mtree/BSD.include.dist
user/attilio/vmcontention/etc/mtree/BSD.usr.dist
user/attilio/vmcontention/etc/network.subr
user/attilio/vmcontention/include/Makefile
user/attilio/vmcontention/lib/Makefile
user/attilio/vmcontention/lib/libfetch/fetch.c
user/attilio/vmcontention/lib/libprocstat/Makefile
user/attilio/vmcontention/lib/libprocstat/common_kvm.h
user/attilio/vmcontention/lib/libprocstat/libprocstat.c
user/attilio/vmcontention/lib/libutil/login_times.c
user/attilio/vmcontention/rescue/rescue/Makefile
user/attilio/vmcontention/sbin/mdconfig/mdconfig.8
user/attilio/vmcontention/sbin/mount/mount.8
user/attilio/vmcontention/sbin/mount/mount.c
user/attilio/vmcontention/sbin/swapon/swapon.c
user/attilio/vmcontention/share/examples/Makefile
user/attilio/vmcontention/share/examples/etc/README.examples
user/attilio/vmcontention/share/man/man5/fstab.5
user/attilio/vmcontention/share/man/man9/locking.9
user/attilio/vmcontention/share/mk/bsd.libnames.mk
user/attilio/vmcontention/sys/arm/arm/cpufunc.c
user/attilio/vmcontention/sys/arm/arm/gic.c
user/attilio/vmcontention/sys/arm/arm/identcpu.c
user/attilio/vmcontention/sys/arm/include/armreg.h
user/attilio/vmcontention/sys/arm/include/intr.h
user/attilio/vmcontention/sys/conf/NOTES
user/attilio/vmcontention/sys/conf/files
user/attilio/vmcontention/sys/conf/files.amd64
user/attilio/vmcontention/sys/conf/files.arm
user/attilio/vmcontention/sys/conf/files.i386
user/attilio/vmcontention/sys/conf/files.ia64
user/attilio/vmcontention/sys/conf/files.mips
user/attilio/vmcontention/sys/conf/files.pc98
user/attilio/vmcontention/sys/conf/files.powerpc
user/attilio/vmcontention/sys/conf/files.sparc64
user/attilio/vmcontention/sys/conf/options
user/attilio/vmcontention/sys/fs/ext2fs/ext2_lookup.c
user/attilio/vmcontention/sys/fs/smbfs/smbfs_node.c
user/attilio/vmcontention/sys/fs/smbfs/smbfs_vfsops.c
user/attilio/vmcontention/sys/fs/smbfs/smbfs_vnops.c
user/attilio/vmcontention/sys/kern/Make.tags.inc
user/attilio/vmcontention/sys/kern/kern_descrip.c
user/attilio/vmcontention/sys/kern/kern_synch.c
user/attilio/vmcontention/sys/kern/sys_generic.c
user/attilio/vmcontention/sys/modules/Makefile
user/attilio/vmcontention/sys/net80211/ieee80211_ioctl.c
user/attilio/vmcontention/sys/netsmb/smb_conn.c
user/attilio/vmcontention/sys/sys/socketvar.h
user/attilio/vmcontention/sys/vm/uma_core.c
user/attilio/vmcontention/usr.bin/Makefile
user/attilio/vmcontention/usr.bin/Makefile.amd64
user/attilio/vmcontention/usr.bin/Makefile.i386
user/attilio/vmcontention/usr.bin/Makefile.ia64
user/attilio/vmcontention/usr.bin/Makefile.powerpc
user/attilio/vmcontention/usr.bin/Makefile.sparc64
user/attilio/vmcontention/usr.bin/kdump/kdump.c
user/attilio/vmcontention/usr.sbin/Makefile.amd64
user/attilio/vmcontention/usr.sbin/Makefile.i386
user/attilio/vmcontention/usr.sbin/Makefile.ia64
user/attilio/vmcontention/usr.sbin/Makefile.powerpc
user/attilio/vmcontention/usr.sbin/Makefile.sparc64
user/attilio/vmcontention/usr.sbin/newsyslog/newsyslog.c
user/attilio/vmcontention/usr.sbin/pkg_install/add/extract.c
user/attilio/vmcontention/usr.sbin/pkg_install/create/pl.c
user/attilio/vmcontention/usr.sbin/pkg_install/lib/exec.c
user/attilio/vmcontention/usr.sbin/pw/pw_user.c
Directory Properties:
user/attilio/vmcontention/ (props changed)
user/attilio/vmcontention/lib/libutil/ (props changed)
user/attilio/vmcontention/sbin/ (props changed)
user/attilio/vmcontention/sys/ (props changed)
user/attilio/vmcontention/sys/boot/ (props changed)
user/attilio/vmcontention/sys/conf/ (props changed)
Modified: user/attilio/vmcontention/bin/ed/re.c
==============================================================================
--- user/attilio/vmcontention/bin/ed/re.c Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/bin/ed/re.c Sat Jun 29 18:03:55 2013 (r252383)
@@ -89,7 +89,7 @@ extract_pattern(int delimiter)
default:
break;
case '[':
- if ((nd = parse_char_class(++nd)) == NULL) {
+ if ((nd = parse_char_class(nd + 1)) == NULL) {
errmsg = "unbalanced brackets ([])";
return NULL;
}
Modified: user/attilio/vmcontention/bin/sh/eval.c
==============================================================================
--- user/attilio/vmcontention/bin/sh/eval.c Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/bin/sh/eval.c Sat Jun 29 18:03:55 2013 (r252383)
@@ -589,7 +589,8 @@ evalpipe(union node *n)
pip[1] = -1;
if (lp->next) {
if (pipe(pip) < 0) {
- close(prevfd);
+ if (prevfd >= 0)
+ close(prevfd);
error("Pipe call failed: %s", strerror(errno));
}
}
Modified: user/attilio/vmcontention/etc/defaults/rc.conf
==============================================================================
--- user/attilio/vmcontention/etc/defaults/rc.conf Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/etc/defaults/rc.conf Sat Jun 29 18:03:55 2013 (r252383)
@@ -88,7 +88,7 @@ fsck_y_enable="NO" # Set to YES to do fs
fsck_y_flags="" # Additional flags for fsck -y
background_fsck="YES" # Attempt to run fsck in the background where possible.
background_fsck_delay="60" # Time to wait (seconds) before starting the fsck.
-netfs_types="nfs:NFS oldnfs:OLDNFS" # Net filesystems.
+netfs_types="nfs:NFS oldnfs:OLDNFS smbfs:SMB" # Net filesystems.
extra_netfs_types="NO" # List of network extra filesystem types for delayed
# mount at startup (or NO).
Modified: user/attilio/vmcontention/etc/mtree/BSD.include.dist
==============================================================================
--- user/attilio/vmcontention/etc/mtree/BSD.include.dist Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/etc/mtree/BSD.include.dist Sat Jun 29 18:03:55 2013 (r252383)
@@ -176,6 +176,8 @@
..
procfs
..
+ smbfs
+ ..
udf
..
unionfs
Modified: user/attilio/vmcontention/etc/mtree/BSD.usr.dist
==============================================================================
--- user/attilio/vmcontention/etc/mtree/BSD.usr.dist Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/etc/mtree/BSD.usr.dist Sat Jun 29 18:03:55 2013 (r252383)
@@ -309,6 +309,10 @@
srcs
..
..
+ smbfs
+ print
+ ..
+ ..
sunrpc
dir
..
Modified: user/attilio/vmcontention/etc/network.subr
==============================================================================
--- user/attilio/vmcontention/etc/network.subr Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/etc/network.subr Sat Jun 29 18:03:55 2013 (r252383)
@@ -318,6 +318,15 @@ dhcpif()
local _tmpargs _arg
_tmpargs=`_ifconfig_getargs $1`
+ case $1 in
+ lo[0-9]*|\
+ stf[0-9]*|\
+ faith[0-9]*|\
+ lp[0-9]*|\
+ sl[0-9]*)
+ return 1
+ ;;
+ esac
if noafif $1; then
return 1
fi
@@ -509,7 +518,7 @@ ipv6_autoconfif()
_if=$1
case $_if in
- lo0|\
+ lo[0-9]*|\
stf[0-9]*|\
faith[0-9]*|\
lp[0-9]*|\
Modified: user/attilio/vmcontention/include/Makefile
==============================================================================
--- user/attilio/vmcontention/include/Makefile Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/include/Makefile Sat Jun 29 18:03:55 2013 (r252383)
@@ -37,7 +37,7 @@ LHDRS= aio.h errno.h fcntl.h linker_set.
syslog.h ucontext.h
LDIRS= bsm cam geom net net80211 netatalk netgraph netinet netinet6 \
- netipsec ${_netipx} netnatm \
+ netipsec ${_netipx} netnatm netsmb \
nfs nfsclient nfsserver \
sys vm
@@ -48,7 +48,7 @@ LSUBDIRS= cam/ata cam/scsi \
dev/ofw dev/pbio dev/pci ${_dev_powermac_nvram} dev/ppbus dev/smbus \
dev/speaker dev/usb dev/utopia dev/vkbd dev/wi \
fs/devfs fs/fdescfs fs/msdosfs fs/nandfs fs/nfs fs/nullfs \
- fs/procfs fs/udf fs/unionfs \
+ fs/procfs fs/smbfs fs/udf fs/unionfs \
geom/cache geom/concat geom/eli geom/gate geom/journal geom/label \
geom/mirror geom/mountver geom/multipath geom/nop \
geom/raid geom/raid3 geom/shsec geom/stripe geom/virstor \
@@ -80,6 +80,7 @@ INCS+= iconv.h
LSUBSUBDIRS+= netgraph/bluetooth/include
.endif
+# XXX unconditionally needed by <netsmb/netbios.h>
#.if ${MK_IPX} != "no"
_netipx= netipx
#.endif
Modified: user/attilio/vmcontention/lib/Makefile
==============================================================================
--- user/attilio/vmcontention/lib/Makefile Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/lib/Makefile Sat Jun 29 18:03:55 2013 (r252383)
@@ -102,6 +102,7 @@ SUBDIR= ${SUBDIR_ORDERED} \
${_librtld_db} \
${_libsdp} \
${_libsm} \
+ ${_libsmb} \
${_libsmdb} \
${_libsmutil} \
libstand \
@@ -205,6 +206,7 @@ _libypclnt= libypclnt
.endif
.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
+_libsmb= libsmb
_libvgl= libvgl
_libproc= libproc
_librtld_db= librtld_db
@@ -216,6 +218,7 @@ _libvmmapi= libvmmapi
.if ${MACHINE_CPUARCH} == "ia64"
_libefi= libefi
+_libsmb= libsmb
.endif
.if ${MACHINE_CPUARCH} == "mips"
@@ -226,6 +229,11 @@ _librtld_db= librtld_db
.if ${MACHINE_CPUARCH} == "powerpc"
_libproc= libproc
_librtld_db= librtld_db
+_libsmb= libsmb
+.endif
+
+.if ${MACHINE_CPUARCH} == "sparc64"
+_libsmb= libsmb
.endif
.if ${MK_OPENSSL} != "no"
Modified: user/attilio/vmcontention/lib/libfetch/fetch.c
==============================================================================
--- user/attilio/vmcontention/lib/libfetch/fetch.c Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/lib/libfetch/fetch.c Sat Jun 29 18:03:55 2013 (r252383)
@@ -376,7 +376,7 @@ fetchParseURL(const char *URL)
/* password */
if (*q == ':')
- q = fetch_pctdecode(u->pwd, ++q, URL_PWDLEN);
+ q = fetch_pctdecode(u->pwd, q + 1, URL_PWDLEN);
p++;
} else {
Modified: user/attilio/vmcontention/lib/libprocstat/Makefile
==============================================================================
--- user/attilio/vmcontention/lib/libprocstat/Makefile Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/lib/libprocstat/Makefile Sat Jun 29 18:03:55 2013 (r252383)
@@ -9,6 +9,7 @@ SRCS= cd9660.c \
core.c \
libprocstat.c \
msdosfs.c \
+ smbfs.c \
udf.c
VERSION_DEF= ${.CURDIR}/Versions.def
Modified: user/attilio/vmcontention/lib/libprocstat/common_kvm.h
==============================================================================
--- user/attilio/vmcontention/lib/libprocstat/common_kvm.h Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/lib/libprocstat/common_kvm.h Sat Jun 29 18:03:55 2013 (r252383)
@@ -41,6 +41,7 @@ int devfs_filestat(kvm_t *kd, struct vno
int isofs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn);
int msdosfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn);
int nfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn);
+int smbfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn);
int udf_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn);
int ufs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn);
int zfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn);
Modified: user/attilio/vmcontention/lib/libprocstat/libprocstat.c
==============================================================================
--- user/attilio/vmcontention/lib/libprocstat/libprocstat.c Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/lib/libprocstat/libprocstat.c Sat Jun 29 18:03:55 2013 (r252383)
@@ -1220,6 +1220,7 @@ procstat_get_vnode_info_kvm(kvm_t *kd, s
FSTYPE(isofs),
FSTYPE(msdosfs),
FSTYPE(nfs),
+ FSTYPE(smbfs),
FSTYPE(udf),
FSTYPE(ufs),
#ifdef LIBPROCSTAT_ZFS
Modified: user/attilio/vmcontention/lib/libutil/login_times.c
==============================================================================
--- user/attilio/vmcontention/lib/libutil/login_times.c Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/lib/libutil/login_times.c Sat Jun 29 18:03:55 2013 (r252383)
@@ -96,7 +96,7 @@ parse_lt(const char *str)
else
m.lt_start = 0;
if (*p == '-')
- p = parse_time(++p, &m.lt_end);
+ p = parse_time(p + 1, &m.lt_end);
else
m.lt_end = 1440;
Modified: user/attilio/vmcontention/rescue/rescue/Makefile
==============================================================================
--- user/attilio/vmcontention/rescue/rescue/Makefile Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/rescue/rescue/Makefile Sat Jun 29 18:03:55 2013 (r252383)
@@ -130,6 +130,8 @@ CRUNCH_LIBS+= -lgeom -lbsdxml -lkiconv -
.if ${MACHINE_CPUARCH} == "i386"
CRUNCH_PROGS_sbin+= bsdlabel sconfig fdisk
CRUNCH_ALIAS_bsdlabel= disklabel
+#CRUNCH_PROGS+= mount_smbfs
+#CRUNCH_LIBS+= -lsmb
.endif
.if ${MACHINE} == "pc98"
Modified: user/attilio/vmcontention/sbin/mdconfig/mdconfig.8
==============================================================================
--- user/attilio/vmcontention/sbin/mdconfig/mdconfig.8 Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/sbin/mdconfig/mdconfig.8 Sat Jun 29 18:03:55 2013 (r252383)
@@ -144,7 +144,7 @@ If both of
and
.Fl f
options are specified,
-display devices which match the two conditions.
+display devices which match the two conditions.
If the
.Fl v
option is specified, show all details.
Modified: user/attilio/vmcontention/sbin/mount/mount.8
==============================================================================
--- user/attilio/vmcontention/sbin/mount/mount.8 Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/sbin/mount/mount.8 Sat Jun 29 18:03:55 2013 (r252383)
@@ -450,6 +450,7 @@ However, for the following file system t
.Cm nfs ,
.Cm nullfs ,
.Cm oldnfs ,
+.Cm smbfs ,
.Cm udf ,
and
.Cm unionfs .
@@ -544,6 +545,7 @@ support for a particular file system mig
.Xr mount_msdosfs 8 ,
.Xr mount_nfs 8 ,
.Xr mount_nullfs 8 ,
+.Xr mount_smbfs 8 ,
.Xr mount_udf 8 ,
.Xr mount_unionfs 8 ,
.Xr umount 8 ,
Modified: user/attilio/vmcontention/sbin/mount/mount.c
==============================================================================
--- user/attilio/vmcontention/sbin/mount/mount.c Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/sbin/mount/mount.c Sat Jun 29 18:03:55 2013 (r252383)
@@ -143,7 +143,7 @@ use_mountprog(const char *vfstype)
unsigned int i;
const char *fs[] = {
"cd9660", "mfs", "msdosfs", "nfs",
- "nullfs", "oldnfs", "udf", "unionfs",
+ "nullfs", "oldnfs", "smbfs", "udf", "unionfs",
NULL
};
Modified: user/attilio/vmcontention/sbin/swapon/swapon.c
==============================================================================
--- user/attilio/vmcontention/sbin/swapon/swapon.c Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/sbin/swapon/swapon.c Sat Jun 29 18:03:55 2013 (r252383)
@@ -76,6 +76,8 @@ static int run_cmd(int *, const char *,
static enum { SWAPON, SWAPOFF, SWAPCTL } orig_prog, which_prog = SWAPCTL;
static int qflag;
+static char aalgo_default[] = "hmac/sha256";
+static char ealgo_default[] = "aes";
int
main(int argc, char **argv)
@@ -319,7 +321,7 @@ swap_on_off_gbde(char *name, int doingal
static const char *
swap_on_off_geli(char *name, char *mntops, int doingall)
{
- const char *ops, *aalgo, *ealgo, *keylen_str, *sectorsize_str;
+ char *ops, *aalgo, *ealgo, *keylen_str, *sectorsize_str;
char *dname, *p;
char args[4096];
struct stat sb;
@@ -337,8 +339,8 @@ swap_on_off_geli(char *name, char *mntop
ops = strdup(mntops);
/* Default parameters for geli(8). */
- aalgo = "hmac/sha256";
- ealgo = "aes";
+ aalgo = aalgo_default;
+ ealgo = ealgo_default;
keylen = 256;
sectorsize = 4096;
Modified: user/attilio/vmcontention/share/examples/Makefile
==============================================================================
--- user/attilio/vmcontention/share/examples/Makefile Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/share/examples/Makefile Sat Jun 29 18:03:55 2013 (r252383)
@@ -240,6 +240,7 @@ etc-examples:
.endif
.if ${SHARED} != "symlinks"
+SUBDIR= smbfs
.if ${MK_ATF} != "no"
SUBDIR+=atf
.endif
Modified: user/attilio/vmcontention/share/examples/etc/README.examples
==============================================================================
--- user/attilio/vmcontention/share/examples/etc/README.examples Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/share/examples/etc/README.examples Sat Jun 29 18:03:55 2013 (r252383)
@@ -40,6 +40,7 @@ netstart - network startup script run fr
network.subr - routines for network configuration scripts
networks - see networks(5)
newsyslog.conf - configuration for system log file rotator newsyslog(8)
+nsmb.conf - smbfs lookups configuration file
opieaccess - OPIE database of trusted networks
pf.conf - pf(4) example configuration file
pf.os - SYN fingerprint database
Modified: user/attilio/vmcontention/share/man/man5/fstab.5
==============================================================================
--- user/attilio/vmcontention/share/man/man5/fstab.5 Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/share/man/man5/fstab.5 Sat Jun 29 18:03:55 2013 (r252383)
@@ -231,7 +231,7 @@ is an
.Xr md 4
device file
.Pq Do md Dc or Do md[0-9]* Dc
-and
+and
.Dq file
is specified in
.Fa fs_mntopts ,
Modified: user/attilio/vmcontention/share/man/man9/locking.9
==============================================================================
--- user/attilio/vmcontention/share/man/man9/locking.9 Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/share/man/man9/locking.9 Sat Jun 29 18:03:55 2013 (r252383)
@@ -33,53 +33,52 @@
.Sh DESCRIPTION
The
.Em FreeBSD
-kernel is written to run across multiple CPUs and as such requires
-several different synchronization primitives to allow the developers
-to safely access and manipulate the many data types required.
+kernel is written to run across multiple CPUs and as such provides
+several different synchronization primitives to allow developers
+to safely access and manipulate many data types.
.Ss Mutexes
-Mutexes (also erroneously called "sleep mutexes") are the most commonly used
+Mutexes (also called "blocking mutexes") are the most commonly used
synchronization primitive in the kernel.
A thread acquires (locks) a mutex before accessing data shared with other
threads (including interrupt threads), and releases (unlocks) it afterwards.
If the mutex cannot be acquired, the thread requesting it will wait.
-Mutexes are by default adaptive, meaning that
+Mutexes are adaptive by default, meaning that
if the owner of a contended mutex is currently running on another CPU,
-then a thread attempting to acquire the mutex will briefly spin
-in the hope that the owner is only briefly holding it,
-and might release it shortly.
-If the owner does not do so, the waiting thread proceeds to yield the processor,
-allowing other threads to run.
-If the owner is not currently actually running then the spin step is skipped.
+then a thread attempting to acquire the mutex will spin rather than yielding
+the processor.
Mutexes fully support priority propagation.
.Pp
See
.Xr mutex 9
for details.
-.Ss Spin mutexes
-Spin mutexes are variation of basic mutexes; the main difference between
-the two is that spin mutexes never yield the processor - instead, they spin,
-waiting for the thread holding the lock,
-(which must be running on another CPU), to release it.
-Spin mutexes disable interrupts while the held so as to not get pre-empted.
-Since disabling interrupts is expensive, they are also generally slower.
-Spin mutexes should be used only when necessary, e.g. to protect data shared
+.Ss Spin Mutexes
+Spin mutexes are a variation of basic mutexes; the main difference between
+the two is that spin mutexes never block.
+Instead, they spin while waiting for the lock to be released.
+Note that a thread that holds a spin mutex must never yield its CPU to
+avoid deadlock.
+Unlike ordinary mutexes, spin mutexes disable interrupts when acquired.
+Since disabling interrupts can be expensive, they are generally slower to
+acquire and release.
+Spin mutexes should be used only when absolutely necessary,
+e.g. to protect data shared
with interrupt filter code (see
.Xr bus_setup_intr 9
-for details).
-.Ss Pool mutexes
-With most synchronization primitives, such as mutexes, programmer must
-provide a piece of allocated memory to hold the primitive.
+for details),
+or for scheduler internals.
+.Ss Mutex Pools
+With most synchronization primitives, such as mutexes, the programmer must
+provide memory to hold the primitive.
For example, a mutex may be embedded inside the structure it protects.
-Pool mutex is a variant of mutex without this requirement - to lock or unlock
-a pool mutex, one uses address of the structure being protected with it,
-not the mutex itself.
-Pool mutexes are seldom used.
+Mutex pools provide a preallocated set of mutexes to avoid this
+requirement.
+Note that mutexes from a pool may only be used as leaf locks.
.Pp
See
.Xr mtx_pool 9
for details.
-.Ss Reader/writer locks
-Reader/writer locks allow shared access to protected data by multiple threads,
+.Ss Reader/Writer Locks
+Reader/writer locks allow shared access to protected data by multiple threads
or exclusive access by a single thread.
The threads with shared access are known as
.Em readers
@@ -91,26 +90,16 @@ since it may modify protected data.
Reader/writer locks can be treated as mutexes (see above and
.Xr mutex 9 )
with shared/exclusive semantics.
-More specifically, regular mutexes can be
-considered to be equivalent to a write-lock on an
-.Em rw_lock.
-The
-.Em rw_lock
-locks have priority propagation like mutexes, but priority
-can be propagated only to an exclusive holder.
+Reader/writer locks support priority propagation like mutexes,
+but priority is propagated only to an exclusive holder.
This limitation comes from the fact that shared owners
are anonymous.
-Another important property is that shared holders of
-.Em rw_lock
-can recurse, but exclusive locks are not allowed to recurse.
-This ability should not be used lightly and
-.Em may go away.
.Pp
See
.Xr rwlock 9
for details.
-.Ss Read-mostly locks
-Mostly reader locks are similar to
+.Ss Read-Mostly Locks
+Read-mostly locks are similar to
.Em reader/writer
locks but optimized for very infrequent write locking.
.Em Read-mostly
@@ -122,21 +111,41 @@ data structure.
See
.Xr rmlock 9
for details.
+.Ss Sleepable Read-Mostly Locks
+Sleepable read-mostly locks are a variation on read-mostly locks.
+Threads holding an exclusive lock may sleep,
+but threads holding a shared lock may not.
+Priority is propagated to shared owners but not to exclusive owners.
.Ss Shared/exclusive locks
Shared/exclusive locks are similar to reader/writer locks; the main difference
-between them is that shared/exclusive locks may be held during unbounded sleep
-(and may thus perform an unbounded sleep).
-They are inherently less efficient than mutexes, reader/writer locks
-and read-mostly locks.
-They do not support priority propagation.
-They should be considered to be closely related to
-.Xr sleep 9 .
-They could in some cases be
-considered a conditional sleep.
+between them is that shared/exclusive locks may be held during unbounded sleep.
+Acquiring a contested shared/exclusive lock can perform an unbounded sleep.
+These locks do not support priority propagation.
.Pp
See
.Xr sx 9
for details.
+.Ss Lockmanager locks
+Lockmanager locks are sleepable shared/exclusive locks used mostly in
+.Xr VFS 9
+.Po
+as a
+.Xr vnode 9
+lock
+.Pc
+and in the buffer cache
+.Po
+.Xr BUF_LOCK 9
+.Pc .
+They have features other lock types do not have such as sleep
+timeouts, blocking upgrades,
+writer starvation avoidance, draining, and an interlock mutex,
+but this makes them complicated to both use and implement;
+for this reason, they should be avoided.
+.Pp
+See
+.Xr lock 9
+for details.
.Ss Counting semaphores
Counting semaphores provide a mechanism for synchronizing access
to a pool of resources.
@@ -149,43 +158,21 @@ See
.Xr sema 9
for details.
.Ss Condition variables
-Condition variables are used in conjunction with mutexes to wait for
-conditions to occur.
-A thread must hold the mutex before calling the
-.Fn cv_wait* ,
+Condition variables are used in conjunction with locks to wait for
+a condition to become true.
+A thread must hold the associated lock before calling one of the
+.Fn cv_wait ,
functions.
-When a thread waits on a condition, the mutex
-is atomically released before the thread yields the processor,
-then reacquired before the function call returns.
+When a thread waits on a condition, the lock
+is atomically released before the thread yields the processor
+and reacquired before the function call returns.
+Condition variables may be used with blocking mutexes,
+reader/writer locks, read-mostly locks, and shared/exclusive locks.
.Pp
See
.Xr condvar 9
for details.
-.Ss Giant
-Giant is an instance of a mutex, with some special characteristics:
-.Bl -enum
-.It
-It is recursive.
-.It
-Drivers can request that Giant be locked around them
-by not marking themselves MPSAFE.
-Note that infrastructure to do this is slowly going away as non-MPSAFE
-drivers either became properly locked or disappear.
-.It
-Giant must be locked first before other locks.
-.It
-It is OK to hold Giant while performing unbounded sleep; in such case,
-Giant will be dropped before sleeping and picked up after wakeup.
-.It
-There are places in the kernel that drop Giant and pick it back up
-again.
-Sleep locks will do this before sleeping.
-Parts of the network or VM code may do this as well, depending on the
-setting of a sysctl.
-This means that you cannot count on Giant keeping other code from
-running if your code sleeps, even if you want it to.
-.El
-.Ss Sleep/wakeup
+.Ss Sleep/Wakeup
The functions
.Fn tsleep ,
.Fn msleep ,
@@ -194,7 +181,12 @@ The functions
.Fn wakeup ,
and
.Fn wakeup_one
-handle event-based thread blocking.
+also handle event-based thread blocking.
+Unlike condition variables,
+arbitrary addresses may be used as wait channels and an dedicated
+structure does not need to be allocated.
+However, care must be taken to ensure that wait channel addresses are
+unique to an event.
If a thread must wait for an external event, it is put to sleep by
.Fn tsleep ,
.Fn msleep ,
@@ -214,9 +206,10 @@ the thread is being put to sleep.
All threads sleeping on a single
.Fa chan
are woken up later by
-.Fn wakeup ,
-often called from inside an interrupt routine, to indicate that the
-resource the thread was blocking on is available now.
+.Fn wakeup
+.Pq often called from inside an interrupt routine
+to indicate that the
+event the thread was blocking on has occurred.
.Pp
Several of the sleep functions including
.Fn msleep ,
@@ -232,122 +225,168 @@ includes the
flag, then the lock will not be reacquired before returning.
The lock is used to ensure that a condition can be checked atomically,
and that the current thread can be suspended without missing a
-change to the condition, or an associated wakeup.
+change to the condition or an associated wakeup.
In addition, all of the sleep routines will fully drop the
.Va Giant
mutex
-(even if recursed)
+.Pq even if recursed
while the thread is suspended and will reacquire the
.Va Giant
-mutex before the function returns.
+mutex
+.Pq restoring any recursion
+before the function returns.
.Pp
-See
-.Xr sleep 9
-for details.
-.Ss Lockmanager locks
-Shared/exclusive locks, used mostly in
-.Xr VFS 9 ,
-in particular as a
-.Xr vnode 9
-lock.
-They have features other lock types do not have, such as sleep timeout,
-writer starvation avoidance, draining, and interlock mutex, but this makes them
-complicated to implement; for this reason, they are deprecated.
+The
+.Fn pause
+function is a special sleep function that waits for a specified
+amount of time to pass before the thread resumes execution.
+This sleep cannot be terminated early by either an explicit
+.Fn wakeup
+or a signal.
.Pp
See
-.Xr lock 9
+.Xr sleep 9
for details.
+.Ss Giant
+Giant is a special mutex used to protect data structures that do not
+yet have their own locks.
+Since it provides semantics akin to the old
+.Xr spl 9
+interface,
+Giant has special characteristics:
+.Bl -enum
+.It
+It is recursive.
+.It
+Drivers can request that Giant be locked around them
+by not marking themselves MPSAFE.
+Note that infrastructure to do this is slowly going away as non-MPSAFE
+drivers either became properly locked or disappear.
+.It
+Giant must be locked before other non-sleepable locks.
+.It
+Giant is dropped during unbounded sleeps and reacquired after wakeup.
+.It
+There are places in the kernel that drop Giant and pick it back up
+again.
+Sleep locks will do this before sleeping.
+Parts of the network or VM code may do this as well.
+This means that you cannot count on Giant keeping other code from
+running if your code sleeps, even if you want it to.
+.El
.Sh INTERACTIONS
-The primitives interact and have a number of rules regarding how
+The primitives can interact and have a number of rules regarding how
they can and can not be combined.
-Many of these rules are checked using the
-.Xr witness 4
-code.
-.Ss Bounded vs. unbounded sleep
-The following primitives perform bounded sleep:
- mutexes, pool mutexes, reader/writer locks and read-mostly locks.
-.Pp
-The following primitives may perform an unbounded sleep:
-shared/exclusive locks, counting semaphores, condition variables, sleep/wakeup and lockmanager locks.
-.Pp
+Many of these rules are checked by
+.Xr witness 4 .
+.Ss Bounded vs. Unbounded Sleep
+A bounded sleep
+.Pq or blocking
+is a sleep where the only resource needed to resume execution of a thread
+is CPU time for the owner of a lock that the thread is waiting to acquire.
+An unbounded sleep
+.Po
+often referred to as simply
+.Dq sleeping
+.Pc
+is a sleep where a thread is waiting for an external event or for a condition
+to become true.
+In particular,
+since there is always CPU time available,
+a dependency chain of threads in bounded sleeps should always make forward
+progress.
+This requires that no thread in a bounded sleep is waiting for a lock held
+by a thread in an unbounded sleep.
+To avoid priority inversions,
+a thread in a bounded sleep lends its priority to the owner of the lock
+that it is waiting for.
+.Pp
+The following primitives perform bounded sleeps:
+mutexes, reader/writer locks and read-mostly locks.
+.Pp
+The following primitives perform unbounded sleeps:
+sleepable read-mostly locks, shared/exclusive locks, lockmanager locks,
+counting semaphores, condition variables, and sleep/wakeup.
+.Ss General Principles
+.Bl -bullet
+.It
It is an error to do any operation that could result in yielding the processor
while holding a spin mutex.
+.It
+It is an error to do any operation that could result in unbounded sleep
+while holding any primitive from the 'bounded sleep' group.
+For example, it is an error to try to acquire a shared/exclusive lock while
+holding a mutex, or to try to allocate memory with M_WAITOK while holding a
+reader/writer lock.
.Pp
-As a general rule, it is an error to do any operation that could result
-in unbounded sleep while holding any primitive from the 'bounded sleep' group.
-For example, it is an error to try to acquire shared/exclusive lock while
-holding mutex, or to try to allocate memory with M_WAITOK while holding
-read-write lock.
-.Pp
-As a special case, it is possible to call
+Note that the lock passed to one of the
.Fn sleep
or
-.Fn mtx_sleep
-while holding a single mutex.
-It will atomically drop that mutex and reacquire it as part of waking up.
-This is often a bad idea because it generally relies on the programmer having
-good knowledge of all of the call graph above the place where
-.Fn mtx_sleep
-is being called and assumptions the calling code has made.
-Because the lock gets dropped during sleep, one must re-test all
-the assumptions that were made before, all the way up the call graph to the
-place where the lock was acquired.
-.Pp
+.Fn cv_wait
+functions is dropped before the thread enters the unbounded sleep and does
+not violate this rule.
+.It
It is an error to do any operation that could result in yielding of
the processor when running inside an interrupt filter.
-.Pp
+.It
It is an error to do any operation that could result in unbounded sleep when
running inside an interrupt thread.
+.El
.Ss Interaction table
The following table shows what you can and can not do while holding
-one of the synchronization primitives discussed:
-.Bl -column ".Ic xxxxxxxxxxxxxxxx" ".Xr XXXXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXX" -offset indent
-.It Em " You want:" Ta spin-mtx Ta mutex Ta rwlock Ta rmlock Ta sx Ta sleep
-.It Em "You have: " Ta ------ Ta ------ Ta ------ Ta ------ Ta ------ Ta ------
-.It spin mtx Ta \&ok-1 Ta \&no Ta \&no Ta \&no Ta \&no Ta \&no-3
-.It mutex Ta \&ok Ta \&ok-1 Ta \&ok Ta \&ok Ta \&no Ta \&no-3
-.It rwlock Ta \&ok Ta \&ok Ta \&ok-2 Ta \&ok Ta \&no Ta \&no-3
-.It rmlock Ta \&ok Ta \&ok Ta \&ok Ta \&ok-2 Ta \&no-5 Ta \&no-5
-.It sx Ta \&ok Ta \&ok Ta \&ok Ta \&ok Ta \&no-2 Ta \&ok-4
+one of the locking primitives discussed. Note that
+.Dq sleep
+includes
+.Fn sema_wait ,
+.Fn sema_timedwait ,
+any of the
+.Fn cv_wait
+functions,
+and any of the
+.Fn sleep
+functions.
+.Bl -column ".Ic xxxxxxxxxxxxxxxx" ".Xr XXXXXXXXX" ".Xr XXXXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXXXX" ".Xr XXXXXX" -offset 3n
+.It Em " You want:" Ta spin mtx Ta mutex/rw Ta rmlock Ta sleep rm Ta sx/lk Ta sleep
+.It Em "You have: " Ta -------- Ta -------- Ta ------ Ta -------- Ta ------ Ta ------
+.It spin mtx Ta \&ok Ta \&no Ta \&no Ta \&no Ta \&no Ta \&no-1
+.It mutex/rw Ta \&ok Ta \&ok Ta \&ok Ta \&no Ta \&no Ta \&no-1
+.It rmlock Ta \&ok Ta \&ok Ta \&ok Ta \&no Ta \&no Ta \&no-1
+.It sleep rm Ta \&ok Ta \&ok Ta \&ok Ta \&ok-2 Ta \&ok-2 Ta \&ok-2/3
+.It sx Ta \&ok Ta \&ok Ta \&ok Ta \&ok Ta \&ok Ta \&ok-3
+.It lockmgr Ta \&ok Ta \&ok Ta \&ok Ta \&ok Ta \&ok Ta \&ok
.El
.Pp
.Em *1
-Recursion is defined per lock.
-Lock order is important.
+There are calls that atomically release this primitive when going to sleep
+and reacquire it on wakeup
+.Po
+.Fn mtx_sleep ,
+.Fn rw_sleep ,
+.Fn msleep_spin ,
+etc.
+.Pc .
.Pp
.Em *2
-Readers can recurse though writers can not.
-Lock order is important.
+These cases are only allowed while holding a write lock on a sleepable
+read-mostly lock.
.Pp
.Em *3
-There are calls that atomically release this primitive when going to sleep
-and reacquire it on wakeup (e.g.
-.Fn mtx_sleep ,
-.Fn rw_sleep
-and
-.Fn msleep_spin ) .
-.Pp
-.Em *4
-Though one can sleep holding an sx lock, one can also use
-.Fn sx_sleep
-which will atomically release this primitive when going to sleep and
+Though one can sleep while holding this lock,
+one can also use a
+.Fn sleep
+function to atomically release this primitive when going to sleep and
reacquire it on wakeup.
.Pp
-.Em *5
-.Em Read-mostly
-locks can be initialized to support sleeping while holding a write lock.
-See
-.Xr rmlock 9
-for details.
+Note that non-blocking try operations on locks are always permitted.
.Ss Context mode table
The next table shows what can be used in different contexts.
At this time this is a rather easy to remember table.
-.Bl -column ".Ic Xxxxxxxxxxxxxxxxxxx" ".Xr XXXXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXX" -offset indent
-.It Em "Context:" Ta spin mtx Ta mutex Ta sx Ta rwlock Ta rmlock Ta sleep
+.Bl -column ".Ic Xxxxxxxxxxxxxxxxxxx" ".Xr XXXXXXXXX" ".Xr XXXXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXXXX" ".Xr XXXXXX" -offset 3n
+.It Em "Context:" Ta spin mtx Ta mutex/rw Ta rmlock Ta sleep rm Ta sx/lk Ta sleep
.It interrupt filter: Ta \&ok Ta \&no Ta \&no Ta \&no Ta \&no Ta \&no
-.It interrupt thread: Ta \&ok Ta \&ok Ta \&no Ta \&ok Ta \&ok Ta \&no
-.It callout: Ta \&ok Ta \&ok Ta \&no Ta \&ok Ta \&no Ta \&no
-.It syscall: Ta \&ok Ta \&ok Ta \&ok Ta \&ok Ta \&ok Ta \&ok
+.It interrupt thread: Ta \&ok Ta \&ok Ta \&ok Ta \&no Ta \&no Ta \&no
+.It callout: Ta \&ok Ta \&ok Ta \&ok Ta \&no Ta \&no Ta \&no
+.It system call: Ta \&ok Ta \&ok Ta \&ok Ta \&ok Ta \&ok Ta \&ok
.El
.Sh SEE ALSO
.Xr witness 4 ,
Modified: user/attilio/vmcontention/share/mk/bsd.libnames.mk
==============================================================================
--- user/attilio/vmcontention/share/mk/bsd.libnames.mk Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/share/mk/bsd.libnames.mk Sat Jun 29 18:03:55 2013 (r252383)
@@ -149,6 +149,7 @@ LIBRT?= ${DESTDIR}${LIBDIR}/librt.a
LIBRTLD_DB?= ${DESTDIR}${LIBDIR}/librtld_db.a
LIBSBUF?= ${DESTDIR}${LIBDIR}/libsbuf.a
LIBSDP?= ${DESTDIR}${LIBDIR}/libsdp.a
+LIBSMB?= ${DESTDIR}${LIBDIR}/libsmb.a
LIBSSH?= ${DESTDIR}${LIBDIR}/libssh.a
LIBSSL?= ${DESTDIR}${LIBDIR}/libssl.a
LIBSTAND?= ${DESTDIR}${LIBDIR}/libstand.a
Modified: user/attilio/vmcontention/sys/arm/arm/cpufunc.c
==============================================================================
--- user/attilio/vmcontention/sys/arm/arm/cpufunc.c Sat Jun 29 17:48:59 2013 (r252382)
+++ user/attilio/vmcontention/sys/arm/arm/cpufunc.c Sat Jun 29 18:03:55 2013 (r252383)
@@ -1481,7 +1481,8 @@ set_cpufuncs()
cputype == CPU_ID_CORTEXA8R3 ||
cputype == CPU_ID_CORTEXA9R1 ||
cputype == CPU_ID_CORTEXA9R2 ||
- cputype == CPU_ID_CORTEXA9R3) {
+ cputype == CPU_ID_CORTEXA9R3 ||
+ cputype == CPU_ID_CORTEXA15 ) {
cpufuncs = cortexa_cpufuncs;
cpu_reset_needs_v4_MMU_disable = 1; /* V4 or higher */
get_cachetype_cp15();
Copied: user/attilio/vmcontention/sys/arm/arm/generic_timer.c (from r252379, head/sys/arm/arm/generic_timer.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/attilio/vmcontention/sys/arm/arm/generic_timer.c Sat Jun 29 18:03:55 2013 (r252383, copy of r252379, head/sys/arm/arm/generic_timer.c)
@@ -0,0 +1,374 @@
+/*-
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * Copyright (c) 2013 Ruslan Bukin <br at bsdpad.com>
+ * All rights reserved.
+ *
+ * Based on mpcore_timer.c developed by Ben Gray <ben.r.gray at gmail.com>
+ *
+ * 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.
+ * 3. The name of the company nor the name of the author may be used to
+ * endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * 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.
+ */
+
+/**
+ * Cortex-A15 (and probably A7) Generic Timer
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/malloc.h>
+#include <sys/rman.h>
+#include <sys/timeet.h>
+#include <sys/timetc.h>
+#include <sys/watchdog.h>
+#include <machine/bus.h>
+#include <machine/cpu.h>
+#include <machine/frame.h>
+#include <machine/intr.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/fdt.h>
+
+#define GENERIC_TIMER_CTRL_ENABLE (1 << 0)
+#define GENERIC_TIMER_CTRL_INT_MASK (1 << 1)
+#define GENERIC_TIMER_CTRL_INT_STAT (1 << 2)
+#define GENERIC_TIMER_REG_CTRL 0
+#define GENERIC_TIMER_REG_TVAL 1
+
+#define CNTPSIRQ 29
+
+struct arm_tmr_softc {
+ struct resource *irq_res;
+ uint32_t clkfreq;
+ struct eventtimer et;
+};
+
+static struct arm_tmr_softc *arm_tmr_sc = NULL;
+
+static timecounter_get_t arm_tmr_get_timecount;
+
+static struct timecounter arm_tmr_timecount = {
+ .tc_name = "ARM MPCore Timecounter",
+ .tc_get_timecount = arm_tmr_get_timecount,
+ .tc_poll_pps = NULL,
+ .tc_counter_mask = ~0u,
+ .tc_frequency = 0,
+ .tc_quality = 1000,
+};
+
+static inline int
+get_freq(void)
+{
+ uint32_t val;
+
+ __asm volatile("mrc p15, 0, %0, c14, c0, 0" : "=r" (val));
+
+ return (val);
+}
+
+static inline int
+set_freq(uint32_t val)
+{
+
+ __asm volatile("mcr p15, 0, %[val], c14, c0, 0" : :
+ [val] "r" (val));
+ isb();
+
+ return (val);
+}
+
+
+static inline long
+get_cntpct(void)
+{
+ uint64_t val;
+
+ __asm volatile("mrrc p15, 0, %Q0, %R0, c14" : "=r" (val));
+
+ return (val);
+}
+
+static inline int
+set_ctrl(uint32_t val)
+{
+
+ __asm volatile("mcr p15, 0, %[val], c14, c2, 1" : :
+ [val] "r" (val));
+ isb();
+
+ return (0);
+}
+
+static inline int
+set_tval(uint32_t val)
+{
+
+ __asm volatile("mcr p15, 0, %[val], c14, c2, 0" : :
+ [val] "r" (val));
+ isb();
+
+ return (0);
+}
+
+static inline int
+get_ctrl(void)
+{
+ uint32_t val;
+
+ __asm volatile("mrc p15, 0, %0, c14, c2, 1" : "=r" (val));
+
+ return (val);
+}
+
+static inline int
+get_tval(void)
+{
+ uint32_t val;
+
+ __asm volatile("mrc p15, 0, %0, c14, c2, 0" : "=r" (val));
+
+ return (val);
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-user
mailing list