[patch] merge emulation/posix4 into kernel
Joe Talbott
josepht at cstone.net
Mon Jun 25 20:11:53 PDT 2007
Here's a patch to merge sys/emulation/posix4 into the kernel proper.
This stems from my needing to use pthread_*() in the vkernel and was
recommended by corecode in #dragonflybsd. Please review.
Thanks,
Joe
diff --git a/include/Makefile b/include/Makefile
index 8c0bdf9..cdb7552 100644
--- a/include/Makefile
+++ b/include/Makefile
@@ -48,7 +48,6 @@ LDIRS= net netgraph netinet netinet6 sys vm
# when buildworld is run.
#
LSUBDIRS= bus/cam bus/cam/scsi \
- emulation/posix4 \
emulation/linux \
vfs/msdosfs vfs/nfs vfs/ntfs vfs/nwfs \
vfs/smbfs vfs/udf vfs/ufs \
diff --git a/include/pthread.h b/include/pthread.h
index b5dd6f0..a465cbe 100644
--- a/include/pthread.h
+++ b/include/pthread.h
@@ -44,7 +44,7 @@
#include <sys/time.h>
#include <sys/signal.h>
#include <limits.h>
-#include <sched.h>
+#include <sys/sched.h>
/*
* Run-time invariant values:
diff --git a/lib/libc_r/test/mutex_d.c b/lib/libc_r/test/mutex_d.c
index 4d416b9..b673f46 100644
--- a/lib/libc_r/test/mutex_d.c
+++ b/lib/libc_r/test/mutex_d.c
@@ -39,7 +39,7 @@
#include <assert.h>
#include <errno.h>
#include "pthread.h"
-#include <sched.h>
+#include <sys/sched.h>
#include <signal.h>
#include <stdarg.h>
#include <stdio.h>
diff --git a/lib/libc_r/test/sem_d.c b/lib/libc_r/test/sem_d.c
index 00c22e5..0646a83 100644
--- a/lib/libc_r/test/sem_d.c
+++ b/lib/libc_r/test/sem_d.c
@@ -36,11 +36,12 @@
*
****************************************************************************/
+#include <sys/semaphore.h>
+
#include <assert.h>
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
-#include <semaphore.h>
#include <pthread.h>
#define NTHREADS 10
diff --git a/lib/libc_r/uthread/pthread_private.h b/lib/libc_r/uthread/pthread_private.h
index fb953b1..773f2bd 100644
--- a/lib/libc_r/uthread/pthread_private.h
+++ b/lib/libc_r/uthread/pthread_private.h
@@ -57,7 +57,7 @@
#include <sys/types.h>
#include <sys/time.h>
#include <sys/cdefs.h>
-#include <sched.h>
+#include <sys/sched.h>
#include <spinlock.h>
#include <pthread_np.h>
diff --git a/lib/libc_r/uthread/uthread_sem.c b/lib/libc_r/uthread/uthread_sem.c
index c75cfea..5ab29ec 100644
--- a/lib/libc_r/uthread/uthread_sem.c
+++ b/lib/libc_r/uthread/uthread_sem.c
@@ -30,10 +30,12 @@
* $DragonFly: src/lib/libc_r/uthread/uthread_sem.c,v 1.3 2005/05/30 22:50:53 joerg Exp $
*/
+#include <sys/semaphore.h>
+
#include <stdlib.h>
#include <errno.h>
-#include <semaphore.h>
#include <pthread.h>
+
#include "pthread_private.h"
#define _SEM_CHECK_VALIDITY(sem) \
diff --git a/lib/libc_r/uthread/uthread_spinlock.c b/lib/libc_r/uthread/uthread_spinlock.c
index 033eba1..f92da7c 100644
--- a/lib/libc_r/uthread/uthread_spinlock.c
+++ b/lib/libc_r/uthread/uthread_spinlock.c
@@ -36,7 +36,7 @@
#include <sys/fcntl.h>
#include <stdio.h>
-#include <sched.h>
+#include <sys/sched.h>
#include <unistd.h>
#include <pthread.h>
#include <string.h>
diff --git a/lib/libthread_xu/thread/thr_private.h b/lib/libthread_xu/thread/thr_private.h
index 3fc1874..2ca6255 100644
--- a/lib/libthread_xu/thread/thr_private.h
+++ b/lib/libthread_xu/thread/thr_private.h
@@ -50,7 +50,7 @@
#include <limits.h>
#include <signal.h>
#include <stdio.h>
-#include <sched.h>
+#include <sys/sched.h>
#include <unistd.h>
#include <pthread.h>
#include <pthread_np.h>
diff --git a/lib/libthread_xu/thread/thr_sem.c b/lib/libthread_xu/thread/thr_sem.c
index 21fd1dd..931d2bf 100644
--- a/lib/libthread_xu/thread/thr_sem.c
+++ b/lib/libthread_xu/thread/thr_sem.c
@@ -32,11 +32,11 @@
#include "namespace.h"
#include <machine/tls.h>
+#include <sys/semaphore.h>
#include <errno.h>
#include <fcntl.h>
#include <pthread.h>
-#include <semaphore.h>
#include <stdlib.h>
#include <time.h>
#include "un-namespace.h"
diff --git a/sys/conf/files b/sys/conf/files
index 06f0ef0..7226979 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -1103,9 +1103,9 @@ bus/pci/pci_if.m optional pci
bus/pci/pcib_if.m optional pci
dev/powermng/i386/alpm/alpm.c optional alpm
dev/misc/xrpu/xrpu.c optional xrpu
-emulation/posix4/posix4_mib.c standard
-emulation/posix4/p1003_1b.c standard
-emulation/posix4/ksched.c optional _kposix_priority_scheduling
+kern/kern_posix4_mib.c standard
+kern/kern_p1003_1b.c standard
+kern/kern_sched.c optional _kposix_priority_scheduling
vfs/ufs/ffs_alloc.c optional ffs
vfs/ufs/ffs_alloc.c optional mfs
vfs/ufs/ffs_balloc.c optional ffs
diff --git a/sys/emulation/linux/linux_misc.c b/sys/emulation/linux/linux_misc.c
index a1bd5e2..6c52e4f 100644
--- a/sys/emulation/linux/linux_misc.c
+++ b/sys/emulation/linux/linux_misc.c
@@ -75,7 +75,7 @@
#include <machine/segments.h>
#endif
-#include <emulation/posix4/sched.h>
+#include <sys/sched.h>
#include <emulation/linux/linux_sysproto.h>
#include <arch_linux/linux.h>
diff --git a/sys/emulation/posix4/aio.h b/sys/emulation/posix4/aio.h
deleted file mode 100644
index 466b3f7..0000000
--- a/sys/emulation/posix4/aio.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* 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.
- *
- * $FreeBSD: src/sys/posix4/aio.h,v 1.6 1999/12/29 04:55:01 peter Exp $
- * $DragonFly: src/sys/emulation/posix4/aio.h,v 1.3 2003/08/27 08:30:04 rob Exp $
- */
-
-/* aio.h: P1003.1B-1993 Asynchronous I/O */
-
-#ifndef _P1003_1B_AIO_H_
-#define _P1003_1B_AIO_H_
-
-#include <sys/_posix.h>
-#include <sys/types.h>
-
-/* For struct sigevent:
- */
-#ifdef _KERNEL
-#include <sys/signal.h>
-#else
-#include <signal.h>
-
-#ifdef _P1003_1B_INCLUDE_MAYBES
-#include <time.h>
-#include <fcntl.h>
-#else
-struct timespec;
-#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>
-
-__BEGIN_DECLS
-int aio_read (struct aiocb *);
-int aio_write (struct aiocb *);
-
-int lio_listio (int, aio_listio_ctl[], int, struct sigevent *);
-
-int aio_error (const struct aiocb *);
-ssize_t aio_return (struct aiocb *);
-int aio_cancel (int, struct aiocb *);
-
-int aio_suspend (caio_listio_ctl[], int, const struct timespec *);
-
-int aio_fsync (int, struct aiocb *);
-__END_DECLS
-
-#endif /* _KERNEL */
-
-#endif /* _P1003_1B_AIO_H_ */
diff --git a/sys/emulation/posix4/ksched.c b/sys/emulation/posix4/ksched.c
deleted file mode 100644
index 0dbc684..0000000
--- a/sys/emulation/posix4/ksched.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * 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.
- *
- * $FreeBSD: src/sys/posix4/ksched.c,v 1.7.2.1 2000/05/16 06:58:13 dillon Exp $
- * $DragonFly: src/sys/emulation/posix4/ksched.c,v 1.8 2007/02/03 18:05:57 corecode Exp $
- */
-
-/* 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 <sys/resource.h>
-#include <machine/cpu.h> /* For need_user_resched */
-
-#include "posix4.h"
-
-/* ksched: Real-time extension to support POSIX priority scheduling.
- */
-
-struct ksched {
- struct timespec rr_interval;
-};
-
-int ksched_attach(struct ksched **p)
-{
- struct ksched *ksched= p31b_malloc(sizeof(*ksched));
-
- ksched->rr_interval.tv_sec = 0;
- ksched->rr_interval.tv_nsec = 1000000000L / 10; /* XXX */
-
- *p = ksched;
- return 0;
-}
-
-int ksched_detach(struct ksched *p)
-{
- p31b_free(p);
-
- return 0;
-}
-
-/*
- * XXX About priorities
- *
- * POSIX 1003.1b 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 POSIX 1003.1b (higher numerically is higher priority)
- */
-
-#define p4prio_to_rtpprio(P) (RTP_PRIO_MAX - (P))
-#define rtpprio_to_p4prio(P) (RTP_PRIO_MAX - (P))
-
-/* These improve readability a bit for me:
- */
-#define P1B_PRIO_MIN rtpprio_to_p4prio(RTP_PRIO_MAX)
-#define P1B_PRIO_MAX rtpprio_to_p4prio(RTP_PRIO_MIN)
-
-static __inline int
-getscheduler(register_t *ret, struct ksched *ksched, struct lwp *lp)
-{
- int e = 0;
-
- switch (lp->lwp_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(register_t *ret, struct ksched *ksched,
- struct lwp *lp, const struct sched_param *param)
-{
- register_t policy;
- int e;
-
- e = getscheduler(&policy, ksched, lp);
-
- if (e == 0)
- {
- if (policy == SCHED_OTHER)
- e = EINVAL;
- else
- e = ksched_setscheduler(ret, ksched, lp, policy, param);
- }
-
- return e;
-}
-
-int ksched_getparam(register_t *ret, struct ksched *ksched,
- struct lwp *lp, struct sched_param *param)
-{
- if (RTP_PRIO_IS_REALTIME(lp->lwp_rtprio.type))
- param->sched_priority = rtpprio_to_p4prio(lp->lwp_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 "p31b_proc()".
- *
- */
-int ksched_setscheduler(register_t *ret, struct ksched *ksched,
- struct lwp *lp, 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 >= P1B_PRIO_MIN &&
- param->sched_priority <= P1B_PRIO_MAX)
- {
- rtp.prio = p4prio_to_rtpprio(param->sched_priority);
- rtp.type = (policy == SCHED_FIFO)
- ? RTP_PRIO_FIFO : RTP_PRIO_REALTIME;
-
- lp->lwp_rtprio = rtp;
- need_user_resched();
- }
- else
- e = EPERM;
-
-
- break;
-
- case SCHED_OTHER:
- {
- rtp.type = RTP_PRIO_NORMAL;
- rtp.prio = p4prio_to_rtpprio(param->sched_priority);
- lp->lwp_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.
- */
- need_user_resched();
- }
- break;
- }
-
- return e;
-}
-
-int ksched_getscheduler(register_t *ret, struct ksched *ksched, struct lwp *lp)
-{
- return getscheduler(ret, ksched, lp);
-}
-
-/* ksched_yield: Yield the CPU.
- */
-int ksched_yield(register_t *ret, struct ksched *ksched)
-{
- need_user_resched();
- return 0;
-}
-
-int ksched_get_priority_max(register_t*ret, struct ksched *ksched, 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(register_t *ret, struct ksched *ksched, int policy)
-{
- int e = 0;
-
- switch (policy)
- {
- case SCHED_FIFO:
- case SCHED_RR:
- *ret = P1B_PRIO_MIN;
- break;
-
- case SCHED_OTHER:
- *ret = PRIO_MIN;
- break;
-
- default:
- e = EINVAL;
- }
-
- return e;
-}
-
-int ksched_rr_get_interval(register_t *ret, struct ksched *ksched,
- struct lwp *lp, struct timespec *timespec)
-{
- *timespec = ksched->rr_interval;
-
- return 0;
-}
diff --git a/sys/emulation/posix4/mqueue.h b/sys/emulation/posix4/mqueue.h
deleted file mode 100644
index 5970c47..0000000
--- a/sys/emulation/posix4/mqueue.h
+++ /dev/null
@@ -1,78 +0,0 @@
-#ifndef _MQUEUE_H_
-#define _MQUEUE_H_
-
-/* mqueue.h: POSIX 1003.1b 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.
- *
- * $FreeBSD: src/sys/posix4/mqueue.h,v 1.4 1999/12/29 04:55:02 peter Exp $
- * $DragonFly: src/sys/emulation/posix4/mqueue.h,v 1.3 2003/08/27 08:30:04 rob Exp $
- */
-
-#include <sys/_posix.h>
-
-#ifdef _P1003_1B_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>
-
-__BEGIN_DECLS
-mqd_t mq_open (const char *, int oflag, ...);
-int mq_close (mqd_t);
-int mq_unlink (const char *);
-int mq_send (mqd_t, const char *, size_t, unsigned int);
-ssize_t mq_receive (mqd_t, char *, size_t, unsigned int *);
-int mq_notify (mqd_t, const struct sigevent *);
-int mq_setattr (mqd_t, const struct mq_attr *, struct mq_attr *);
-int mq_getattr (mqd_t, struct mq_attr *);
-__END_DECLS
-
-#endif
-
-#endif /* _MQUEUE_H_ */
diff --git a/sys/emulation/posix4/p1003_1b.c b/sys/emulation/posix4/p1003_1b.c
deleted file mode 100644
index 37a3767..0000000
--- a/sys/emulation/posix4/p1003_1b.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * 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.
- *
- * $FreeBSD: src/sys/posix4/p1003_1b.c,v 1.5.2.2 2003/03/25 06:13:35 rwatson Exp $
- * $DragonFly: src/sys/emulation/posix4/p1003_1b.c,v 1.9 2007/02/03 18:05:57 corecode Exp $
- */
-
-/* p1003_1b: Real Time common code.
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/sysent.h>
-#include <sys/proc.h>
-#include <sys/syslog.h>
-#include <sys/module.h>
-#include <sys/sysproto.h>
-#include <sys/sysctl.h>
-
-#include "posix4.h"
-
-MALLOC_DEFINE(M_P31B, "p1003.1b", "Posix 1003.1B");
-
-/* p31b_proc: Return a proc struct corresponding to a pid to operate on.
- *
- * Enforce permission policy.
- *
- * The policy is the same as for sending signals except there
- * is no notion of process groups.
- *
- * pid == 0 means my process.
- *
- * This is disabled until I've got a permission gate in again:
- * only root can do this.
- */
-
-#if 0
-/*
- * This is stolen from CANSIGNAL in kern_sig:
- *
- * Can process p, with pcred pc, do "write flavor" operations to process q?
- */
-#define CAN_AFFECT(p, cr, q) \
- ((cr)->cr_uid == 0 || \
- (cr)->cr_ruid == (q)->p_ucred->cr_ruid || \
- (cr)->cr_uid == (q)->p_ucred->cr_ruid || \
- (cr)->cr_ruid == (q)->p_ucred->cr_uid || \
- (cr)->cr_uid == (q)->p_ucred->cr_uid)
-#else
-#define CAN_AFFECT(p, cr, q) ((cr)->cr_uid == 0)
-#endif
-
-/*
- * p31b_proc: Look up a proc from a PID. If proc is 0 it is
- * my own proc.
- */
-int p31b_proc(struct proc *p, pid_t pid, struct proc **pp)
-{
- int ret = 0;
- struct proc *other_proc = 0;
-
- if (pid == 0)
- other_proc = p;
- else
- other_proc = pfind(pid);
-
- if (other_proc)
- {
- /* Enforce permission policy.
- */
- if (CAN_AFFECT(p, p->p_ucred, other_proc))
- *pp = other_proc;
- else
- ret = EPERM;
- }
- else
- ret = ESRCH;
-
- return ret;
-}
-
-
-#if !defined(_KPOSIX_PRIORITY_SCHEDULING)
-
-int syscall_not_present(const char *s);
-
-/* The system calls return ENOSYS if an entry is called that is
- * not run-time supported. I am also logging since some programs
- * start to use this when they shouldn't. That will be removed if annoying.
- */
-int syscall_not_present(const char *s)
-{
- struct proc *p = curproc;
- log(LOG_ERR, "cmd %s pid %d tried to use non-present %s\n",
- p->p_comm, p->p_pid, s);
-
- /* a " return nosys(p, uap); " here causes a core dump.
- */
-
- return ENOSYS;
-}
-
-/* Not configured but loadable via a module:
- */
-
-static int sched_attach(void)
-{
- return 0;
-}
-
-#define SYSCALL_NOT_PRESENT_GEN(SC) \
-int SC (struct SC##_args *uap) \
-{ \
- return syscall_not_present(#SC); \
-}
-
-SYSCALL_NOT_PRESENT_GEN(sched_setparam)
-SYSCALL_NOT_PRESENT_GEN(sched_getparam)
-SYSCALL_NOT_PRESENT_GEN(sched_setscheduler)
-SYSCALL_NOT_PRESENT_GEN(sched_getscheduler)
-SYSCALL_NOT_PRESENT_GEN(sched_yield)
-SYSCALL_NOT_PRESENT_GEN(sched_get_priority_max)
-SYSCALL_NOT_PRESENT_GEN(sched_get_priority_min)
-SYSCALL_NOT_PRESENT_GEN(sched_rr_get_interval)
-
-#else
-
-/* Configured in kernel version:
- */
-static struct ksched *ksched;
-
-static int sched_attach(void)
-{
- int ret = ksched_attach(&ksched);
-
- if (ret == 0)
- p31b_setcfg(CTL_P1003_1B_PRIORITY_SCHEDULING, 1);
-
- return ret;
-}
-
-int
-sys_sched_setparam(struct sched_setparam_args *uap)
-{
- struct proc *p = curproc;
- struct lwp *lp;
- int e;
-
- struct sched_param sched_param;
- copyin(uap->param, &sched_param, sizeof(sched_param));
-
- if ((e = p31b_proc(p, uap->pid, &p)) == 0) {
- lp = FIRST_LWP_IN_PROC(p); /* XXX lwp */
- e = ksched_setparam(&uap->sysmsg_result, ksched, lp,
- (const struct sched_param *)&sched_param);
- }
- return e;
-}
-
-int
-sys_sched_getparam(struct sched_getparam_args *uap)
-{
- struct proc *p = curproc;
- struct proc *targetp;
- struct lwp *lp;
- struct sched_param sched_param;
- int e;
-
- if (uap->pid != 0 && uap->pid != p->p_pid) {
- e = p31b_proc(p, uap->pid, &targetp);
- if (e)
- return e;
- } else {
- targetp = p;
- }
-
- lp = FIRST_LWP_IN_PROC(targetp); /* XXX lwp */
- e = ksched_getparam(&uap->sysmsg_result, ksched, lp, &sched_param);
-
- if (!e)
- copyout(&sched_param, uap->param, sizeof(sched_param));
-
- return e;
-}
-
-int
-sys_sched_setscheduler(struct sched_setscheduler_args *uap)
-{
- struct proc *p = curproc;
- struct lwp *lp;
- int e;
-
- struct sched_param sched_param;
- copyin(uap->param, &sched_param, sizeof(sched_param));
-
- if ((e = p31b_proc(p, uap->pid, &p)) == 0) {
- lp = FIRST_LWP_IN_PROC(p); /* XXX lwp */
- e = ksched_setscheduler(&uap->sysmsg_result, ksched, lp,
- uap->policy, (const struct sched_param *)&sched_param);
- }
- return e;
-}
-
-int
-sys_sched_getscheduler(struct sched_getscheduler_args *uap)
-{
- struct proc *p = curproc;
- struct proc *targetp;
- struct lwp *lp;
- int e;
-
- if (uap->pid != 0 && uap->pid != p->p_pid) {
- e = p31b_proc(p, uap->pid, &targetp);
- if (e)
- return e;
- } else {
- targetp = p;
- }
-
- lp = FIRST_LWP_IN_PROC(targetp); /* XXX lwp */
- e = ksched_getscheduler(&uap->sysmsg_result, ksched, lp);
-
- return e;
-}
-
-int
-sys_sched_yield(struct sched_yield_args *uap)
-{
- return ksched_yield(&uap->sysmsg_result, ksched);
-}
-
-int
-sys_sched_get_priority_max(struct sched_get_priority_max_args *uap)
-{
- return ksched_get_priority_max(&uap->sysmsg_result, ksched, uap->policy);
-}
-
-int
-sys_sched_get_priority_min(struct sched_get_priority_min_args *uap)
-{
- return ksched_get_priority_min(&uap->sysmsg_result, ksched, uap->policy);
-}
-
-int
-sys_sched_rr_get_interval(struct sched_rr_get_interval_args *uap)
-{
- int e;
- struct proc *p = curproc;
- struct lwp *lp = curthread->td_lwp;
-
- if ((e = p31b_proc(p, uap->pid, &p)) == 0) {
- e = ksched_rr_get_interval(&uap->sysmsg_result, ksched,
- lp, uap->interval);
- }
- return e;
-}
-
-#endif
-
-static void p31binit(void *notused)
-{
- (void) sched_attach();
- p31b_setcfg(CTL_P1003_1B_PAGESIZE, PAGE_SIZE);
-}
-
-SYSINIT(p31b, SI_SUB_P1003_1B, SI_ORDER_FIRST, p31binit, NULL);
diff --git a/sys/emulation/posix4/posix4.h b/sys/emulation/posix4/posix4.h
deleted file mode 100644
index 2e01fc0..0000000
--- a/sys/emulation/posix4/posix4.h
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef _P1003_1B_P1003_1B_H_
-#define _P1003_1B_P1003_1B_H_
-/*-
- * Copyright (c) 1996, 1997, 1998
- *
- * 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.
- *
- * $FreeBSD: src/sys/posix4/posix4.h,v 1.6 1999/12/27 10:22:09 bde Exp $
- * $DragonFly: src/sys/emulation/posix4/posix4.h,v 1.7 2007/02/03 18:05:57 corecode Exp $
- */
-
-#include "opt_posix.h"
-
-#include <sys/param.h>
-#include <sys/ioccom.h>
-#include <sys/malloc.h>
-#include "sched.h"
-
-MALLOC_DECLARE(M_P31B);
-
-#define p31b_malloc(SIZE) kmalloc((SIZE), M_P31B, M_WAITOK)
-#define p31b_free(P) kfree((P), M_P31B)
-
-struct proc;
-struct lwp;
-
-int p31b_proc (struct proc *, pid_t, struct proc **);
-
-void p31b_setcfg (int, int);
-
-#ifdef _KPOSIX_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;
-
-int ksched_attach(struct ksched **);
-int ksched_detach(struct ksched *);
-
-int ksched_setparam(register_t *, struct ksched *,
- struct lwp *, const struct sched_param *);
-int ksched_getparam(register_t *, struct ksched *,
- struct lwp *, struct sched_param *);
-
-int ksched_setscheduler(register_t *, struct ksched *,
- struct lwp *, int, const struct sched_param *);
-int ksched_getscheduler(register_t *, struct ksched *, struct lwp *);
-
-int ksched_yield(register_t *, struct ksched *);
-
-int ksched_get_priority_max(register_t *, struct ksched *, int);
-int ksched_get_priority_min(register_t *, struct ksched *, int);
-
-int ksched_rr_get_interval(register_t *, struct ksched *,
- struct lwp *, struct timespec *);
-
-#endif /* _KPOSIX_PRIORITY_SCHEDULING */
-
-#endif /* _P1003_1B_P1003_1B_H_ */
diff --git a/sys/emulation/posix4/posix4_mib.c b/sys/emulation/posix4/posix4_mib.c
deleted file mode 100644
index 302e881..0000000
--- a/sys/emulation/posix4/posix4_mib.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*-
- * 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.
- *
- * $FreeBSD: src/sys/posix4/posix4_mib.c,v 1.3.2.1 2000/08/03 01:09:59 peter Exp $
- * $DragonFly: src/sys/emulation/posix4/posix4_mib.c,v 1.3 2003/08/07 23:17:19 dillon Exp $
- */
-
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/queue.h>
-#include <sys/sysctl.h>
-#include "posix4.h"
-
-static int facility[CTL_P1003_1B_MAXID - 1];
-
-/* OID_AUTO isn't working with sysconf(3). I guess I'd have to
- * modify it to do a lookup by name from the index.
- * For now I've left it a top-level sysctl.
- */
-
-#if 1
-
-SYSCTL_DECL(_p1003_1b);
-
-#define P1B_SYSCTL(num, name) \
-SYSCTL_INT(_p1003_1b, num, \
- name, CTLFLAG_RD, facility + num - 1, 0, "");
-
-#else
-
-SYSCTL_DECL(_kern_p1003_1b);
-
-#define P1B_SYSCTL(num, name) \
-SYSCTL_INT(_kern_p1003_1b, OID_AUTO, \
- name, CTLFLAG_RD, facility + num - 1, 0, "");
-SYSCTL_NODE(_kern, OID_AUTO, p1003_1b, CTLFLAG_RW, 0, "P1003.1B");
-
-#endif
-
-P1B_SYSCTL(CTL_P1003_1B_ASYNCHRONOUS_IO, asynchronous_io);
-P1B_SYSCTL(CTL_P1003_1B_MAPPED_FILES, mapped_files);
-P1B_SYSCTL(CTL_P1003_1B_MEMLOCK, memlock);
-P1B_SYSCTL(CTL_P1003_1B_MEMLOCK_RANGE, memlock_range);
-P1B_SYSCTL(CTL_P1003_1B_MEMORY_PROTECTION, memory_protection);
-P1B_SYSCTL(CTL_P1003_1B_MESSAGE_PASSING, message_passing);
-P1B_SYSCTL(CTL_P1003_1B_PRIORITIZED_IO, prioritized_io);
-P1B_SYSCTL(CTL_P1003_1B_PRIORITY_SCHEDULING, priority_scheduling);
-P1B_SYSCTL(CTL_P1003_1B_REALTIME_SIGNALS, realtime_signals);
-P1B_SYSCTL(CTL_P1003_1B_SEMAPHORES, semaphores);
-P1B_SYSCTL(CTL_P1003_1B_FSYNC, fsync);
-P1B_SYSCTL(CTL_P1003_1B_SHARED_MEMORY_OBJECTS, shared_memory_objects);
-P1B_SYSCTL(CTL_P1003_1B_SYNCHRONIZED_IO, synchronized_io);
-P1B_SYSCTL(CTL_P1003_1B_TIMERS, timers);
-P1B_SYSCTL(CTL_P1003_1B_AIO_LISTIO_MAX, aio_listio_max);
-P1B_SYSCTL(CTL_P1003_1B_AIO_MAX, aio_max);
-P1B_SYSCTL(CTL_P1003_1B_AIO_PRIO_DELTA_MAX, aio_prio_delta_max);
-P1B_SYSCTL(CTL_P1003_1B_DELAYTIMER_MAX, delaytimer_max);
-P1B_SYSCTL(CTL_P1003_1B_MQ_OPEN_MAX, mq_open_max);
-P1B_SYSCTL(CTL_P1003_1B_PAGESIZE, pagesize);
-P1B_SYSCTL(CTL_P1003_1B_RTSIG_MAX, rtsig_max);
-P1B_SYSCTL(CTL_P1003_1B_SEM_NSEMS_MAX, sem_nsems_max);
-P1B_SYSCTL(CTL_P1003_1B_SEM_VALUE_MAX, sem_value_max);
-P1B_SYSCTL(CTL_P1003_1B_SIGQUEUE_MAX, sigqueue_max);
-P1B_SYSCTL(CTL_P1003_1B_TIMER_MAX, timer_max);
-
-/* p31b_setcfg: Set the configuration
- */
-void p31b_setcfg(int num, int value)
-{
- if (num >= 1 && num < CTL_P1003_1B_MAXID)
- facility[num - 1] = value;
-}
diff --git a/sys/emulation/posix4/sched.h b/sys/emulation/posix4/sched.h
deleted file mode 100644
index 77aad49..0000000
--- a/sys/emulation/posix4/sched.h
+++ /dev/null
@@ -1,77 +0,0 @@
-#ifndef _SCHED_H_
-#define _SCHED_H_
-
-/* sched.h: POSIX 1003.1b 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.
- *
- * $FreeBSD: src/sys/posix4/sched.h,v 1.4 1999/12/29 04:55:02 peter Exp $
- * $DragonFly: src/sys/emulation/posix4/sched.h,v 1.3 2003/08/27 08:30:04 rob Exp $
- */
-
-#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>
-
-__BEGIN_DECLS
-int sched_setparam (pid_t, const struct sched_param *);
-int sched_getparam (pid_t, struct sched_param *);
-
-int sched_setscheduler (pid_t, int, const struct sched_param *);
-int sched_getscheduler (pid_t);
-
-int sched_yield (void);
-int sched_get_priority_max (int);
-int sched_get_priority_min (int);
-int sched_rr_get_interval (pid_t, struct timespec *);
-__END_DECLS
-
-#endif
-
-#endif /* _SCHED_H_ */
diff --git a/sys/emulation/posix4/semaphore.h b/sys/emulation/posix4/semaphore.h
deleted file mode 100644
index de4c190..0000000
--- a/sys/emulation/posix4/semaphore.h
+++ /dev/null
@@ -1,73 +0,0 @@
-#ifndef _SEMAPHORE_H_
-#define _SEMAPHORE_H_
-
-/* semaphore.h: POSIX 1003.1b 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.
- *
- * $FreeBSD: src/sys/posix4/semaphore.h,v 1.6 2000/01/20 07:55:42 jasone Exp $
- * $DragonFly: src/sys/emulation/posix4/semaphore.h,v 1.3 2003/08/27 08:30:04 rob Exp $
- */
-
-#include <sys/_posix.h>
-#include <machine/limits.h>
-
-#ifdef _P1003_1B_INCLUDE_MAYBES
-#include <sys/types.h>
-#include <fcntl.h>
-#endif
-
-/* Opaque type definition. */
-struct sem;
-typedef struct sem *sem_t;
-
-#define SEM_FAILED ((sem_t *)0)
-#define SEM_VALUE_MAX UINT_MAX
-
-#ifndef _KERNEL
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-int sem_init (sem_t *, int, unsigned int);
-int sem_destroy (sem_t *);
-sem_t *sem_open (const char *, int, ...);
-int sem_close (sem_t *);
-int sem_unlink (const char *);
-int sem_wait (sem_t *);
-int sem_trywait (sem_t *);
-int sem_post (sem_t *);
-int sem_getvalue (sem_t *, int *);
-__END_DECLS
-
-#endif
-
-#endif /* _SEMAPHORE_H_ */
diff --git a/sys/kern/kern_p1003_1b.c b/sys/kern/kern_p1003_1b.c
new file mode 100644
index 0000000..b0d9ab2
--- /dev/null
+++ b/sys/kern/kern_p1003_1b.c
@@ -0,0 +1,294 @@
+/*
+ * 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.
+ *
+ * $FreeBSD: src/sys/posix4/p1003_1b.c,v 1.5.2.2 2003/03/25 06:13:35 rwatson Exp $
+ * $DragonFly: src/sys/emulation/posix4/p1003_1b.c,v 1.9 2007/02/03 18:05:57 corecode Exp $
+ */
+
+/* p1003_1b: Real Time common code.
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/sysent.h>
+#include <sys/posix4.h>
+#include <sys/proc.h>
+#include <sys/syslog.h>
+#include <sys/module.h>
+#include <sys/sysproto.h>
+#include <sys/sysctl.h>
+
+MALLOC_DEFINE(M_P31B, "p1003.1b", "Posix 1003.1B");
+
+/* p31b_proc: Return a proc struct corresponding to a pid to operate on.
+ *
+ * Enforce permission policy.
+ *
+ * The policy is the same as for sending signals except there
+ * is no notion of process groups.
+ *
+ * pid == 0 means my process.
+ *
+ * This is disabled until I've got a permission gate in again:
+ * only root can do this.
+ */
+
+#if 0
+/*
+ * This is stolen from CANSIGNAL in kern_sig:
+ *
+ * Can process p, with pcred pc, do "write flavor" operations to process q?
+ */
+#define CAN_AFFECT(p, cr, q) \
+ ((cr)->cr_uid == 0 || \
+ (cr)->cr_ruid == (q)->p_ucred->cr_ruid || \
+ (cr)->cr_uid == (q)->p_ucred->cr_ruid || \
+ (cr)->cr_ruid == (q)->p_ucred->cr_uid || \
+ (cr)->cr_uid == (q)->p_ucred->cr_uid)
+#else
+#define CAN_AFFECT(p, cr, q) ((cr)->cr_uid == 0)
+#endif
+
+/*
+ * p31b_proc: Look up a proc from a PID. If proc is 0 it is
+ * my own proc.
+ */
+int p31b_proc(struct proc *p, pid_t pid, struct proc **pp)
+{
+ int ret = 0;
+ struct proc *other_proc = 0;
+
+ if (pid == 0)
+ other_proc = p;
+ else
+ other_proc = pfind(pid);
+
+ if (other_proc)
+ {
+ /* Enforce permission policy.
+ */
+ if (CAN_AFFECT(p, p->p_ucred, other_proc))
+ *pp = other_proc;
+ else
+ ret = EPERM;
+ }
+ else
+ ret = ESRCH;
+
+ return ret;
+}
+
+
+#if !defined(_KPOSIX_PRIORITY_SCHEDULING)
+
+int syscall_not_present(const char *s);
+
+/* The system calls return ENOSYS if an entry is called that is
+ * not run-time supported. I am also logging since some programs
+ * start to use this when they shouldn't. That will be removed if annoying.
+ */
+int syscall_not_present(const char *s)
+{
+ struct proc *p = curproc;
+ log(LOG_ERR, "cmd %s pid %d tried to use non-present %s\n",
+ p->p_comm, p->p_pid, s);
+
+ /* a " return nosys(p, uap); " here causes a core dump.
+ */
+
+ return ENOSYS;
+}
+
+/* Not configured but loadable via a module:
+ */
+
+static int sched_attach(void)
+{
+ return 0;
+}
+
+#define SYSCALL_NOT_PRESENT_GEN(SC) \
+int SC (struct SC##_args *uap) \
+{ \
+ return syscall_not_present(#SC); \
+}
+
+SYSCALL_NOT_PRESENT_GEN(sched_setparam)
+SYSCALL_NOT_PRESENT_GEN(sched_getparam)
+SYSCALL_NOT_PRESENT_GEN(sched_setscheduler)
+SYSCALL_NOT_PRESENT_GEN(sched_getscheduler)
+SYSCALL_NOT_PRESENT_GEN(sched_yield)
+SYSCALL_NOT_PRESENT_GEN(sched_get_priority_max)
+SYSCALL_NOT_PRESENT_GEN(sched_get_priority_min)
+SYSCALL_NOT_PRESENT_GEN(sched_rr_get_interval)
+
+#else
+
+/* Configured in kernel version:
+ */
+static struct ksched *ksched;
+
+static int sched_attach(void)
+{
+ int ret = ksched_attach(&ksched);
+
+ if (ret == 0)
+ p31b_setcfg(CTL_P1003_1B_PRIORITY_SCHEDULING, 1);
+
+ return ret;
+}
+
+int
+sys_sched_setparam(struct sched_setparam_args *uap)
+{
+ struct proc *p = curproc;
+ struct lwp *lp;
+ int e;
+
+ struct sched_param sched_param;
+ copyin(uap->param, &sched_param, sizeof(sched_param));
+
+ if ((e = p31b_proc(p, uap->pid, &p)) == 0) {
+ lp = FIRST_LWP_IN_PROC(p); /* XXX lwp */
+ e = ksched_setparam(&uap->sysmsg_result, ksched, lp,
+ (const struct sched_param *)&sched_param);
+ }
+ return e;
+}
+
+int
+sys_sched_getparam(struct sched_getparam_args *uap)
+{
+ struct proc *p = curproc;
+ struct proc *targetp;
+ struct lwp *lp;
+ struct sched_param sched_param;
+ int e;
+
+ if (uap->pid != 0 && uap->pid != p->p_pid) {
+ e = p31b_proc(p, uap->pid, &targetp);
+ if (e)
+ return e;
+ } else {
+ targetp = p;
+ }
+
+ lp = FIRST_LWP_IN_PROC(targetp); /* XXX lwp */
+ e = ksched_getparam(&uap->sysmsg_result, ksched, lp, &sched_param);
+
+ if (!e)
+ copyout(&sched_param, uap->param, sizeof(sched_param));
+
+ return e;
+}
+
+int
+sys_sched_setscheduler(struct sched_setscheduler_args *uap)
+{
+ struct proc *p = curproc;
+ struct lwp *lp;
+ int e;
+
+ struct sched_param sched_param;
+ copyin(uap->param, &sched_param, sizeof(sched_param));
+
+ if ((e = p31b_proc(p, uap->pid, &p)) == 0) {
+ lp = FIRST_LWP_IN_PROC(p); /* XXX lwp */
+ e = ksched_setscheduler(&uap->sysmsg_result, ksched, lp,
+ uap->policy, (const struct sched_param *)&sched_param);
+ }
+ return e;
+}
+
+int
+sys_sched_getscheduler(struct sched_getscheduler_args *uap)
+{
+ struct proc *p = curproc;
+ struct proc *targetp;
+ struct lwp *lp;
+ int e;
+
+ if (uap->pid != 0 && uap->pid != p->p_pid) {
+ e = p31b_proc(p, uap->pid, &targetp);
+ if (e)
+ return e;
+ } else {
+ targetp = p;
+ }
+
+ lp = FIRST_LWP_IN_PROC(targetp); /* XXX lwp */
+ e = ksched_getscheduler(&uap->sysmsg_result, ksched, lp);
+
+ return e;
+}
+
+int
+sys_sched_yield(struct sched_yield_args *uap)
+{
+ return ksched_yield(&uap->sysmsg_result, ksched);
+}
+
+int
+sys_sched_get_priority_max(struct sched_get_priority_max_args *uap)
+{
+ return ksched_get_priority_max(&uap->sysmsg_result, ksched, uap->policy);
+}
+
+int
+sys_sched_get_priority_min(struct sched_get_priority_min_args *uap)
+{
+ return ksched_get_priority_min(&uap->sysmsg_result, ksched, uap->policy);
+}
+
+int
+sys_sched_rr_get_interval(struct sched_rr_get_interval_args *uap)
+{
+ int e;
+ struct proc *p = curproc;
+ struct lwp *lp = curthread->td_lwp;
+
+ if ((e = p31b_proc(p, uap->pid, &p)) == 0) {
+ e = ksched_rr_get_interval(&uap->sysmsg_result, ksched,
+ lp, uap->interval);
+ }
+ return e;
+}
+
+#endif
+
+static void p31binit(void *notused)
+{
+ (void) sched_attach();
+ p31b_setcfg(CTL_P1003_1B_PAGESIZE, PAGE_SIZE);
+}
+
+SYSINIT(p31b, SI_SUB_P1003_1B, SI_ORDER_FIRST, p31binit, NULL);
diff --git a/sys/kern/kern_posix4_mib.c b/sys/kern/kern_posix4_mib.c
new file mode 100644
index 0000000..698c9fc
--- /dev/null
+++ b/sys/kern/kern_posix4_mib.c
@@ -0,0 +1,100 @@
+/*-
+ * 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.
+ *
+ * $FreeBSD: src/sys/posix4/posix4_mib.c,v 1.3.2.1 2000/08/03 01:09:59 peter Exp $
+ * $DragonFly: src/sys/emulation/posix4/posix4_mib.c,v 1.3 2003/08/07 23:17:19 dillon Exp $
+ */
+
+#include <sys/param.h>
+#include <sys/kernel.h>
+#include <sys/queue.h>
+#include <sys/sysctl.h>
+#include <sys/posix4.h>
+
+static int facility[CTL_P1003_1B_MAXID - 1];
+
+/* OID_AUTO isn't working with sysconf(3). I guess I'd have to
+ * modify it to do a lookup by name from the index.
+ * For now I've left it a top-level sysctl.
+ */
+
+#if 1
+
+SYSCTL_DECL(_p1003_1b);
+
+#define P1B_SYSCTL(num, name) \
+SYSCTL_INT(_p1003_1b, num, \
+ name, CTLFLAG_RD, facility + num - 1, 0, "");
+
+#else
+
+SYSCTL_DECL(_kern_p1003_1b);
+
+#define P1B_SYSCTL(num, name) \
+SYSCTL_INT(_kern_p1003_1b, OID_AUTO, \
+ name, CTLFLAG_RD, facility + num - 1, 0, "");
+SYSCTL_NODE(_kern, OID_AUTO, p1003_1b, CTLFLAG_RW, 0, "P1003.1B");
+
+#endif
+
+P1B_SYSCTL(CTL_P1003_1B_ASYNCHRONOUS_IO, asynchronous_io);
+P1B_SYSCTL(CTL_P1003_1B_MAPPED_FILES, mapped_files);
+P1B_SYSCTL(CTL_P1003_1B_MEMLOCK, memlock);
+P1B_SYSCTL(CTL_P1003_1B_MEMLOCK_RANGE, memlock_range);
+P1B_SYSCTL(CTL_P1003_1B_MEMORY_PROTECTION, memory_protection);
+P1B_SYSCTL(CTL_P1003_1B_MESSAGE_PASSING, message_passing);
+P1B_SYSCTL(CTL_P1003_1B_PRIORITIZED_IO, prioritized_io);
+P1B_SYSCTL(CTL_P1003_1B_PRIORITY_SCHEDULING, priority_scheduling);
+P1B_SYSCTL(CTL_P1003_1B_REALTIME_SIGNALS, realtime_signals);
+P1B_SYSCTL(CTL_P1003_1B_SEMAPHORES, semaphores);
+P1B_SYSCTL(CTL_P1003_1B_FSYNC, fsync);
+P1B_SYSCTL(CTL_P1003_1B_SHARED_MEMORY_OBJECTS, shared_memory_objects);
+P1B_SYSCTL(CTL_P1003_1B_SYNCHRONIZED_IO, synchronized_io);
+P1B_SYSCTL(CTL_P1003_1B_TIMERS, timers);
+P1B_SYSCTL(CTL_P1003_1B_AIO_LISTIO_MAX, aio_listio_max);
+P1B_SYSCTL(CTL_P1003_1B_AIO_MAX, aio_max);
+P1B_SYSCTL(CTL_P1003_1B_AIO_PRIO_DELTA_MAX, aio_prio_delta_max);
+P1B_SYSCTL(CTL_P1003_1B_DELAYTIMER_MAX, delaytimer_max);
+P1B_SYSCTL(CTL_P1003_1B_MQ_OPEN_MAX, mq_open_max);
+P1B_SYSCTL(CTL_P1003_1B_PAGESIZE, pagesize);
+P1B_SYSCTL(CTL_P1003_1B_RTSIG_MAX, rtsig_max);
+P1B_SYSCTL(CTL_P1003_1B_SEM_NSEMS_MAX, sem_nsems_max);
+P1B_SYSCTL(CTL_P1003_1B_SEM_VALUE_MAX, sem_value_max);
+P1B_SYSCTL(CTL_P1003_1B_SIGQUEUE_MAX, sigqueue_max);
+P1B_SYSCTL(CTL_P1003_1B_TIMER_MAX, timer_max);
+
+/* p31b_setcfg: Set the configuration
+ */
+void p31b_setcfg(int num, int value)
+{
+ if (num >= 1 && num < CTL_P1003_1B_MAXID)
+ facility[num - 1] = value;
+}
diff --git a/sys/kern/kern_sched.c b/sys/kern/kern_sched.c
new file mode 100644
index 0000000..45cc726
--- /dev/null
+++ b/sys/kern/kern_sched.c
@@ -0,0 +1,265 @@
+/*
+ * 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.
+ *
+ * $FreeBSD: src/sys/posix4/ksched.c,v 1.7.2.1 2000/05/16 06:58:13 dillon Exp $
+ * $DragonFly: src/sys/emulation/posix4/ksched.c,v 1.8 2007/02/03 18:05:57 corecode Exp $
+ */
+
+/* ksched: Soft real time scheduling based on "rtprio".
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/posix4.h>
+#include <sys/proc.h>
+#include <sys/kernel.h>
+#include <sys/resource.h>
+#include <machine/cpu.h> /* For need_user_resched */
+
+
+/* ksched: Real-time extension to support POSIX priority scheduling.
+ */
+
+struct ksched {
+ struct timespec rr_interval;
+};
+
+int ksched_attach(struct ksched **p)
+{
+ struct ksched *ksched= p31b_malloc(sizeof(*ksched));
+
+ ksched->rr_interval.tv_sec = 0;
+ ksched->rr_interval.tv_nsec = 1000000000L / 10; /* XXX */
+
+ *p = ksched;
+ return 0;
+}
+
+int ksched_detach(struct ksched *p)
+{
+ p31b_free(p);
+
+ return 0;
+}
+
+/*
+ * XXX About priorities
+ *
+ * POSIX 1003.1b 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 POSIX 1003.1b (higher numerically is higher priority)
+ */
+
+#define p4prio_to_rtpprio(P) (RTP_PRIO_MAX - (P))
+#define rtpprio_to_p4prio(P) (RTP_PRIO_MAX - (P))
+
+/* These improve readability a bit for me:
+ */
+#define P1B_PRIO_MIN rtpprio_to_p4prio(RTP_PRIO_MAX)
+#define P1B_PRIO_MAX rtpprio_to_p4prio(RTP_PRIO_MIN)
+
+static __inline int
+getscheduler(register_t *ret, struct ksched *ksched, struct lwp *lp)
+{
+ int e = 0;
+
+ switch (lp->lwp_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(register_t *ret, struct ksched *ksched,
+ struct lwp *lp, const struct sched_param *param)
+{
+ register_t policy;
+ int e;
+
+ e = getscheduler(&policy, ksched, lp);
+
+ if (e == 0)
+ {
+ if (policy == SCHED_OTHER)
+ e = EINVAL;
+ else
+ e = ksched_setscheduler(ret, ksched, lp, policy, param);
+ }
+
+ return e;
+}
+
+int ksched_getparam(register_t *ret, struct ksched *ksched,
+ struct lwp *lp, struct sched_param *param)
+{
+ if (RTP_PRIO_IS_REALTIME(lp->lwp_rtprio.type))
+ param->sched_priority = rtpprio_to_p4prio(lp->lwp_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 "p31b_proc()".
+ *
+ */
+int ksched_setscheduler(register_t *ret, struct ksched *ksched,
+ struct lwp *lp, 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 >= P1B_PRIO_MIN &&
+ param->sched_priority <= P1B_PRIO_MAX)
+ {
+ rtp.prio = p4prio_to_rtpprio(param->sched_priority);
+ rtp.type = (policy == SCHED_FIFO)
+ ? RTP_PRIO_FIFO : RTP_PRIO_REALTIME;
+
+ lp->lwp_rtprio = rtp;
+ need_user_resched();
+ }
+ else
+ e = EPERM;
+
+
+ break;
+
+ case SCHED_OTHER:
+ {
+ rtp.type = RTP_PRIO_NORMAL;
+ rtp.prio = p4prio_to_rtpprio(param->sched_priority);
+ lp->lwp_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.
+ */
+ need_user_resched();
+ }
+ break;
+ }
+
+ return e;
+}
+
+int ksched_getscheduler(register_t *ret, struct ksched *ksched, struct lwp *lp)
+{
+ return getscheduler(ret, ksched, lp);
+}
+
+/* ksched_yield: Yield the CPU.
+ */
+int ksched_yield(register_t *ret, struct ksched *ksched)
+{
+ need_user_resched();
+ return 0;
+}
+
+int ksched_get_priority_max(register_t*ret, struct ksched *ksched, 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(register_t *ret, struct ksched *ksched, int policy)
+{
+ int e = 0;
+
+ switch (policy)
+ {
+ case SCHED_FIFO:
+ case SCHED_RR:
+ *ret = P1B_PRIO_MIN;
+ break;
+
+ case SCHED_OTHER:
+ *ret = PRIO_MIN;
+ break;
+
+ default:
+ e = EINVAL;
+ }
+
+ return e;
+}
+
+int ksched_rr_get_interval(register_t *ret, struct ksched *ksched,
+ struct lwp *lp, struct timespec *timespec)
+{
+ *timespec = ksched->rr_interval;
+
+ return 0;
+}
diff --git a/sys/sys/mqueue.h b/sys/sys/mqueue.h
new file mode 100644
index 0000000..5970c47
--- /dev/null
+++ b/sys/sys/mqueue.h
@@ -0,0 +1,78 @@
+#ifndef _MQUEUE_H_
+#define _MQUEUE_H_
+
+/* mqueue.h: POSIX 1003.1b 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.
+ *
+ * $FreeBSD: src/sys/posix4/mqueue.h,v 1.4 1999/12/29 04:55:02 peter Exp $
+ * $DragonFly: src/sys/emulation/posix4/mqueue.h,v 1.3 2003/08/27 08:30:04 rob Exp $
+ */
+
+#include <sys/_posix.h>
+
+#ifdef _P1003_1B_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>
+
+__BEGIN_DECLS
+mqd_t mq_open (const char *, int oflag, ...);
+int mq_close (mqd_t);
+int mq_unlink (const char *);
+int mq_send (mqd_t, const char *, size_t, unsigned int);
+ssize_t mq_receive (mqd_t, char *, size_t, unsigned int *);
+int mq_notify (mqd_t, const struct sigevent *);
+int mq_setattr (mqd_t, const struct mq_attr *, struct mq_attr *);
+int mq_getattr (mqd_t, struct mq_attr *);
+__END_DECLS
+
+#endif
+
+#endif /* _MQUEUE_H_ */
diff --git a/sys/sys/posix4.h b/sys/sys/posix4.h
new file mode 100644
index 0000000..0ce536c
--- /dev/null
+++ b/sys/sys/posix4.h
@@ -0,0 +1,105 @@
+#ifndef _P1003_1B_P1003_1B_H_
+#define _P1003_1B_P1003_1B_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.
+ *
+ * $FreeBSD: src/sys/posix4/posix4.h,v 1.6 1999/12/27 10:22:09 bde Exp $
+ * $DragonFly: src/sys/emulation/posix4/posix4.h,v 1.7 2007/02/03 18:05:57 corecode Exp $
+ */
+
+#include "opt_posix.h"
+
+#include <sys/param.h>
+#include <sys/ioccom.h>
+#include <sys/malloc.h>
+#include <sys/sched.h>
+
+MALLOC_DECLARE(M_P31B);
+
+#define p31b_malloc(SIZE) kmalloc((SIZE), M_P31B, M_WAITOK)
+#define p31b_free(P) kfree((P), M_P31B)
+
+struct proc;
+struct lwp;
+
+int p31b_proc (struct proc *, pid_t, struct proc **);
+
+void p31b_setcfg (int, int);
+
+#ifdef _KPOSIX_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;
+
+int ksched_attach(struct ksched **);
+int ksched_detach(struct ksched *);
+
+int ksched_setparam(register_t *, struct ksched *,
+ struct lwp *, const struct sched_param *);
+int ksched_getparam(register_t *, struct ksched *,
+ struct lwp *, struct sched_param *);
+
+int ksched_setscheduler(register_t *, struct ksched *,
+ struct lwp *, int, const struct sched_param *);
+int ksched_getscheduler(register_t *, struct ksched *, struct lwp *);
+
+int ksched_yield(register_t *, struct ksched *);
+
+int ksched_get_priority_max(register_t *, struct ksched *, int);
+int ksched_get_priority_min(register_t *, struct ksched *, int);
+
+int ksched_rr_get_interval(register_t *, struct ksched *,
+ struct lwp *, struct timespec *);
+
+#endif /* _KPOSIX_PRIORITY_SCHEDULING */
+
+#endif /* _P1003_1B_P1003_1B_H_ */
diff --git a/sys/sys/sched.h b/sys/sys/sched.h
new file mode 100644
index 0000000..77aad49
--- /dev/null
+++ b/sys/sys/sched.h
@@ -0,0 +1,77 @@
+#ifndef _SCHED_H_
+#define _SCHED_H_
+
+/* sched.h: POSIX 1003.1b 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.
+ *
+ * $FreeBSD: src/sys/posix4/sched.h,v 1.4 1999/12/29 04:55:02 peter Exp $
+ * $DragonFly: src/sys/emulation/posix4/sched.h,v 1.3 2003/08/27 08:30:04 rob Exp $
+ */
+
+#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>
+
+__BEGIN_DECLS
+int sched_setparam (pid_t, const struct sched_param *);
+int sched_getparam (pid_t, struct sched_param *);
+
+int sched_setscheduler (pid_t, int, const struct sched_param *);
+int sched_getscheduler (pid_t);
+
+int sched_yield (void);
+int sched_get_priority_max (int);
+int sched_get_priority_min (int);
+int sched_rr_get_interval (pid_t, struct timespec *);
+__END_DECLS
+
+#endif
+
+#endif /* _SCHED_H_ */
diff --git a/sys/sys/semaphore.h b/sys/sys/semaphore.h
new file mode 100644
index 0000000..de4c190
--- /dev/null
+++ b/sys/sys/semaphore.h
@@ -0,0 +1,73 @@
+#ifndef _SEMAPHORE_H_
+#define _SEMAPHORE_H_
+
+/* semaphore.h: POSIX 1003.1b 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.
+ *
+ * $FreeBSD: src/sys/posix4/semaphore.h,v 1.6 2000/01/20 07:55:42 jasone Exp $
+ * $DragonFly: src/sys/emulation/posix4/semaphore.h,v 1.3 2003/08/27 08:30:04 rob Exp $
+ */
+
+#include <sys/_posix.h>
+#include <machine/limits.h>
+
+#ifdef _P1003_1B_INCLUDE_MAYBES
+#include <sys/types.h>
+#include <fcntl.h>
+#endif
+
+/* Opaque type definition. */
+struct sem;
+typedef struct sem *sem_t;
+
+#define SEM_FAILED ((sem_t *)0)
+#define SEM_VALUE_MAX UINT_MAX
+
+#ifndef _KERNEL
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+int sem_init (sem_t *, int, unsigned int);
+int sem_destroy (sem_t *);
+sem_t *sem_open (const char *, int, ...);
+int sem_close (sem_t *);
+int sem_unlink (const char *);
+int sem_wait (sem_t *);
+int sem_trywait (sem_t *);
+int sem_post (sem_t *);
+int sem_getvalue (sem_t *, int *);
+__END_DECLS
+
+#endif
+
+#endif /* _SEMAPHORE_H_ */
diff --git a/tools/regression/p1003_1b/fifo.c b/tools/regression/p1003_1b/fifo.c
index 70b1887..bf098b9 100644
--- a/tools/regression/p1003_1b/fifo.c
+++ b/tools/regression/p1003_1b/fifo.c
@@ -41,7 +41,7 @@
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/time.h>
-#include <sched.h>
+#include <sys/sched.h>
#include <signal.h>
volatile int ticked;
diff --git a/tools/regression/p1003_1b/prutil.c b/tools/regression/p1003_1b/prutil.c
index bbbaf9d..3674d60 100644
--- a/tools/regression/p1003_1b/prutil.c
+++ b/tools/regression/p1003_1b/prutil.c
@@ -1,6 +1,6 @@
#include <errno.h>
#include <unistd.h>
-#include <sched.h>
+#include <sys/sched.h>
#include <stdio.h>
#include <err.h>
diff --git a/tools/regression/p1003_1b/sched.c b/tools/regression/p1003_1b/sched.c
index 94a5033..53cd6cd 100644
--- a/tools/regression/p1003_1b/sched.c
+++ b/tools/regression/p1003_1b/sched.c
@@ -51,7 +51,7 @@
#include <fcntl.h>
#include <sys/mman.h>
-#include <sched.h>
+#include <sys/sched.h>
#include "prutil.h"
diff --git a/tools/regression/p1003_1b/yield.c b/tools/regression/p1003_1b/yield.c
index 8a8bd56..e03479e 100644
--- a/tools/regression/p1003_1b/yield.c
+++ b/tools/regression/p1003_1b/yield.c
@@ -41,7 +41,7 @@
#include <fcntl.h>
#include <sys/types.h>
#include <sys/mman.h>
-#include <sched.h>
+#include <sys/sched.h>
#include <stdlib.h>
#include <sys/wait.h>
diff --git a/usr.sbin/clog/clog.c b/usr.sbin/clog/clog.c
index 98e4dfd..c0295b6 100644
--- a/usr.sbin/clog/clog.c
+++ b/usr.sbin/clog/clog.c
@@ -33,7 +33,6 @@
#include <errno.h>
#include <fcntl.h>
#include <poll.h>
-#include <sched.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
@@ -41,6 +40,7 @@
#include <unistd.h>
#include <sys/mman.h>
+#include <sys/sched.h>
#include <sys/stat.h>
#include <sys/uio.h>
More information about the Submit
mailing list