? a.out ? anita ? build.out ? chromium ? diff ? do ? doit ? dtor.c ? dtor.s ? entries.c ? fchdir.c ? install.out ? jdk8 ? jdk9 ? jump-table-NOPIC.s ? jump-table.c ? jump-table.s ? make.amd64.release.out ? make.avbarm.release.out ? make.evbarm.release.out ? make.hp300.release.out ? make.i386.release.out ? make.sparc64.release.out ? make.vax.release.out ? mkarch ? mkiso ? mktools ? o ? oo ? patches-for-vax-gcc.tar.gz ? posixtestsuite ? throw.c ? update.out ? vax ? x ? bin/ps/keyword.c.new ? bin/ps/ps.1.new ? bin/sh/for1 ? bin/sh/for2 ? bin/sh/other1 ? bin/sh/other2 ? bin/sh/out ? bin/sh/sep1 ? bin/sh/sep2 ? crypto/external/bsd/openssh/dist/moduli.1024.sieved.gz ? crypto/external/bsd/openssh/dist/moduli.1536 ? crypto/external/bsd/openssh/dist/moduli.1536.sieved.gz ? crypto/external/bsd/openssh/dist/moduli.2048 ? crypto/external/bsd/openssh/dist/moduli.2048.sieved.gz ? crypto/external/bsd/openssh/dist/moduli.3072 ? crypto/external/bsd/openssh/dist/moduli.3072.sieved.gz ? crypto/external/bsd/openssh/dist/moduli.4096 ? crypto/external/bsd/openssh/dist/moduli.4096.sieved.gz ? distrib/cdrom/macppc_installboot/fs ? distrib/sets/lists/bump ? etc/mtree/o ? external/bsd/bind/bind-9.10.4-P1 ? external/bsd/bind/bind-9.10.4-P1.tar.gz ? external/bsd/bind/bind-9.11.0a2.tar.gz ? external/bsd/bind/o ? external/bsd/bind/osrc ? external/bsd/cron/dist/cron ? external/bsd/cron/dist/crontab ? external/bsd/elftoolchain/dist.new ? external/bsd/elftoolchain/foo ? external/bsd/elftoolchain/new ? external/bsd/elftoolchain/dist/libdwarf/o ? external/bsd/elftoolchain/dist/libdwarf/x ? external/bsd/ntp/dist.new ? external/bsd/ntp/ntp-4.2.8p8 ? external/bsd/ntp/ntp-4.2.8p8.tar.gz ? external/bsd/ntp/dist/x ? external/bsd/ntp/dist/ntpd/a.out ? external/bsd/ntp/dist/ntpd/x ? external/cddl/osnet/lib/1 ? external/cddl/osnet/usr.bin/ctfmerge/gmon.out ? external/gpl3/binutils/binutils-2.26.tar.gz ? external/gpl3/binutils/dist/configure.tgt ? external/gpl3/binutils/dist/bfd/o ? external/gpl3/binutils/dist/binutils/o ? external/gpl3/binutils/dist/ld/o ? external/gpl3/gcc/make.out ? external/gpl3/gcc/o ? external/gpl3/gcc/vax.p ? external/gpl3/gcc/dist/p ? external/gpl3/gcc/dist/pp ? external/gpl3/gcc/dist/vax.p ? external/gpl3/gcc/dist/xxx ? external/gpl3/gcc/dist/yyy ? external/gpl3/gcc/dist/gcc/o ? external/gpl3/gcc/dist/libgcc/config/m68k/o ? external/gpl3/gcc/dist/libsanitizer/Makefile ? external/gpl3/gcc/dist/libsanitizer/config.h ? external/gpl3/gcc/dist/libsanitizer/config.log ? external/gpl3/gcc/dist/libsanitizer/config.status ? external/gpl3/gcc/dist/libsanitizer/gstdint.h ? external/gpl3/gcc/dist/libsanitizer/libsanitizer.spec ? external/gpl3/gcc/dist/libsanitizer/libtool ? external/gpl3/gcc/dist/libsanitizer/make.out ? external/gpl3/gcc/dist/libsanitizer/o ? external/gpl3/gcc/dist/libsanitizer/stamp-h1 ? external/gpl3/gcc/dist/libsanitizer/asan/.deps ? external/gpl3/gcc/dist/libsanitizer/asan/Makefile ? external/gpl3/gcc/dist/libsanitizer/interception/.deps ? external/gpl3/gcc/dist/libsanitizer/interception/Makefile ? external/gpl3/gcc/dist/libsanitizer/libbacktrace/.deps ? external/gpl3/gcc/dist/libsanitizer/libbacktrace/Makefile ? external/gpl3/gcc/dist/libsanitizer/libbacktrace/backtrace-supported.h ? external/gpl3/gcc/dist/libsanitizer/lsan/.deps ? external/gpl3/gcc/dist/libsanitizer/lsan/Makefile ? external/gpl3/gcc/dist/libsanitizer/sanitizer_common/.deps ? external/gpl3/gcc/dist/libsanitizer/sanitizer_common/Makefile ? external/gpl3/gcc/dist/libsanitizer/sanitizer_common/o ? external/gpl3/gcc/dist/libsanitizer/sanitizer_common/p ? external/gpl3/gcc/dist/libsanitizer/tsan/.deps ? external/gpl3/gcc/dist/libsanitizer/tsan/Makefile ? external/gpl3/gcc/dist/libsanitizer/ubsan/.deps ? external/gpl3/gcc/dist/libsanitizer/ubsan/Makefile ? external/gpl3/gcc/lib/o ? external/gpl3/gcc/lib/libasan/foo.c ? external/gpl3/gcc/lib/libasan/o ? external/gpl3/gcc/lib/libgcc/libgcc_s/o.S ? external/gpl3/gcc/usr.bin/backend/out ? external/gpl3/gcc/usr.bin/cc1/o ? external/gpl3/gcc/usr.bin/cc1obj/o ? external/gpl3/gcc/usr.bin/cc1plus/o ? external/gpl3/gcc/usr.bin/host-libiberty/libiberty ? external/gpl3/gcc/usr.bin/lto1/o ? external/gpl3/gcc.old/dist/gcc/1.3 ? external/gpl3/gcc.old/dist/gcc/log ? external/gpl3/gcc.old/dist/gcc/old ? external/gpl3/gcc.old/dist/gcc/config/vax/o ? external/mit/xorg/lib/dri/o ? external/public-domain/tz/tzdata2015f.tar.gz ? external/public-domain/tz/z ? lib/csu/cc1.core ? lib/libc/0001-change-style-of-bsd_signal.patch ? lib/libm/arch/alpha/fenv.c ? sbin/resize_ffs/o ? share/mk/bsd.sys.mk.new ? sys/20160401 ? sys/net80211.new ? sys/net80211.tar.gz ? sys/netipsec.works ? sys/o ? sys/oo ? sys/update.out ? sys/x ? sys/arch/bus_space.diff ? sys/arch/foo ? sys/arch/foo1 ? sys/arch/foo2 ? sys/arch/update.out ? sys/arch/amd64/compile/BULKY ? sys/arch/amd64/compile/GENERIC ? sys/arch/amd64/compile/NET80211 ? sys/arch/amd64/compile/NEWNFS ? sys/arch/amd64/compile/QUASAR ? sys/arch/amd64/conf/BULKY ? sys/arch/amd64/conf/NET80211 ? sys/arch/amd64/conf/NEWNFS ? sys/arch/amd64/conf/QUASAR ? sys/arch/evbarm/o ? sys/arch/evbarm/compile/RPI ? sys/arch/evbarm/conf/x ? sys/arch/evbarm/stand/gzboot/o ? sys/arch/hppa/stand/boot/lib ? sys/arch/i386/compile/GENERIC ? sys/arch/i386/compile/SHINY ? sys/arch/i386/conf/SHINY ? sys/arch/i386/conf/STINKY ? sys/arch/sparc64/compile/PLUTO ? sys/arch/sparc64/conf/PLUTO ? sys/arch/vax/boot/boot/lib ? sys/dev/acpi/o ? sys/dev/usb/if_mos.c ? sys/dev/usb/if_mosreg.h ? sys/kern/fb ? sys/kern/kern_task.c ? sys/kern/o ? sys/modules/make.out ? sys/modules/ntfs/o ? sys/nfs/o ? sys/rump/include/rump/rump.h.diff ? sys/sys/a.out ? sys/sys/disklabel.h.new ? sys/sys/log ? sys/sys/mmap.c ? sys/sys/task.h ? sys/ufs/ext4fs ? sys/ufs/ext2fs/o ? tests/lib/libpthread/race.c ? tests/net/in_cksum/foo.c ? tests/net/in_cksum/foo.s ? tests/net/net/server.c ? tests/usr.bin/ld/d_defset1.c ? tests/usr.bin/ld/d_defset2.c ? tests/usr.bin/ld/d_dynlinkset.c ? tests/usr.bin/ld/d_linkset.c ? tests/usr.bin/ld/foo.h ? tests/usr.bin/ld/kern.ldscript.head ? tests/usr.bin/ld/kmodule ? tools/binutils/make.out ? tools/compat/autom4te.cache ? tools/compat/foo.c ? tools/compat/o ? tools/gcc/foo.c ? tools/gcc/make.out ? tools/gdb/build ? tools/libdwarf/o ? usr.bin/config/x ? usr.bin/make/o ? usr.bin/xlint/lint1/al.c ? usr.bin/xlint/lint1/at.c ? usr.bin/xlint/lint1/bs.c ? usr.bin/xlint/lint1/bs1.c ? usr.bin/xlint/lint1/cgram.y.new ? usr.bin/xlint/lint1/init.c.new ? usr.bin/xlint/lint1/l.c ? usr.bin/xlint/lint1/l1.c ? usr.bin/xlint/lint1/m_vctx ? usr.bin/xlint/lint1/o.c ? usr.bin/xlint/lint1/tst.c ? usr.bin/xlint/lint1/x.c ? usr.bin/xlint/lint1/y.c ? usr.bin/xlint/lint1/z.c Index: distrib/sets/lists/comp/mi =================================================================== RCS file: /cvsroot/src/distrib/sets/lists/comp/mi,v retrieving revision 1.2044 diff -u -u -r1.2044 mi --- distrib/sets/lists/comp/mi 8 Jun 2016 22:32:01 -0000 1.2044 +++ distrib/sets/lists/comp/mi 14 Jun 2016 22:55:02 -0000 @@ -8357,6 +8357,8 @@ ./usr/share/man/cat3/pthread_barrier_wait.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_barrierattr.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_barrierattr_destroy.0 comp-c-catman .cat +#./usr/share/man/cat3/pthread_barrierattr_getpshared.0 comp-c-catman .cat +#./usr/share/man/cat3/pthread_barrierattr_setpshared.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_barrierattr_init.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_cancel.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_cleanup_pop.0 comp-c-catman .cat @@ -8370,8 +8372,11 @@ ./usr/share/man/cat3/pthread_cond_wait.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_condattr.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_condattr_destroy.0 comp-c-catman .cat +#./usr/share/man/cat3/pthread_condattr_getpshared.0 comp-c-catman .cat +#./usr/share/man/cat3/pthread_condattr_setpshared.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_condattr_init.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_condattr_setclock.0 comp-c-catman .cat +./usr/share/man/cat3/pthread_condattr_getclock.0 comp-c-catmat .cat ./usr/share/man/cat3/pthread_create.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_curcpu_np.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_detach.0 comp-c-catman .cat @@ -8393,11 +8398,20 @@ ./usr/share/man/cat3/pthread_mutex_lock.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_mutex_trylock.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_mutex_unlock.0 comp-c-catman .cat +./usr/share/man/cat3/pthread_mutex_timedlock.0 comp-c-catman .cat +./usr/share/man/cat3/pthread_mutex_getprioceiling.0 comp-c-catman .cat +./usr/share/man/cat3/pthread_mutex_setprioceiling.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_mutexattr.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_mutexattr_destroy.0 comp-c-catman .cat +#./usr/share/man/cat3/pthread_mutexattr_getpshared.0 comp-c-catman .cat +#./usr/share/man/cat3/pthread_mutexattr_setpshared.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_mutexattr_gettype.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_mutexattr_init.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_mutexattr_settype.0 comp-c-catman .cat +./usr/share/man/cat3/pthread_mutexattr_getprotocol.0 comp-c-catman .cat +./usr/share/man/cat3/pthread_mutexattr_setprotocol.0 comp-c-catman .cat +./usr/share/man/cat3/pthread_mutexattr_getprioceiling.0 comp-c-catman .cat +./usr/share/man/cat3/pthread_mutexattr_setprioceiling.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_once.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_resume_np.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_rwlock.0 comp-c-catman .cat @@ -8412,6 +8426,8 @@ ./usr/share/man/cat3/pthread_rwlock_wrlock.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_rwlockattr.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_rwlockattr_destroy.0 comp-c-catman .cat +#./usr/share/man/cat3/pthread_rwlockattr_getpshared.0 comp-c-catman .cat +#./usr/share/man/cat3/pthread_rwlockattr_setpshared.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_rwlockattr_init.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_schedparam.0 comp-c-catman .cat ./usr/share/man/cat3/pthread_self.0 comp-c-catman .cat @@ -15529,6 +15545,8 @@ ./usr/share/man/html3/pthread_barrier_wait.html comp-c-htmlman html ./usr/share/man/html3/pthread_barrierattr.html comp-c-htmlman html ./usr/share/man/html3/pthread_barrierattr_destroy.html comp-c-htmlman html +#./usr/share/man/html3/pthread_barrierattr_getpshared.html comp-c-htmlman html +#./usr/share/man/html3/pthread_barrierattr_setpshared.html comp-c-htmlman html ./usr/share/man/html3/pthread_barrierattr_init.html comp-c-htmlman html ./usr/share/man/html3/pthread_cancel.html comp-c-htmlman html ./usr/share/man/html3/pthread_cleanup_pop.html comp-c-htmlman html @@ -15542,8 +15560,11 @@ ./usr/share/man/html3/pthread_cond_wait.html comp-c-htmlman html ./usr/share/man/html3/pthread_condattr.html comp-c-htmlman html ./usr/share/man/html3/pthread_condattr_destroy.html comp-c-htmlman html +#./usr/share/man/html3/pthread_condattr_getpshared.html comp-c-htmlman html +#./usr/share/man/html3/pthread_condattr_setpshared.html comp-c-htmlman html ./usr/share/man/html3/pthread_condattr_init.html comp-c-htmlman html ./usr/share/man/html3/pthread_condattr_setclock.html comp-c-htmlman html +./usr/share/man/html3/pthread_condattr_getclock.html comp-c-htmlman html ./usr/share/man/html3/pthread_create.html comp-c-htmlman html ./usr/share/man/html3/pthread_curcpu_np.html comp-c-htmlman html ./usr/share/man/html3/pthread_detach.html comp-c-htmlman html @@ -15565,11 +15586,20 @@ ./usr/share/man/html3/pthread_mutex_lock.html comp-c-htmlman html ./usr/share/man/html3/pthread_mutex_trylock.html comp-c-htmlman html ./usr/share/man/html3/pthread_mutex_unlock.html comp-c-htmlman html +./usr/share/man/html3/pthread_mutex_timedlock.html comp-c-htmlman html +./usr/share/man/html3/pthread_mutex_getprioceiling.html comp-c-htmlman html +./usr/share/man/html3/pthread_mutex_setprioceiling.html comp-c-htmlman html ./usr/share/man/html3/pthread_mutexattr.html comp-c-htmlman html ./usr/share/man/html3/pthread_mutexattr_destroy.html comp-c-htmlman html +#./usr/share/man/html3/pthread_mutexattr_getpshared.html comp-c-htmlman html +#./usr/share/man/html3/pthread_mutexattr_setpshared.html comp-c-htmlman html ./usr/share/man/html3/pthread_mutexattr_gettype.html comp-c-htmlman html ./usr/share/man/html3/pthread_mutexattr_init.html comp-c-htmlman html ./usr/share/man/html3/pthread_mutexattr_settype.html comp-c-htmlman html +./usr/share/man/html3/pthread_mutexattr_getprotocol.html comp-c-htmlman html +./usr/share/man/html3/pthread_mutexattr_setprotocol.html comp-c-htmlman html +./usr/share/man/html3/pthread_mutexattr_getprioceiling.html comp-c-htmlman html +./usr/share/man/html3/pthread_mutexattr_setprioceiling.html comp-c-htmlman html ./usr/share/man/html3/pthread_once.html comp-c-htmlman html ./usr/share/man/html3/pthread_resume_np.html comp-c-htmlman html ./usr/share/man/html3/pthread_rwlock.html comp-c-htmlman html @@ -15584,6 +15614,8 @@ ./usr/share/man/html3/pthread_rwlock_wrlock.html comp-c-htmlman html ./usr/share/man/html3/pthread_rwlockattr.html comp-c-htmlman html ./usr/share/man/html3/pthread_rwlockattr_destroy.html comp-c-htmlman html +#./usr/share/man/html3/pthread_rwlockattr_getpshared.html comp-c-htmlman html +#./usr/share/man/html3/pthread_rwlockattr_setpshared.html comp-c-htmlman html ./usr/share/man/html3/pthread_rwlockattr_init.html comp-c-htmlman html ./usr/share/man/html3/pthread_schedparam.html comp-c-htmlman html ./usr/share/man/html3/pthread_self.html comp-c-htmlman html @@ -22694,6 +22726,8 @@ ./usr/share/man/man3/pthread_barrier_wait.3 comp-c-man .man ./usr/share/man/man3/pthread_barrierattr.3 comp-c-man .man ./usr/share/man/man3/pthread_barrierattr_destroy.3 comp-c-man .man +#./usr/share/man/man3/pthread_barrierattr_getpshared.3 comp-c-man .man +#./usr/share/man/man3/pthread_barrierattr_setpshared.3 comp-c-man .man ./usr/share/man/man3/pthread_barrierattr_init.3 comp-c-man .man ./usr/share/man/man3/pthread_cancel.3 comp-c-man .man ./usr/share/man/man3/pthread_cleanup_pop.3 comp-c-man .man @@ -22707,8 +22741,11 @@ ./usr/share/man/man3/pthread_cond_wait.3 comp-c-man .man ./usr/share/man/man3/pthread_condattr.3 comp-c-man .man ./usr/share/man/man3/pthread_condattr_destroy.3 comp-c-man .man +#./usr/share/man/man3/pthread_condattr_getpshared.3 comp-c-man .man +#./usr/share/man/man3/pthread_condattr_setpshared.3 comp-c-man .man ./usr/share/man/man3/pthread_condattr_init.3 comp-c-man .man ./usr/share/man/man3/pthread_condattr_setclock.3 comp-c-man .man +./usr/share/man/man3/pthread_condattr_getclock.3 comp-c-man .man ./usr/share/man/man3/pthread_create.3 comp-c-man .man ./usr/share/man/man3/pthread_curcpu_np.3 comp-c-man .man ./usr/share/man/man3/pthread_detach.3 comp-c-man .man @@ -22730,11 +22767,20 @@ ./usr/share/man/man3/pthread_mutex_lock.3 comp-c-man .man ./usr/share/man/man3/pthread_mutex_trylock.3 comp-c-man .man ./usr/share/man/man3/pthread_mutex_unlock.3 comp-c-man .man +./usr/share/man/man3/pthread_mutex_timedlock.3 comp-c-man .man +./usr/share/man/man3/pthread_mutex_getprioceiling.3 comp-c-man .man +./usr/share/man/man3/pthread_mutex_setprioceiling.3 comp-c-man .man ./usr/share/man/man3/pthread_mutexattr.3 comp-c-man .man ./usr/share/man/man3/pthread_mutexattr_destroy.3 comp-c-man .man +#./usr/share/man/man3/pthread_mutexattr_getpshared.3 comp-c-man .man +#./usr/share/man/man3/pthread_mutexattr_setpshared.3 comp-c-man .man ./usr/share/man/man3/pthread_mutexattr_gettype.3 comp-c-man .man ./usr/share/man/man3/pthread_mutexattr_init.3 comp-c-man .man ./usr/share/man/man3/pthread_mutexattr_settype.3 comp-c-man .man +./usr/share/man/man3/pthread_mutexattr_getprotocol.3 comp-c-man .man +./usr/share/man/man3/pthread_mutexattr_setprotocol.3 comp-c-man .man +./usr/share/man/man3/pthread_mutexattr_getprioceiling.3 comp-c-man .man +./usr/share/man/man3/pthread_mutexattr_setprioceiling.3 comp-c-man .man ./usr/share/man/man3/pthread_once.3 comp-c-man .man ./usr/share/man/man3/pthread_resume_np.3 comp-c-man .man ./usr/share/man/man3/pthread_rwlock.3 comp-c-man .man @@ -22749,6 +22795,8 @@ ./usr/share/man/man3/pthread_rwlock_wrlock.3 comp-c-man .man ./usr/share/man/man3/pthread_rwlockattr.3 comp-c-man .man ./usr/share/man/man3/pthread_rwlockattr_destroy.3 comp-c-man .man +#./usr/share/man/man3/pthread_rwlockattr_getpshared.3 comp-c-man .man +#./usr/share/man/man3/pthread_rwlockattr_setpshared.3 comp-c-man .man ./usr/share/man/man3/pthread_rwlockattr_init.3 comp-c-man .man ./usr/share/man/man3/pthread_schedparam.3 comp-c-man .man ./usr/share/man/man3/pthread_self.3 comp-c-man .man Index: lib/libc/gen/sysconf.c =================================================================== RCS file: /cvsroot/src/lib/libc/gen/sysconf.c,v retrieving revision 1.39 diff -u -u -r1.39 sysconf.c --- lib/libc/gen/sysconf.c 10 Jun 2016 23:29:20 -0000 1.39 +++ lib/libc/gen/sysconf.c 14 Jun 2016 22:55:23 -0000 @@ -411,9 +411,10 @@ return _POSIX_THREAD_ATTR_STACKSIZE; case _SC_THREAD_SAFE_FUNCTIONS: return _POSIX_THREAD_SAFE_FUNCTIONS; + case _SC_THREAD_PRIO_PROTECT: + return _POSIX_THREAD_PRIO_PROTECT; case _SC_THREAD_PRIORITY_SCHEDULING: case _SC_THREAD_PRIO_INHERIT: - case _SC_THREAD_PRIO_PROTECT: case _SC_THREAD_PROCESS_SHARED: return -1; case _SC_TTY_NAME_MAX: Index: lib/libc/sys/Makefile.inc =================================================================== RCS file: /cvsroot/src/lib/libc/sys/Makefile.inc,v retrieving revision 1.230 diff -u -u -r1.230 Makefile.inc --- lib/libc/sys/Makefile.inc 23 Apr 2016 23:11:31 -0000 1.230 +++ lib/libc/sys/Makefile.inc 14 Jun 2016 22:55:23 -0000 @@ -173,7 +173,7 @@ msgrcv.S msgsnd.S __msync13.S __nanosleep50.S open.S poll.S \ __pollts50.S __pselect50.S read.S readlink.S \ readv.S _sched_setparam.S _sched_getparam.S _sched_setaffinity.S \ - _sched_getaffinity.S sched_yield.S \ + _sched_getaffinity.S sched_yield.S _sched_protect.S \ __select50.S setcontext.S __sigprocmask14.S __sigsuspend14.S sysarch.S \ __wait450.S wait6.S write.S writev.S Index: lib/libpthread/Makefile =================================================================== RCS file: /cvsroot/src/lib/libpthread/Makefile,v retrieving revision 1.86 diff -u -u -r1.86 Makefile --- lib/libpthread/Makefile 23 Apr 2016 23:12:19 -0000 1.86 +++ lib/libpthread/Makefile 14 Jun 2016 22:55:23 -0000 @@ -177,6 +177,8 @@ MLINKS+= pthread_barrierattr.3 pthread_barrierattr_init.3 MLINKS+= pthread_barrierattr.3 pthread_barrierattr_destroy.3 +#MLINKS+= pthread_barrierattr.3 pthread_barrierattr_getpshared.3 +#MLINKS+= pthread_barrierattr.3 pthread_barrierattr_setpshared.3 MLINKS+= pthread_cond.3 pthread_cond_init.3 MLINKS+= pthread_cond.3 pthread_cond_destroy.3 @@ -188,6 +190,9 @@ MLINKS+= pthread_condattr.3 pthread_condattr_init.3 MLINKS+= pthread_condattr.3 pthread_condattr_destroy.3 MLINKS+= pthread_condattr.3 pthread_condattr_setclock.3 +MLINKS+= pthread_condattr.3 pthread_condattr_getclock.3 +#MLINKS+= pthread_condattr.3 pthread_condattr_getpshared.3 +#MLINKS+= pthread_condattr.3 pthread_condattr_setpshared.3 MLINKS+= pthread_getname_np.3 pthread_setname_np.3 MLINKS+= pthread_getspecific.3 pthread_setspecific.3 @@ -198,11 +203,20 @@ MLINKS+= pthread_mutex.3 pthread_mutex_lock.3 MLINKS+= pthread_mutex.3 pthread_mutex_trylock.3 MLINKS+= pthread_mutex.3 pthread_mutex_unlock.3 +MLINKS+= pthread_mutex.3 pthread_mutex_timedlock.3 +MLINKS+= pthread_mutex.3 pthread_mutex_getprioceiling.3 +MLINKS+= pthread_mutex.3 pthread_mutex_setprioceiling.3 MLINKS+= pthread_mutexattr.3 pthread_mutexattr_init.3 MLINKS+= pthread_mutexattr.3 pthread_mutexattr_destroy.3 +#MLINKS+= pthread_mutexattr.3 pthread_mutexattr_getpshared.3 +#MLINKS+= pthread_mutexattr.3 pthread_mutexattr_setpshared.3 MLINKS+= pthread_mutexattr.3 pthread_mutexattr_settype.3 MLINKS+= pthread_mutexattr.3 pthread_mutexattr_gettype.3 +MLINKS+= pthread_mutexattr.3 pthread_mutexattr_getprotocol.3 +MLINKS+= pthread_mutexattr.3 pthread_mutexattr_setprotocol.3 +MLINKS+= pthread_mutexattr.3 pthread_mutexattr_getprioceiling.3 +MLINKS+= pthread_mutexattr.3 pthread_mutexattr_setprioceiling.3 MLINKS+= pthread_rwlock.3 pthread_rwlock_init.3 MLINKS+= pthread_rwlock.3 pthread_rwlock_destroy.3 @@ -217,6 +231,8 @@ MLINKS+= pthread_rwlockattr.3 pthread_rwlockattr_init.3 MLINKS+= pthread_rwlockattr.3 pthread_rwlockattr_destroy.3 +#MLINKS+= pthread_rwlockattr.3 pthread_rwlockattr_getpshared.3 +#MLINKS+= pthread_rwlockattr.3 pthread_rwlockattr_setpshared.3 MLINKS+= pthread_spin.3 pthread_spin_init.3 MLINKS+= pthread_spin.3 pthread_spin_destroy.3 Index: lib/libpthread/pthread.h =================================================================== RCS file: /cvsroot/src/lib/libpthread/pthread.h,v retrieving revision 1.36 diff -u -u -r1.36 pthread.h --- lib/libpthread/pthread.h 23 Apr 2016 23:12:19 -0000 1.36 +++ lib/libpthread/pthread.h 14 Jun 2016 22:55:23 -0000 @@ -94,12 +94,30 @@ int pthread_mutex_lock(pthread_mutex_t *); int pthread_mutex_trylock(pthread_mutex_t *); int pthread_mutex_unlock(pthread_mutex_t *); +int pthread_mutex_timedlock(pthread_mutex_t *, + const struct timespec * __restrict); +int pthread_mutex_getprioceiling(const pthread_mutex_t * __restrict, + int * __restrict); +int pthread_mutex_setprioceiling(pthread_mutex_t * __restrict, int, + int * __restrict); int pthread_mutexattr_init(pthread_mutexattr_t *); int pthread_mutexattr_destroy(pthread_mutexattr_t *); +#ifdef _PTHREAD_PSHARED +int pthread_mutexattr_getpshared(const pthread_mutexattr_t * __restrict, + int * __restrict); +int pthread_mutexattr_setpshared(pthread_mutexattr_t *, int); +#endif int pthread_mutexattr_gettype(const pthread_mutexattr_t * __restrict, int * __restrict); int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int); - +int pthread_mutexattr_getprotocol(const pthread_mutexattr_t * __restrict, + int * __restrict); +int pthread_mutexattr_setprotocol(pthread_mutexattr_t*, + int); +int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t * __restrict, + int * __restrict); +int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *, + int); int pthread_cond_init(pthread_cond_t * __restrict, const pthread_condattr_t * __restrict); int pthread_cond_destroy(pthread_cond_t *); @@ -114,9 +132,15 @@ int pthread_condattr_init(pthread_condattr_t *); #if defined(_NETBSD_SOURCE) int pthread_condattr_setclock(pthread_condattr_t *, clockid_t); +int pthread_condattr_getclock(const pthread_condattr_t * __restrict, + clockid_t * __restrict); #endif int pthread_condattr_destroy(pthread_condattr_t *); - +#ifdef _PTHREAD_PSHARED +int pthread_condattr_getpshared(const pthread_condattr_t * __restrict, + int * __restrict); +int pthread_condattr_setpshared(pthread_condattr_t *, int); +#endif int pthread_once(pthread_once_t *, void (*)(void)); int pthread_key_create(pthread_key_t *, void (*)(void *)); @@ -178,14 +202,22 @@ int pthread_rwlock_unlock(pthread_rwlock_t *); int pthread_rwlockattr_init(pthread_rwlockattr_t *); int pthread_rwlockattr_destroy(pthread_rwlockattr_t *); - +#ifdef _PTHREAD_PSHARED +int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t * __restrict, + int * __restrict); +int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *, int); +#endif int pthread_barrier_init(pthread_barrier_t * __restrict, const pthread_barrierattr_t * __restrict, unsigned int); int pthread_barrier_wait(pthread_barrier_t *); int pthread_barrier_destroy(pthread_barrier_t *); int pthread_barrierattr_init(pthread_barrierattr_t *); int pthread_barrierattr_destroy(pthread_barrierattr_t *); - +#ifdef _PTHREAD_PSHARED +int pthread_barrierattr_getpshared(const pthread_barrierattr_t * __restrict, + int * __restrict); +int pthread_barrierattr_setpshared(pthread_barrierattr_t *, int); +#endif int pthread_getschedparam(pthread_t, int * __restrict, struct sched_param * __restrict); int pthread_setschedparam(pthread_t, int, const struct sched_param *); @@ -251,6 +283,10 @@ #define PTHREAD_MUTEX_RECURSIVE 2 #define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL +#define PTHREAD_PRIO_NONE 0 +#define PTHREAD_PRIO_INHERIT 1 +#define PTHREAD_PRIO_PROTECT 2 + #define PTHREAD_COND_INITIALIZER _PTHREAD_COND_INITIALIZER #define PTHREAD_MUTEX_INITIALIZER _PTHREAD_MUTEX_INITIALIZER #define PTHREAD_ONCE_INIT _PTHREAD_ONCE_INIT Index: lib/libpthread/pthread_barrier.3 =================================================================== RCS file: /cvsroot/src/lib/libpthread/pthread_barrier.3,v retrieving revision 1.4 diff -u -u -r1.4 pthread_barrier.3 --- lib/libpthread/pthread_barrier.3 9 Jul 2010 18:07:20 -0000 1.4 +++ lib/libpthread/pthread_barrier.3 14 Jun 2016 22:55:23 -0000 @@ -25,7 +25,8 @@ .\" POSSIBILITY OF SUCH DAMAGE. .\" .\" ---------------------------------------------------------------------------- -.Dd July 8, 2010 + +.Dd June 12, 2016 .Dt PTHREAD_BARRIER 3 .Os .Sh NAME @@ -42,7 +43,14 @@ .Fn pthread_barrier_destroy "pthread_barrier_t *barrier" .Ft int .Fn pthread_barrier_wait "pthread_barrier_t *barrier" +.Ft int +.Fn pthread_barrierattr_getpshared "const pthread_barrierattr_t * __restrict attr" \ +"int * __restrict pshared" +.Ft int +.Fn pthread_barrierattr_setpshared "pthread_barrierattr_t * attr" \ +"int pshared" .\" ---------------------------------------------------------------------------- + .Sh DESCRIPTION The .Fn pthread_barrier_init @@ -87,7 +95,18 @@ all threads will wake up, return from their respective .Fn pthread_barrier_wait calls and continue execution. +.Pp +.\" ----- +The +.Fn pthread_barrierattr_getpshared +function shall obtain the value of the process-shared attribute from the +attributes object referenced by attr. +The +.Fn pthread_barrierattr_setpshared +function shall set the process-shared attribute in an initialized attributes +object referenced by attr. .\" ---------------------------------------------------------------------------- + .Sh RETURN VALUES If successful, .Fn pthread_barrier_init @@ -113,7 +132,23 @@ and atomicity of any updates to shared data with respect to the other threads participating in the barrier. In the case of failure, an error value will be returned. +.Pp +.\" ----- +If successful, +.Fn pthread_barrierattr_getpshared +shall return zero and store the value of the process-shared attribute of attr +into the object referenced by the +.Fa pshared +parameter. +Otherwise, an error number shall be returned to indicate the error. +.Pp +.\" ----- +If successful, +.Fn pthread_barrierattr_setpshared +shall return zero; +Otherwise, an error number shall be returned to indicate the error. .\" ---------------------------------------------------------------------------- + .Sh ERRORS The .Fn pthread_barrier_init @@ -152,6 +187,20 @@ .Fa barrier is invalid. .El +.Pp +.\" ----- +The +.Fn pthread_barrierattr_setpshared +function and +the +.Fn pthread_barrierattr_getpshared +function may fail if: +.Bl -tag -width Er +.It Bq Er EINVAL +The value specified by +.Fa attr +is invalid. + .\" --------------------------------------------------------------------------- .Sh SEE ALSO .Xr pthread_barrierattr 3 , Index: lib/libpthread/pthread_barrier.c =================================================================== RCS file: /cvsroot/src/lib/libpthread/pthread_barrier.c,v retrieving revision 1.19 diff -u -u -r1.19 pthread_barrier.c --- lib/libpthread/pthread_barrier.c 29 Jan 2009 21:19:35 -0000 1.19 +++ lib/libpthread/pthread_barrier.c 14 Jun 2016 22:55:23 -0000 @@ -117,6 +117,29 @@ return 0; } +#ifdef _PTHREAD_PSHARED +int +pthread_barrierattr_getpshared(const pthread_barrierattr_t * __restrict attr, + int * __restrict pshared) +{ + + *pshared = PTHREAD_PROCESS_PRIVATE; + return 0; +} + +int +pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared) +{ + + switch(pshared) { + case PTHREAD_PROCESS_PRIVATE: + return 0; + case PTHREAD_PROCESS_SHARED: + return ENOSYS; + } + return EINVAL; +} +#endif int pthread_barrierattr_init(pthread_barrierattr_t *attr) Index: lib/libpthread/pthread_barrierattr.3 =================================================================== RCS file: /cvsroot/src/lib/libpthread/pthread_barrierattr.3,v retrieving revision 1.9 diff -u -u -r1.9 pthread_barrierattr.3 --- lib/libpthread/pthread_barrierattr.3 9 Jul 2010 10:45:36 -0000 1.9 +++ lib/libpthread/pthread_barrierattr.3 14 Jun 2016 22:55:23 -0000 @@ -22,12 +22,14 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd July 9, 2010 +.Dd June 12, 2016 .Dt PTHREAD_BARRIERATTR 3 .Os .Sh NAME .Nm pthread_barrierattr_init , .Nm pthread_barrierattr_destroy , +.Nm pthread_barrierattr_getpshared , +.Nm pthread_barrierattr_setpshared .Nd barrier attribute operations .Sh LIBRARY .Lb libpthread @@ -37,6 +39,10 @@ .Fn pthread_barrierattr_init "pthread_barrierattr_t *attr" .Ft int .Fn pthread_barrierattr_destroy "pthread_barrierattr_t *attr" +.Ft int +.Fn pthread_barrierattr_getpshared "const pthread_barrierattr_t * __restrict attr" "int * __restrict pshared" +.Ft int +.Fn pthread_barrierattr_setpshared "pthread_barrierattr_t * attr" "int pshared" .Sh DESCRIPTION Barrier attributes are used to specify parameters to be used with .Xr pthread_barrier_init 3 . @@ -54,6 +60,19 @@ .Fn pthread_barrierattr_destroy function destroys .Fa attr . +.Pp +The +.Fn pthread_barrierattr_getpshared +function shall obtain the value of the process-shared attribute +from the attributes object referenced by +.Fa attr . +.Pp +The +.Fn pthread_barrierattr_setpshared +function shall set the process-shared attribute in an initialized +attributes object referenced by +.Fa attr . + .Sh RETURN VALUES If successful, these functions return 0. Otherwise, an error number is returned to indicate the error. @@ -70,6 +89,18 @@ .Fa attr is invalid. .El +.Pp +The +.Fn pthread_barrierattr_getpshared +and +.Fn pthread_barrierattr_setpshared +may fail if: +.Bl -tag -width Er +.It Bq Er EINVAL +The value specified by +.Fa attr +is invalid. +.El .Sh SEE ALSO .Xr pthread_barrier_init 3 .Sh STANDARDS Index: lib/libpthread/pthread_cond.c =================================================================== RCS file: /cvsroot/src/lib/libpthread/pthread_cond.c,v retrieving revision 1.63 diff -u -u -r1.63 pthread_cond.c --- lib/libpthread/pthread_cond.c 31 Jan 2014 20:44:01 -0000 1.63 +++ lib/libpthread/pthread_cond.c 14 Jun 2016 22:55:23 -0000 @@ -370,6 +370,16 @@ } int +pthread_condattr_getclock(const pthread_condattr_t *__restrict attr, + clockid_t *__restrict clock_id) +{ + if (attr == NULL || attr->ptca_private == NULL) + return EINVAL; + *clock_id = *(clockid_t *)attr->ptca_private; + return 0; +} + +int pthread_condattr_destroy(pthread_condattr_t *attr) { @@ -382,6 +392,30 @@ return 0; } +#ifdef _PTHREAD_PSHARED +int +pthread_condattr_getpshared(const pthread_condattr_t * __restrict attr, + int * __restrict pshared) +{ + + *pshared = PTHREAD_PROCESS_PRIVATE; + return 0; +} + +int +pthread_condattr_setpshared(pthread_condattr_t *attr, int pshared) +{ + + switch(pshared) { + case PTHREAD_PROCESS_PRIVATE: + return 0; + case PTHREAD_PROCESS_SHARED: + return ENOSYS; + } + return EINVAL; +} +#endif + /* Utility routine to hang out for a while if threads haven't started yet. */ static int pthread_cond_wait_nothread(pthread_t self, pthread_mutex_t *mutex, Index: lib/libpthread/pthread_condattr.3 =================================================================== RCS file: /cvsroot/src/lib/libpthread/pthread_condattr.3,v retrieving revision 1.9 diff -u -u -r1.9 pthread_condattr.3 --- lib/libpthread/pthread_condattr.3 3 Nov 2012 09:20:36 -0000 1.9 +++ lib/libpthread/pthread_condattr.3 14 Jun 2016 22:55:23 -0000 @@ -50,11 +50,15 @@ .\" EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" $FreeBSD: src/lib/libpthread/man/pthread_condattr.3,v 1.10 2002/09/16 19:29:28 mini Exp $ -.Dd November 2, 2012 +.Dd June 12, 2016 .Dt PTHREAD_CONDATTR 3 .Os .Sh NAME -.Nm pthread_condattr_init +.Nm pthread_condattr_init, +.Nm pthread_condattr_getpshared, +.Nm pthread_condattr_setpshared, +.Nm pthread_condattr_getclock, +.Nm pthread_condattr_setclock .Nd condition attribute operations .Sh LIBRARY .Lb libpthread @@ -63,9 +67,16 @@ .Ft int .Fn pthread_condattr_init "pthread_condattr_t *attr" .Ft int +.Fn pthread_condattr_getclock "const pthread_condattr_t *__restrict attr" \ +"clockid_t * __restrict clock_id" +.Ft int .Fn pthread_condattr_setclock "pthread_condattr_t *attr" "clockid_t clock" .Ft int .Fn pthread_condattr_destroy "pthread_condattr_t *attr" +.Ft int +.Fn pthread_condattr_getpshared "const pthread_condattr_t * __restrict attr" "int * __restrict pshared" +.Ft int +.Fn pshared_condattr_setpshared "pthread_condattr_t *attr" "int pshared" .Sh DESCRIPTION Condition attribute objects are used to specify parameters to the .Xr pthread_cond_init 3 @@ -77,6 +88,12 @@ .Fn pthread_condattr_destroy function destroys a condition attribute object. The +.Fn pthread_condattr_getclock +function shall obtain the value of the +.Fa clock +attributes object referenced by +.Fa attr. +The .Fn pthread_condattr_setclock function sets the system clock to be used for time comparisons to the one specified in @@ -86,6 +103,16 @@ and .Dv CLOCK_REALTIME (the default). +The +.Fn pthread_condattr_getpshared +function shall obtain the value of the process-shared attribute from the +attributes object referenced by +.Fa attr. +The +.Fn pthread_condattr_setpshared +function shall set the process-shared attribute in an initialized attributes +object referenced by +.Fa attr. .Sh RETURN VALUES If successful, these functions return 0. Otherwise, an error number is returned to indicate the error. @@ -102,6 +129,28 @@ .Fa attr is invalid. .El +.Pp +The +.Fn pthread_condattr_getclock +and +.Fn pthread_condattr_setclock +may fail if: +.Bl -tag -width Er +.It Bq Er EINVAL +The value specified by +.Fa attr is invalid. +.El +.Pp +The +.Fn pthread_condattr_getpshared +and +.Fn pthread_condattr_setpshared +may fail if: +.Bl -tag -width Er +.It Bq Er EINVAL +The value specified by +.Fa attr +is invalid. .Sh SEE ALSO .Xr pthread_cond_init 3 .Sh STANDARDS Index: lib/libpthread/pthread_mutex.3 =================================================================== RCS file: /cvsroot/src/lib/libpthread/pthread_mutex.3,v retrieving revision 1.6 diff -u -u -r1.6 pthread_mutex.3 --- lib/libpthread/pthread_mutex.3 12 Nov 2012 23:11:05 -0000 1.6 +++ lib/libpthread/pthread_mutex.3 14 Jun 2016 22:55:23 -0000 @@ -52,7 +52,7 @@ .\" SUCH DAMAGE. .\" .\" ---------------------------------------------------------------------------- -.Dd July 8, 2010 +.Dd June 12, 2016 .Dt PTHREAD_MUTEX 3 .Os .Sh NAME @@ -75,6 +75,14 @@ .Fn pthread_mutex_trylock "pthread_mutex_t *mutex" .Ft int .Fn pthread_mutex_unlock "pthread_mutex_t *mutex" +.Ft int +.Fn pthread_mutex_timedlock "pthread_mutex_t * mutex" "const struct timespec *__restrict timeout" +.Ft int +.Fn pthread_mutex_getprioceiling "const pthread_mutex_t * __restrict mutex" "int * __restrict prioceiling" +.Ft int +.Fn pthread_mutex_setprioceiling "pthread_mutex_t * __restrict mutex" \ +"int prioceiling" "int * __restrict old_ceiling" + .\" ---------------------------------------------------------------------------- .Sh DESCRIPTION The @@ -135,7 +143,45 @@ undefined behavior follows if a thread tries to unlock a mutex that has not been locked by it, or if a thread tries to release a mutex that is already unlocked. +.Pp +.\" ----- +The +.Fn pthread_mutex_timedlock +function shall lock the mutex object referenced by +.Fa mutex. +If the mutex is already locked, the calling thread shall block until +the mutex becomes available in the +.Fn pthread_mutex_lock +function. +If the mutex cannot be locked without waiting for another thread to +unlock the mutex, this wait shall be terminated when the specified timeout +expires. +The timeout shall expire when the absolute time specified by +.Fa timeout +passes, as measured by the clock on which timeouts are based. +.Pp +.\" ----- +The +.Fn pthread_mutex_getprioceiling +function shall return the current priority ceiling of the mutex. +.Pp +.\" ----- +The +.Fn pthread_mutex_setprioceiling +function shall either lock the mutex if it is unlocked, or block until +it can sucessfully lock the mutex, then it shall change the mutex's priority +ceiling and release the mutex. +When the change is successful, the previous value of the priority ceiling +shall be returned +in +.Fa old_ceiling. +The process of locking the mutex need not adhere to the priority +protect protocol. +If +.Fn pthread_mutex_setprioceiling +function fails, the mutex priority ceiling shall not be changed. .\" ---------------------------------------------------------------------------- + .Sh RETURN VALUES Upon success all described functions return zero. Otherwise, an error number will be returned to indicate the error. @@ -203,7 +249,45 @@ The current thread does not hold a lock on .Fa mutex . .El +.Pp +.\" ----- +.Fn pthread_mutex_timedlock +may fail if: +.Bl -tag -width Er +.It Bq Er EINVAL +The mutex was created with the protocol attribute having the value +.Dv PTHREAD_PRIO_PROTECT +and the calling thread's priority is higher than +the mutex current priority ceiling. +.It Bq Er EINVAL +The process or thread would have blocked, and the +.Fa timeout +parameter specified a nanoseconds field value less than zero or greater +than or equal to 1000 million. +.It Bq Er ETIMEDOUT +The mutex could not be locked before the specified timeout expired. +.El +.Pp +.\" ----- +The +.Fn pthread_mutex_getprioceiling +and +.Fn pthread_mutex_setprioceiling +functions may fail if: +.Bl -tag -width Er +.It Bq Er EINVAL +The priority requested by +.Fa prioceiling +is out of range. +.It Bq Er EINVAL +The value specified by +.Fa mutex +does not refer to a currently existing mutex. +.It Bq Er EPERM +The caller does not have the privilege to perform the operation. + .\" ---------------------------------------------------------------------------- + .Sh SEE ALSO .Xr pthread 3 , .Xr pthread_barrier 3 , Index: lib/libpthread/pthread_mutex.c =================================================================== RCS file: /cvsroot/src/lib/libpthread/pthread_mutex.c,v retrieving revision 1.59 diff -u -u -r1.59 pthread_mutex.c --- lib/libpthread/pthread_mutex.c 3 Feb 2014 15:51:01 -0000 1.59 +++ lib/libpthread/pthread_mutex.c 14 Jun 2016 22:55:23 -0000 @@ -51,6 +51,7 @@ #include #include +#include #include #include @@ -67,12 +68,27 @@ #define MUTEX_WAITERS_BIT ((uintptr_t)0x01) #define MUTEX_RECURSIVE_BIT ((uintptr_t)0x02) #define MUTEX_DEFERRED_BIT ((uintptr_t)0x04) -#define MUTEX_THREAD ((uintptr_t)-16L) +#define MUTEX_PROTECT_BIT ((uintptr_t)0x08) +#define MUTEX_THREAD ((uintptr_t)~0x0f) #define MUTEX_HAS_WAITERS(x) ((uintptr_t)(x) & MUTEX_WAITERS_BIT) #define MUTEX_RECURSIVE(x) ((uintptr_t)(x) & MUTEX_RECURSIVE_BIT) +#define MUTEX_PROTECT(x) ((uintptr_t)(x) & MUTEX_PROTECT_BIT) #define MUTEX_OWNER(x) ((uintptr_t)(x) & MUTEX_THREAD) +#define MUTEX_GET_TYPE(x) \ + ((int)(((uintptr_t)(x) & 0x000000ff) >> 0)) +#define MUTEX_SET_TYPE(x, t) \ + (x) = (void *)(((uintptr_t)(x) & ~0x000000ff) | ((t) << 0)) +#define MUTEX_GET_PROTOCOL(x) \ + ((int)(((uintptr_t)(x) & 0x0000ff00) >> 8)) +#define MUTEX_SET_PROTOCOL(x, p) \ + (x) = (void *)(((uintptr_t)(x) & ~0x0000ff00) | ((p) << 8)) +#define MUTEX_GET_CEILING(x) \ + ((int)(((uintptr_t)(x) & 0x00ff0000) >> 16)) +#define MUTEX_SET_CEILING(x, c) \ + (x) = (void *)(((uintptr_t)(x) & ~0x00ff0000) | ((c) << 16)) + #if __GNUC_PREREQ__(3, 0) #define NOINLINE __attribute ((noinline)) #else @@ -80,7 +96,8 @@ #endif static void pthread__mutex_wakeup(pthread_t, pthread_mutex_t *); -static int pthread__mutex_lock_slow(pthread_mutex_t *); +static int pthread__mutex_lock_slow(pthread_mutex_t *, + const struct timespec *); static int pthread__mutex_unlock_slow(pthread_mutex_t *); static void pthread__mutex_pause(void); @@ -103,16 +120,22 @@ int pthread_mutex_init(pthread_mutex_t *ptm, const pthread_mutexattr_t *attr) { - intptr_t type; + uintptr_t type, proto, val, ceil; if (__predict_false(__uselibcstub)) return __libc_mutex_init_stub(ptm, attr); - if (attr == NULL) + if (attr == NULL) { type = PTHREAD_MUTEX_NORMAL; - else - type = (intptr_t)attr->ptma_private; + proto = PTHREAD_PRIO_NONE; + ceil = 0; + } else { + val = (uintptr_t)attr->ptma_private; + type = MUTEX_GET_TYPE(val); + proto = MUTEX_GET_PROTOCOL(val); + ceil = MUTEX_GET_CEILING(val); + } switch (type) { case PTHREAD_MUTEX_ERRORCHECK: __cpu_simple_lock_set(&ptm->ptm_errorcheck); @@ -127,10 +150,18 @@ ptm->ptm_owner = NULL; break; } + switch (proto) { + case PTHREAD_PRIO_PROTECT: + val = (uintptr_t)ptm->ptm_owner; + val |= MUTEX_PROTECT_BIT; + ptm->ptm_owner = (void *)val; + break; + } ptm->ptm_magic = _PT_MUTEX_MAGIC; ptm->ptm_waiters = NULL; ptm->ptm_recursed = 0; + ptm->ptm_ceiling = (unsigned char)ceil; return 0; } @@ -168,7 +199,24 @@ #endif return 0; } - return pthread__mutex_lock_slow(ptm); + return pthread__mutex_lock_slow(ptm, NULL); +} + +int +pthread_mutex_timedlock(pthread_mutex_t* ptm, const struct timespec *ts) +{ + pthread_t self; + void *val; + + self = pthread__self(); + val = atomic_cas_ptr(&ptm->ptm_owner, NULL, self); + if (__predict_true(val == NULL)) { +#ifndef PTHREAD__ATOMIC_IS_MEMBAR + membar_enter(); +#endif + return 0; + } + return pthread__mutex_lock_slow(ptm, ts); } /* We want function call overhead. */ @@ -258,11 +306,12 @@ } NOINLINE static int -pthread__mutex_lock_slow(pthread_mutex_t *ptm) +pthread__mutex_lock_slow(pthread_mutex_t *ptm, const struct timespec *ts) { void *waiters, *new, *owner, *next; pthread_t self; int serrno; + int error; pthread__error(EINVAL, "Invalid mutex", ptm->ptm_magic == _PT_MUTEX_MAGIC); @@ -282,6 +331,10 @@ return EDEADLK; } + /* priority protect */ + if (MUTEX_PROTECT(owner) && _sched_protect(ptm->ptm_ceiling) == -1) { + return errno; + } serrno = errno; for (;; owner = ptm->ptm_owner) { /* Spin while the owner is running. */ @@ -339,12 +392,23 @@ */ while (self->pt_mutexwait) { self->pt_blocking++; - (void)_lwp_park(CLOCK_REALTIME, TIMER_ABSTIME, NULL, + error = _lwp_park(CLOCK_REALTIME, TIMER_ABSTIME, ts, self->pt_unpark, __UNVOLATILE(&ptm->ptm_waiters), __UNVOLATILE(&ptm->ptm_waiters)); self->pt_unpark = 0; self->pt_blocking--; membar_sync(); + if (__predict_true(error != -1)) { + continue; + } + if (errno == ETIMEDOUT && self->pt_mutexwait) { + /*Remove self from waiters list*/ + pthread__mutex_wakeup(self, ptm); + /*priority protect*/ + if (MUTEX_PROTECT(owner)) + (void)_sched_protect(-1); + return ETIMEDOUT; + } } } } @@ -460,6 +524,10 @@ */ if (new != owner) { owner = atomic_swap_ptr(&ptm->ptm_owner, new); + if (__predict_false(MUTEX_PROTECT(owner))) { + /* restore elevated priority */ + (void)_sched_protect(-1); + } if (MUTEX_HAS_WAITERS(owner) != 0) { pthread__mutex_wakeup(self, ptm); return 0; @@ -591,16 +659,18 @@ int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *typep) { + pthread__error(EINVAL, "Invalid mutex attribute", attr->ptma_magic == _PT_MUTEXATTR_MAGIC); - *typep = (int)(intptr_t)attr->ptma_private; + *typep = MUTEX_GET_TYPE(attr->ptma_private); return 0; } int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type) { + if (__predict_false(__uselibcstub)) return __libc_mutexattr_settype_stub(attr, type); @@ -611,13 +681,92 @@ case PTHREAD_MUTEX_NORMAL: case PTHREAD_MUTEX_ERRORCHECK: case PTHREAD_MUTEX_RECURSIVE: - attr->ptma_private = (void *)(intptr_t)type; + MUTEX_SET_TYPE(attr->ptma_private, type); + return 0; + default: + return EINVAL; + } +} + +int +pthread_mutexattr_getprotocol(const pthread_mutexattr_t *attr, int*proto) +{ + + pthread__error(EINVAL, "Invalid mutex attribute", + attr->ptma_magic == _PT_MUTEXATTR_MAGIC); + + *proto = MUTEX_GET_PROTOCOL(attr->ptma_private); + return 0; +} + +int +pthread_mutexattr_setprotocol(pthread_mutexattr_t* attr, int proto) +{ + + pthread__error(EINVAL, "Invalid mutex attribute", + attr->ptma_magic == _PT_MUTEXATTR_MAGIC); + + switch (proto) { + case PTHREAD_PRIO_NONE: + case PTHREAD_PRIO_PROTECT: + MUTEX_SET_PROTOCOL(attr->ptma_private, proto); return 0; + case PTHREAD_PRIO_INHERIT: + return ENOTSUP; default: return EINVAL; } } +int +pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *attr, int *ceil) +{ + + pthread__error(EINVAL, "Invalid mutex attribute", + attr->ptma_magic == _PT_MUTEXATTR_MAGIC); + + *ceil = MUTEX_GET_CEILING(attr->ptma_private); + return 0; +} + +int +pthread_mutexattr_setprioceiling(pthread_mutexattr_t *attr, int ceil) +{ + + pthread__error(EINVAL, "Invalid mutex attribute", + attr->ptma_magic == _PT_MUTEXATTR_MAGIC); + + if (ceil & ~0xff) + return EINVAL; + + MUTEX_SET_CEILING(attr->ptma_private, ceil); + return 0; +} + +#ifdef _PTHREAD_PSHARED +int +pthread_mutexattr_getpshared(const pthread_mutexattr_t * __restrict attr, + int * __restrict pshared) +{ + + *pshared = PTHREAD_PROCESS_PRIVATE; + return 0; +} + +int +pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared) +{ + + switch(pshared) { + case PTHREAD_PROCESS_PRIVATE: + return 0; + case PTHREAD_PROCESS_SHARED: + return ENOSYS; + } + return EINVAL; +} +#endif + /* * pthread__mutex_deferwake: try to defer unparking threads in self->pt_waiters * @@ -645,6 +794,28 @@ } int +pthread_mutex_getprioceiling(const pthread_mutex_t *ptm, int*ceil) +{ + *ceil = (unsigned int)ptm->ptm_ceiling; + return 0; +} + +int +pthread_mutex_setprioceiling(pthread_mutex_t *ptm, int ceil, int *old_ceil) +{ + int error; + + error = pthread_mutex_lock(ptm); + if (error == 0) { + *old_ceil = (unsigned int)ptm->ptm_ceiling; + /*check range*/ + ptm->ptm_ceiling = (unsigned char)ceil; + pthread_mutex_unlock(ptm); + } + return error; +} + +int _pthread_mutex_held_np(pthread_mutex_t *ptm) { Index: lib/libpthread/pthread_mutexattr.3 =================================================================== RCS file: /cvsroot/src/lib/libpthread/pthread_mutexattr.3,v retrieving revision 1.11 diff -u -u -r1.11 pthread_mutexattr.3 --- lib/libpthread/pthread_mutexattr.3 8 Jul 2010 22:46:34 -0000 1.11 +++ lib/libpthread/pthread_mutexattr.3 14 Jun 2016 22:55:23 -0000 @@ -50,18 +50,20 @@ .\" EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" $FreeBSD: src/lib/libpthread/man/pthread_mutexattr.3,v 1.8 2002/09/16 19:29:29 mini Exp $ -.Dd July 9, 2010 +.Dd June 12, 2016 .Dt PTHREAD_MUTEXATTR 3 .Os .Sh NAME .Nm pthread_mutexattr_init , .Nm pthread_mutexattr_destroy , -.\" .Nm pthread_mutexattr_setprioceiling , -.\" .Nm pthread_mutexattr_getprioceiling , -.\" .Nm pthread_mutexattr_setprotocol , -.\" .Nm pthread_mutexattr_getprotocol , +.Nm pthread_mutexattr_setprioceiling , +.Nm pthread_mutexattr_getprioceiling , +.Nm pthread_mutexattr_setprotocol , +.Nm pthread_mutexattr_getprotocol , .Nm pthread_mutexattr_settype , -.Nm pthread_mutexattr_gettype +.Nm pthread_mutexattr_gettype , +.Nm pthread_mutexattr_getpshared , +.Nm pthread_mutexattr_setpshared .Nd mutex attribute operations .Sh LIBRARY .Lb libpthread @@ -71,23 +73,29 @@ .Fn pthread_mutexattr_init "pthread_mutexattr_t *attr" .Ft int .Fn pthread_mutexattr_destroy "pthread_mutexattr_t *attr" -.\" .Ft int -.\" .Fn pthread_mutexattr_setprioceiling \ -.\" "pthread_mutexattr_t *attr" "int prioceiling" -.\" .Ft int -.\" .Fn pthread_mutexattr_getprioceiling \ -.\" "pthread_mutexattr_t *attr" "int *prioceiling" -.\" .Ft int -.\" .Fn pthread_mutexattr_setprotocol \ -.\" "pthread_mutexattr_t *attr" "int protocol" -.\" .Ft int -.\" .Fn pthread_mutexattr_getprotocol \ -.\" "pthread_mutexattr_t *attr" "int *protocol" +.Ft int +.Fn pthread_mutexattr_setprioceiling \ +"pthread_mutexattr_t *attr" "int prioceiling" +.Ft int +.Fn pthread_mutexattr_getprioceiling \ +"pthread_mutexattr_t *attr" "int *prioceiling" +.Ft int +.Fn pthread_mutexattr_setprotocol \ +"pthread_mutexattr_t *attr" "int protocol" +.Ft int +.Fn pthread_mutexattr_getprotocol \ +"pthread_mutexattr_t *attr" "int *protocol" .Ft int .Fn pthread_mutexattr_settype "pthread_mutexattr_t *attr" "int type" .Ft int .Fn pthread_mutexattr_gettype \ "pthread_mutexattr_t * restrict attr" "int * restrict type" +.Ft int +.Fn pthread_mutexattr_getpshared \ +"const pthread_mutexattr_t * __restrict attr" "int * __restrict pshared" +.Ft int +.Fn pthread_mutexattr_setpshared \ +"pthread_mutexattr_t * attr" "int pshared" .Sh DESCRIPTION Mutex attributes are used to specify parameters to .Fn pthread_mutex_init . @@ -172,6 +180,38 @@ .Fn pthread_mutexattr_gettype functions copy the type value of the attribute to the location pointed to by the second parameter. +.Pp +The +.Fn pthread_mutexattr_getpshared +function obtains the value of the process-shared attribute from +the attributes object referenced by +.Fa attr. +.Pp +The +.Fn pthread_mutexattr_setpshared +function is used to set the process-shared attribute in an initialised +attributes object referenced by +.Fa attr. +.Pp +The +.Fn pthread_mutexattr_getprotocol +and +.Fn pthread_mutexattr_setprotocol +functions shall get and set the protocol attribute of a mutex attributes +object pointed to by +.Fa attr +which was previously created by the function +.Fn pthread_mutexattr_init . +.Pp +The +.Fn pthread_mutexattr_getprioceiling +and +.Fn pthread_mutexattr_setprioceiling +functions, shall get and set the priority ceiling attribute of a mutex attributes +object pointed to by +.Fa attr +which was previously created by the function +.Fn pthread_mutexattr_init . .Sh RETURN VALUES If successful, these functions return 0. Otherwise, an error number is returned to indicate the error. @@ -201,44 +241,54 @@ and .Fn pthread_mutexattr_gettype functions. -.\" -.\" .Pp -.\" .Fn pthread_mutexattr_setprioceiling -.\" may fail if: -.\" .Bl -tag -width Er -.\" .It Bq Er EINVAL -.\" Invalid value for -.\" .Fa attr , -.\" or invalid value for -.\" .Fa prioceiling . -.\" .El -.\" .Pp -.\" .Fn pthread_mutexattr_getprioceiling -.\" may fail if: -.\" .Bl -tag -width Er -.\" .It Bq Er EINVAL -.\" Invalid value for -.\" .Fa attr . -.\" .El -.\" .Pp -.\" .Fn pthread_mutexattr_setprotocol -.\" may fail if: -.\" .Bl -tag -width Er -.\" .It Bq Er EINVAL -.\" Invalid value for -.\" .Fa attr , -.\" or invalid value for -.\" .Fa protocol . -.\" .El -.\" .Pp -.\" .Fn pthread_mutexattr_getprotocol -.\" may fail if: -.\" .Bl -tag -width Er -.\" .It Bq Er EINVAL -.\" Invalid value for -.\" .Fa attr . -.\" .El -.\" .Pp +.Pp +.Fn pthread_mutexattr_setprioceiling +may fail if: +.Bl -tag -width Er +.It Bq Er EINVAL +Invalid value for +.Fa attr , +or invalid value for +.Fa prioceiling . +.El +.Pp +.Fn pthread_mutexattr_getprioceiling +may fail if: +.Bl -tag -width Er +.It Bq Er EINVAL +Invalid value for +.Fa attr . +.El +.Pp +.Fn pthread_mutexattr_setprotocol +may fail if: +.Bl -tag -width Er +.It Bq Er EINVAL +Invalid value for +.Fa attr , +or invalid value for +.Fa protocol . +.El +.Pp +.Fn pthread_mutexattr_getprotocol +may fail if: +.Bl -tag -width Er +.It Bq Er EINVAL +Invalid value for +.Fa attr . +.El +.Pp +.El +.Pp +.Fn pthread_mutexattr_getpshared +and +.Fn pthread_mutexattr_setpshared +may fail if: +.Bl -tag -width Er +.It Bq Er EINVAL +the value specified by +.Fa attr +is invalid. .Sh SEE ALSO .Xr pthread_mutex_init 3 .Sh STANDARDS Index: lib/libpthread/pthread_rwlock.c =================================================================== RCS file: /cvsroot/src/lib/libpthread/pthread_rwlock.c,v retrieving revision 1.33 diff -u -u -r1.33 pthread_rwlock.c --- lib/libpthread/pthread_rwlock.c 21 Mar 2013 16:49:12 -0000 1.33 +++ lib/libpthread/pthread_rwlock.c 14 Jun 2016 22:55:23 -0000 @@ -639,6 +639,29 @@ ((uintptr_t)pthread__self() | RW_WRITE_LOCKED); } +#ifdef _PTHREAD_PSHARED +int +pthread_rwlockattr_getpshared(const pthread_rwlockattr_t * __restrict attr, + int * __restrict pshared) +{ + *pshared = PTHREAD_PROCESS_PRIVATE; + return 0; +} + +int +pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int pshared) +{ + + switch(pshared) { + case PTHREAD_PROCESS_PRIVATE: + return 0; + case PTHREAD_PROCESS_SHARED: + return ENOSYS; + } + return EINVAL; +} +#endif + int pthread_rwlockattr_init(pthread_rwlockattr_t *attr) { Index: lib/libpthread/pthread_rwlockattr.3 =================================================================== RCS file: /cvsroot/src/lib/libpthread/pthread_rwlockattr.3,v retrieving revision 1.8 diff -u -u -r1.8 pthread_rwlockattr.3 --- lib/libpthread/pthread_rwlockattr.3 9 Jul 2010 08:51:28 -0000 1.8 +++ lib/libpthread/pthread_rwlockattr.3 14 Jun 2016 22:55:23 -0000 @@ -48,13 +48,15 @@ .\" .\" $FreeBSD: src/lib/libpthread/man/pthread_rwlockattr_init.3,v 1.7 2002/09/16 19:29:29 mini Exp $ .\" -.Dd July 9, 2010 +.Dd June 12, 2016 .Dt PTHREAD_RWLOCKATTR 3 .Os .Sh NAME .Nm pthread_rwlockattr_init , -.Nm pthread_rwlockattr_destroy -.Nd initialize or destroy read/write lock attributes +.Nm pthread_rwlockattr_destroy , +.Nm pthread_rwlockattr_getpshared , +.Nm pthread_rwlockattr_setpshared +.Nd initialize, destroy or query read/write lock attributes .Sh LIBRARY .Lb libpthread .Sh SYNOPSIS @@ -63,6 +65,10 @@ .Fn pthread_rwlockattr_init "pthread_rwlockattr_t *attr" .Ft int .Fn pthread_rwlockattr_destroy "pthread_rwlockattr_t *attr" +.Ft int +.Fn pthread_rwlockattr_getpshared "const pthread_rwlockattr_t *__restrict attr" "int * __restrict pshared" +.Ft int +.Fn pthread_rwlockattr_setpshared "pthread_rwlockattr_t *attr" "int pshared" .Sh DESCRIPTION The .Fn pthread_rwlockattr_init @@ -73,12 +79,21 @@ function is used to destroy a read/write lock attribute object previously created with .Fn pthread_rwlockattr_init . +.Pp +The +.Fn pthread_rwlockattr_getpshared +function shall obtain the value of process-shared attribute from +the initialized attributes object referenced by +.Fa attr. +.Pp +The +.Fn pthread_rwlockattr_setpshared +function shall set the process-shared attribute in an initialized +attributes object referenced by +.Fa attr. .Sh RETURN VALUES -If successful, the -.Fn pthread_rwlockattr_init -and -.Fn pthread_rwlockattr_destroy -functions return zero. +If successful, +all these functions return zero. Otherwise an error number will be returned to indicate the error. .Sh ERRORS .Fn pthread_rwlockattr_init @@ -98,6 +113,17 @@ .Fa attr is invalid. .El +.Pp +.Fn pthread_rwlockattr_getpshared +and +.Fn pthread_rwlockattr_setpshared +may fail if: +.Bl -tag -width Er +.It Bq Er EINVAL +The value specified by +.Fa attr +is invalid. +.El .Sh SEE ALSO .Xr pthread_rwlock_init 3 .Sh STANDARDS Index: lib/libpthread/pthread_types.h =================================================================== RCS file: /cvsroot/src/lib/libpthread/pthread_types.h,v retrieving revision 1.17 diff -u -u -r1.17 pthread_types.h --- lib/libpthread/pthread_types.h 27 Aug 2015 12:30:50 -0000 1.17 +++ lib/libpthread/pthread_types.h 14 Jun 2016 22:55:23 -0000 @@ -115,7 +115,7 @@ #ifdef __CPU_SIMPLE_LOCK_PAD uint8_t ptm_pad1[3]; #endif - __pthread_spin_t ptm_interlock; /* unused - backwards compat */ + __pthread_spin_t ptm_ceiling; #ifdef __CPU_SIMPLE_LOCK_PAD uint8_t ptm_pad2[3]; #endif Index: sys/kern/init_sysent.c =================================================================== RCS file: /cvsroot/src/sys/kern/init_sysent.c,v retrieving revision 1.311 diff -u -u -r1.311 init_sysent.c --- sys/kern/init_sysent.c 6 May 2016 10:19:40 -0000 1.311 +++ sys/kern/init_sysent.c 14 Jun 2016 22:55:25 -0000 @@ -1,4 +1,4 @@ -/* $NetBSD: init_sysent.c,v 1.311 2016/05/06 10:19:40 pooka Exp $ */ +/* $NetBSD$ */ /* * System call switch table. @@ -8,7 +8,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: init_sysent.c,v 1.311 2016/05/06 10:19:40 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD$"); #include "opt_modular.h" #include "opt_ntp.h" @@ -1682,8 +1682,9 @@ .sy_call = (sy_call_t *)sys_sched_yield }, /* 350 = sched_yield */ { - .sy_call = sys_nosys, - }, /* 351 = filler */ + ns(struct sys__sched_protect_args), + .sy_call = (sy_call_t *)sys__sched_protect + }, /* 351 = _sched_protect */ { .sy_call = sys_nosys, }, /* 352 = filler */ Index: sys/kern/kern_lwp.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_lwp.c,v retrieving revision 1.184 diff -u -u -r1.184 kern_lwp.c --- sys/kern/kern_lwp.c 4 Apr 2016 23:07:06 -0000 1.184 +++ sys/kern/kern_lwp.c 14 Jun 2016 22:55:26 -0000 @@ -829,6 +829,8 @@ l2->l_kpribase = PRI_KERNEL; l2->l_priority = l1->l_priority; l2->l_inheritedprio = -1; + l2->l_protectprio = -1; + l2->l_auxprio = -1; l2->l_flag = 0; l2->l_pflag = LP_MPSAFE; TAILQ_INIT(&l2->l_ld_locks); Index: sys/kern/kern_sleepq.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_sleepq.c,v retrieving revision 1.50 diff -u -u -r1.50 kern_sleepq.c --- sys/kern/kern_sleepq.c 5 Sep 2014 05:57:21 -0000 1.50 +++ sys/kern/kern_sleepq.c 14 Jun 2016 22:55:26 -0000 @@ -479,5 +479,6 @@ KASSERT(lwp_locked(l, NULL)); l->l_inheritedprio = pri; + l->l_auxprio = MAX(l->l_inheritedprio, l->l_protectprio); sleepq_reinsert(sq, l); } Index: sys/kern/kern_synch.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_synch.c,v retrieving revision 1.310 diff -u -u -r1.310 kern_synch.c --- sys/kern/kern_synch.c 4 Apr 2016 20:47:57 -0000 1.310 +++ sys/kern/kern_synch.c 14 Jun 2016 22:55:26 -0000 @@ -1085,9 +1085,11 @@ KASSERT(lwp_locked(l, l->l_cpu->ci_schedstate.spc_mutex)); sched_dequeue(l); l->l_inheritedprio = pri; + l->l_auxprio = MAX(l->l_inheritedprio, l->l_protectprio); sched_enqueue(l, false); } else { l->l_inheritedprio = pri; + l->l_auxprio = MAX(l->l_inheritedprio, l->l_protectprio); } resched_cpu(l); } Index: sys/kern/sys_sched.c =================================================================== RCS file: /cvsroot/src/sys/kern/sys_sched.c,v retrieving revision 1.43 diff -u -u -r1.43 sys_sched.c --- sys/kern/sys_sched.c 25 Feb 2014 18:30:11 -0000 1.43 +++ sys/kern/sys_sched.c 14 Jun 2016 22:55:26 -0000 @@ -532,6 +532,61 @@ } /* + * Priority protection for PTHREAD_PRIO_PROTECT. This is a weak + * analogue of priority inheritance: temp raise the priority + * of the caller when accessing a protected resource. + */ +int +sys__sched_protect(struct lwp *l, + const struct sys__sched_protect_args *uap, register_t * retval) +{ + /* { + syscallarg(int) priority; + } */ + int error; + pri_t pri; + + KASSERT(l->l_inheritedprio == -1); + KASSERT(l->l_auxprio == -1 || l->l_auxprio == l->l_protectprio); + + pri = SCARG(uap, priority); + error = 0; + lwp_lock(l); + if (pri < 0) { + /* back out priority changes */ + switch(l->l_protectdepth) { + case 0: + error = EINVAL; + break; + case 1: + l->l_protectdepth = 0; + l->l_protectprio = -1; + l->l_auxprio = -1; + break; + default: + l->l_protectdepth--; + break; + } + } else if (__predict_false(pri < SCHED_PRI_MIN || + pri > SCHED_PRI_MAX || l->l_priority > pri + PRI_USER_RT)) { + /* must fail if existing priority is higher */ + error = EINVAL; + } else { + /* play along but make no changes if not a realtime LWP. */ + l->l_protectdepth++; + pri += PRI_USER_RT; + if (__predict_true(l->l_class != SCHED_OTHER && + pri > l->l_protectprio)) { + l->l_protectprio = pri; + l->l_auxprio = pri; + } + } + lwp_unlock(l); + + return error; +} + +/* * Yield. */ int Index: sys/kern/syscalls.c =================================================================== RCS file: /cvsroot/src/sys/kern/syscalls.c,v retrieving revision 1.301 diff -u -u -r1.301 syscalls.c --- sys/kern/syscalls.c 6 May 2016 10:19:40 -0000 1.301 +++ sys/kern/syscalls.c 14 Jun 2016 22:55:26 -0000 @@ -1,4 +1,4 @@ -/* $NetBSD: syscalls.c,v 1.301 2016/05/06 10:19:40 pooka Exp $ */ +/* $NetBSD$ */ /* * System call names. @@ -8,7 +8,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: syscalls.c,v 1.301 2016/05/06 10:19:40 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD$"); #if defined(_KERNEL_OPT) #include "opt_modular.h" @@ -394,7 +394,7 @@ /* 348 */ "_sched_setaffinity", /* 349 */ "_sched_getaffinity", /* 350 */ "sched_yield", - /* 351 */ "#351 (unimplemented)", + /* 351 */ "_sched_protect", /* 352 */ "#352 (unimplemented)", /* 353 */ "#353 (unimplemented)", /* 354 */ "fsync_range", @@ -931,7 +931,7 @@ /* 348 */ NULL, /* _sched_setaffinity */ /* 349 */ NULL, /* _sched_getaffinity */ /* 350 */ NULL, /* sched_yield */ - /* 351 */ NULL, /* unimplemented */ + /* 351 */ NULL, /* _sched_protect */ /* 352 */ NULL, /* unimplemented */ /* 353 */ NULL, /* unimplemented */ /* 354 */ NULL, /* fsync_range */ Index: sys/kern/syscalls.master =================================================================== RCS file: /cvsroot/src/sys/kern/syscalls.master,v retrieving revision 1.284 diff -u -u -r1.284 syscalls.master --- sys/kern/syscalls.master 23 Apr 2016 23:08:26 -0000 1.284 +++ sys/kern/syscalls.master 14 Jun 2016 22:55:26 -0000 @@ -692,7 +692,7 @@ 349 STD { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, \ size_t size, cpuset_t *cpuset); } 350 STD { int|sys||sched_yield(void); } -351 UNIMPL +351 STD { int|sys||_sched_protect(int priority); } 352 UNIMPL 353 UNIMPL Index: sys/kern/syscalls_autoload.c =================================================================== RCS file: /cvsroot/src/sys/kern/syscalls_autoload.c,v retrieving revision 1.20 diff -u -u -r1.20 syscalls_autoload.c --- sys/kern/syscalls_autoload.c 6 May 2016 10:19:40 -0000 1.20 +++ sys/kern/syscalls_autoload.c 14 Jun 2016 22:55:26 -0000 @@ -1,4 +1,4 @@ -/* $NetBSD: syscalls_autoload.c,v 1.20 2016/05/06 10:19:40 pooka Exp $ */ +/* $NetBSD$ */ /* * System call autoload table. @@ -8,7 +8,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: syscalls_autoload.c,v 1.20 2016/05/06 10:19:40 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD$"); #include static struct sc_autoload netbsd_syscalls_autoload[] = { Index: sys/kern/systrace_args.c =================================================================== RCS file: /cvsroot/src/sys/kern/systrace_args.c,v retrieving revision 1.20 diff -u -u -r1.20 systrace_args.c --- sys/kern/systrace_args.c 6 May 2016 10:19:40 -0000 1.20 +++ sys/kern/systrace_args.c 14 Jun 2016 22:55:26 -0000 @@ -1,4 +1,4 @@ -/* $NetBSD: systrace_args.c,v 1.20 2016/05/06 10:19:40 pooka Exp $ */ +/* $NetBSD$ */ /* * System call argument to DTrace register array converstion. @@ -2519,6 +2519,13 @@ *n_args = 0; break; } + /* sys__sched_protect */ + case 351: { + struct sys__sched_protect_args *p = params; + iarg[0] = SCARG(p, priority); /* int */ + *n_args = 1; + break; + } /* sys_fsync_range */ case 354: { struct sys_fsync_range_args *p = params; @@ -7802,6 +7809,16 @@ /* sys_sched_yield */ case 350: break; + /* sys__sched_protect */ + case 351: + switch(ndx) { + case 0: + p = "int"; + break; + default: + break; + }; + break; /* sys_fsync_range */ case 354: switch(ndx) { @@ -11373,6 +11390,11 @@ break; /* sys_sched_yield */ case 350: + /* sys__sched_protect */ + case 351: + if (ndx == 0 || ndx == 1) + p = "int"; + break; /* sys_fsync_range */ case 354: if (ndx == 0 || ndx == 1) Index: sys/rump/include/rump/rump_syscalls.h =================================================================== RCS file: /cvsroot/src/sys/rump/include/rump/rump_syscalls.h,v retrieving revision 1.101 diff -u -u -r1.101 rump_syscalls.h --- sys/rump/include/rump/rump_syscalls.h 6 May 2016 10:19:40 -0000 1.101 +++ sys/rump/include/rump/rump_syscalls.h 14 Jun 2016 22:55:26 -0000 @@ -1,4 +1,4 @@ -/* $NetBSD: rump_syscalls.h,v 1.101 2016/05/06 10:19:40 pooka Exp $ */ +/* $NetBSD$ */ /* * System call protos in rump namespace. @@ -16,824 +16,824 @@ #include -#ifndef RUMP_SYS_RENAME_FGETXATTR -#define RUMP_SYS_RENAME_FGETXATTR rump___sysimpl_fgetxattr +#ifndef RUMP_SYS_RENAME_FKTRACE +#define RUMP_SYS_RENAME_FKTRACE rump___sysimpl_fktrace #endif -#ifndef RUMP_SYS_RENAME_IOCTL -#define RUMP_SYS_RENAME_IOCTL rump___sysimpl_ioctl +#ifndef RUMP_SYS_RENAME_GETSID +#define RUMP_SYS_RENAME_GETSID rump___sysimpl_getsid #endif -#ifndef RUMP_SYS_RENAME_GETPPID -#define RUMP_SYS_RENAME_GETPPID rump___sysimpl_getppid +#ifndef RUMP_SYS_RENAME_RECVMMSG +#define RUMP_SYS_RENAME_RECVMMSG rump___sysimpl_recvmmsg #endif -#ifndef RUMP_SYS_RENAME___QUOTACTL -#define RUMP_SYS_RENAME___QUOTACTL rump___sysimpl___quotactl +#ifndef RUMP_SYS_RENAME_UTIMENSAT +#define RUMP_SYS_RENAME_UTIMENSAT rump___sysimpl_utimensat #endif -#ifndef RUMP_SYS_RENAME_GETPGID -#define RUMP_SYS_RENAME_GETPGID rump___sysimpl_getpgid +#ifndef RUMP_SYS_RENAME_CHFLAGS +#define RUMP_SYS_RENAME_CHFLAGS rump___sysimpl_chflags #endif -#ifndef RUMP_SYS_RENAME___SETLOGIN -#define RUMP_SYS_RENAME___SETLOGIN rump___sysimpl___setlogin +#ifndef RUMP_SYS_RENAME_GETGROUPS +#define RUMP_SYS_RENAME_GETGROUPS rump___sysimpl_getgroups #endif -#ifndef RUMP_SYS_RENAME_SETEUID -#define RUMP_SYS_RENAME_SETEUID rump___sysimpl_seteuid +#ifndef RUMP_SYS_RENAME_SENDTO +#define RUMP_SYS_RENAME_SENDTO rump___sysimpl_sendto #endif -#ifndef RUMP_SYS_RENAME_GETPEERNAME -#define RUMP_SYS_RENAME_GETPEERNAME rump___sysimpl_getpeername +#ifndef RUMP_SYS_RENAME_ADJTIME +#define RUMP_SYS_RENAME_ADJTIME rump___sysimpl_adjtime50 #endif -#ifndef RUMP_SYS_RENAME_SYMLINK -#define RUMP_SYS_RENAME_SYMLINK rump___sysimpl_symlink +#ifndef RUMP_SYS_RENAME_FHSTATVFS1 +#define RUMP_SYS_RENAME_FHSTATVFS1 rump___sysimpl_fhstatvfs140 #endif -#ifndef RUMP_SYS_RENAME_GETUID_WITH_EUID -#define RUMP_SYS_RENAME_GETUID_WITH_EUID rump___sysimpl_getuid +#ifndef RUMP_SYS_RENAME_TIMER_DELETE +#define RUMP_SYS_RENAME_TIMER_DELETE rump___sysimpl_timer_delete #endif -#ifndef RUMP_SYS_RENAME_TIMER_GETTIME -#define RUMP_SYS_RENAME_TIMER_GETTIME rump___sysimpl_timer_gettime50 +#ifndef RUMP_SYS_RENAME_PWRITEV +#define RUMP_SYS_RENAME_PWRITEV rump___sysimpl_pwritev #endif -#ifndef RUMP_SYS_RENAME_READ -#define RUMP_SYS_RENAME_READ rump___sysimpl_read +#ifndef RUMP_SYS_RENAME_EXTATTR_GET_LINK +#define RUMP_SYS_RENAME_EXTATTR_GET_LINK rump___sysimpl_extattr_get_link #endif -#ifndef RUMP_SYS_RENAME_EXTATTR_GET_FILE -#define RUMP_SYS_RENAME_EXTATTR_GET_FILE rump___sysimpl_extattr_get_file +#ifndef RUMP_SYS_RENAME_LIO_LISTIO +#define RUMP_SYS_RENAME_LIO_LISTIO rump___sysimpl_lio_listio #endif -#ifndef RUMP_SYS_RENAME_EXTATTR_LIST_FD -#define RUMP_SYS_RENAME_EXTATTR_LIST_FD rump___sysimpl_extattr_list_fd +#ifndef RUMP_SYS_RENAME_MKDIRAT +#define RUMP_SYS_RENAME_MKDIRAT rump___sysimpl_mkdirat +#endif + +#ifndef RUMP_SYS_RENAME___GETCWD +#define RUMP_SYS_RENAME___GETCWD rump___sysimpl___getcwd #endif #ifndef RUMP_SYS_RENAME_SETRLIMIT #define RUMP_SYS_RENAME_SETRLIMIT rump___sysimpl_setrlimit #endif -#ifndef RUMP_SYS_RENAME_GETPID_WITH_PPID -#define RUMP_SYS_RENAME_GETPID_WITH_PPID rump___sysimpl_getpid +#ifndef RUMP_SYS_RENAME_FDATASYNC +#define RUMP_SYS_RENAME_FDATASYNC rump___sysimpl_fdatasync #endif -#ifndef RUMP_SYS_RENAME_SETGID -#define RUMP_SYS_RENAME_SETGID rump___sysimpl_setgid +#ifndef RUMP_SYS_RENAME_SETSID +#define RUMP_SYS_RENAME_SETSID rump___sysimpl_setsid #endif -#ifndef RUMP_SYS_RENAME_LISTEN -#define RUMP_SYS_RENAME_LISTEN rump___sysimpl_listen +#ifndef RUMP_SYS_RENAME_REMOVEXATTR +#define RUMP_SYS_RENAME_REMOVEXATTR rump___sysimpl_removexattr #endif -#ifndef RUMP_SYS_RENAME_SYNC -#define RUMP_SYS_RENAME_SYNC rump___sysimpl_sync +#ifndef RUMP_SYS_RENAME_AIO_RETURN +#define RUMP_SYS_RENAME_AIO_RETURN rump___sysimpl_aio_return #endif -#ifndef RUMP_SYS_RENAME_FUTIMENS -#define RUMP_SYS_RENAME_FUTIMENS rump___sysimpl_futimens +#ifndef RUMP_SYS_RENAME_GETVFSSTAT +#define RUMP_SYS_RENAME_GETVFSSTAT rump___sysimpl_getvfsstat #endif -#ifndef RUMP_SYS_RENAME_MKNODAT -#define RUMP_SYS_RENAME_MKNODAT rump___sysimpl_mknodat +#ifndef RUMP_SYS_RENAME_FLOCK +#define RUMP_SYS_RENAME_FLOCK rump___sysimpl_flock #endif -#ifndef RUMP_SYS_RENAME_PIPE2 -#define RUMP_SYS_RENAME_PIPE2 rump___sysimpl_pipe2 +#ifndef RUMP_SYS_RENAME_AIO_CANCEL +#define RUMP_SYS_RENAME_AIO_CANCEL rump___sysimpl_aio_cancel #endif -#ifndef RUMP_SYS_RENAME_CHFLAGS -#define RUMP_SYS_RENAME_CHFLAGS rump___sysimpl_chflags +#ifndef RUMP_SYS_RENAME___POSIX_RENAME +#define RUMP_SYS_RENAME___POSIX_RENAME rump___sysimpl___posix_rename #endif -#ifndef RUMP_SYS_RENAME_EXTATTR_GET_FD -#define RUMP_SYS_RENAME_EXTATTR_GET_FD rump___sysimpl_extattr_get_fd +#ifndef RUMP_SYS_RENAME_LISTXATTR +#define RUMP_SYS_RENAME_LISTXATTR rump___sysimpl_listxattr #endif -#ifndef RUMP_SYS_RENAME_LLISTXATTR -#define RUMP_SYS_RENAME_LLISTXATTR rump___sysimpl_llistxattr +#ifndef RUMP_SYS_RENAME_PIPE2 +#define RUMP_SYS_RENAME_PIPE2 rump___sysimpl_pipe2 #endif -#ifndef RUMP_SYS_RENAME_POLLTS -#define RUMP_SYS_RENAME_POLLTS rump___sysimpl_pollts50 +#ifndef RUMP_SYS_RENAME_EXTATTR_GET_FD +#define RUMP_SYS_RENAME_EXTATTR_GET_FD rump___sysimpl_extattr_get_fd #endif -#ifndef RUMP_SYS_RENAME_EXTATTR_LIST_FILE -#define RUMP_SYS_RENAME_EXTATTR_LIST_FILE rump___sysimpl_extattr_list_file +#ifndef RUMP_SYS_RENAME_LCHOWN +#define RUMP_SYS_RENAME_LCHOWN rump___sysimpl_lchown #endif -#ifndef RUMP_SYS_RENAME_CONNECT -#define RUMP_SYS_RENAME_CONNECT rump___sysimpl_connect +#ifndef RUMP_SYS_RENAME_GETSOCKNAME +#define RUMP_SYS_RENAME_GETSOCKNAME rump___sysimpl_getsockname #endif -#ifndef RUMP_SYS_RENAME_LUTIMES -#define RUMP_SYS_RENAME_LUTIMES rump___sysimpl_lutimes50 +#ifndef RUMP_SYS_RENAME_SETTIMEOFDAY +#define RUMP_SYS_RENAME_SETTIMEOFDAY rump___sysimpl_settimeofday50 #endif -#ifndef RUMP_SYS_RENAME_FSETXATTR -#define RUMP_SYS_RENAME_FSETXATTR rump___sysimpl_fsetxattr +#ifndef RUMP_SYS_RENAME_CLOCK_NANOSLEEP +#define RUMP_SYS_RENAME_CLOCK_NANOSLEEP rump___sysimpl_clock_nanosleep #endif -#ifndef RUMP_SYS_RENAME_KQUEUE -#define RUMP_SYS_RENAME_KQUEUE rump___sysimpl_kqueue +#ifndef RUMP_SYS_RENAME_UNLINK +#define RUMP_SYS_RENAME_UNLINK rump___sysimpl_unlink #endif -#ifndef RUMP_SYS_RENAME_FLISTXATTR -#define RUMP_SYS_RENAME_FLISTXATTR rump___sysimpl_flistxattr +#ifndef RUMP_SYS_RENAME_AIO_SUSPEND +#define RUMP_SYS_RENAME_AIO_SUSPEND rump___sysimpl_aio_suspend50 #endif -#ifndef RUMP_SYS_RENAME_LCHOWN -#define RUMP_SYS_RENAME_LCHOWN rump___sysimpl_lchown +#ifndef RUMP_SYS_RENAME_SETPGID +#define RUMP_SYS_RENAME_SETPGID rump___sysimpl_setpgid #endif -#ifndef RUMP_SYS_RENAME_SETUID -#define RUMP_SYS_RENAME_SETUID rump___sysimpl_setuid +#ifndef RUMP_SYS_RENAME_FACCESSAT +#define RUMP_SYS_RENAME_FACCESSAT rump___sysimpl_faccessat #endif -#ifndef RUMP_SYS_RENAME_GETSOCKNAME -#define RUMP_SYS_RENAME_GETSOCKNAME rump___sysimpl_getsockname +#ifndef RUMP_SYS_RENAME_FSETXATTR +#define RUMP_SYS_RENAME_FSETXATTR rump___sysimpl_fsetxattr #endif -#ifndef RUMP_SYS_RENAME_UNLINKAT -#define RUMP_SYS_RENAME_UNLINKAT rump___sysimpl_unlinkat +#ifndef RUMP_SYS_RENAME_EXTATTR_SET_FILE +#define RUMP_SYS_RENAME_EXTATTR_SET_FILE rump___sysimpl_extattr_set_file #endif -#ifndef RUMP_SYS_RENAME_SENDTO -#define RUMP_SYS_RENAME_SENDTO rump___sysimpl_sendto +#ifndef RUMP_SYS_RENAME_LSTAT +#define RUMP_SYS_RENAME_LSTAT rump___sysimpl_lstat50 #endif -#ifndef RUMP_SYS_RENAME_FDISCARD -#define RUMP_SYS_RENAME_FDISCARD rump___sysimpl_fdiscard +#ifndef RUMP_SYS_RENAME_EXTATTR_SET_FD +#define RUMP_SYS_RENAME_EXTATTR_SET_FD rump___sysimpl_extattr_set_fd #endif -#ifndef RUMP_SYS_RENAME_EXTATTR_SET_FILE -#define RUMP_SYS_RENAME_EXTATTR_SET_FILE rump___sysimpl_extattr_set_file +#ifndef RUMP_SYS_RENAME_PREADV +#define RUMP_SYS_RENAME_PREADV rump___sysimpl_preadv #endif #ifndef RUMP_SYS_RENAME_PATHCONF #define RUMP_SYS_RENAME_PATHCONF rump___sysimpl_pathconf #endif -#ifndef RUMP_SYS_RENAME_GETDENTS -#define RUMP_SYS_RENAME_GETDENTS rump___sysimpl_getdents30 +#ifndef RUMP_SYS_RENAME_MODCTL +#define RUMP_SYS_RENAME_MODCTL rump___sysimpl_modctl #endif -#ifndef RUMP_SYS_RENAME_FTRUNCATE -#define RUMP_SYS_RENAME_FTRUNCATE rump___sysimpl_ftruncate +#ifndef RUMP_SYS_RENAME___GETLOGIN +#define RUMP_SYS_RENAME___GETLOGIN rump___sysimpl___getlogin #endif -#ifndef RUMP_SYS_RENAME_LREMOVEXATTR -#define RUMP_SYS_RENAME_LREMOVEXATTR rump___sysimpl_lremovexattr +#ifndef RUMP_SYS_RENAME_GETPGRP +#define RUMP_SYS_RENAME_GETPGRP rump___sysimpl_getpgrp #endif -#ifndef RUMP_SYS_RENAME_WRITEV -#define RUMP_SYS_RENAME_WRITEV rump___sysimpl_writev +#ifndef RUMP_SYS_RENAME_FCHFLAGS +#define RUMP_SYS_RENAME_FCHFLAGS rump___sysimpl_fchflags #endif -#ifndef RUMP_SYS_RENAME_FHSTAT -#define RUMP_SYS_RENAME_FHSTAT rump___sysimpl_fhstat50 +#ifndef RUMP_SYS_RENAME_OPENAT +#define RUMP_SYS_RENAME_OPENAT rump___sysimpl_openat #endif -#ifndef RUMP_SYS_RENAME__KSEM_CLOSE -#define RUMP_SYS_RENAME__KSEM_CLOSE rump___sysimpl__ksem_close +#ifndef RUMP_SYS_RENAME_DUP +#define RUMP_SYS_RENAME_DUP rump___sysimpl_dup #endif -#ifndef RUMP_SYS_RENAME_CHROOT -#define RUMP_SYS_RENAME_CHROOT rump___sysimpl_chroot +#ifndef RUMP_SYS_RENAME_LCHMOD +#define RUMP_SYS_RENAME_LCHMOD rump___sysimpl_lchmod #endif -#ifndef RUMP_SYS_RENAME_GETITIMER -#define RUMP_SYS_RENAME_GETITIMER rump___sysimpl_getitimer50 +#ifndef RUMP_SYS_RENAME___QUOTACTL +#define RUMP_SYS_RENAME___QUOTACTL rump___sysimpl___quotactl #endif -#ifndef RUMP_SYS_RENAME_UTIMES -#define RUMP_SYS_RENAME_UTIMES rump___sysimpl_utimes50 +#ifndef RUMP_SYS_RENAME_GETPEERNAME +#define RUMP_SYS_RENAME_GETPEERNAME rump___sysimpl_getpeername #endif -#ifndef RUMP_SYS_RENAME_STAT -#define RUMP_SYS_RENAME_STAT rump___sysimpl_stat50 +#ifndef RUMP_SYS_RENAME_GETEGID +#define RUMP_SYS_RENAME_GETEGID rump___sysimpl_getegid #endif -#ifndef RUMP_SYS_RENAME__KSEM_WAIT -#define RUMP_SYS_RENAME__KSEM_WAIT rump___sysimpl__ksem_wait +#ifndef RUMP_SYS_RENAME_EXTATTR_SET_LINK +#define RUMP_SYS_RENAME_EXTATTR_SET_LINK rump___sysimpl_extattr_set_link #endif -#ifndef RUMP_SYS_RENAME_TIMER_GETOVERRUN -#define RUMP_SYS_RENAME_TIMER_GETOVERRUN rump___sysimpl_timer_getoverrun +#ifndef RUMP_SYS_RENAME_TIMER_CREATE +#define RUMP_SYS_RENAME_TIMER_CREATE rump___sysimpl_timer_create #endif -#ifndef RUMP_SYS_RENAME_CLOCK_NANOSLEEP -#define RUMP_SYS_RENAME_CLOCK_NANOSLEEP rump___sysimpl_clock_nanosleep +#ifndef RUMP_SYS_RENAME_FDISCARD +#define RUMP_SYS_RENAME_FDISCARD rump___sysimpl_fdiscard #endif -#ifndef RUMP_SYS_RENAME_FSTATAT -#define RUMP_SYS_RENAME_FSTATAT rump___sysimpl_fstatat +#ifndef RUMP_SYS_RENAME_PACCEPT +#define RUMP_SYS_RENAME_PACCEPT rump___sysimpl_paccept #endif -#ifndef RUMP_SYS_RENAME_RENAMEAT -#define RUMP_SYS_RENAME_RENAMEAT rump___sysimpl_renameat +#ifndef RUMP_SYS_RENAME_EXTATTR_LIST_FILE +#define RUMP_SYS_RENAME_EXTATTR_LIST_FILE rump___sysimpl_extattr_list_file #endif -#ifndef RUMP_SYS_RENAME_ADJTIME -#define RUMP_SYS_RENAME_ADJTIME rump___sysimpl_adjtime50 +#ifndef RUMP_SYS_RENAME__KSEM_TRYWAIT +#define RUMP_SYS_RENAME__KSEM_TRYWAIT rump___sysimpl__ksem_trywait #endif -#ifndef RUMP_SYS_RENAME_SETTIMEOFDAY -#define RUMP_SYS_RENAME_SETTIMEOFDAY rump___sysimpl_settimeofday50 +#ifndef RUMP_SYS_RENAME_LINK +#define RUMP_SYS_RENAME_LINK rump___sysimpl_link #endif -#ifndef RUMP_SYS_RENAME_EXTATTR_GET_LINK -#define RUMP_SYS_RENAME_EXTATTR_GET_LINK rump___sysimpl_extattr_get_link +#ifndef RUMP_SYS_RENAME_LCHFLAGS +#define RUMP_SYS_RENAME_LCHFLAGS rump___sysimpl_lchflags #endif -#ifndef RUMP_SYS_RENAME_TIMER_CREATE -#define RUMP_SYS_RENAME_TIMER_CREATE rump___sysimpl_timer_create +#ifndef RUMP_SYS_RENAME_DUP2 +#define RUMP_SYS_RENAME_DUP2 rump___sysimpl_dup2 #endif -#ifndef RUMP_SYS_RENAME_GETGROUPS -#define RUMP_SYS_RENAME_GETGROUPS rump___sysimpl_getgroups +#ifndef RUMP_SYS_RENAME_DUP3 +#define RUMP_SYS_RENAME_DUP3 rump___sysimpl_dup3 #endif -#ifndef RUMP_SYS_RENAME_GETSID -#define RUMP_SYS_RENAME_GETSID rump___sysimpl_getsid +#ifndef RUMP_SYS_RENAME_FHOPEN +#define RUMP_SYS_RENAME_FHOPEN rump___sysimpl_fhopen40 #endif -#ifndef RUMP_SYS_RENAME_READLINK -#define RUMP_SYS_RENAME_READLINK rump___sysimpl_readlink +#ifndef RUMP_SYS_RENAME_SELECT +#define RUMP_SYS_RENAME_SELECT rump___sysimpl_select50 #endif -#ifndef RUMP_SYS_RENAME_PSELECT -#define RUMP_SYS_RENAME_PSELECT rump___sysimpl_pselect50 +#ifndef RUMP_SYS_RENAME_EXTATTR_LIST_LINK +#define RUMP_SYS_RENAME_EXTATTR_LIST_LINK rump___sysimpl_extattr_list_link #endif -#ifndef RUMP_SYS_RENAME_POLL -#define RUMP_SYS_RENAME_POLL rump___sysimpl_poll +#ifndef RUMP_SYS_RENAME_REVOKE +#define RUMP_SYS_RENAME_REVOKE rump___sysimpl_revoke #endif -#ifndef RUMP_SYS_RENAME_ACCEPT -#define RUMP_SYS_RENAME_ACCEPT rump___sysimpl_accept +#ifndef RUMP_SYS_RENAME_FSTATVFS1 +#define RUMP_SYS_RENAME_FSTATVFS1 rump___sysimpl_fstatvfs1 #endif -#ifndef RUMP_SYS_RENAME_EXTATTR_DELETE_FILE -#define RUMP_SYS_RENAME_EXTATTR_DELETE_FILE rump___sysimpl_extattr_delete_file -#endif - -#ifndef RUMP_SYS_RENAME_FCHROOT -#define RUMP_SYS_RENAME_FCHROOT rump___sysimpl_fchroot -#endif - -#ifndef RUMP_SYS_RENAME_POSIX_FALLOCATE -#define RUMP_SYS_RENAME_POSIX_FALLOCATE rump___sysimpl_posix_fallocate +#ifndef RUMP_SYS_RENAME_UTRACE +#define RUMP_SYS_RENAME_UTRACE rump___sysimpl_utrace #endif -#ifndef RUMP_SYS_RENAME_LISTXATTR -#define RUMP_SYS_RENAME_LISTXATTR rump___sysimpl_listxattr +#ifndef RUMP_SYS_RENAME_UMASK +#define RUMP_SYS_RENAME_UMASK rump___sysimpl_umask #endif -#ifndef RUMP_SYS_RENAME___POSIX_FCHOWN -#define RUMP_SYS_RENAME___POSIX_FCHOWN rump___sysimpl___posix_fchown +#ifndef RUMP_SYS_RENAME_FCNTL +#define RUMP_SYS_RENAME_FCNTL rump___sysimpl_fcntl #endif -#ifndef RUMP_SYS_RENAME_READLINKAT -#define RUMP_SYS_RENAME_READLINKAT rump___sysimpl_readlinkat +#ifndef RUMP_SYS_RENAME_MKFIFO +#define RUMP_SYS_RENAME_MKFIFO rump___sysimpl_mkfifo #endif -#ifndef RUMP_SYS_RENAME_CLOCK_GETTIME -#define RUMP_SYS_RENAME_CLOCK_GETTIME rump___sysimpl_clock_gettime50 +#ifndef RUMP_SYS_RENAME_POLLTS +#define RUMP_SYS_RENAME_POLLTS rump___sysimpl_pollts50 #endif -#ifndef RUMP_SYS_RENAME_AIO_RETURN -#define RUMP_SYS_RENAME_AIO_RETURN rump___sysimpl_aio_return +#ifndef RUMP_SYS_RENAME_OPEN +#define RUMP_SYS_RENAME_OPEN rump___sysimpl_open #endif -#ifndef RUMP_SYS_RENAME_GETVFSSTAT -#define RUMP_SYS_RENAME_GETVFSSTAT rump___sysimpl_getvfsstat +#ifndef RUMP_SYS_RENAME_ACCESS +#define RUMP_SYS_RENAME_ACCESS rump___sysimpl_access #endif -#ifndef RUMP_SYS_RENAME_FUTIMES -#define RUMP_SYS_RENAME_FUTIMES rump___sysimpl_futimes50 +#ifndef RUMP_SYS_RENAME_MKNOD +#define RUMP_SYS_RENAME_MKNOD rump___sysimpl_mknod50 #endif -#ifndef RUMP_SYS_RENAME_FREMOVEXATTR -#define RUMP_SYS_RENAME_FREMOVEXATTR rump___sysimpl_fremovexattr +#ifndef RUMP_SYS_RENAME_TRUNCATE +#define RUMP_SYS_RENAME_TRUNCATE rump___sysimpl_truncate #endif -#ifndef RUMP_SYS_RENAME_RECVMMSG -#define RUMP_SYS_RENAME_RECVMMSG rump___sysimpl_recvmmsg +#ifndef RUMP_SYS_RENAME_SETGID +#define RUMP_SYS_RENAME_SETGID rump___sysimpl_setgid #endif -#ifndef RUMP_SYS_RENAME_MOUNT -#define RUMP_SYS_RENAME_MOUNT rump___sysimpl_mount50 +#ifndef RUMP_SYS_RENAME_LREMOVEXATTR +#define RUMP_SYS_RENAME_LREMOVEXATTR rump___sysimpl_lremovexattr #endif -#ifndef RUMP_SYS_RENAME_UTRACE -#define RUMP_SYS_RENAME_UTRACE rump___sysimpl_utrace +#ifndef RUMP_SYS_RENAME_RMDIR +#define RUMP_SYS_RENAME_RMDIR rump___sysimpl_rmdir #endif -#ifndef RUMP_SYS_RENAME_RECVFROM -#define RUMP_SYS_RENAME_RECVFROM rump___sysimpl_recvfrom +#ifndef RUMP_SYS_RENAME_KQUEUE1 +#define RUMP_SYS_RENAME_KQUEUE1 rump___sysimpl_kqueue1 #endif -#ifndef RUMP_SYS_RENAME_GETRLIMIT -#define RUMP_SYS_RENAME_GETRLIMIT rump___sysimpl_getrlimit +#ifndef RUMP_SYS_RENAME_CLOCK_GETRES +#define RUMP_SYS_RENAME_CLOCK_GETRES rump___sysimpl_clock_getres50 #endif -#ifndef RUMP_SYS_RENAME_FCHOWN -#define RUMP_SYS_RENAME_FCHOWN rump___sysimpl_fchown +#ifndef RUMP_SYS_RENAME_GETGID_WITH_EGID +#define RUMP_SYS_RENAME_GETGID_WITH_EGID rump___sysimpl_getgid #endif -#ifndef RUMP_SYS_RENAME_SOCKETPAIR -#define RUMP_SYS_RENAME_SOCKETPAIR rump___sysimpl_socketpair +#ifndef RUMP_SYS_RENAME_SYMLINKAT +#define RUMP_SYS_RENAME_SYMLINKAT rump___sysimpl_symlinkat #endif -#ifndef RUMP_SYS_RENAME_CHOWN -#define RUMP_SYS_RENAME_CHOWN rump___sysimpl_chown +#ifndef RUMP_SYS_RENAME_FSYNC_RANGE +#define RUMP_SYS_RENAME_FSYNC_RANGE rump___sysimpl_fsync_range #endif -#ifndef RUMP_SYS_RENAME_GETEGID -#define RUMP_SYS_RENAME_GETEGID rump___sysimpl_getegid +#ifndef RUMP_SYS_RENAME_PWRITE +#define RUMP_SYS_RENAME_PWRITE rump___sysimpl_pwrite #endif -#ifndef RUMP_SYS_RENAME_STATVFS1 -#define RUMP_SYS_RENAME_STATVFS1 rump___sysimpl_statvfs1 +#ifndef RUMP_SYS_RENAME_GETRLIMIT +#define RUMP_SYS_RENAME_GETRLIMIT rump___sysimpl_getrlimit #endif -#ifndef RUMP_SYS_RENAME_SOCKET -#define RUMP_SYS_RENAME_SOCKET rump___sysimpl_socket30 +#ifndef RUMP_SYS_RENAME_RENAMEAT +#define RUMP_SYS_RENAME_RENAMEAT rump___sysimpl_renameat #endif -#ifndef RUMP_SYS_RENAME_LCHMOD -#define RUMP_SYS_RENAME_LCHMOD rump___sysimpl_lchmod +#ifndef RUMP_SYS_RENAME_TIMER_GETTIME +#define RUMP_SYS_RENAME_TIMER_GETTIME rump___sysimpl_timer_gettime50 #endif -#ifndef RUMP_SYS_RENAME_GETFH -#define RUMP_SYS_RENAME_GETFH rump___sysimpl_getfh30 +#ifndef RUMP_SYS_RENAME_FGETXATTR +#define RUMP_SYS_RENAME_FGETXATTR rump___sysimpl_fgetxattr #endif -#ifndef RUMP_SYS_RENAME_KQUEUE1 -#define RUMP_SYS_RENAME_KQUEUE1 rump___sysimpl_kqueue1 +#ifndef RUMP_SYS_RENAME_SENDMSG +#define RUMP_SYS_RENAME_SENDMSG rump___sysimpl_sendmsg #endif -#ifndef RUMP_SYS_RENAME_SHUTDOWN -#define RUMP_SYS_RENAME_SHUTDOWN rump___sysimpl_shutdown +#ifndef RUMP_SYS_RENAME__KSEM_OPEN +#define RUMP_SYS_RENAME__KSEM_OPEN rump___sysimpl__ksem_open #endif -#ifndef RUMP_SYS_RENAME_PREADV -#define RUMP_SYS_RENAME_PREADV rump___sysimpl_preadv +#ifndef RUMP_SYS_RENAME_FLISTXATTR +#define RUMP_SYS_RENAME_FLISTXATTR rump___sysimpl_flistxattr #endif -#ifndef RUMP_SYS_RENAME__KSEM_POST -#define RUMP_SYS_RENAME__KSEM_POST rump___sysimpl__ksem_post +#ifndef RUMP_SYS_RENAME_LUTIMES +#define RUMP_SYS_RENAME_LUTIMES rump___sysimpl_lutimes50 #endif -#ifndef RUMP_SYS_RENAME_TIMER_DELETE -#define RUMP_SYS_RENAME_TIMER_DELETE rump___sysimpl_timer_delete +#ifndef RUMP_SYS_RENAME_CLOCK_SETTIME +#define RUMP_SYS_RENAME_CLOCK_SETTIME rump___sysimpl_clock_settime50 #endif -#ifndef RUMP_SYS_RENAME_FCHMODAT -#define RUMP_SYS_RENAME_FCHMODAT rump___sysimpl_fchmodat +#ifndef RUMP_SYS_RENAME_SETITIMER +#define RUMP_SYS_RENAME_SETITIMER rump___sysimpl_setitimer50 #endif -#ifndef RUMP_SYS_RENAME_AIO_WRITE -#define RUMP_SYS_RENAME_AIO_WRITE rump___sysimpl_aio_write +#ifndef RUMP_SYS_RENAME_SHUTDOWN +#define RUMP_SYS_RENAME_SHUTDOWN rump___sysimpl_shutdown #endif -#ifndef RUMP_SYS_RENAME_LSEEK -#define RUMP_SYS_RENAME_LSEEK rump___sysimpl_lseek +#ifndef RUMP_SYS_RENAME_PREAD +#define RUMP_SYS_RENAME_PREAD rump___sysimpl_pread #endif -#ifndef RUMP_SYS_RENAME__KSEM_OPEN -#define RUMP_SYS_RENAME__KSEM_OPEN rump___sysimpl__ksem_open +#ifndef RUMP_SYS_RENAME_LISTEN +#define RUMP_SYS_RENAME_LISTEN rump___sysimpl_listen #endif -#ifndef RUMP_SYS_RENAME_EXTATTR_LIST_LINK -#define RUMP_SYS_RENAME_EXTATTR_LIST_LINK rump___sysimpl_extattr_list_link +#ifndef RUMP_SYS_RENAME_MKDIR +#define RUMP_SYS_RENAME_MKDIR rump___sysimpl_mkdir #endif -#ifndef RUMP_SYS_RENAME_PWRITE -#define RUMP_SYS_RENAME_PWRITE rump___sysimpl_pwrite +#ifndef RUMP_SYS_RENAME_GETFH +#define RUMP_SYS_RENAME_GETFH rump___sysimpl_getfh30 #endif -#ifndef RUMP_SYS_RENAME___GETCWD -#define RUMP_SYS_RENAME___GETCWD rump___sysimpl___getcwd +#ifndef RUMP_SYS_RENAME_AIO_FSYNC +#define RUMP_SYS_RENAME_AIO_FSYNC rump___sysimpl_aio_fsync #endif -#ifndef RUMP_SYS_RENAME__KSEM_TIMEDWAIT -#define RUMP_SYS_RENAME__KSEM_TIMEDWAIT rump___sysimpl__ksem_timedwait +#ifndef RUMP_SYS_RENAME___POSIX_LCHOWN +#define RUMP_SYS_RENAME___POSIX_LCHOWN rump___sysimpl___posix_lchown #endif #ifndef RUMP_SYS_RENAME_GETEUID #define RUMP_SYS_RENAME_GETEUID rump___sysimpl_geteuid #endif -#ifndef RUMP_SYS_RENAME_MKDIR -#define RUMP_SYS_RENAME_MKDIR rump___sysimpl_mkdir +#ifndef RUMP_SYS_RENAME_FSYNC +#define RUMP_SYS_RENAME_FSYNC rump___sysimpl_fsync #endif -#ifndef RUMP_SYS_RENAME_EXTATTR_SET_FD -#define RUMP_SYS_RENAME_EXTATTR_SET_FD rump___sysimpl_extattr_set_fd +#ifndef RUMP_SYS_RENAME_EXTATTR_DELETE_FILE +#define RUMP_SYS_RENAME_EXTATTR_DELETE_FILE rump___sysimpl_extattr_delete_file #endif -#ifndef RUMP_SYS_RENAME_AIO_FSYNC -#define RUMP_SYS_RENAME_AIO_FSYNC rump___sysimpl_aio_fsync +#ifndef RUMP_SYS_RENAME_ISSETUGID +#define RUMP_SYS_RENAME_ISSETUGID rump___sysimpl_issetugid #endif -#ifndef RUMP_SYS_RENAME_EXTATTR_SET_LINK -#define RUMP_SYS_RENAME_EXTATTR_SET_LINK rump___sysimpl_extattr_set_link +#ifndef RUMP_SYS_RENAME_LGETXATTR +#define RUMP_SYS_RENAME_LGETXATTR rump___sysimpl_lgetxattr #endif -#ifndef RUMP_SYS_RENAME_FKTRACE -#define RUMP_SYS_RENAME_FKTRACE rump___sysimpl_fktrace +#ifndef RUMP_SYS_RENAME_KEVENT +#define RUMP_SYS_RENAME_KEVENT rump___sysimpl_kevent50 #endif -#ifndef RUMP_SYS_RENAME_FCHFLAGS -#define RUMP_SYS_RENAME_FCHFLAGS rump___sysimpl_fchflags +#ifndef RUMP_SYS_RENAME_AIO_ERROR +#define RUMP_SYS_RENAME_AIO_ERROR rump___sysimpl_aio_error #endif -#ifndef RUMP_SYS_RENAME_KTRACE -#define RUMP_SYS_RENAME_KTRACE rump___sysimpl_ktrace +#ifndef RUMP_SYS_RENAME_POSIX_FADVISE +#define RUMP_SYS_RENAME_POSIX_FADVISE rump___sysimpl_posix_fadvise50 #endif -#ifndef RUMP_SYS_RENAME_GETXATTR -#define RUMP_SYS_RENAME_GETXATTR rump___sysimpl_getxattr +#ifndef RUMP_SYS_RENAME_FSTAT +#define RUMP_SYS_RENAME_FSTAT rump___sysimpl_fstat50 #endif -#ifndef RUMP_SYS_RENAME_FCNTL -#define RUMP_SYS_RENAME_FCNTL rump___sysimpl_fcntl +#ifndef RUMP_SYS_RENAME__KSEM_DESTROY +#define RUMP_SYS_RENAME__KSEM_DESTROY rump___sysimpl__ksem_destroy #endif -#ifndef RUMP_SYS_RENAME_SETPGID -#define RUMP_SYS_RENAME_SETPGID rump___sysimpl_setpgid +#ifndef RUMP_SYS_RENAME_MKNODAT +#define RUMP_SYS_RENAME_MKNODAT rump___sysimpl_mknodat #endif -#ifndef RUMP_SYS_RENAME_LINK -#define RUMP_SYS_RENAME_LINK rump___sysimpl_link +#ifndef RUMP_SYS_RENAME_CHDIR +#define RUMP_SYS_RENAME_CHDIR rump___sysimpl_chdir #endif -#ifndef RUMP_SYS_RENAME_TIMER_SETTIME -#define RUMP_SYS_RENAME_TIMER_SETTIME rump___sysimpl_timer_settime50 +#ifndef RUMP_SYS_RENAME_EXTATTR_DELETE_LINK +#define RUMP_SYS_RENAME_EXTATTR_DELETE_LINK rump___sysimpl_extattr_delete_link #endif -#ifndef RUMP_SYS_RENAME_LCHFLAGS -#define RUMP_SYS_RENAME_LCHFLAGS rump___sysimpl_lchflags +#ifndef RUMP_SYS_RENAME_CHOWN +#define RUMP_SYS_RENAME_CHOWN rump___sysimpl_chown +#endif + +#ifndef RUMP_SYS_RENAME_CLOCK_GETTIME +#define RUMP_SYS_RENAME_CLOCK_GETTIME rump___sysimpl_clock_gettime50 #endif #ifndef RUMP_SYS_RENAME_FCHDIR #define RUMP_SYS_RENAME_FCHDIR rump___sysimpl_fchdir #endif -#ifndef RUMP_SYS_RENAME_CHDIR -#define RUMP_SYS_RENAME_CHDIR rump___sysimpl_chdir +#ifndef RUMP_SYS_RENAME_RECVMSG +#define RUMP_SYS_RENAME_RECVMSG rump___sysimpl_recvmsg #endif -#ifndef RUMP_SYS_RENAME_EXTATTR_DELETE_FD -#define RUMP_SYS_RENAME_EXTATTR_DELETE_FD rump___sysimpl_extattr_delete_fd +#ifndef RUMP_SYS_RENAME_FCHOWN +#define RUMP_SYS_RENAME_FCHOWN rump___sysimpl_fchown #endif -#ifndef RUMP_SYS_RENAME__KSEM_UNLINK -#define RUMP_SYS_RENAME__KSEM_UNLINK rump___sysimpl__ksem_unlink +#ifndef RUMP_SYS_RENAME_SETREGID +#define RUMP_SYS_RENAME_SETREGID rump___sysimpl_setregid #endif -#ifndef RUMP_SYS_RENAME_MODCTL -#define RUMP_SYS_RENAME_MODCTL rump___sysimpl_modctl +#ifndef RUMP_SYS_RENAME_POLL +#define RUMP_SYS_RENAME_POLL rump___sysimpl_poll #endif -#ifndef RUMP_SYS_RENAME_FPATHCONF -#define RUMP_SYS_RENAME_FPATHCONF rump___sysimpl_fpathconf +#ifndef RUMP_SYS_RENAME_READV +#define RUMP_SYS_RENAME_READV rump___sysimpl_readv #endif -#ifndef RUMP_SYS_RENAME_FSYNC_RANGE -#define RUMP_SYS_RENAME_FSYNC_RANGE rump___sysimpl_fsync_range +#ifndef RUMP_SYS_RENAME_SYMLINK +#define RUMP_SYS_RENAME_SYMLINK rump___sysimpl_symlink #endif -#ifndef RUMP_SYS_RENAME_FCHMOD -#define RUMP_SYS_RENAME_FCHMOD rump___sysimpl_fchmod +#ifndef RUMP_SYS_RENAME_SENDMMSG +#define RUMP_SYS_RENAME_SENDMMSG rump___sysimpl_sendmmsg #endif -#ifndef RUMP_SYS_RENAME_READV -#define RUMP_SYS_RENAME_READV rump___sysimpl_readv +#ifndef RUMP_SYS_RENAME_PSELECT +#define RUMP_SYS_RENAME_PSELECT rump___sysimpl_pselect50 #endif -#ifndef RUMP_SYS_RENAME_NANOSLEEP -#define RUMP_SYS_RENAME_NANOSLEEP rump___sysimpl_nanosleep50 +#ifndef RUMP_SYS_RENAME_SETGROUPS +#define RUMP_SYS_RENAME_SETGROUPS rump___sysimpl_setgroups #endif -#ifndef RUMP_SYS_RENAME_CHMOD -#define RUMP_SYS_RENAME_CHMOD rump___sysimpl_chmod +#ifndef RUMP_SYS_RENAME_SETXATTR +#define RUMP_SYS_RENAME_SETXATTR rump___sysimpl_setxattr #endif -#ifndef RUMP_SYS_RENAME_DUP -#define RUMP_SYS_RENAME_DUP rump___sysimpl_dup +#ifndef RUMP_SYS_RENAME_SETEGID +#define RUMP_SYS_RENAME_SETEGID rump___sysimpl_setegid #endif -#ifndef RUMP_SYS_RENAME_LINKAT -#define RUMP_SYS_RENAME_LINKAT rump___sysimpl_linkat +#ifndef RUMP_SYS_RENAME_GETSOCKOPT +#define RUMP_SYS_RENAME_GETSOCKOPT rump___sysimpl_getsockopt #endif -#ifndef RUMP_SYS_RENAME_AIO_READ -#define RUMP_SYS_RENAME_AIO_READ rump___sysimpl_aio_read +#ifndef RUMP_SYS_RENAME_CONNECT +#define RUMP_SYS_RENAME_CONNECT rump___sysimpl_connect #endif -#ifndef RUMP_SYS_RENAME_SELECT -#define RUMP_SYS_RENAME_SELECT rump___sysimpl_select50 +#ifndef RUMP_SYS_RENAME_LSEEK +#define RUMP_SYS_RENAME_LSEEK rump___sysimpl_lseek #endif -#ifndef RUMP_SYS_RENAME_WRITE -#define RUMP_SYS_RENAME_WRITE rump___sysimpl_write +#ifndef RUMP_SYS_RENAME_MKFIFOAT +#define RUMP_SYS_RENAME_MKFIFOAT rump___sysimpl_mkfifoat #endif -#ifndef RUMP_SYS_RENAME_SETREGID -#define RUMP_SYS_RENAME_SETREGID rump___sysimpl_setregid +#ifndef RUMP_SYS_RENAME_EXTATTR_DELETE_FD +#define RUMP_SYS_RENAME_EXTATTR_DELETE_FD rump___sysimpl_extattr_delete_fd #endif -#ifndef RUMP_SYS_RENAME_BIND -#define RUMP_SYS_RENAME_BIND rump___sysimpl_bind +#ifndef RUMP_SYS_RENAME_CHMOD +#define RUMP_SYS_RENAME_CHMOD rump___sysimpl_chmod #endif -#ifndef RUMP_SYS_RENAME_SETXATTR -#define RUMP_SYS_RENAME_SETXATTR rump___sysimpl_setxattr +#ifndef RUMP_SYS_RENAME_BIND +#define RUMP_SYS_RENAME_BIND rump___sysimpl_bind #endif -#ifndef RUMP_SYS_RENAME_REBOOT -#define RUMP_SYS_RENAME_REBOOT rump___sysimpl_reboot +#ifndef RUMP_SYS_RENAME__KSEM_WAIT +#define RUMP_SYS_RENAME__KSEM_WAIT rump___sysimpl__ksem_wait #endif -#ifndef RUMP_SYS_RENAME_CLOSE -#define RUMP_SYS_RENAME_CLOSE rump___sysimpl_close +#ifndef RUMP_SYS_RENAME_FCHOWNAT +#define RUMP_SYS_RENAME_FCHOWNAT rump___sysimpl_fchownat #endif -#ifndef RUMP_SYS_RENAME_EXTATTR_DELETE_LINK -#define RUMP_SYS_RENAME_EXTATTR_DELETE_LINK rump___sysimpl_extattr_delete_link +#ifndef RUMP_SYS_RENAME_SETUID +#define RUMP_SYS_RENAME_SETUID rump___sysimpl_setuid #endif -#ifndef RUMP_SYS_RENAME___POSIX_CHOWN -#define RUMP_SYS_RENAME___POSIX_CHOWN rump___sysimpl___posix_chown +#ifndef RUMP_SYS_RENAME_GETUID_WITH_EUID +#define RUMP_SYS_RENAME_GETUID_WITH_EUID rump___sysimpl_getuid #endif -#ifndef RUMP_SYS_RENAME_AIO_ERROR -#define RUMP_SYS_RENAME_AIO_ERROR rump___sysimpl_aio_error +#ifndef RUMP_SYS_RENAME_CHROOT +#define RUMP_SYS_RENAME_CHROOT rump___sysimpl_chroot #endif -#ifndef RUMP_SYS_RENAME_FHSTATVFS1 -#define RUMP_SYS_RENAME_FHSTATVFS1 rump___sysimpl_fhstatvfs140 +#ifndef RUMP_SYS_RENAME_FCHMOD +#define RUMP_SYS_RENAME_FCHMOD rump___sysimpl_fchmod #endif -#ifndef RUMP_SYS_RENAME_SETSOCKOPT -#define RUMP_SYS_RENAME_SETSOCKOPT rump___sysimpl_setsockopt +#ifndef RUMP_SYS_RENAME_FPATHCONF +#define RUMP_SYS_RENAME_FPATHCONF rump___sysimpl_fpathconf #endif #ifndef RUMP_SYS_RENAME_UNMOUNT #define RUMP_SYS_RENAME_UNMOUNT rump___sysimpl_unmount #endif -#ifndef RUMP_SYS_RENAME_MKDIRAT -#define RUMP_SYS_RENAME_MKDIRAT rump___sysimpl_mkdirat +#ifndef RUMP_SYS_RENAME_READLINK +#define RUMP_SYS_RENAME_READLINK rump___sysimpl_readlink #endif -#ifndef RUMP_SYS_RENAME_SETSID -#define RUMP_SYS_RENAME_SETSID rump___sysimpl_setsid +#ifndef RUMP_SYS_RENAME_FUTIMENS +#define RUMP_SYS_RENAME_FUTIMENS rump___sysimpl_futimens #endif -#ifndef RUMP_SYS_RENAME_FACCESSAT -#define RUMP_SYS_RENAME_FACCESSAT rump___sysimpl_faccessat +#ifndef RUMP_SYS_RENAME_LSETXATTR +#define RUMP_SYS_RENAME_LSETXATTR rump___sysimpl_lsetxattr #endif -#ifndef RUMP_SYS_RENAME_LSTAT -#define RUMP_SYS_RENAME_LSTAT rump___sysimpl_lstat50 +#ifndef RUMP_SYS_RENAME__KSEM_GETVALUE +#define RUMP_SYS_RENAME__KSEM_GETVALUE rump___sysimpl__ksem_getvalue #endif -#ifndef RUMP_SYS_RENAME_OPENAT -#define RUMP_SYS_RENAME_OPENAT rump___sysimpl_openat +#ifndef RUMP_SYS_RENAME___POSIX_CHOWN +#define RUMP_SYS_RENAME___POSIX_CHOWN rump___sysimpl___posix_chown #endif -#ifndef RUMP_SYS_RENAME_TRUNCATE -#define RUMP_SYS_RENAME_TRUNCATE rump___sysimpl_truncate +#ifndef RUMP_SYS_RENAME_AIO_READ +#define RUMP_SYS_RENAME_AIO_READ rump___sysimpl_aio_read #endif -#ifndef RUMP_SYS_RENAME_FSYNC -#define RUMP_SYS_RENAME_FSYNC rump___sysimpl_fsync +#ifndef RUMP_SYS_RENAME_READ +#define RUMP_SYS_RENAME_READ rump___sysimpl_read #endif -#ifndef RUMP_SYS_RENAME_GETTIMEOFDAY -#define RUMP_SYS_RENAME_GETTIMEOFDAY rump___sysimpl_gettimeofday50 +#ifndef RUMP_SYS_RENAME_RENAME +#define RUMP_SYS_RENAME_RENAME rump___sysimpl_rename #endif -#ifndef RUMP_SYS_RENAME_UMASK -#define RUMP_SYS_RENAME_UMASK rump___sysimpl_umask +#ifndef RUMP_SYS_RENAME_WRITEV +#define RUMP_SYS_RENAME_WRITEV rump___sysimpl_writev #endif -#ifndef RUMP_SYS_RENAME__KSEM_DESTROY -#define RUMP_SYS_RENAME__KSEM_DESTROY rump___sysimpl__ksem_destroy +#ifndef RUMP_SYS_RENAME_CLOSE +#define RUMP_SYS_RENAME_CLOSE rump___sysimpl_close #endif -#ifndef RUMP_SYS_RENAME_FLOCK -#define RUMP_SYS_RENAME_FLOCK rump___sysimpl_flock +#ifndef RUMP_SYS_RENAME_GETPGID +#define RUMP_SYS_RENAME_GETPGID rump___sysimpl_getpgid #endif -#ifndef RUMP_SYS_RENAME_SETREUID -#define RUMP_SYS_RENAME_SETREUID rump___sysimpl_setreuid +#ifndef RUMP_SYS_RENAME_NANOSLEEP +#define RUMP_SYS_RENAME_NANOSLEEP rump___sysimpl_nanosleep50 #endif -#ifndef RUMP_SYS_RENAME___GETLOGIN -#define RUMP_SYS_RENAME___GETLOGIN rump___sysimpl___getlogin +#ifndef RUMP_SYS_RENAME_IOCTL +#define RUMP_SYS_RENAME_IOCTL rump___sysimpl_ioctl #endif -#ifndef RUMP_SYS_RENAME_MKNOD -#define RUMP_SYS_RENAME_MKNOD rump___sysimpl_mknod50 +#ifndef RUMP_SYS_RENAME_FHSTAT +#define RUMP_SYS_RENAME_FHSTAT rump___sysimpl_fhstat50 #endif -#ifndef RUMP_SYS_RENAME_MKFIFOAT -#define RUMP_SYS_RENAME_MKFIFOAT rump___sysimpl_mkfifoat +#ifndef RUMP_SYS_RENAME_RECVFROM +#define RUMP_SYS_RENAME_RECVFROM rump___sysimpl_recvfrom #endif -#ifndef RUMP_SYS_RENAME_POSIX_FADVISE -#define RUMP_SYS_RENAME_POSIX_FADVISE rump___sysimpl_posix_fadvise50 +#ifndef RUMP_SYS_RENAME__KSEM_INIT +#define RUMP_SYS_RENAME__KSEM_INIT rump___sysimpl__ksem_init #endif -#ifndef RUMP_SYS_RENAME___POSIX_RENAME -#define RUMP_SYS_RENAME___POSIX_RENAME rump___sysimpl___posix_rename +#ifndef RUMP_SYS_RENAME__KSEM_CLOSE +#define RUMP_SYS_RENAME__KSEM_CLOSE rump___sysimpl__ksem_close #endif -#ifndef RUMP_SYS_RENAME_DUP2 -#define RUMP_SYS_RENAME_DUP2 rump___sysimpl_dup2 +#ifndef RUMP_SYS_RENAME_MOUNT +#define RUMP_SYS_RENAME_MOUNT rump___sysimpl_mount50 #endif -#ifndef RUMP_SYS_RENAME_DUP3 -#define RUMP_SYS_RENAME_DUP3 rump___sysimpl_dup3 +#ifndef RUMP_SYS_RENAME_UTIMES +#define RUMP_SYS_RENAME_UTIMES rump___sysimpl_utimes50 #endif -#ifndef RUMP_SYS_RENAME_CLOCK_GETRES -#define RUMP_SYS_RENAME_CLOCK_GETRES rump___sysimpl_clock_getres50 +#ifndef RUMP_SYS_RENAME_FCHMODAT +#define RUMP_SYS_RENAME_FCHMODAT rump___sysimpl_fchmodat #endif -#ifndef RUMP_SYS_RENAME_REMOVEXATTR -#define RUMP_SYS_RENAME_REMOVEXATTR rump___sysimpl_removexattr +#ifndef RUMP_SYS_RENAME_KTRACE +#define RUMP_SYS_RENAME_KTRACE rump___sysimpl_ktrace #endif -#ifndef RUMP_SYS_RENAME_GETSOCKOPT -#define RUMP_SYS_RENAME_GETSOCKOPT rump___sysimpl_getsockopt +#ifndef RUMP_SYS_RENAME_SYNC +#define RUMP_SYS_RENAME_SYNC rump___sysimpl_sync #endif -#ifndef RUMP_SYS_RENAME_SYMLINKAT -#define RUMP_SYS_RENAME_SYMLINKAT rump___sysimpl_symlinkat +#ifndef RUMP_SYS_RENAME_UNLINKAT +#define RUMP_SYS_RENAME_UNLINKAT rump___sysimpl_unlinkat #endif -#ifndef RUMP_SYS_RENAME_FDATASYNC -#define RUMP_SYS_RENAME_FDATASYNC rump___sysimpl_fdatasync +#ifndef RUMP_SYS_RENAME_LLISTXATTR +#define RUMP_SYS_RENAME_LLISTXATTR rump___sysimpl_llistxattr #endif -#ifndef RUMP_SYS_RENAME__KSEM_TRYWAIT -#define RUMP_SYS_RENAME__KSEM_TRYWAIT rump___sysimpl__ksem_trywait +#ifndef RUMP_SYS_RENAME__KSEM_POST +#define RUMP_SYS_RENAME__KSEM_POST rump___sysimpl__ksem_post #endif -#ifndef RUMP_SYS_RENAME_RECVMSG -#define RUMP_SYS_RENAME_RECVMSG rump___sysimpl_recvmsg +#ifndef RUMP_SYS_RENAME_STATVFS1 +#define RUMP_SYS_RENAME_STATVFS1 rump___sysimpl_statvfs1 #endif -#ifndef RUMP_SYS_RENAME_RMDIR -#define RUMP_SYS_RENAME_RMDIR rump___sysimpl_rmdir +#ifndef RUMP_SYS_RENAME_STAT +#define RUMP_SYS_RENAME_STAT rump___sysimpl_stat50 #endif -#ifndef RUMP_SYS_RENAME_LIO_LISTIO -#define RUMP_SYS_RENAME_LIO_LISTIO rump___sysimpl_lio_listio +#ifndef RUMP_SYS_RENAME_SETSOCKOPT +#define RUMP_SYS_RENAME_SETSOCKOPT rump___sysimpl_setsockopt #endif -#ifndef RUMP_SYS_RENAME_LGETXATTR -#define RUMP_SYS_RENAME_LGETXATTR rump___sysimpl_lgetxattr +#ifndef RUMP_SYS_RENAME_GETDENTS +#define RUMP_SYS_RENAME_GETDENTS rump___sysimpl_getdents30 #endif -#ifndef RUMP_SYS_RENAME_FSTATVFS1 -#define RUMP_SYS_RENAME_FSTATVFS1 rump___sysimpl_fstatvfs1 +#ifndef RUMP_SYS_RENAME_KQUEUE +#define RUMP_SYS_RENAME_KQUEUE rump___sysimpl_kqueue #endif -#ifndef RUMP_SYS_RENAME_PWRITEV -#define RUMP_SYS_RENAME_PWRITEV rump___sysimpl_pwritev +#ifndef RUMP_SYS_RENAME___SYSCTL +#define RUMP_SYS_RENAME___SYSCTL rump___sysimpl___sysctl #endif -#ifndef RUMP_SYS_RENAME__KSEM_GETVALUE -#define RUMP_SYS_RENAME__KSEM_GETVALUE rump___sysimpl__ksem_getvalue +#ifndef RUMP_SYS_RENAME_FREMOVEXATTR +#define RUMP_SYS_RENAME_FREMOVEXATTR rump___sysimpl_fremovexattr #endif -#ifndef RUMP_SYS_RENAME_GETPGRP -#define RUMP_SYS_RENAME_GETPGRP rump___sysimpl_getpgrp +#ifndef RUMP_SYS_RENAME_EXTATTRCTL +#define RUMP_SYS_RENAME_EXTATTRCTL rump___sysimpl_extattrctl #endif -#ifndef RUMP_SYS_RENAME_SENDMMSG -#define RUMP_SYS_RENAME_SENDMMSG rump___sysimpl_sendmmsg +#ifndef RUMP_SYS_RENAME_GETITIMER +#define RUMP_SYS_RENAME_GETITIMER rump___sysimpl_getitimer50 #endif -#ifndef RUMP_SYS_RENAME___SYSCTL -#define RUMP_SYS_RENAME___SYSCTL rump___sysimpl___sysctl +#ifndef RUMP_SYS_RENAME_GETPID_WITH_PPID +#define RUMP_SYS_RENAME_GETPID_WITH_PPID rump___sysimpl_getpid #endif -#ifndef RUMP_SYS_RENAME_MKFIFO -#define RUMP_SYS_RENAME_MKFIFO rump___sysimpl_mkfifo +#ifndef RUMP_SYS_RENAME_SETREUID +#define RUMP_SYS_RENAME_SETREUID rump___sysimpl_setreuid #endif -#ifndef RUMP_SYS_RENAME_CLOCK_SETTIME -#define RUMP_SYS_RENAME_CLOCK_SETTIME rump___sysimpl_clock_settime50 +#ifndef RUMP_SYS_RENAME_FSTATAT +#define RUMP_SYS_RENAME_FSTATAT rump___sysimpl_fstatat #endif -#ifndef RUMP_SYS_RENAME_ACCESS -#define RUMP_SYS_RENAME_ACCESS rump___sysimpl_access +#ifndef RUMP_SYS_RENAME_LINKAT +#define RUMP_SYS_RENAME_LINKAT rump___sysimpl_linkat #endif -#ifndef RUMP_SYS_RENAME_ISSETUGID -#define RUMP_SYS_RENAME_ISSETUGID rump___sysimpl_issetugid +#ifndef RUMP_SYS_RENAME_TIMER_SETTIME +#define RUMP_SYS_RENAME_TIMER_SETTIME rump___sysimpl_timer_settime50 #endif -#ifndef RUMP_SYS_RENAME_PREAD -#define RUMP_SYS_RENAME_PREAD rump___sysimpl_pread +#ifndef RUMP_SYS_RENAME_SOCKETPAIR +#define RUMP_SYS_RENAME_SOCKETPAIR rump___sysimpl_socketpair #endif -#ifndef RUMP_SYS_RENAME_REVOKE -#define RUMP_SYS_RENAME_REVOKE rump___sysimpl_revoke +#ifndef RUMP_SYS_RENAME_AIO_WRITE +#define RUMP_SYS_RENAME_AIO_WRITE rump___sysimpl_aio_write #endif -#ifndef RUMP_SYS_RENAME_FCHOWNAT -#define RUMP_SYS_RENAME_FCHOWNAT rump___sysimpl_fchownat +#ifndef RUMP_SYS_RENAME_WRITE +#define RUMP_SYS_RENAME_WRITE rump___sysimpl_write #endif -#ifndef RUMP_SYS_RENAME_FSTAT -#define RUMP_SYS_RENAME_FSTAT rump___sysimpl_fstat50 +#ifndef RUMP_SYS_RENAME___SETLOGIN +#define RUMP_SYS_RENAME___SETLOGIN rump___sysimpl___setlogin #endif -#ifndef RUMP_SYS_RENAME_UNLINK -#define RUMP_SYS_RENAME_UNLINK rump___sysimpl_unlink +#ifndef RUMP_SYS_RENAME_SOCKET +#define RUMP_SYS_RENAME_SOCKET rump___sysimpl_socket30 #endif -#ifndef RUMP_SYS_RENAME_UTIMENSAT -#define RUMP_SYS_RENAME_UTIMENSAT rump___sysimpl_utimensat +#ifndef RUMP_SYS_RENAME_TIMER_GETOVERRUN +#define RUMP_SYS_RENAME_TIMER_GETOVERRUN rump___sysimpl_timer_getoverrun #endif -#ifndef RUMP_SYS_RENAME_SETITIMER -#define RUMP_SYS_RENAME_SETITIMER rump___sysimpl_setitimer50 +#ifndef RUMP_SYS_RENAME__KSEM_TIMEDWAIT +#define RUMP_SYS_RENAME__KSEM_TIMEDWAIT rump___sysimpl__ksem_timedwait #endif -#ifndef RUMP_SYS_RENAME_FHOPEN -#define RUMP_SYS_RENAME_FHOPEN rump___sysimpl_fhopen40 +#ifndef RUMP_SYS_RENAME_FTRUNCATE +#define RUMP_SYS_RENAME_FTRUNCATE rump___sysimpl_ftruncate #endif -#ifndef RUMP_SYS_RENAME__KSEM_INIT -#define RUMP_SYS_RENAME__KSEM_INIT rump___sysimpl__ksem_init +#ifndef RUMP_SYS_RENAME_FCHROOT +#define RUMP_SYS_RENAME_FCHROOT rump___sysimpl_fchroot #endif -#ifndef RUMP_SYS_RENAME_AIO_CANCEL -#define RUMP_SYS_RENAME_AIO_CANCEL rump___sysimpl_aio_cancel +#ifndef RUMP_SYS_RENAME_SETEUID +#define RUMP_SYS_RENAME_SETEUID rump___sysimpl_seteuid #endif -#ifndef RUMP_SYS_RENAME_SETEGID -#define RUMP_SYS_RENAME_SETEGID rump___sysimpl_setegid +#ifndef RUMP_SYS_RENAME_REBOOT +#define RUMP_SYS_RENAME_REBOOT rump___sysimpl_reboot #endif -#ifndef RUMP_SYS_RENAME_RENAME -#define RUMP_SYS_RENAME_RENAME rump___sysimpl_rename +#ifndef RUMP_SYS_RENAME_ACCEPT +#define RUMP_SYS_RENAME_ACCEPT rump___sysimpl_accept #endif -#ifndef RUMP_SYS_RENAME_AIO_SUSPEND -#define RUMP_SYS_RENAME_AIO_SUSPEND rump___sysimpl_aio_suspend50 +#ifndef RUMP_SYS_RENAME_READLINKAT +#define RUMP_SYS_RENAME_READLINKAT rump___sysimpl_readlinkat #endif -#ifndef RUMP_SYS_RENAME_KEVENT -#define RUMP_SYS_RENAME_KEVENT rump___sysimpl_kevent50 +#ifndef RUMP_SYS_RENAME_GETXATTR +#define RUMP_SYS_RENAME_GETXATTR rump___sysimpl_getxattr #endif -#ifndef RUMP_SYS_RENAME_GETGID_WITH_EGID -#define RUMP_SYS_RENAME_GETGID_WITH_EGID rump___sysimpl_getgid +#ifndef RUMP_SYS_RENAME__KSEM_UNLINK +#define RUMP_SYS_RENAME__KSEM_UNLINK rump___sysimpl__ksem_unlink #endif -#ifndef RUMP_SYS_RENAME_OPEN -#define RUMP_SYS_RENAME_OPEN rump___sysimpl_open +#ifndef RUMP_SYS_RENAME_NFSSVC +#define RUMP_SYS_RENAME_NFSSVC rump___sysimpl_nfssvc #endif -#ifndef RUMP_SYS_RENAME_PACCEPT -#define RUMP_SYS_RENAME_PACCEPT rump___sysimpl_paccept +#ifndef RUMP_SYS_RENAME_POSIX_FALLOCATE +#define RUMP_SYS_RENAME_POSIX_FALLOCATE rump___sysimpl_posix_fallocate #endif -#ifndef RUMP_SYS_RENAME_LSETXATTR -#define RUMP_SYS_RENAME_LSETXATTR rump___sysimpl_lsetxattr +#ifndef RUMP_SYS_RENAME___POSIX_FCHOWN +#define RUMP_SYS_RENAME___POSIX_FCHOWN rump___sysimpl___posix_fchown #endif -#ifndef RUMP_SYS_RENAME_SETGROUPS -#define RUMP_SYS_RENAME_SETGROUPS rump___sysimpl_setgroups +#ifndef RUMP_SYS_RENAME_GETPPID +#define RUMP_SYS_RENAME_GETPPID rump___sysimpl_getppid #endif -#ifndef RUMP_SYS_RENAME_SENDMSG -#define RUMP_SYS_RENAME_SENDMSG rump___sysimpl_sendmsg +#ifndef RUMP_SYS_RENAME_GETTIMEOFDAY +#define RUMP_SYS_RENAME_GETTIMEOFDAY rump___sysimpl_gettimeofday50 #endif -#ifndef RUMP_SYS_RENAME_EXTATTRCTL -#define RUMP_SYS_RENAME_EXTATTRCTL rump___sysimpl_extattrctl +#ifndef RUMP_SYS_RENAME_EXTATTR_LIST_FD +#define RUMP_SYS_RENAME_EXTATTR_LIST_FD rump___sysimpl_extattr_list_fd #endif -#ifndef RUMP_SYS_RENAME_NFSSVC -#define RUMP_SYS_RENAME_NFSSVC rump___sysimpl_nfssvc +#ifndef RUMP_SYS_RENAME_EXTATTR_GET_FILE +#define RUMP_SYS_RENAME_EXTATTR_GET_FILE rump___sysimpl_extattr_get_file #endif -#ifndef RUMP_SYS_RENAME___POSIX_LCHOWN -#define RUMP_SYS_RENAME___POSIX_LCHOWN rump___sysimpl___posix_lchown +#ifndef RUMP_SYS_RENAME_FUTIMES +#define RUMP_SYS_RENAME_FUTIMES rump___sysimpl_futimes50 #endif struct msghdr; Index: sys/rump/librump/rumpkern/rump_syscalls.c =================================================================== RCS file: /cvsroot/src/sys/rump/librump/rumpkern/rump_syscalls.c,v retrieving revision 1.128 diff -u -u -r1.128 rump_syscalls.c --- sys/rump/librump/rumpkern/rump_syscalls.c 6 May 2016 10:19:40 -0000 1.128 +++ sys/rump/librump/rumpkern/rump_syscalls.c 14 Jun 2016 22:55:26 -0000 @@ -1,4 +1,4 @@ -/* $NetBSD: rump_syscalls.c,v 1.128 2016/05/06 10:19:40 pooka Exp $ */ +/* $NetBSD$ */ /* * System call vector and marshalling for rump. @@ -15,7 +15,7 @@ #ifdef __NetBSD__ #include -__KERNEL_RCSID(0, "$NetBSD: rump_syscalls.c,v 1.128 2016/05/06 10:19:40 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD$"); #include #include @@ -7866,9 +7866,8 @@ .sy_call = (sy_call_t *)rumpns_enosys, }, /* 350 = sched_yield */ { - .sy_flags = SYCALL_NOSYS, .sy_call = (sy_call_t *)rumpns_enosys, - }, /* 351 = filler */ +}, /* 351 = _sched_protect */ { .sy_flags = SYCALL_NOSYS, .sy_call = (sy_call_t *)rumpns_enosys, Index: sys/sys/lwp.h =================================================================== RCS file: /cvsroot/src/sys/sys/lwp.h,v retrieving revision 1.170 diff -u -u -r1.170 lwp.h --- sys/sys/lwp.h 31 Mar 2015 01:10:02 -0000 1.170 +++ sys/sys/lwp.h 14 Jun 2016 22:55:26 -0000 @@ -105,6 +105,9 @@ pri_t l_kpribase; /* !: kernel priority base level */ pri_t l_priority; /* l: scheduler priority */ pri_t l_inheritedprio;/* l: inherited priority */ + pri_t l_protectprio; /* l: for PTHREAD_PRIO_PROTECT */ + pri_t l_auxprio; /* l: max(inherit,protect) priority */ + int l_protectdepth; /* l: for PTHREAD_PRIO_PROTECT */ SLIST_HEAD(, turnstile) l_pi_lenders; /* l: ts lending us priority */ uint64_t l_ncsw; /* l: total context switches */ uint64_t l_nivcsw; /* l: involuntary context switches */ @@ -403,9 +406,6 @@ { KASSERT(mutex_owned(l->l_mutex)); - if (l->l_inheritedprio == pri) - return; - (*l->l_syncobj->sobj_lendpri)(l, pri); KASSERT(l->l_inheritedprio == pri); } @@ -418,7 +418,7 @@ pri = l->l_priority; if ((l->l_flag & LW_SYSTEM) == 0 && l->l_kpriority && pri < PRI_KERNEL) pri = (pri >> 1) + l->l_kpribase; - return MAX(l->l_inheritedprio, pri); + return MAX(l->l_auxprio, pri); } int lwp_create(lwp_t *, struct proc *, vaddr_t, int, Index: sys/sys/sched.h =================================================================== RCS file: /cvsroot/src/sys/sys/sched.h,v retrieving revision 1.75 diff -u -u -r1.75 sched.h --- sys/sys/sched.h 21 Nov 2011 04:36:05 -0000 1.75 +++ sys/sys/sched.h 14 Jun 2016 22:55:26 -0000 @@ -124,6 +124,7 @@ int _sched_setaffinity(pid_t, lwpid_t, size_t, const cpuset_t *); int _sched_getparam(pid_t, lwpid_t, int *, struct sched_param *); int _sched_setparam(pid_t, lwpid_t, int, const struct sched_param *); +int _sched_protect(int); __END_DECLS /* Index: sys/sys/syscall.h =================================================================== RCS file: /cvsroot/src/sys/sys/syscall.h,v retrieving revision 1.295 diff -u -u -r1.295 syscall.h --- sys/sys/syscall.h 6 May 2016 10:19:40 -0000 1.295 +++ sys/sys/syscall.h 14 Jun 2016 22:55:26 -0000 @@ -1,4 +1,4 @@ -/* $NetBSD: syscall.h,v 1.295 2016/05/06 10:19:40 pooka Exp $ */ +/* $NetBSD$ */ /* * System call numbers. @@ -953,6 +953,9 @@ /* syscall: "sched_yield" ret: "int" args: */ #define SYS_sched_yield 350 +/* syscall: "_sched_protect" ret: "int" args: "int" */ +#define SYS__sched_protect 351 + /* syscall: "fsync_range" ret: "int" args: "int" "int" "off_t" "off_t" */ #define SYS_fsync_range 354 Index: sys/sys/syscallargs.h =================================================================== RCS file: /cvsroot/src/sys/sys/syscallargs.h,v retrieving revision 1.279 diff -u -u -r1.279 syscallargs.h --- sys/sys/syscallargs.h 6 May 2016 10:19:40 -0000 1.279 +++ sys/sys/syscallargs.h 14 Jun 2016 22:55:26 -0000 @@ -1,4 +1,4 @@ -/* $NetBSD: syscallargs.h,v 1.279 2016/05/06 10:19:40 pooka Exp $ */ +/* $NetBSD$ */ /* * System call argument lists. @@ -2188,6 +2188,13 @@ check_syscall_args(sys__sched_getaffinity) #endif /* !RUMP_CLIENT */ +#ifndef RUMP_CLIENT +struct sys__sched_protect_args { + syscallarg(int) priority; +}; +check_syscall_args(sys__sched_protect) +#endif /* !RUMP_CLIENT */ + struct sys_fsync_range_args { syscallarg(int) fd; syscallarg(int) flags; @@ -3778,6 +3785,8 @@ int sys_sched_yield(struct lwp *, const void *, register_t *); +int sys__sched_protect(struct lwp *, const struct sys__sched_protect_args *, register_t *); + int sys_fsync_range(struct lwp *, const struct sys_fsync_range_args *, register_t *); int sys_uuidgen(struct lwp *, const struct sys_uuidgen_args *, register_t *); Index: sys/sys/unistd.h =================================================================== RCS file: /cvsroot/src/sys/sys/unistd.h,v retrieving revision 1.58 diff -u -u -r1.58 unistd.h --- sys/sys/unistd.h 10 Jun 2016 23:29:20 -0000 1.58 +++ sys/sys/unistd.h 14 Jun 2016 22:55:26 -0000 @@ -146,6 +146,8 @@ /* pthread_attr for stack address */ #define _POSIX_THREAD_ATTR_STACKADDR 200112L /* _r functions */ +#define _POSIX_THREAD_PRIO_PROTECT 200112L + /* PTHREAD_PRIO_PROTECT */ #define _POSIX_THREAD_SAFE_FUNCTIONS 200112L /* timeouts */ #undef _POSIX_TIMEOUTS