Reviewed by: msmith, bde long ago
POSIX.4 headers and sysctl variables. Nothing should change unless POSIX4 is defined or _POSIX_VERSION is set to 199309.
This commit is contained in:
parent
644d85f4ca
commit
917e476dad
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=34030
@ -1,4 +1,4 @@
|
|||||||
# $Id: BSD.include.dist,v 1.14 1997/09/28 09:20:48 markm Exp $
|
# $Id: BSD.include.dist,v 1.15 1998/01/17 15:52:32 bde Exp $
|
||||||
#
|
#
|
||||||
|
|
||||||
/set type=dir uname=bin gname=bin mode=0755
|
/set type=dir uname=bin gname=bin mode=0755
|
||||||
@ -35,6 +35,8 @@
|
|||||||
..
|
..
|
||||||
pccard
|
pccard
|
||||||
..
|
..
|
||||||
|
posix4
|
||||||
|
..
|
||||||
protocols
|
protocols
|
||||||
..
|
..
|
||||||
readline
|
readline
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# From: @(#)Makefile 8.2 (Berkeley) 1/4/94
|
# From: @(#)Makefile 8.2 (Berkeley) 1/4/94
|
||||||
# $Id: Makefile,v 1.71 1998/02/11 04:57:24 jdp Exp $
|
# $Id: Makefile,v 1.72 1998/02/13 03:10:26 bde Exp $
|
||||||
#
|
#
|
||||||
# Doing a make install builds /usr/include
|
# Doing a make install builds /usr/include
|
||||||
#
|
#
|
||||||
@ -14,7 +14,8 @@ FILES= a.out.h ar.h assert.h bitstring.h ctype.h db.h dirent.h disktab.h \
|
|||||||
dlfcn.h elf.h err.h fnmatch.h fstab.h \
|
dlfcn.h elf.h err.h fnmatch.h fstab.h \
|
||||||
fts.h glob.h grp.h strhash.h histedit.h \
|
fts.h glob.h grp.h strhash.h histedit.h \
|
||||||
kvm.h limits.h link.h locale.h malloc.h memory.h mpool.h \
|
kvm.h limits.h link.h locale.h malloc.h memory.h mpool.h \
|
||||||
ndbm.h netdb.h nl_types.h nlist.h paths.h pthread.h pthread_np.h pwd.h \
|
ndbm.h netdb.h nl_types.h nlist.h \
|
||||||
|
paths.h pthread.h pthread_np.h pwd.h \
|
||||||
ranlib.h regex.h regexp.h resolv.h rune.h runetype.h setjmp.h sgtty.h \
|
ranlib.h regex.h regexp.h resolv.h rune.h runetype.h setjmp.h sgtty.h \
|
||||||
signal.h stab.h stddef.h stdio.h stdlib.h string.h stringlist.h \
|
signal.h stab.h stddef.h stdio.h stdlib.h string.h stringlist.h \
|
||||||
strings.h struct.h sysexits.h tar.h time.h timers.h ttyent.h unistd.h \
|
strings.h struct.h sysexits.h tar.h time.h timers.h ttyent.h unistd.h \
|
||||||
@ -32,9 +33,15 @@ RPCFILES= auth.h auth_unix.h clnt.h pmap_clnt.h pmap_prot.h pmap_rmt.h \
|
|||||||
auth_des.h des.h des_crypt.h
|
auth_des.h des.h des_crypt.h
|
||||||
|
|
||||||
MFILES= float.h floatingpoint.h stdarg.h varargs.h
|
MFILES= float.h floatingpoint.h stdarg.h varargs.h
|
||||||
|
|
||||||
|
# posix4/aio.h conflicts with dysons and isn't installed:
|
||||||
|
PFILES= mqueue.h posix4.h sched.h semaphore.h \
|
||||||
|
# aio.h
|
||||||
|
|
||||||
LFILES= errno.h fcntl.h poll.h syslog.h termios.h
|
LFILES= errno.h fcntl.h poll.h syslog.h termios.h
|
||||||
|
|
||||||
LDIRS= msdosfs net netns netatalk netinet netipx netkey nfs pccard sys vm \
|
LDIRS= msdosfs net netns netatalk netinet netipx netkey nfs \
|
||||||
|
pccard posix4 sys vm \
|
||||||
# netccitt netiso
|
# netccitt netiso
|
||||||
|
|
||||||
LNOHEADERDIRS= isofs ufs
|
LNOHEADERDIRS= isofs ufs
|
||||||
@ -87,6 +94,10 @@ beforeinstall: ${SHARED}
|
|||||||
.for i in ${MFILES}
|
.for i in ${MFILES}
|
||||||
ln -sf machine/$i ${DESTDIR}/usr/include/$i
|
ln -sf machine/$i ${DESTDIR}/usr/include/$i
|
||||||
.endfor
|
.endfor
|
||||||
|
.for i in ${PFILES}
|
||||||
|
ln -sf posix4/$i ${DESTDIR}/usr/include/$i
|
||||||
|
.endfor
|
||||||
|
|
||||||
|
|
||||||
copies:
|
copies:
|
||||||
.for i in ${LDIRS} ${LNOHEADERDIRS} machine
|
.for i in ${LDIRS} ${LNOHEADERDIRS} machine
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)limits.h 8.2 (Berkeley) 1/4/94
|
* @(#)limits.h 8.2 (Berkeley) 1/4/94
|
||||||
* $Id$
|
* $Id: limits.h,v 1.5 1997/12/27 22:56:41 steve Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _LIMITS_H_
|
#ifndef _LIMITS_H_
|
||||||
@ -60,6 +60,22 @@
|
|||||||
#define _POSIX2_EXPR_NEST_MAX 32
|
#define _POSIX2_EXPR_NEST_MAX 32
|
||||||
#define _POSIX2_LINE_MAX 2048
|
#define _POSIX2_LINE_MAX 2048
|
||||||
#define _POSIX2_RE_DUP_MAX 255
|
#define _POSIX2_RE_DUP_MAX 255
|
||||||
|
|
||||||
|
#ifdef POSIX4_VISIBLE
|
||||||
|
|
||||||
|
#define _POSIX_AIO_LISTIO_MAX 2
|
||||||
|
#define _POSIX_AIO_MAX 1
|
||||||
|
#define _POSIX_DELAYTIMER_MAX 32
|
||||||
|
#define _POSIX_MQ_OPEN_MAX 8
|
||||||
|
#define _POSIX_MQ_PRIO_MAX 32
|
||||||
|
#define _POSIX_RTSIG_MAX 8
|
||||||
|
#define _POSIX_SEM_NSEMS_MAX 256
|
||||||
|
#define _POSIX_SEM_VALUE_MAX 32767
|
||||||
|
#define _POSIX_SIGQUEUE_MAX 32
|
||||||
|
#define _POSIX_TIMER_MAX 32
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* !_ANSI_SOURCE */
|
#endif /* !_ANSI_SOURCE */
|
||||||
|
|
||||||
#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)
|
#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)
|
||||||
|
@ -63,6 +63,11 @@ int signanosleep __P((const struct timespec *, struct timespec *,
|
|||||||
int sigpending __P((sigset_t *));
|
int sigpending __P((sigset_t *));
|
||||||
int sigprocmask __P((int, const sigset_t *, sigset_t *));
|
int sigprocmask __P((int, const sigset_t *, sigset_t *));
|
||||||
int sigsuspend __P((const sigset_t *));
|
int sigsuspend __P((const sigset_t *));
|
||||||
|
#ifdef POSIX4_VISIBLE
|
||||||
|
int sigqueue __P((_BSD_PID_T_, int, const union sigval));
|
||||||
|
int sigtimedwait __P((const sig_set_t *, siginfo_t *));
|
||||||
|
int sigwaitinfo __P((const sig_set_t *, siginfo_t *));
|
||||||
|
#endif
|
||||||
#ifndef _POSIX_SOURCE
|
#ifndef _POSIX_SOURCE
|
||||||
int killpg __P((_BSD_PID_T_, int));
|
int killpg __P((_BSD_PID_T_, int));
|
||||||
int sigaltstack __P((const struct sigaltstack *, struct sigaltstack *));
|
int sigaltstack __P((const struct sigaltstack *, struct sigaltstack *));
|
||||||
|
@ -174,6 +174,113 @@ sysconf(name)
|
|||||||
case _SC_2_UPE:
|
case _SC_2_UPE:
|
||||||
mib[0] = CTL_USER;
|
mib[0] = CTL_USER;
|
||||||
mib[1] = USER_POSIX2_UPE;
|
mib[1] = USER_POSIX2_UPE;
|
||||||
|
goto yesno;
|
||||||
|
|
||||||
|
#ifdef POSIX4
|
||||||
|
/* POSIX.4 */
|
||||||
|
|
||||||
|
case _SC_ASYNCHRONOUS_IO:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_ASYNCHRONOUS_IO;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_MAPPED_FILES:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_MAPPED_FILES;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_MEMLOCK:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_MEMLOCK;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_MEMLOCK_RANGE:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_MEMLOCK_RANGE;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_MEMORY_PROTECTION:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_MEMORY_PROTECTION;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_MESSAGE_PASSING:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_MESSAGE_PASSING;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_PRIORITIZED_IO:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_PRIORITIZED_IO;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_PRIORITY_SCHEDULING:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_PRIORITY_SCHEDULING;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_REALTIME_SIGNALS:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_REALTIME_SIGNALS;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_SEMAPHORES:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_SEMAPHORES;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_FSYNC:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_FSYNC;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_SHARED_MEMORY_OBJECTS:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_SHARED_MEMORY_OBJECTS;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_SYNCHRONIZED_IO:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_SYNCHRONIZED_IO;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_TIMERS:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_TIMERS;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_AIO_LISTIO_MAX:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_AIO_LISTIO_MAX;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_AIO_MAX:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_AIO_MAX;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_AIO_PRIO_DELTA_MAX:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_AIO_PRIO_DELTA_MAX;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_DELAYTIMER_MAX:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_DELAYTIMER_MAX;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_MQ_OPEN_MAX:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_MQ_OPEN_MAX;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_PAGESIZE:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_PAGESIZE;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_RTSIG_MAX:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_RTSIG_MAX;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_SEM_NSEMS_MAX:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_SEM_NSEMS_MAX;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_SEM_VALUE_MAX:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_SEM_VALUE_MAX;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_SIGQUEUE_MAX:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_SIGQUEUE_MAX;
|
||||||
|
goto yesno;
|
||||||
|
case _SC_TIMER_MAX:
|
||||||
|
mib[0] = CTL_POSIX4;
|
||||||
|
mib[1] = CTL_POSIX4_TIMER_MAX;
|
||||||
|
goto yesno;
|
||||||
|
#endif /* POSIX4 */
|
||||||
|
|
||||||
yesno: if (sysctl(mib, 2, &value, &len, NULL, 0) == -1)
|
yesno: if (sysctl(mib, 2, &value, &len, NULL, 0) == -1)
|
||||||
return (-1);
|
return (-1);
|
||||||
if (value == 0)
|
if (value == 0)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $Id: Makefile,v 1.33 1998/01/01 10:12:14 bde Exp $
|
# $Id: Makefile,v 1.34 1998/01/16 18:49:42 bde Exp $
|
||||||
|
|
||||||
MAN9= MD5.9 \
|
MAN9= MD5.9 \
|
||||||
VFS.9 VFS_FHTOVP.9 VFS_INIT.9 VFS_MOUNT.9 VFS_QUOTACTL.9 \
|
VFS.9 VFS_FHTOVP.9 VFS_INIT.9 VFS_MOUNT.9 VFS_QUOTACTL.9 \
|
||||||
@ -14,7 +14,7 @@ MAN9= MD5.9 \
|
|||||||
at_exit.9 at_fork.9 at_shutdown.9 bios.9 boot.9 cd.9 copy.9 \
|
at_exit.9 at_fork.9 at_shutdown.9 bios.9 boot.9 cd.9 copy.9 \
|
||||||
devfs_add_devswf.9 devfs_link.9 devfs_remove_dev.9 \
|
devfs_add_devswf.9 devfs_link.9 devfs_remove_dev.9 \
|
||||||
fetch.9 ifnet.9 inittodr.9 intro.9 kernacc.9 malloc.9 \
|
fetch.9 ifnet.9 inittodr.9 intro.9 kernacc.9 malloc.9 \
|
||||||
mi_switch.9 panic.9 physio.9 psignal.9 \
|
mi_switch.9 panic.9 physio.9 posix4.9 psignal.9 \
|
||||||
resettodr.9 rtalloc.9 rtentry.9 scsiconf.9 sd.9 sleep.9 spl.9 st.9 \
|
resettodr.9 rtalloc.9 rtentry.9 scsiconf.9 sd.9 sleep.9 spl.9 st.9 \
|
||||||
store.9 style.9 suser.9 time.9 timeout.9 uio.9 \
|
store.9 style.9 suser.9 time.9 timeout.9 uio.9 \
|
||||||
vget.9 vnode.9 vput.9 vref.9 vrele.9 vslock.9
|
vget.9 vnode.9 vput.9 vref.9 vrele.9 vslock.9
|
||||||
|
119
share/man/man9/posix4.9
Normal file
119
share/man/man9/posix4.9
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
.\" Copyright (c) 1998 HD Associates, Inc.
|
||||||
|
.\" All rights reserved.
|
||||||
|
.\"
|
||||||
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
|
.\" modification, are permitted provided that the following conditions
|
||||||
|
.\" are met:
|
||||||
|
.\" 1. Redistributions of source code must retain the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer.
|
||||||
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer in the
|
||||||
|
.\" documentation and/or other materials provided with the distribution.
|
||||||
|
.\"
|
||||||
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
.\" SUCH DAMAGE.
|
||||||
|
.\"
|
||||||
|
.\" $Id: posix4.9,v 1.8 1998/01/02 19:22:52 alex Exp $
|
||||||
|
.Dd March 1, 1998
|
||||||
|
.Dt POSIX.4 9
|
||||||
|
.Os FreeBSD 3.0
|
||||||
|
.Sh NAME
|
||||||
|
.Nm posix4
|
||||||
|
.Nd "POSIX.4 extensions"
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
POSIX.4 adds real time extensions and some commonly used
|
||||||
|
Berkeley extensions to POSIX.1
|
||||||
|
This section contains information about the the
|
||||||
|
POSIX.4 extensions to the system.
|
||||||
|
.Sh STATUS
|
||||||
|
March 1, 1998 adds the header file changes to 3.0. There should be no
|
||||||
|
visible differences as long as _POSIX_VERSION is left at 199009L and
|
||||||
|
no one builds kernels with a POSIX4 option.
|
||||||
|
.Pp
|
||||||
|
If you are working with something defined in POSIX.4 then there is a good
|
||||||
|
chance we conflict. If you have the time then set
|
||||||
|
_POSIX_VERSION to 199309L in /etc/make.conf and see that your work
|
||||||
|
fits with mine.
|
||||||
|
.Pp
|
||||||
|
Since this only brings in the headers I'm only explaining the feature
|
||||||
|
test options.
|
||||||
|
.Sh SPECIFYING THE VERSION
|
||||||
|
There are three manifest constants that set the version and programming interface
|
||||||
|
for POSIX.4.
|
||||||
|
.Bd -literal -offset 0i
|
||||||
|
_POSIX_VERSION
|
||||||
|
.Ed
|
||||||
|
specifies the system for which the system is built. The default
|
||||||
|
is POSIX.1 and is 199009L. POSIX.4 is 199309L. This defines
|
||||||
|
the base features of the operating system.
|
||||||
|
.Bd -literal -offset 0i
|
||||||
|
_POSIX_SOURCE
|
||||||
|
.Ed
|
||||||
|
is a macro from POSIX.1 that can
|
||||||
|
be defined to specify that only POSIX and ANSI functionality should occur
|
||||||
|
in the name space.
|
||||||
|
.Bd -literal -offset 0i
|
||||||
|
_POSIX_C_SOURCE
|
||||||
|
.Ed
|
||||||
|
is a macro from POSIX.4 that can be defined to specify that only
|
||||||
|
POSIX and ANSI functionality from a specific POSIX version should occur
|
||||||
|
in the name space, i.e., if _POSIX_VERSION is 199309L (POSIX.4) but
|
||||||
|
_POSIX_C_SOURCE is 199009L (POSIX.1) then only POSIX.1 features should
|
||||||
|
appear.
|
||||||
|
.Sh PROPERLY HIDING EXTENSIONS
|
||||||
|
.Bd -literal -offset 0i
|
||||||
|
POSIX4_VISIBLE
|
||||||
|
.Ed
|
||||||
|
is a test macro that tries to sort out when extensions should be
|
||||||
|
visible.
|
||||||
|
.Pp
|
||||||
|
In normal C program development
|
||||||
|
only _POSIX_VERSION is set, permitting BSD extensions to
|
||||||
|
appear to the programs. However, when adding new functionality mandated
|
||||||
|
by POSIX.4, it
|
||||||
|
is important to satisfy the requirements added by the
|
||||||
|
new _POSIX_C_SOURCE macro. POSIX4_VISIBLE (not a standard feature test macro)
|
||||||
|
is defined in sys/unistd.h when the combination of _POSIX_VERSION,
|
||||||
|
_POSIX_SOURCE, and _POSIX_C_SOURCE indicate the extensions are in scope.
|
||||||
|
.Pp
|
||||||
|
Since for POSIX to work you must include <unistd.h> which ultimately
|
||||||
|
sets this up header files can always assume this is visible without
|
||||||
|
including anything.
|
||||||
|
.Pp
|
||||||
|
Some traditional BSD headers (e.g., mmap.h) are now specified in POSIX.4.
|
||||||
|
This means that functionality not present in POSIX.4 should now be
|
||||||
|
hidden by testing _POSIX_SOURCE or _POSIX_C_SOURCE. The safest thing
|
||||||
|
is to hide them when _POSIX_C_SOURCE is defined and less than 199309L.
|
||||||
|
Don't bracket the extensions with the POSIX.4 feature test macros.
|
||||||
|
For example, don't conditionalize new memory locking flags with
|
||||||
|
_POSIX_MEMLOCK. It will be too easy for conflicting implementations
|
||||||
|
that don't pay heed to the POSIX.4 flags to sneak into the system.
|
||||||
|
.Sh NON STANDARD TEST MACROS
|
||||||
|
.Bd -literal -offset 0i
|
||||||
|
POSIX4_INCLUDE_MAYBES
|
||||||
|
.Ed
|
||||||
|
requests that all header files that the POSIX.4 spec says a standard
|
||||||
|
header may include should be included. Normally no non-required
|
||||||
|
headers are included. Setting this pre-processor definition should
|
||||||
|
make any compliant program compile without issues of header file
|
||||||
|
inclusion.
|
||||||
|
.Bd -literal -offset 0i
|
||||||
|
POSIX4
|
||||||
|
.Ed
|
||||||
|
is a config option and (currently) a request to build POSIX.4 by
|
||||||
|
setting the _POSIX_VERSION to 199309L in sys/unistd.h.
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Sh HISTORY
|
||||||
|
The
|
||||||
|
.Nm posix4
|
||||||
|
section manual page appeared in
|
||||||
|
.Fx 3.0 .
|
@ -392,6 +392,8 @@ pci/pci_compat.c optional pci
|
|||||||
pci/pcisupport.c optional pci
|
pci/pcisupport.c optional pci
|
||||||
pci/tek390.c optional amd device-driver
|
pci/tek390.c optional amd device-driver
|
||||||
pci/wdc_p.c optional wdc device-driver
|
pci/wdc_p.c optional wdc device-driver
|
||||||
|
posix4/posix4_mib.c optional posix4
|
||||||
|
posix4/ksched.c optional posix4
|
||||||
scsi/cd.c optional cd
|
scsi/cd.c optional cd
|
||||||
scsi/ch.c optional ch
|
scsi/ch.c optional ch
|
||||||
scsi/od.c optional od
|
scsi/od.c optional od
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $Id: options,v 1.62 1998/02/23 07:42:43 dyson Exp $
|
# $Id: options,v 1.63 1998/02/27 10:02:37 itojun Exp $
|
||||||
|
|
||||||
# Format:
|
# Format:
|
||||||
# Option name filename
|
# Option name filename
|
||||||
@ -30,6 +30,9 @@ SYSVSEM opt_sysvipc.h
|
|||||||
SYSVSHM opt_sysvipc.h
|
SYSVSHM opt_sysvipc.h
|
||||||
UCONSOLE
|
UCONSOLE
|
||||||
|
|
||||||
|
# POSIX 4.
|
||||||
|
POSIX4 opt_posix4.h
|
||||||
|
|
||||||
# Do we want the config file compiled into the kernel?
|
# Do we want the config file compiled into the kernel?
|
||||||
INCLUDE_CONFIG_FILE opt_config.h
|
INCLUDE_CONFIG_FILE opt_config.h
|
||||||
|
|
||||||
|
252
sys/kern/ksched.c
Normal file
252
sys/kern/ksched.c
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 1997
|
||||||
|
* HD Associates, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by HD Associates, Inc
|
||||||
|
* 4. Neither the name of the author nor the names of any co-contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ksched: Soft real time scheduling based on "rtprio".
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/systm.h>
|
||||||
|
#include <sys/proc.h>
|
||||||
|
#include <sys/kernel.h>
|
||||||
|
#include <machine/cpu.h> /* For need_resched */
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#include <sys/posix4.h>
|
||||||
|
|
||||||
|
/* ksched: Real-time extension to support POSIX priority scheduling.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static struct timespec rr_interval;
|
||||||
|
|
||||||
|
int ksched_attach(int p4_instance, int fac_code, void **p)
|
||||||
|
{
|
||||||
|
rr_interval.tv_sec = 0;
|
||||||
|
rr_interval.tv_nsec = 1000000000L / roundrobin_interval();
|
||||||
|
|
||||||
|
*p = 0;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_detach(void *p)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX About priorities
|
||||||
|
*
|
||||||
|
* POSIX4 requires that numerically higher priorities be of
|
||||||
|
* higher priority. It also permits sched_setparam to be
|
||||||
|
* implementation defined for SCHED_OTHER. I don't like
|
||||||
|
* the notion of inverted priorites for normal processes when
|
||||||
|
* you can use "setpriority" for that.
|
||||||
|
*
|
||||||
|
* I'm rejecting sched_setparam for SCHED_OTHER with EINVAL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Macros to convert between the unix (lower numerically is higher priority)
|
||||||
|
* and POSIX4 (higher numerically is higher priority)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define p4prio_to_rtpprio(P) (RTP_PRIO_MAX - (P))
|
||||||
|
#define rtpprio_to_p4prio(P) (RTP_PRIO_MAX - (P))
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
getscheduler(int *ret, void *hook, struct proc *p)
|
||||||
|
{
|
||||||
|
int e = 0;
|
||||||
|
|
||||||
|
switch (p->p_rtprio.type)
|
||||||
|
{
|
||||||
|
case RTP_PRIO_FIFO:
|
||||||
|
*ret = SCHED_FIFO;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RTP_PRIO_REALTIME:
|
||||||
|
*ret = SCHED_RR;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
*ret = SCHED_OTHER;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_setparam(int *ret, void *hook,
|
||||||
|
struct proc *p, const struct sched_param *param)
|
||||||
|
{
|
||||||
|
int e, policy;
|
||||||
|
|
||||||
|
e = getscheduler(&policy, hook, p);
|
||||||
|
|
||||||
|
if (e == 0)
|
||||||
|
{
|
||||||
|
if (policy == SCHED_OTHER)
|
||||||
|
e = EINVAL;
|
||||||
|
else
|
||||||
|
e = ksched_setscheduler(ret, hook, p, policy, param);
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_getparam(int *ret, void *hook,
|
||||||
|
struct proc *p, struct sched_param *param)
|
||||||
|
{
|
||||||
|
if (RTP_PRIO_IS_REALTIME(p->p_rtprio.type))
|
||||||
|
param->sched_priority = rtpprio_to_p4prio(p->p_rtprio.prio);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX The priority and scheduler modifications should
|
||||||
|
* be moved into published interfaces in kern/kern_sync.
|
||||||
|
*
|
||||||
|
* The permissions to modify process p were checked in "posix4proc()".
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int ksched_setscheduler(int *ret, void *hook,
|
||||||
|
struct proc *p, int policy, const struct sched_param *param)
|
||||||
|
{
|
||||||
|
int e = 0;
|
||||||
|
struct rtprio rtp;
|
||||||
|
|
||||||
|
switch(policy)
|
||||||
|
{
|
||||||
|
case SCHED_RR:
|
||||||
|
case SCHED_FIFO:
|
||||||
|
|
||||||
|
if (param->sched_priority >= RTP_PRIO_MIN &&
|
||||||
|
param->sched_priority <= RTP_PRIO_MAX)
|
||||||
|
{
|
||||||
|
rtp.type = (policy == SCHED_FIFO)
|
||||||
|
? RTP_PRIO_FIFO : RTP_PRIO_REALTIME;
|
||||||
|
|
||||||
|
rtp.prio = p4prio_to_rtpprio(RTP_PRIO_MAX);
|
||||||
|
p->p_rtprio = rtp;
|
||||||
|
(void)resetpriority(p);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
e = EPERM;
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCHED_OTHER:
|
||||||
|
{
|
||||||
|
rtp.type = RTP_PRIO_NORMAL;
|
||||||
|
rtp.prio = p4prio_to_rtpprio(RTP_PRIO_MIN);
|
||||||
|
p->p_rtprio = rtp;
|
||||||
|
|
||||||
|
/* XXX Simply revert to whatever we had for last
|
||||||
|
* normal scheduler priorities.
|
||||||
|
* This puts a requirement
|
||||||
|
* on the scheduling code: You must leave the
|
||||||
|
* scheduling info alone.
|
||||||
|
*/
|
||||||
|
(void)resetpriority(p);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_getscheduler(int *ret, void *hook, struct proc *p)
|
||||||
|
{
|
||||||
|
return getscheduler(ret, hook, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ksched_yield: Yield the CPU.
|
||||||
|
*/
|
||||||
|
int ksched_yield(int *ret, void *hook)
|
||||||
|
{
|
||||||
|
need_resched();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_get_priority_max(int *ret, void *hook, int policy)
|
||||||
|
{
|
||||||
|
int e = 0;
|
||||||
|
|
||||||
|
switch (policy)
|
||||||
|
{
|
||||||
|
case SCHED_FIFO:
|
||||||
|
case SCHED_RR:
|
||||||
|
*ret = RTP_PRIO_MAX;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCHED_OTHER:
|
||||||
|
*ret = PRIO_MAX;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
e = EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_get_priority_min(int *ret, void *hook, int policy)
|
||||||
|
{
|
||||||
|
int e = 0;
|
||||||
|
|
||||||
|
switch (policy)
|
||||||
|
{
|
||||||
|
case SCHED_FIFO:
|
||||||
|
case SCHED_RR:
|
||||||
|
*ret = RTP_PRIO_MIN;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCHED_OTHER:
|
||||||
|
*ret = PRIO_MIN;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
e = EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_rr_get_interval(int *ret, void *hook,
|
||||||
|
struct proc *p, struct timespec *timespec)
|
||||||
|
{
|
||||||
|
*timespec = rr_interval;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
77
sys/kern/posix4_mib.c
Normal file
77
sys/kern/posix4_mib.c
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/*-
|
||||||
|
* Copyright (c) 1998
|
||||||
|
* HD Associates, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by HD Associates, Inc
|
||||||
|
* 4. Neither the name of the author nor the names of any co-contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/kernel.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#include <sys/unistd.h>
|
||||||
|
|
||||||
|
static int facility[CTL_POSIX4_N_CTLS];
|
||||||
|
|
||||||
|
#define P4_SYSCTL(num, name) \
|
||||||
|
SYSCTL_INT(_posix4, num, name, CTLFLAG_RD, facility + num - 1, 0, "");
|
||||||
|
|
||||||
|
P4_SYSCTL(CTL_POSIX4_ASYNCHRONOUS_IO, asynchronous_io);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_MAPPED_FILES, mapped_files);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_MEMLOCK, memlock);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_MEMLOCK_RANGE, memlock_range);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_MEMORY_PROTECTION, memory_protection);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_MESSAGE_PASSING, message_passing);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_PRIORITIZED_IO, prioritized_io);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_PRIORITY_SCHEDULING, priority_scheduling);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_REALTIME_SIGNALS, realtime_signals);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_SEMAPHORES, semaphores);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_FSYNC, fsync);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_SHARED_MEMORY_OBJECTS, shared_memory_objects);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_SYNCHRONIZED_IO, synchronized_io);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_TIMERS, timers);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_AIO_LISTIO_MAX, aio_listio_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_AIO_MAX, aio_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_AIO_PRIO_DELTA_MAX, aio_prio_delta_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_DELAYTIMER_MAX, delaytimer_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_MQ_OPEN_MAX, mq_open_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_PAGESIZE, pagesize);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_RTSIG_MAX, rtsig_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_SEM_NSEMS_MAX, sem_nsems_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_SEM_VALUE_MAX, sem_value_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_SIGQUEUE_MAX, sigqueue_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_TIMER_MAX, timer_max);
|
||||||
|
|
||||||
|
/* posix4_facility: Set a facility to a value. This is
|
||||||
|
* probably a temporary measure until the LKM code is combined with this.
|
||||||
|
*/
|
||||||
|
void posix4_facility(int num, int value)
|
||||||
|
{
|
||||||
|
if (num >= 1 && num <= CTL_POSIX4_N_CTLS)
|
||||||
|
facility[num - 1] = value;
|
||||||
|
}
|
107
sys/posix4/aio.h
Normal file
107
sys/posix4/aio.h
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
/* XXX Conflicts with John's - not installed.
|
||||||
|
*/
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1996, 1997
|
||||||
|
* HD Associates, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by HD Associates, Inc
|
||||||
|
* 4. Neither the name of the author nor the names of any co-contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* $Id:$
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* aio.h: P1003.1B-1993 Asynchronous I/O */
|
||||||
|
|
||||||
|
#ifndef _POSIX4_AIO_H_
|
||||||
|
#define _POSIX4_AIO_H_
|
||||||
|
|
||||||
|
#ifdef POSIX4_INCLUDE_MAYBES
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#else
|
||||||
|
struct timespec;
|
||||||
|
#include <sys/types.h>
|
||||||
|
#ifdef KERNEL
|
||||||
|
#include <sys/signal.h>
|
||||||
|
#else
|
||||||
|
#include <signal.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Return values: */
|
||||||
|
|
||||||
|
#define AIO_CANCELED 0x01 /* All operations cancelled */
|
||||||
|
#define AIO_NOTCANCELLED 0x02 /* Some not cancelled */
|
||||||
|
#define AIO_ALLDONE 0x04 /* None were cancelled */
|
||||||
|
|
||||||
|
/* lio_listio synchronization options */
|
||||||
|
|
||||||
|
#define LIO_WAIT 0x08 /* Suspend until complete */
|
||||||
|
#define LIO_NOWAIT 0x10 /* Continue operation */
|
||||||
|
|
||||||
|
/* lio_listio element operations */
|
||||||
|
|
||||||
|
#define LIO_READ 0x20
|
||||||
|
#define LIO_WRITE 0x40
|
||||||
|
#define LIO_NOP 0x80
|
||||||
|
|
||||||
|
typedef struct aiocb * const aio_listio_ctl;
|
||||||
|
typedef const struct aiocb * const caio_listio_ctl;
|
||||||
|
|
||||||
|
struct aiocb {
|
||||||
|
int aio_fildes; /* File descriptor */
|
||||||
|
off_t aio_offset; /* File offset */
|
||||||
|
volatile void * aio_buf; /* Location of buffer */
|
||||||
|
size_t aio_nbytes; /* Length of transfer */
|
||||||
|
int aio_reqprio; /* Request priority offset */
|
||||||
|
struct sigevent aio_sigevent; /* Signal number and value */
|
||||||
|
int aio_lio_opcode; /* Operation to be performed */
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifndef KERNEL
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
int aio_read __P((struct aiocb *));
|
||||||
|
int aio_write __P((struct aiocb *));
|
||||||
|
|
||||||
|
int lio_listio __P((int, aio_listio_ctl [_POSIX_AIO_LISTIO_MAX],
|
||||||
|
int, struct sigevent *));
|
||||||
|
|
||||||
|
int aio_error __P((const struct aiocb *));
|
||||||
|
ssize_t aio_return __P((struct aiocb *));
|
||||||
|
int aio_cancel __P((int, struct aiocb *));
|
||||||
|
|
||||||
|
int aio_suspend __P((caio_listio_ctl [_POSIX_AIO_LISTIO_MAX],
|
||||||
|
int, const struct timespec *));
|
||||||
|
|
||||||
|
int aio_fsync __P((int, struct aiocb *));
|
||||||
|
|
||||||
|
#endif /* KERNEL */
|
||||||
|
|
||||||
|
#endif /* _POSIX4_AIO_H_ */
|
252
sys/posix4/ksched.c
Normal file
252
sys/posix4/ksched.c
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 1997
|
||||||
|
* HD Associates, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by HD Associates, Inc
|
||||||
|
* 4. Neither the name of the author nor the names of any co-contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ksched: Soft real time scheduling based on "rtprio".
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/systm.h>
|
||||||
|
#include <sys/proc.h>
|
||||||
|
#include <sys/kernel.h>
|
||||||
|
#include <machine/cpu.h> /* For need_resched */
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#include <sys/posix4.h>
|
||||||
|
|
||||||
|
/* ksched: Real-time extension to support POSIX priority scheduling.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static struct timespec rr_interval;
|
||||||
|
|
||||||
|
int ksched_attach(int p4_instance, int fac_code, void **p)
|
||||||
|
{
|
||||||
|
rr_interval.tv_sec = 0;
|
||||||
|
rr_interval.tv_nsec = 1000000000L / roundrobin_interval();
|
||||||
|
|
||||||
|
*p = 0;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_detach(void *p)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX About priorities
|
||||||
|
*
|
||||||
|
* POSIX4 requires that numerically higher priorities be of
|
||||||
|
* higher priority. It also permits sched_setparam to be
|
||||||
|
* implementation defined for SCHED_OTHER. I don't like
|
||||||
|
* the notion of inverted priorites for normal processes when
|
||||||
|
* you can use "setpriority" for that.
|
||||||
|
*
|
||||||
|
* I'm rejecting sched_setparam for SCHED_OTHER with EINVAL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Macros to convert between the unix (lower numerically is higher priority)
|
||||||
|
* and POSIX4 (higher numerically is higher priority)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define p4prio_to_rtpprio(P) (RTP_PRIO_MAX - (P))
|
||||||
|
#define rtpprio_to_p4prio(P) (RTP_PRIO_MAX - (P))
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
getscheduler(int *ret, void *hook, struct proc *p)
|
||||||
|
{
|
||||||
|
int e = 0;
|
||||||
|
|
||||||
|
switch (p->p_rtprio.type)
|
||||||
|
{
|
||||||
|
case RTP_PRIO_FIFO:
|
||||||
|
*ret = SCHED_FIFO;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RTP_PRIO_REALTIME:
|
||||||
|
*ret = SCHED_RR;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
*ret = SCHED_OTHER;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_setparam(int *ret, void *hook,
|
||||||
|
struct proc *p, const struct sched_param *param)
|
||||||
|
{
|
||||||
|
int e, policy;
|
||||||
|
|
||||||
|
e = getscheduler(&policy, hook, p);
|
||||||
|
|
||||||
|
if (e == 0)
|
||||||
|
{
|
||||||
|
if (policy == SCHED_OTHER)
|
||||||
|
e = EINVAL;
|
||||||
|
else
|
||||||
|
e = ksched_setscheduler(ret, hook, p, policy, param);
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_getparam(int *ret, void *hook,
|
||||||
|
struct proc *p, struct sched_param *param)
|
||||||
|
{
|
||||||
|
if (RTP_PRIO_IS_REALTIME(p->p_rtprio.type))
|
||||||
|
param->sched_priority = rtpprio_to_p4prio(p->p_rtprio.prio);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX The priority and scheduler modifications should
|
||||||
|
* be moved into published interfaces in kern/kern_sync.
|
||||||
|
*
|
||||||
|
* The permissions to modify process p were checked in "posix4proc()".
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int ksched_setscheduler(int *ret, void *hook,
|
||||||
|
struct proc *p, int policy, const struct sched_param *param)
|
||||||
|
{
|
||||||
|
int e = 0;
|
||||||
|
struct rtprio rtp;
|
||||||
|
|
||||||
|
switch(policy)
|
||||||
|
{
|
||||||
|
case SCHED_RR:
|
||||||
|
case SCHED_FIFO:
|
||||||
|
|
||||||
|
if (param->sched_priority >= RTP_PRIO_MIN &&
|
||||||
|
param->sched_priority <= RTP_PRIO_MAX)
|
||||||
|
{
|
||||||
|
rtp.type = (policy == SCHED_FIFO)
|
||||||
|
? RTP_PRIO_FIFO : RTP_PRIO_REALTIME;
|
||||||
|
|
||||||
|
rtp.prio = p4prio_to_rtpprio(RTP_PRIO_MAX);
|
||||||
|
p->p_rtprio = rtp;
|
||||||
|
(void)resetpriority(p);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
e = EPERM;
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCHED_OTHER:
|
||||||
|
{
|
||||||
|
rtp.type = RTP_PRIO_NORMAL;
|
||||||
|
rtp.prio = p4prio_to_rtpprio(RTP_PRIO_MIN);
|
||||||
|
p->p_rtprio = rtp;
|
||||||
|
|
||||||
|
/* XXX Simply revert to whatever we had for last
|
||||||
|
* normal scheduler priorities.
|
||||||
|
* This puts a requirement
|
||||||
|
* on the scheduling code: You must leave the
|
||||||
|
* scheduling info alone.
|
||||||
|
*/
|
||||||
|
(void)resetpriority(p);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_getscheduler(int *ret, void *hook, struct proc *p)
|
||||||
|
{
|
||||||
|
return getscheduler(ret, hook, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ksched_yield: Yield the CPU.
|
||||||
|
*/
|
||||||
|
int ksched_yield(int *ret, void *hook)
|
||||||
|
{
|
||||||
|
need_resched();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_get_priority_max(int *ret, void *hook, int policy)
|
||||||
|
{
|
||||||
|
int e = 0;
|
||||||
|
|
||||||
|
switch (policy)
|
||||||
|
{
|
||||||
|
case SCHED_FIFO:
|
||||||
|
case SCHED_RR:
|
||||||
|
*ret = RTP_PRIO_MAX;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCHED_OTHER:
|
||||||
|
*ret = PRIO_MAX;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
e = EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_get_priority_min(int *ret, void *hook, int policy)
|
||||||
|
{
|
||||||
|
int e = 0;
|
||||||
|
|
||||||
|
switch (policy)
|
||||||
|
{
|
||||||
|
case SCHED_FIFO:
|
||||||
|
case SCHED_RR:
|
||||||
|
*ret = RTP_PRIO_MIN;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCHED_OTHER:
|
||||||
|
*ret = PRIO_MIN;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
e = EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ksched_rr_get_interval(int *ret, void *hook,
|
||||||
|
struct proc *p, struct timespec *timespec)
|
||||||
|
{
|
||||||
|
*timespec = rr_interval;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
71
sys/posix4/mqueue.h
Normal file
71
sys/posix4/mqueue.h
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#ifndef _MQUEUE_H_
|
||||||
|
#define _MQUEUE_H_
|
||||||
|
|
||||||
|
/* mqueue.h: POSIX.4 Message Queues */
|
||||||
|
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1996, 1997
|
||||||
|
* HD Associates, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by HD Associates, Inc
|
||||||
|
* 4. Neither the name of the author nor the names of any co-contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef POSIX4_INCLUDE_MAYBES
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#else
|
||||||
|
struct sigevent;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef int mqd_t; /* message queue descriptors */
|
||||||
|
|
||||||
|
struct mq_attr {
|
||||||
|
long mq_flags; /* message queue flags */
|
||||||
|
long mq_maxmsg; /* maximum number of messages */
|
||||||
|
long mq_msgsize; /* maximum message size */
|
||||||
|
long mq_curmsgs; /* number of messages currently queued */
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifndef KERNEL
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
mqd_t mq_open __P((const char *, int oflag, ...));
|
||||||
|
int mq_close __P((mqd_t));
|
||||||
|
int mq_unlink __P((const char *));
|
||||||
|
int mq_send __P((mqd_t, const char *, size_t, unsigned int));
|
||||||
|
ssize_t mq_receive __P((mqd_t, char *, size_t, unsigned int *));
|
||||||
|
int mq_notify __P((mqd_t, const struct sigevent *));
|
||||||
|
int mq_setattr __P((mqd_t, const struct mq_attr *, struct mq_attr *));
|
||||||
|
int mq_getattr __P((mqd_t, struct mq_attr *));
|
||||||
|
|
||||||
|
#endif /* KERNEL */
|
||||||
|
|
||||||
|
#endif /* _MQUEUE_H_ */
|
300
sys/posix4/posix4.h
Normal file
300
sys/posix4/posix4.h
Normal file
@ -0,0 +1,300 @@
|
|||||||
|
#ifndef _POSIX4_POSIX4_H_
|
||||||
|
#define _POSIX4_POSIX4_H_
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1996, 1997, 1998
|
||||||
|
* HD Associates, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by HD Associates, Inc
|
||||||
|
* 4. Neither the name of the author nor the names of any co-contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(_POSIX_VERSION) && _POSIX_VERSION >= 199309L
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/ioccom.h>
|
||||||
|
#include <sched.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This defines POSIX4_VISIBLE to indicate posix4 extensions should show up.
|
||||||
|
* You should test this when you add a posix4 extension to a header
|
||||||
|
* that exists in POSIX.1. Try "man 9 posix4".
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(_POSIX_C_SOURCE) || \
|
||||||
|
defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309L
|
||||||
|
#define POSIX4_VISIBLE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* March 1, 1998: Details from here on change and this header file
|
||||||
|
* is volatile.
|
||||||
|
*
|
||||||
|
* Locally I've got PRIORITY SCHEDULING
|
||||||
|
* set as a system call available only to root
|
||||||
|
* and I'm still using a pseudo device to gate everything else.
|
||||||
|
*
|
||||||
|
* This interface vectors us into the kernel through a
|
||||||
|
* POSIX4 pseudo device with some user privilege authorization along
|
||||||
|
* the way.
|
||||||
|
*
|
||||||
|
* XXX I'm going with option 3.
|
||||||
|
*
|
||||||
|
* This has drawbacks from the point of view of ktrace. There
|
||||||
|
* are (at least) three ways to do this:
|
||||||
|
*
|
||||||
|
* 1. As it is being done, which is bad for ktrace and is hokey
|
||||||
|
* but is easy to extend during development;
|
||||||
|
* 2. Add a system call for every POSIX4 entry point, which
|
||||||
|
* will result in many more system calls (on the order of 64)
|
||||||
|
* 3. Add a system call for each POSIX4 option, which is a bit more
|
||||||
|
* useful for ktrace and will add only about 14 new system calls.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define POSIX4_FACILITIES 16
|
||||||
|
#define POSIX4_ONE_ONLY
|
||||||
|
|
||||||
|
/*
|
||||||
|
* All facility request structures have a posix4_dispatch header
|
||||||
|
* at the front. Return values are always an indication of
|
||||||
|
* success or failure and are automatically converted into an errno
|
||||||
|
* by the kernel. "Non-errno" return codes are handled via ret.
|
||||||
|
*/
|
||||||
|
struct posix4_dispatch {
|
||||||
|
int op;
|
||||||
|
int ret;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(_POSIX_PRIORITY_SCHEDULING)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* KSCHED_OP_RW is a vector of read/write flags for each entry indexed
|
||||||
|
* by the enum ksched_op.
|
||||||
|
*
|
||||||
|
* 1 means you need write access, 0 means read is sufficient.
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum ksched_op {
|
||||||
|
|
||||||
|
#define KSCHED_OP_RW { 1, 0, 1, 0, 0, 0, 0, 0 }
|
||||||
|
|
||||||
|
SCHED_SETPARAM,
|
||||||
|
SCHED_GETPARAM,
|
||||||
|
SCHED_SETSCHEDULER,
|
||||||
|
SCHED_GETSCHEDULER,
|
||||||
|
SCHED_YIELD,
|
||||||
|
SCHED_GET_PRIORITY_MAX,
|
||||||
|
SCHED_GET_PRIORITY_MIN,
|
||||||
|
SCHED_RR_GET_INTERVAL,
|
||||||
|
SCHED_OP_MAX
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ksched
|
||||||
|
{
|
||||||
|
struct posix4_dispatch dispatch;
|
||||||
|
pid_t pid;
|
||||||
|
int policy;
|
||||||
|
struct sched_param param;
|
||||||
|
struct timespec interval;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _POSIX_PRIORITY_SCHEDULING */
|
||||||
|
|
||||||
|
#if defined(_POSIX_MEMLOCK) ^ defined(_POSIX_MEMLOCK_RANGE)
|
||||||
|
/* This implementation expects these two options to always be together.
|
||||||
|
* If one isn't handled it should be disabled at
|
||||||
|
* run time.
|
||||||
|
*/
|
||||||
|
#error _POSIX_MEMLOCK and _POSIX_MEMLOCK_RANGE should always be together
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_POSIX_MEMLOCK) && defined(_POSIX_MEMLOCK_RANGE)
|
||||||
|
|
||||||
|
enum kmemlock_op {
|
||||||
|
|
||||||
|
#define KMEMLOCK_OP_RW { 1, 1, 1, 1 }
|
||||||
|
|
||||||
|
MEMLOCK_MLOCKALL,
|
||||||
|
MEMLOCK_MUNLOCKALL,
|
||||||
|
MEMLOCK_MLOCK,
|
||||||
|
MEMLOCK_MUNLOCK,
|
||||||
|
MEMLOCK_OP_MAX
|
||||||
|
};
|
||||||
|
|
||||||
|
struct kmemlock
|
||||||
|
{
|
||||||
|
struct posix4_dispatch dispatch;
|
||||||
|
int flags;
|
||||||
|
void *addr;
|
||||||
|
size_t len;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _POSIX_MEMLOCK && _POSIX_MEMLOCK_RANGE */
|
||||||
|
|
||||||
|
#if defined(KERNEL)
|
||||||
|
|
||||||
|
struct proc;
|
||||||
|
|
||||||
|
void *posix4malloc __P((int *, size_t));
|
||||||
|
void posix4free __P((int *, void *));
|
||||||
|
int posix4proc __P((struct proc *, pid_t, struct proc **));
|
||||||
|
int posix4ioctl __P((dev_t, int, caddr_t, int, struct proc *));
|
||||||
|
void posix4attach __P((int));
|
||||||
|
void posix4_facility __P((int, int));
|
||||||
|
|
||||||
|
struct lkm_table;
|
||||||
|
int posix4_init __P((struct lkm_table *, int , int ));
|
||||||
|
|
||||||
|
#ifdef _POSIX_PRIORITY_SCHEDULING
|
||||||
|
|
||||||
|
int ksched_attach(int, int, void **);
|
||||||
|
int ksched_detach(void *);
|
||||||
|
|
||||||
|
int ksched_setparam(int *, void *,
|
||||||
|
struct proc *, const struct sched_param *);
|
||||||
|
int ksched_getparam(int *, void *,
|
||||||
|
struct proc *, struct sched_param *);
|
||||||
|
|
||||||
|
int ksched_setscheduler(int *, void *,
|
||||||
|
struct proc *, int, const struct sched_param *);
|
||||||
|
int ksched_getscheduler(int *, void *, struct proc *);
|
||||||
|
|
||||||
|
int ksched_yield(int *, void *);
|
||||||
|
|
||||||
|
int ksched_get_priority_max(int *, void *, int);
|
||||||
|
int ksched_get_priority_min(int *, void *, int);
|
||||||
|
|
||||||
|
int ksched_rr_get_interval(int *, void *, struct proc *, struct timespec *);
|
||||||
|
|
||||||
|
#endif /* _POSIX_PRIORITY_SCHEDULING */
|
||||||
|
|
||||||
|
#if defined(_POSIX_MEMLOCK) && defined(_POSIX_MEMLOCK_RANGE)
|
||||||
|
|
||||||
|
int kmemlock_attach(int, int, void **);
|
||||||
|
int kmemlock_detach(void *);
|
||||||
|
int kmlockall(int *, void *, int);
|
||||||
|
int kmunlockall(int *, void *);
|
||||||
|
int kmlock(int *, void *, const void *, size_t);
|
||||||
|
int kmunlock(int *, void *, const void *, size_t );
|
||||||
|
|
||||||
|
#endif /* _POSIX_MEMLOCK && _POSIX_MEMLOCK_RANGE */
|
||||||
|
|
||||||
|
#endif /* KERNEL */
|
||||||
|
|
||||||
|
/* A facility is an implementation of one of the optional portions of
|
||||||
|
* POSIX4 as selected by the feature test macros, such as the fixed
|
||||||
|
* priority scheduler or the realtime signals.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Each facility has a facility code, an opcode, and r-w attributes.
|
||||||
|
* To exercise the operation associated with an opcode you need the
|
||||||
|
* appropriate privileges on the POSIX4 device with the facility
|
||||||
|
* bit set in the minor number. This means that every facility has
|
||||||
|
* a protection bit: Probably more than we need, but it may have
|
||||||
|
* advantages.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define posix4encode(FACILITY, RW) (FACILITY)
|
||||||
|
#define posix4decode(X, FACILITY_P) \
|
||||||
|
do { \
|
||||||
|
*(FACILITY_P) = ((X) & 0xff); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The dispatch codes:
|
||||||
|
*/
|
||||||
|
#define IO_POSIX4_PRIORITY_SCHEDULING _IOWR('r', \
|
||||||
|
CTL_POSIX4_PRIORITY_SCHEDULING, struct ksched)
|
||||||
|
|
||||||
|
#define IO_POSIX4_MEMLOCK _IOWR('r', \
|
||||||
|
CTL_POSIX4_MEMLOCK, struct ksched)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CTL_POSIX4 definitions for syscfg
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CTL_POSIX4_ASYNCHRONOUS_IO 1 /* boolean */
|
||||||
|
#define CTL_POSIX4_MAPPED_FILES 2 /* boolean */
|
||||||
|
#define CTL_POSIX4_MEMLOCK 3 /* boolean */
|
||||||
|
#define CTL_POSIX4_MEMLOCK_RANGE 4 /* boolean */
|
||||||
|
#define CTL_POSIX4_MEMORY_PROTECTION 5 /* boolean */
|
||||||
|
#define CTL_POSIX4_MESSAGE_PASSING 6 /* boolean */
|
||||||
|
#define CTL_POSIX4_PRIORITIZED_IO 7 /* boolean */
|
||||||
|
#define CTL_POSIX4_PRIORITY_SCHEDULING 8 /* boolean */
|
||||||
|
#define CTL_POSIX4_REALTIME_SIGNALS 9 /* boolean */
|
||||||
|
#define CTL_POSIX4_SEMAPHORES 10 /* boolean */
|
||||||
|
#define CTL_POSIX4_FSYNC 11 /* boolean */
|
||||||
|
#define CTL_POSIX4_SHARED_MEMORY_OBJECTS 12 /* boolean */
|
||||||
|
#define CTL_POSIX4_SYNCHRONIZED_IO 13 /* boolean */
|
||||||
|
#define CTL_POSIX4_TIMERS 14 /* boolean */
|
||||||
|
#define CTL_POSIX4_AIO_LISTIO_MAX 15 /* int */
|
||||||
|
#define CTL_POSIX4_AIO_MAX 16 /* int */
|
||||||
|
#define CTL_POSIX4_AIO_PRIO_DELTA_MAX 17 /* int */
|
||||||
|
#define CTL_POSIX4_DELAYTIMER_MAX 18 /* int */
|
||||||
|
#define CTL_POSIX4_MQ_OPEN_MAX 19 /* int */
|
||||||
|
#define CTL_POSIX4_PAGESIZE 20 /* int */
|
||||||
|
#define CTL_POSIX4_RTSIG_MAX 21 /* int */
|
||||||
|
#define CTL_POSIX4_SEM_NSEMS_MAX 22 /* int */
|
||||||
|
#define CTL_POSIX4_SEM_VALUE_MAX 23 /* int */
|
||||||
|
#define CTL_POSIX4_SIGQUEUE_MAX 24 /* int */
|
||||||
|
#define CTL_POSIX4_TIMER_MAX 25 /* int */
|
||||||
|
|
||||||
|
#define CTL_POSIX4_N_CTLS 25
|
||||||
|
|
||||||
|
#define CTL_POSIX4_NAMES { \
|
||||||
|
{ 0, 0 }, \
|
||||||
|
{ "asynchronous_io", CTLTYPE_INT }, \
|
||||||
|
{ "mapped_files", CTLTYPE_INT }, \
|
||||||
|
{ "memlock", CTLTYPE_INT }, \
|
||||||
|
{ "memlock_range", CTLTYPE_INT }, \
|
||||||
|
{ "memory_protection", CTLTYPE_INT }, \
|
||||||
|
{ "message_passing", CTLTYPE_INT }, \
|
||||||
|
{ "prioritized_io", CTLTYPE_INT }, \
|
||||||
|
{ "priority_scheduling", CTLTYPE_INT }, \
|
||||||
|
{ "realtime_signals", CTLTYPE_INT }, \
|
||||||
|
{ "semaphores", CTLTYPE_INT }, \
|
||||||
|
{ "fsync", CTLTYPE_INT }, \
|
||||||
|
{ "shared_memory_objects", CTLTYPE_INT }, \
|
||||||
|
{ "synchronized_io", CTLTYPE_INT }, \
|
||||||
|
{ "timers", CTLTYPE_INT }, \
|
||||||
|
{ "aio_listio_max", CTLTYPE_INT }, \
|
||||||
|
{ "aio_max", CTLTYPE_INT }, \
|
||||||
|
{ "aio_prio_delta_max", CTLTYPE_INT }, \
|
||||||
|
{ "delaytimer_max", CTLTYPE_INT }, \
|
||||||
|
{ "mq_open_max", CTLTYPE_INT }, \
|
||||||
|
{ "pagesize", CTLTYPE_INT }, \
|
||||||
|
{ "rtsig_max", CTLTYPE_INT }, \
|
||||||
|
{ "nsems_max", CTLTYPE_INT }, \
|
||||||
|
{ "sem_value_max", CTLTYPE_INT }, \
|
||||||
|
{ "sigqueue_max", CTLTYPE_INT }, \
|
||||||
|
{ "timer_max", CTLTYPE_INT }, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _POSIX_VERSION >= 199309L */
|
||||||
|
#endif /* _POSIX4_POSIX4_H_ */
|
77
sys/posix4/posix4_mib.c
Normal file
77
sys/posix4/posix4_mib.c
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/*-
|
||||||
|
* Copyright (c) 1998
|
||||||
|
* HD Associates, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by HD Associates, Inc
|
||||||
|
* 4. Neither the name of the author nor the names of any co-contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/kernel.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#include <sys/unistd.h>
|
||||||
|
|
||||||
|
static int facility[CTL_POSIX4_N_CTLS];
|
||||||
|
|
||||||
|
#define P4_SYSCTL(num, name) \
|
||||||
|
SYSCTL_INT(_posix4, num, name, CTLFLAG_RD, facility + num - 1, 0, "");
|
||||||
|
|
||||||
|
P4_SYSCTL(CTL_POSIX4_ASYNCHRONOUS_IO, asynchronous_io);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_MAPPED_FILES, mapped_files);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_MEMLOCK, memlock);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_MEMLOCK_RANGE, memlock_range);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_MEMORY_PROTECTION, memory_protection);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_MESSAGE_PASSING, message_passing);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_PRIORITIZED_IO, prioritized_io);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_PRIORITY_SCHEDULING, priority_scheduling);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_REALTIME_SIGNALS, realtime_signals);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_SEMAPHORES, semaphores);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_FSYNC, fsync);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_SHARED_MEMORY_OBJECTS, shared_memory_objects);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_SYNCHRONIZED_IO, synchronized_io);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_TIMERS, timers);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_AIO_LISTIO_MAX, aio_listio_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_AIO_MAX, aio_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_AIO_PRIO_DELTA_MAX, aio_prio_delta_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_DELAYTIMER_MAX, delaytimer_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_MQ_OPEN_MAX, mq_open_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_PAGESIZE, pagesize);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_RTSIG_MAX, rtsig_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_SEM_NSEMS_MAX, sem_nsems_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_SEM_VALUE_MAX, sem_value_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_SIGQUEUE_MAX, sigqueue_max);
|
||||||
|
P4_SYSCTL(CTL_POSIX4_TIMER_MAX, timer_max);
|
||||||
|
|
||||||
|
/* posix4_facility: Set a facility to a value. This is
|
||||||
|
* probably a temporary measure until the LKM code is combined with this.
|
||||||
|
*/
|
||||||
|
void posix4_facility(int num, int value)
|
||||||
|
{
|
||||||
|
if (num >= 1 && num <= CTL_POSIX4_N_CTLS)
|
||||||
|
facility[num - 1] = value;
|
||||||
|
}
|
74
sys/posix4/sched.h
Normal file
74
sys/posix4/sched.h
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
#ifndef _SCHED_H_
|
||||||
|
#define _SCHED_H_
|
||||||
|
|
||||||
|
/* sched.h: POSIX.4 Process Scheduling header */
|
||||||
|
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1996, 1997
|
||||||
|
* HD Associates, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by HD Associates, Inc
|
||||||
|
* and Jukka Antero Ukkonen.
|
||||||
|
* 4. Neither the name of the author nor the names of any co-contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h> /* For pid_t */
|
||||||
|
|
||||||
|
#ifndef KERNEL
|
||||||
|
#include <time.h> /* Per P1003.4 */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Scheduling policies
|
||||||
|
*/
|
||||||
|
#define SCHED_FIFO 1
|
||||||
|
#define SCHED_OTHER 2
|
||||||
|
#define SCHED_RR 3
|
||||||
|
|
||||||
|
struct sched_param
|
||||||
|
{
|
||||||
|
int sched_priority;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifndef KERNEL
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
int sched_setparam __P((pid_t, const struct sched_param *));
|
||||||
|
int sched_getparam __P((pid_t, struct sched_param *));
|
||||||
|
|
||||||
|
int sched_setscheduler __P((pid_t, int, const struct sched_param *));
|
||||||
|
int sched_getscheduler __P((pid_t));
|
||||||
|
|
||||||
|
int sched_yield __P((void));
|
||||||
|
int sched_get_priority_max __P((int));
|
||||||
|
int sched_get_priority_min __P((int));
|
||||||
|
int sched_rr_get_interval __P((pid_t, struct timespec *));
|
||||||
|
|
||||||
|
#endif /* KERNEL */
|
||||||
|
|
||||||
|
#endif /* _SCHED_H_ */
|
61
sys/posix4/semaphore.h
Normal file
61
sys/posix4/semaphore.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#ifndef _SEMAPHORE_H_
|
||||||
|
#define _SEMAPHORE_H_
|
||||||
|
|
||||||
|
/* semaphore.h: POSIX.4 semaphores */
|
||||||
|
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1996, 1997
|
||||||
|
* HD Associates, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by HD Associates, Inc
|
||||||
|
* 4. Neither the name of the author nor the names of any co-contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef POSIX4_INCLUDE_MAYBES
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef int sem_t;
|
||||||
|
|
||||||
|
#ifndef KERNEL
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
int sem_init __P(sem_t *, int, unsigned int));
|
||||||
|
int sem_destroy __P((sem_t *));
|
||||||
|
sem_t sem_open __P((const char *, int, ...));
|
||||||
|
int sem_close __P((sem_t *));
|
||||||
|
int sem_unlink __P((const char *));
|
||||||
|
int sem_wait((sem_t *));
|
||||||
|
int sem_trywait((sem_t *));
|
||||||
|
int sem_post((sem_t *));
|
||||||
|
int sem_getvalue((sem_t *, int *));
|
||||||
|
|
||||||
|
#endif /* KERNEL */
|
||||||
|
|
||||||
|
#endif /* _SEMAPHORE_H_ */
|
@ -31,7 +31,7 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)mman.h 8.2 (Berkeley) 1/9/95
|
* @(#)mman.h 8.2 (Berkeley) 1/9/95
|
||||||
* $Id: mman.h,v 1.19 1997/12/02 21:30:03 dyson Exp $
|
* $Id: mman.h,v 1.20 1997/12/31 01:22:00 alex Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SYS_MMAN_H_
|
#ifndef _SYS_MMAN_H_
|
||||||
@ -63,6 +63,15 @@
|
|||||||
#define MAP_NOEXTEND 0x0100 /* for MAP_FILE, don't change file size */
|
#define MAP_NOEXTEND 0x0100 /* for MAP_FILE, don't change file size */
|
||||||
#define MAP_HASSEMAPHORE 0x0200 /* region may contain semaphores */
|
#define MAP_HASSEMAPHORE 0x0200 /* region may contain semaphores */
|
||||||
|
|
||||||
|
#ifdef POSIX4_VISIBLE
|
||||||
|
/*
|
||||||
|
* Process memory locking
|
||||||
|
*/
|
||||||
|
#define MCL_CURRENT 0x0001 /* Lock only current memory */
|
||||||
|
#define MCL_FUTURE 0x0002 /* Lock all future memory as well */
|
||||||
|
|
||||||
|
#endif /* POSIX4_VISIBLE */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Error return from mmap()
|
* Error return from mmap()
|
||||||
*/
|
*/
|
||||||
@ -75,6 +84,7 @@
|
|||||||
#define MS_ASYNC 0x0001 /* return immediately */
|
#define MS_ASYNC 0x0001 /* return immediately */
|
||||||
#define MS_INVALIDATE 0x0002 /* invalidate all cached data */
|
#define MS_INVALIDATE 0x0002 /* invalidate all cached data */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mapping type
|
* Mapping type
|
||||||
*/
|
*/
|
||||||
@ -105,9 +115,12 @@
|
|||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
int madvise __P((void *, size_t, int));
|
#ifdef POSIX4_VISIBLE
|
||||||
int mincore __P((const void *, size_t, char *));
|
int mlockall __P((int));
|
||||||
int minherit __P((void *, size_t, int));
|
int munlockall __P((void));
|
||||||
|
int shm_open __P((const char *, int, mode_t));
|
||||||
|
int shm_unlink __P((const char *));
|
||||||
|
#endif /* POSIX4_VISIBLE */
|
||||||
int mlock __P((const void *, size_t));
|
int mlock __P((const void *, size_t));
|
||||||
#ifndef _MMAP_DECLARED
|
#ifndef _MMAP_DECLARED
|
||||||
#define _MMAP_DECLARED
|
#define _MMAP_DECLARED
|
||||||
@ -117,6 +130,11 @@ int mprotect __P((const void *, size_t, int));
|
|||||||
int msync __P((void *, size_t, int));
|
int msync __P((void *, size_t, int));
|
||||||
int munlock __P((const void *, size_t));
|
int munlock __P((const void *, size_t));
|
||||||
int munmap __P((void *, size_t));
|
int munmap __P((void *, size_t));
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
int madvise __P((void *, size_t, int));
|
||||||
|
int mincore __P((const void *, size_t, char *));
|
||||||
|
int minherit __P((void *, size_t, int));
|
||||||
|
#endif
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
#endif /* !KERNEL */
|
#endif /* !KERNEL */
|
||||||
|
300
sys/sys/posix4.h
Normal file
300
sys/sys/posix4.h
Normal file
@ -0,0 +1,300 @@
|
|||||||
|
#ifndef _POSIX4_POSIX4_H_
|
||||||
|
#define _POSIX4_POSIX4_H_
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1996, 1997, 1998
|
||||||
|
* HD Associates, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by HD Associates, Inc
|
||||||
|
* 4. Neither the name of the author nor the names of any co-contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(_POSIX_VERSION) && _POSIX_VERSION >= 199309L
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/ioccom.h>
|
||||||
|
#include <sched.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This defines POSIX4_VISIBLE to indicate posix4 extensions should show up.
|
||||||
|
* You should test this when you add a posix4 extension to a header
|
||||||
|
* that exists in POSIX.1. Try "man 9 posix4".
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(_POSIX_C_SOURCE) || \
|
||||||
|
defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309L
|
||||||
|
#define POSIX4_VISIBLE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* March 1, 1998: Details from here on change and this header file
|
||||||
|
* is volatile.
|
||||||
|
*
|
||||||
|
* Locally I've got PRIORITY SCHEDULING
|
||||||
|
* set as a system call available only to root
|
||||||
|
* and I'm still using a pseudo device to gate everything else.
|
||||||
|
*
|
||||||
|
* This interface vectors us into the kernel through a
|
||||||
|
* POSIX4 pseudo device with some user privilege authorization along
|
||||||
|
* the way.
|
||||||
|
*
|
||||||
|
* XXX I'm going with option 3.
|
||||||
|
*
|
||||||
|
* This has drawbacks from the point of view of ktrace. There
|
||||||
|
* are (at least) three ways to do this:
|
||||||
|
*
|
||||||
|
* 1. As it is being done, which is bad for ktrace and is hokey
|
||||||
|
* but is easy to extend during development;
|
||||||
|
* 2. Add a system call for every POSIX4 entry point, which
|
||||||
|
* will result in many more system calls (on the order of 64)
|
||||||
|
* 3. Add a system call for each POSIX4 option, which is a bit more
|
||||||
|
* useful for ktrace and will add only about 14 new system calls.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define POSIX4_FACILITIES 16
|
||||||
|
#define POSIX4_ONE_ONLY
|
||||||
|
|
||||||
|
/*
|
||||||
|
* All facility request structures have a posix4_dispatch header
|
||||||
|
* at the front. Return values are always an indication of
|
||||||
|
* success or failure and are automatically converted into an errno
|
||||||
|
* by the kernel. "Non-errno" return codes are handled via ret.
|
||||||
|
*/
|
||||||
|
struct posix4_dispatch {
|
||||||
|
int op;
|
||||||
|
int ret;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(_POSIX_PRIORITY_SCHEDULING)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* KSCHED_OP_RW is a vector of read/write flags for each entry indexed
|
||||||
|
* by the enum ksched_op.
|
||||||
|
*
|
||||||
|
* 1 means you need write access, 0 means read is sufficient.
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum ksched_op {
|
||||||
|
|
||||||
|
#define KSCHED_OP_RW { 1, 0, 1, 0, 0, 0, 0, 0 }
|
||||||
|
|
||||||
|
SCHED_SETPARAM,
|
||||||
|
SCHED_GETPARAM,
|
||||||
|
SCHED_SETSCHEDULER,
|
||||||
|
SCHED_GETSCHEDULER,
|
||||||
|
SCHED_YIELD,
|
||||||
|
SCHED_GET_PRIORITY_MAX,
|
||||||
|
SCHED_GET_PRIORITY_MIN,
|
||||||
|
SCHED_RR_GET_INTERVAL,
|
||||||
|
SCHED_OP_MAX
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ksched
|
||||||
|
{
|
||||||
|
struct posix4_dispatch dispatch;
|
||||||
|
pid_t pid;
|
||||||
|
int policy;
|
||||||
|
struct sched_param param;
|
||||||
|
struct timespec interval;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _POSIX_PRIORITY_SCHEDULING */
|
||||||
|
|
||||||
|
#if defined(_POSIX_MEMLOCK) ^ defined(_POSIX_MEMLOCK_RANGE)
|
||||||
|
/* This implementation expects these two options to always be together.
|
||||||
|
* If one isn't handled it should be disabled at
|
||||||
|
* run time.
|
||||||
|
*/
|
||||||
|
#error _POSIX_MEMLOCK and _POSIX_MEMLOCK_RANGE should always be together
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_POSIX_MEMLOCK) && defined(_POSIX_MEMLOCK_RANGE)
|
||||||
|
|
||||||
|
enum kmemlock_op {
|
||||||
|
|
||||||
|
#define KMEMLOCK_OP_RW { 1, 1, 1, 1 }
|
||||||
|
|
||||||
|
MEMLOCK_MLOCKALL,
|
||||||
|
MEMLOCK_MUNLOCKALL,
|
||||||
|
MEMLOCK_MLOCK,
|
||||||
|
MEMLOCK_MUNLOCK,
|
||||||
|
MEMLOCK_OP_MAX
|
||||||
|
};
|
||||||
|
|
||||||
|
struct kmemlock
|
||||||
|
{
|
||||||
|
struct posix4_dispatch dispatch;
|
||||||
|
int flags;
|
||||||
|
void *addr;
|
||||||
|
size_t len;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _POSIX_MEMLOCK && _POSIX_MEMLOCK_RANGE */
|
||||||
|
|
||||||
|
#if defined(KERNEL)
|
||||||
|
|
||||||
|
struct proc;
|
||||||
|
|
||||||
|
void *posix4malloc __P((int *, size_t));
|
||||||
|
void posix4free __P((int *, void *));
|
||||||
|
int posix4proc __P((struct proc *, pid_t, struct proc **));
|
||||||
|
int posix4ioctl __P((dev_t, int, caddr_t, int, struct proc *));
|
||||||
|
void posix4attach __P((int));
|
||||||
|
void posix4_facility __P((int, int));
|
||||||
|
|
||||||
|
struct lkm_table;
|
||||||
|
int posix4_init __P((struct lkm_table *, int , int ));
|
||||||
|
|
||||||
|
#ifdef _POSIX_PRIORITY_SCHEDULING
|
||||||
|
|
||||||
|
int ksched_attach(int, int, void **);
|
||||||
|
int ksched_detach(void *);
|
||||||
|
|
||||||
|
int ksched_setparam(int *, void *,
|
||||||
|
struct proc *, const struct sched_param *);
|
||||||
|
int ksched_getparam(int *, void *,
|
||||||
|
struct proc *, struct sched_param *);
|
||||||
|
|
||||||
|
int ksched_setscheduler(int *, void *,
|
||||||
|
struct proc *, int, const struct sched_param *);
|
||||||
|
int ksched_getscheduler(int *, void *, struct proc *);
|
||||||
|
|
||||||
|
int ksched_yield(int *, void *);
|
||||||
|
|
||||||
|
int ksched_get_priority_max(int *, void *, int);
|
||||||
|
int ksched_get_priority_min(int *, void *, int);
|
||||||
|
|
||||||
|
int ksched_rr_get_interval(int *, void *, struct proc *, struct timespec *);
|
||||||
|
|
||||||
|
#endif /* _POSIX_PRIORITY_SCHEDULING */
|
||||||
|
|
||||||
|
#if defined(_POSIX_MEMLOCK) && defined(_POSIX_MEMLOCK_RANGE)
|
||||||
|
|
||||||
|
int kmemlock_attach(int, int, void **);
|
||||||
|
int kmemlock_detach(void *);
|
||||||
|
int kmlockall(int *, void *, int);
|
||||||
|
int kmunlockall(int *, void *);
|
||||||
|
int kmlock(int *, void *, const void *, size_t);
|
||||||
|
int kmunlock(int *, void *, const void *, size_t );
|
||||||
|
|
||||||
|
#endif /* _POSIX_MEMLOCK && _POSIX_MEMLOCK_RANGE */
|
||||||
|
|
||||||
|
#endif /* KERNEL */
|
||||||
|
|
||||||
|
/* A facility is an implementation of one of the optional portions of
|
||||||
|
* POSIX4 as selected by the feature test macros, such as the fixed
|
||||||
|
* priority scheduler or the realtime signals.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Each facility has a facility code, an opcode, and r-w attributes.
|
||||||
|
* To exercise the operation associated with an opcode you need the
|
||||||
|
* appropriate privileges on the POSIX4 device with the facility
|
||||||
|
* bit set in the minor number. This means that every facility has
|
||||||
|
* a protection bit: Probably more than we need, but it may have
|
||||||
|
* advantages.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define posix4encode(FACILITY, RW) (FACILITY)
|
||||||
|
#define posix4decode(X, FACILITY_P) \
|
||||||
|
do { \
|
||||||
|
*(FACILITY_P) = ((X) & 0xff); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The dispatch codes:
|
||||||
|
*/
|
||||||
|
#define IO_POSIX4_PRIORITY_SCHEDULING _IOWR('r', \
|
||||||
|
CTL_POSIX4_PRIORITY_SCHEDULING, struct ksched)
|
||||||
|
|
||||||
|
#define IO_POSIX4_MEMLOCK _IOWR('r', \
|
||||||
|
CTL_POSIX4_MEMLOCK, struct ksched)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CTL_POSIX4 definitions for syscfg
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CTL_POSIX4_ASYNCHRONOUS_IO 1 /* boolean */
|
||||||
|
#define CTL_POSIX4_MAPPED_FILES 2 /* boolean */
|
||||||
|
#define CTL_POSIX4_MEMLOCK 3 /* boolean */
|
||||||
|
#define CTL_POSIX4_MEMLOCK_RANGE 4 /* boolean */
|
||||||
|
#define CTL_POSIX4_MEMORY_PROTECTION 5 /* boolean */
|
||||||
|
#define CTL_POSIX4_MESSAGE_PASSING 6 /* boolean */
|
||||||
|
#define CTL_POSIX4_PRIORITIZED_IO 7 /* boolean */
|
||||||
|
#define CTL_POSIX4_PRIORITY_SCHEDULING 8 /* boolean */
|
||||||
|
#define CTL_POSIX4_REALTIME_SIGNALS 9 /* boolean */
|
||||||
|
#define CTL_POSIX4_SEMAPHORES 10 /* boolean */
|
||||||
|
#define CTL_POSIX4_FSYNC 11 /* boolean */
|
||||||
|
#define CTL_POSIX4_SHARED_MEMORY_OBJECTS 12 /* boolean */
|
||||||
|
#define CTL_POSIX4_SYNCHRONIZED_IO 13 /* boolean */
|
||||||
|
#define CTL_POSIX4_TIMERS 14 /* boolean */
|
||||||
|
#define CTL_POSIX4_AIO_LISTIO_MAX 15 /* int */
|
||||||
|
#define CTL_POSIX4_AIO_MAX 16 /* int */
|
||||||
|
#define CTL_POSIX4_AIO_PRIO_DELTA_MAX 17 /* int */
|
||||||
|
#define CTL_POSIX4_DELAYTIMER_MAX 18 /* int */
|
||||||
|
#define CTL_POSIX4_MQ_OPEN_MAX 19 /* int */
|
||||||
|
#define CTL_POSIX4_PAGESIZE 20 /* int */
|
||||||
|
#define CTL_POSIX4_RTSIG_MAX 21 /* int */
|
||||||
|
#define CTL_POSIX4_SEM_NSEMS_MAX 22 /* int */
|
||||||
|
#define CTL_POSIX4_SEM_VALUE_MAX 23 /* int */
|
||||||
|
#define CTL_POSIX4_SIGQUEUE_MAX 24 /* int */
|
||||||
|
#define CTL_POSIX4_TIMER_MAX 25 /* int */
|
||||||
|
|
||||||
|
#define CTL_POSIX4_N_CTLS 25
|
||||||
|
|
||||||
|
#define CTL_POSIX4_NAMES { \
|
||||||
|
{ 0, 0 }, \
|
||||||
|
{ "asynchronous_io", CTLTYPE_INT }, \
|
||||||
|
{ "mapped_files", CTLTYPE_INT }, \
|
||||||
|
{ "memlock", CTLTYPE_INT }, \
|
||||||
|
{ "memlock_range", CTLTYPE_INT }, \
|
||||||
|
{ "memory_protection", CTLTYPE_INT }, \
|
||||||
|
{ "message_passing", CTLTYPE_INT }, \
|
||||||
|
{ "prioritized_io", CTLTYPE_INT }, \
|
||||||
|
{ "priority_scheduling", CTLTYPE_INT }, \
|
||||||
|
{ "realtime_signals", CTLTYPE_INT }, \
|
||||||
|
{ "semaphores", CTLTYPE_INT }, \
|
||||||
|
{ "fsync", CTLTYPE_INT }, \
|
||||||
|
{ "shared_memory_objects", CTLTYPE_INT }, \
|
||||||
|
{ "synchronized_io", CTLTYPE_INT }, \
|
||||||
|
{ "timers", CTLTYPE_INT }, \
|
||||||
|
{ "aio_listio_max", CTLTYPE_INT }, \
|
||||||
|
{ "aio_max", CTLTYPE_INT }, \
|
||||||
|
{ "aio_prio_delta_max", CTLTYPE_INT }, \
|
||||||
|
{ "delaytimer_max", CTLTYPE_INT }, \
|
||||||
|
{ "mq_open_max", CTLTYPE_INT }, \
|
||||||
|
{ "pagesize", CTLTYPE_INT }, \
|
||||||
|
{ "rtsig_max", CTLTYPE_INT }, \
|
||||||
|
{ "nsems_max", CTLTYPE_INT }, \
|
||||||
|
{ "sem_value_max", CTLTYPE_INT }, \
|
||||||
|
{ "sigqueue_max", CTLTYPE_INT }, \
|
||||||
|
{ "timer_max", CTLTYPE_INT }, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _POSIX_VERSION >= 199309L */
|
||||||
|
#endif /* _POSIX4_POSIX4_H_ */
|
@ -36,7 +36,7 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)proc.h 8.15 (Berkeley) 5/19/95
|
* @(#)proc.h 8.15 (Berkeley) 5/19/95
|
||||||
* $Id: proc.h,v 1.53 1998/01/22 17:30:11 dyson Exp $
|
* $Id: proc.h,v 1.54 1998/02/20 13:52:15 bde Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SYS_PROC_H_
|
#ifndef _SYS_PROC_H_
|
||||||
@ -329,6 +329,7 @@ int leavepgrp __P((struct proc *p));
|
|||||||
void mi_switch __P((void));
|
void mi_switch __P((void));
|
||||||
void procinit __P((void));
|
void procinit __P((void));
|
||||||
void resetpriority __P((struct proc *));
|
void resetpriority __P((struct proc *));
|
||||||
|
int roundrobin_interval __P((void));
|
||||||
void setrunnable __P((struct proc *));
|
void setrunnable __P((struct proc *));
|
||||||
void setrunqueue __P((struct proc *));
|
void setrunqueue __P((struct proc *));
|
||||||
void sleepinit __P((void));
|
void sleepinit __P((void));
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id$
|
* $Id: rtprio.h,v 1.4 1997/02/22 09:45:48 peter Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SYS_RTPRIO_H_
|
#ifndef _SYS_RTPRIO_H_
|
||||||
@ -39,10 +39,29 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* priority types */
|
/* priority types */
|
||||||
|
|
||||||
#define RTP_PRIO_REALTIME 0
|
#define RTP_PRIO_REALTIME 0
|
||||||
#define RTP_PRIO_NORMAL 1
|
#define RTP_PRIO_NORMAL 1
|
||||||
#define RTP_PRIO_IDLE 2
|
#define RTP_PRIO_IDLE 2
|
||||||
|
|
||||||
|
/* RTP_PRIO_FIFO is Posix 4 SCHED_FIFO.
|
||||||
|
* Careful: These are based on the kernel config POSIX4 and not
|
||||||
|
* the compile time test _POSIX_PRIORITY_SCHEDULING since they
|
||||||
|
* set the behavior of the system.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef POSIX4
|
||||||
|
#define RTP_PRIO_FIFO_BIT 4
|
||||||
|
#define RTP_PRIO_FIFO (RTP_PRIO_REALTIME | RTP_PRIO_FIFO_BIT)
|
||||||
|
#define RTP_PRIO_BASE(P) ((P) & ~RTP_PRIO_FIFO_BIT)
|
||||||
|
#define RTP_PRIO_IS_REALTIME(P) (RTP_PRIO_BASE(P) == RTP_PRIO_REALTIME)
|
||||||
|
#define RTP_PRIO_NEED_RR(P) ((P) != RTP_PRIO_FIFO)
|
||||||
|
#else
|
||||||
|
#define RTP_PRIO_BASE(P) (P)
|
||||||
|
#define RTP_PRIO_IS_REALTIME(P) (P == RTP_PRIO_REALTIME)
|
||||||
|
#define RTP_PRIO_NEED_RR(P) (1)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* priority range */
|
/* priority range */
|
||||||
#define RTP_PRIO_MIN 0 /* Highest priority */
|
#define RTP_PRIO_MIN 0 /* Highest priority */
|
||||||
#define RTP_PRIO_MAX 31 /* Lowest priority */
|
#define RTP_PRIO_MAX 31 /* Lowest priority */
|
||||||
|
61
sys/sys/semaphore.h
Normal file
61
sys/sys/semaphore.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#ifndef _SEMAPHORE_H_
|
||||||
|
#define _SEMAPHORE_H_
|
||||||
|
|
||||||
|
/* semaphore.h: POSIX.4 semaphores */
|
||||||
|
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1996, 1997
|
||||||
|
* HD Associates, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by HD Associates, Inc
|
||||||
|
* 4. Neither the name of the author nor the names of any co-contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef POSIX4_INCLUDE_MAYBES
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef int sem_t;
|
||||||
|
|
||||||
|
#ifndef KERNEL
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
int sem_init __P(sem_t *, int, unsigned int));
|
||||||
|
int sem_destroy __P((sem_t *));
|
||||||
|
sem_t sem_open __P((const char *, int, ...));
|
||||||
|
int sem_close __P((sem_t *));
|
||||||
|
int sem_unlink __P((const char *));
|
||||||
|
int sem_wait((sem_t *));
|
||||||
|
int sem_trywait((sem_t *));
|
||||||
|
int sem_post((sem_t *));
|
||||||
|
int sem_getvalue((sem_t *, int *));
|
||||||
|
|
||||||
|
#endif /* KERNEL */
|
||||||
|
|
||||||
|
#endif /* _SEMAPHORE_H_ */
|
@ -34,7 +34,7 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)sysctl.h 8.1 (Berkeley) 6/2/93
|
* @(#)sysctl.h 8.1 (Berkeley) 6/2/93
|
||||||
* $Id: sysctl.h,v 1.56 1997/09/07 05:27:26 bde Exp $
|
* $Id: sysctl.h,v 1.57 1997/09/07 16:53:52 bde Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SYS_SYSCTL_H_
|
#ifndef _SYS_SYSCTL_H_
|
||||||
@ -180,7 +180,16 @@ int sysctl_handle_opaque SYSCTL_HANDLER_ARGS;
|
|||||||
#define CTL_HW 6 /* generic cpu/io */
|
#define CTL_HW 6 /* generic cpu/io */
|
||||||
#define CTL_MACHDEP 7 /* machine dependent */
|
#define CTL_MACHDEP 7 /* machine dependent */
|
||||||
#define CTL_USER 8 /* user-level */
|
#define CTL_USER 8 /* user-level */
|
||||||
|
|
||||||
|
#ifdef POSIX4
|
||||||
|
#define CTL_POSIX4 9 /* user-level */
|
||||||
|
#define CTL_MAXID 10 /* number of valid top-level ids */
|
||||||
|
|
||||||
|
#define CTL_POSIX4_NAME { "posix4", CTLTYPE_NODE },
|
||||||
|
#else
|
||||||
#define CTL_MAXID 9 /* number of valid top-level ids */
|
#define CTL_MAXID 9 /* number of valid top-level ids */
|
||||||
|
#define CTL_POSIX4_NAME
|
||||||
|
#endif /* POSIX4 */
|
||||||
|
|
||||||
#define CTL_NAMES { \
|
#define CTL_NAMES { \
|
||||||
{ 0, 0 }, \
|
{ 0, 0 }, \
|
||||||
@ -192,6 +201,7 @@ int sysctl_handle_opaque SYSCTL_HANDLER_ARGS;
|
|||||||
{ "hw", CTLTYPE_NODE }, \
|
{ "hw", CTLTYPE_NODE }, \
|
||||||
{ "machdep", CTLTYPE_NODE }, \
|
{ "machdep", CTLTYPE_NODE }, \
|
||||||
{ "user", CTLTYPE_NODE }, \
|
{ "user", CTLTYPE_NODE }, \
|
||||||
|
CTL_POSIX4_NAME \
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)time.h 8.5 (Berkeley) 5/4/95
|
* @(#)time.h 8.5 (Berkeley) 5/4/95
|
||||||
* $Id: time.h,v 1.18 1998/02/21 03:20:46 jb Exp $
|
* $Id: time.h,v 1.19 1998/02/25 02:14:14 bde Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SYS_TIME_H_
|
#ifndef _SYS_TIME_H_
|
||||||
@ -194,12 +194,18 @@ struct clockinfo {
|
|||||||
int profhz; /* profiling clock frequency */
|
int profhz; /* profiling clock frequency */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* CLOCK_REALTIME and TIMER_ABSTIME are supposed to be in time.h */
|
||||||
|
|
||||||
|
#ifndef CLOCK_REALTIME
|
||||||
#define CLOCK_REALTIME 0
|
#define CLOCK_REALTIME 0
|
||||||
|
#endif
|
||||||
#define CLOCK_VIRTUAL 1
|
#define CLOCK_VIRTUAL 1
|
||||||
#define CLOCK_PROF 2
|
#define CLOCK_PROF 2
|
||||||
|
|
||||||
#define TIMER_RELTIME 0x0 /* relative timer */
|
#define TIMER_RELTIME 0x0 /* relative timer */
|
||||||
|
#ifndef TIMER_ABSTIME
|
||||||
#define TIMER_ABSTIME 0x1 /* absolute timer */
|
#define TIMER_ABSTIME 0x1 /* absolute timer */
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef KERNEL
|
#ifdef KERNEL
|
||||||
extern struct timecounter *timecounter;
|
extern struct timecounter *timecounter;
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)time.h 8.5 (Berkeley) 5/4/95
|
* @(#)time.h 8.5 (Berkeley) 5/4/95
|
||||||
* $Id: time.h,v 1.18 1998/02/21 03:20:46 jb Exp $
|
* $Id: time.h,v 1.19 1998/02/25 02:14:14 bde Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SYS_TIME_H_
|
#ifndef _SYS_TIME_H_
|
||||||
@ -194,12 +194,18 @@ struct clockinfo {
|
|||||||
int profhz; /* profiling clock frequency */
|
int profhz; /* profiling clock frequency */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* CLOCK_REALTIME and TIMER_ABSTIME are supposed to be in time.h */
|
||||||
|
|
||||||
|
#ifndef CLOCK_REALTIME
|
||||||
#define CLOCK_REALTIME 0
|
#define CLOCK_REALTIME 0
|
||||||
|
#endif
|
||||||
#define CLOCK_VIRTUAL 1
|
#define CLOCK_VIRTUAL 1
|
||||||
#define CLOCK_PROF 2
|
#define CLOCK_PROF 2
|
||||||
|
|
||||||
#define TIMER_RELTIME 0x0 /* relative timer */
|
#define TIMER_RELTIME 0x0 /* relative timer */
|
||||||
|
#ifndef TIMER_ABSTIME
|
||||||
#define TIMER_ABSTIME 0x1 /* absolute timer */
|
#define TIMER_ABSTIME 0x1 /* absolute timer */
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef KERNEL
|
#ifdef KERNEL
|
||||||
extern struct timecounter *timecounter;
|
extern struct timecounter *timecounter;
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)unistd.h 8.2 (Berkeley) 1/7/94
|
* @(#)unistd.h 8.2 (Berkeley) 1/7/94
|
||||||
* $Id: unistd.h,v 1.13 1997/02/22 09:46:21 peter Exp $
|
* $Id: unistd.h,v 1.14 1997/06/16 00:29:26 dyson Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SYS_UNISTD_H_
|
#ifndef _SYS_UNISTD_H_
|
||||||
@ -50,7 +50,47 @@
|
|||||||
#define _POSIX_SAVED_IDS /* saved set-user-ID and set-group-ID */
|
#define _POSIX_SAVED_IDS /* saved set-user-ID and set-group-ID */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef POSIX4
|
||||||
|
|
||||||
|
/* Select POSIX.4 regardless.
|
||||||
|
* Don't undef first - we want an error on conflicts.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _POSIX_VERSION 199309L
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _POSIX_VERSION
|
||||||
#define _POSIX_VERSION 199009L
|
#define _POSIX_VERSION 199009L
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if _POSIX_VERSION > 199009L
|
||||||
|
/*
|
||||||
|
* Set it up so that all new headers can assume _POSIX_C_SOURCE is the
|
||||||
|
* only thing that must be looked at to determine the feature set,
|
||||||
|
* and so that old headers don't have to change:
|
||||||
|
*/
|
||||||
|
#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
|
||||||
|
/*
|
||||||
|
* Default to latest:
|
||||||
|
*/
|
||||||
|
#define _POSIX_C_SOURCE _POSIX_VERSION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_POSIX_C_SOURCE) && !defined(_POSIX_SOURCE)
|
||||||
|
/*
|
||||||
|
* Define _POSIX_SOURCE for older headers:
|
||||||
|
*/
|
||||||
|
#define _POSIX_SOURCE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if _POSIX_VERSION >= 199309L
|
||||||
|
#include <posix4/posix4.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _POSIX_VERSION */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define _POSIX2_VERSION 199212L
|
#define _POSIX2_VERSION 199212L
|
||||||
|
|
||||||
/* execution-time symbolic constants */
|
/* execution-time symbolic constants */
|
||||||
@ -122,6 +162,51 @@
|
|||||||
/* configurable system strings */
|
/* configurable system strings */
|
||||||
#define _CS_PATH 1
|
#define _CS_PATH 1
|
||||||
|
|
||||||
|
#ifdef POSIX4_VISIBLE
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* Not until the dust settles after the header commit
|
||||||
|
*/
|
||||||
|
#define _POSIX_PRIORITY_SCHEDULING
|
||||||
|
#define _POSIX_ASYNCHRONOUS_IO
|
||||||
|
#define _POSIX_MEMLOCK
|
||||||
|
#define _POSIX_MEMLOCK_RANGE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* POSIX 4 sysconf options */
|
||||||
|
#define _SC_ASYNCHRONOUS_IO 28
|
||||||
|
#define _SC_MAPPED_FILES 29
|
||||||
|
#define _SC_MEMLOCK 30
|
||||||
|
#define _SC_MEMLOCK_RANGE 31
|
||||||
|
#define _SC_MEMORY_PROTECTION 32
|
||||||
|
#define _SC_MESSAGE_PASSING 33
|
||||||
|
#define _SC_PRIORITIZED_IO 34
|
||||||
|
#define _SC_PRIORITY_SCHEDULING 35
|
||||||
|
#define _SC_REALTIME_SIGNALS 36
|
||||||
|
#define _SC_SEMAPHORES 37
|
||||||
|
#define _SC_FSYNC 38
|
||||||
|
#define _SC_SHARED_MEMORY_OBJECTS 39
|
||||||
|
#define _SC_SYNCHRONIZED_IO 40
|
||||||
|
#define _SC_TIMERS 41
|
||||||
|
#define _SC_AIO_LISTIO_MAX 42
|
||||||
|
#define _SC_AIO_MAX 43
|
||||||
|
#define _SC_AIO_PRIO_DELTA_MAX 44
|
||||||
|
#define _SC_DELAYTIMER_MAX 45
|
||||||
|
#define _SC_MQ_OPEN_MAX 46
|
||||||
|
#define _SC_PAGESIZE 47
|
||||||
|
#define _SC_RTSIG_MAX 48
|
||||||
|
#define _SC_SEM_NSEMS_MAX 49
|
||||||
|
#define _SC_SEM_VALUE_MAX 50
|
||||||
|
#define _SC_SIGQUEUE_MAX 51
|
||||||
|
#define _SC_TIMER_MAX 52
|
||||||
|
|
||||||
|
/* POSIX 4 pathconf and fpathconf options */
|
||||||
|
#define _PC_ASYNC_IO 53
|
||||||
|
#define _PC_PRIO_IO 54
|
||||||
|
#define _PC_SYNC_IO 55
|
||||||
|
|
||||||
|
#endif /* POSIX4_VISIBLE */
|
||||||
|
|
||||||
#ifndef _POSIX_SOURCE
|
#ifndef _POSIX_SOURCE
|
||||||
/*
|
/*
|
||||||
* rfork() options.
|
* rfork() options.
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
* any improvements or extensions that they make and grant Carnegie the
|
* any improvements or extensions that they make and grant Carnegie the
|
||||||
* rights to redistribute these changes.
|
* rights to redistribute these changes.
|
||||||
*
|
*
|
||||||
* $Id: vm_glue.c,v 1.73 1998/02/06 12:14:22 eivind Exp $
|
* $Id: vm_glue.c,v 1.74 1998/02/09 06:11:24 eivind Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "opt_rlimit.h"
|
#include "opt_rlimit.h"
|
||||||
@ -425,7 +425,7 @@ int action;
|
|||||||
/*
|
/*
|
||||||
* do not swapout a realtime process
|
* do not swapout a realtime process
|
||||||
*/
|
*/
|
||||||
if (p->p_rtprio.type == RTP_PRIO_REALTIME)
|
if (RTP_PRIO_IS_REALTIME(p->p_rtprio.type))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user