Date: Wed, 25 Dec 1996 12:37:17 +0200 (EET) From: "Jukka A. Ukkonen" <jau@jau.tmt.tele.fi> To: FreeBSD-gnats@freefall.freebsd.org, freebsd-bugs@freefall.freebsd.org Subject: Re: kern/2273: POSIX.4 / POSIX.1a style sched_*() API and RTFIFO-scheduler patches Message-ID: <199612251037.MAA09646@jau.tmt.tele.fi> In-Reply-To: <199612241330.FAA21372@freefall.freebsd.org> from "FreeBSD-gnats@freefall.freebsd.org" at Dec 24, 96 05:30:01 am
index | next in thread | previous in thread | raw e-mail
Quoting FreeBSD-gnats@freefall.freebsd.org:
>
> Thank you very much for your problem report.
> It has the internal identification `kern/2273'.
> The individual assigned to look at your
> bug is: freebsd-bugs.
>
> >Category: kern
> >Responsible: freebsd-bugs
> >Synopsis: support for POSIX.4 / POSIX.1a RT-scheduler API
> >Arrival-Date: Tue Dec 24 05:30:01 PST 1996
>
In fact there was at least one file (sched_rr_get_interval.c)
missing from the shar package I sent earlier. I attach a more
complete shar package at the end of this message.
I also forgot to mention that you should add the lines
#define _POSIX_PRIORITY_SCHEDULING
and
#define _SC_POSIX_SCHEDULING 28 /* or whatever number */
in /usr/include/unistd.h (or /usr/include/sys/unistd.h or some
other file included by /usr/include/unistd.h), if you decide to
add POSIX.4 scheduler API to the system.
Cheers,
// jau
------
/ Jukka A. Ukkonen, Internet and New Media / Finnish Telecom Ltd.
/__ M.Sc. (sw-eng & cs) (Phone) +358-2040-4025
/ Internet: Jukka.Ukkonen@tele.fi (Fax) +358-2040-2712
/ Internet: jau@iki.fi (Mobile) +358-400-606671
v Internet: ukkonen@nic.funet.fi (Home&Fax) +358-9-6215280
o
\ /
- X ------------------------- clip clip ------------------------------
/ \
O
# This is a shell archive. Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file". Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
# sched.h
# sched_getparam.c
# sched_getscheduler.c
# sched_get_priority_max.c
# sched_get_priority_min.c
# sched_setparam.c
# sched_setscheduler.c
# sched_yield.c
# Kernel.Diffs
# RTprio.diffs
#
echo x - sched.h
sed 's/^X//' >sched.h << 'END-of-sched.h'
X/*
X * Copyright (c) 1995,1996 Jukka Ukkonen <jau@funet.fi>
X *
X * Redistribution and use in source and binary forms, with or without
X * modification, are permitted provided that the following conditions
X * are met:
X * 1. Redistributions of source code must retain the above copyright
X * notice, this list of conditions and the following disclaimer.
X * 2. Redistributions in binary form must reproduce the above copyright
X * notice, this list of conditions and the following disclaimer in the
X * documentation and/or other materials provided with the distribution.
X * 3. All advertising materials mentioning features or use of this software
X * must display the following acknowledgement:
X * This product includes software developed by Jukka Antero Ukkonen.
X * 4. Neither the names of the authors nor the names of contributors
X * may be used to endorse or promote products derived from this software
X * without specific prior written permission.
X * 5. The source code must be available for anyone who wishes to have it.
X *
X * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
X * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
X * SUCH DAMAGE.
X *
X * %W% (Jukka Ukkonen) %E%
X */
X
X#ifndef lint
Xstatic const char sccsid[] = "%W%\t(Jukka Ukkonen)\t%E%";
X#endif
X
X
X#ifndef _SCHED_H
X#define _SCHED_H
X
X#include <sys/types.h>
X#include <sys/rtprio.h>
X#include <time.h> /* For struct timespec */
X
X#ifndef _POSIX_PRIORITY_SCHEDULING
X# define _POSIX_PRIORITY_SCHEDULING
X#endif
X
X/*
X * FIFO and Round-Robin must really be separate, but maybe
X * it could be possible and worthwhile to try approximate FIFO
X * using RR with higher priorities.
X *
X * RTP_PRIO_REALTIME with round-robin among equal priority
X * processes at every time-quantum (= currently HZ/10) would
X * still be only a poor substitute for fifo scheduling on
X * systems that don't have a real fifo policy.
X *
X * Otherwise FIFO and RR are equivalent in all respects, but
X * RR comes with involuntary release of CPU after the time
X * quantum has passed.
X * FIFO knows only about voluntary release of the CPU while
X * the process can run as long as it wishes. So, you really
X * can hang your machine, if there is no other process with
X * higher RT-priority (FIFO or RR) ready to kill a infinitely
X * looping FIFO process.
X */
X
X#ifdef RTP_PRIO_FIFO
X# define SCHED_FIFO RTP_PRIO_FIFO
X#else
X# define SCHED_FIFO RTP_PRIO_REALTIME
X#endif
X
X#define SCHED_RR RTP_PRIO_REALTIME
X#define SCHED_TIMESHARE RTP_PRIO_NORMAL
X#define SCHED_IDLE RTP_PRIO_IDLE
X#define SCHED_OTHER SCHED_TIMESHARE
X
X/*
X * Hopefully someone is interested enough to add
X * the necessary deadline logic to the kernel.
X */
X
X#ifdef RTP_PRIO_DEADLINE
X# define SCHED_DEADLINE RTP_PRIO_DEADLINE
X#endif
X
Xstruct sched_param {
X int sched_type; /* scheduling policy */
X int sched_priority; /* nice for time-share, else true prio */
X int sched_pgprio; /* pg-nice for TS, else unused */
X int sched_userprio; /* user-nice for TS, else unused */
X struct timespec sched_deadline; /* reserved for deadline scheduling */
X struct timespec sched_timereq; /* reserved for deadline scheduling */
X};
X
X#endif
END-of-sched.h
echo x - sched_getparam.c
sed 's/^X//' >sched_getparam.c << 'END-of-sched_getparam.c'
X/*
X * Copyright (c) 1995,1996 Jukka Ukkonen <jau@funet.fi>
X *
X * Redistribution and use in source and binary forms, with or without
X * modification, are permitted provided that the following conditions
X * are met:
X * 1. Redistributions of source code must retain the above copyright
X * notice, this list of conditions and the following disclaimer.
X * 2. Redistributions in binary form must reproduce the above copyright
X * notice, this list of conditions and the following disclaimer in the
X * documentation and/or other materials provided with the distribution.
X * 3. All advertising materials mentioning features or use of this software
X * must display the following acknowledgement:
X * This product includes software developed by Jukka Antero Ukkonen.
X * 4. Neither the names of the authors nor the names of contributors
X * may be used to endorse or promote products derived from this software
X * without specific prior written permission.
X * 5. The source code must be available for anyone who wishes to have it.
X *
X * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
X * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
X * SUCH DAMAGE.
X *
X * %W% (Jukka Ukkonen) %E%
X */
X
X#ifndef lint
Xstatic const char sccsid[] = "%W%\t(Jukka Ukkonen)\t%E%";
X#endif
X
X
X#include <sys/types.h>
X#include <sys/time.h>
X#include <sys/resource.h>
X#include <sys/rtprio.h>
X#include <sched.h>
X#include <errno.h>
X
Xint
Xsched_getparam (pid, param)
X pid_t pid;
X struct sched_param *param;
X{
X struct rtprio rtp;
X
X if (! param) {
X errno = EINVAL;
X return (-1);
X }
X
X if (rtprio (RTP_LOOKUP, pid, &rtp) < 0)
X return (-1);
X
X param->sched_type = rtp.type;
X
X if (rtp.type == RTP_PRIO_NORMAL) {
X errno = 0;
X
X param->sched_priority = getpriority (PRIO_PROCESS, pid);
X
X if ((param->sched_priority == -1) && errno)
X return (-1);
X
X param->sched_priority = -param->sched_priority;
X
X errno = 0;
X
X param->sched_pgprio = getpriority (PRIO_PGRP, pid);
X
X if ((param->sched_pgprio == -1) && errno)
X return (-1);
X
X param->sched_pgprio = -param->sched_pgprio;
X
X errno = 0;
X
X param->sched_userprio = getpriority (PRIO_USER, pid);
X
X if ((param->sched_userprio == -1) && errno)
X return (-1);
X
X param->sched_userprio = -param->sched_userprio;
X }
X else
X param->sched_priority = RTP_PRIO_MAX - rtp.prio;
X
X return (0);
X}
END-of-sched_getparam.c
echo x - sched_getscheduler.c
sed 's/^X//' >sched_getscheduler.c << 'END-of-sched_getscheduler.c'
X/*
X * Copyright (c) 1995,1996 Jukka Ukkonen <jau@funet.fi>
X *
X * Redistribution and use in source and binary forms, with or without
X * modification, are permitted provided that the following conditions
X * are met:
X * 1. Redistributions of source code must retain the above copyright
X * notice, this list of conditions and the following disclaimer.
X * 2. Redistributions in binary form must reproduce the above copyright
X * notice, this list of conditions and the following disclaimer in the
X * documentation and/or other materials provided with the distribution.
X * 3. All advertising materials mentioning features or use of this software
X * must display the following acknowledgement:
X * This product includes software developed by Jukka Antero Ukkonen.
X * 4. Neither the names of the authors nor the names of contributors
X * may be used to endorse or promote products derived from this software
X * without specific prior written permission.
X * 5. The source code must be available for anyone who wishes to have it.
X *
X * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
X * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
X * SUCH DAMAGE.
X *
X * %W% (Jukka Ukkonen) %E%
X */
X
X#ifndef lint
Xstatic const char sccsid[] = "%W%\t(Jukka Ukkonen)\t%E%";
X#endif
X
X
X#include <sys/types.h>
X#include <sys/time.h>
X#include <sys/resource.h>
X#include <sys/rtprio.h>
X
Xint
Xsched_getscheduler (pid)
X pid_t pid;
X{
X struct rtprio rtp;
X
X if (rtprio (RTP_LOOKUP, pid, &rtp) < 0)
X return (-1);
X
X return ((int) rtp.type);
X}
END-of-sched_getscheduler.c
echo x - sched_get_priority_max.c
sed 's/^X//' >sched_get_priority_max.c << 'END-of-sched_get_priority_max.c'
X/*
X * Copyright (c) 1995,1996 Jukka Ukkonen <jau@funet.fi>
X *
X * Redistribution and use in source and binary forms, with or without
X * modification, are permitted provided that the following conditions
X * are met:
X * 1. Redistributions of source code must retain the above copyright
X * notice, this list of conditions and the following disclaimer.
X * 2. Redistributions in binary form must reproduce the above copyright
X * notice, this list of conditions and the following disclaimer in the
X * documentation and/or other materials provided with the distribution.
X * 3. All advertising materials mentioning features or use of this software
X * must display the following acknowledgement:
X * This product includes software developed by Jukka Antero Ukkonen.
X * 4. Neither the names of the authors nor the names of contributors
X * may be used to endorse or promote products derived from this software
X * without specific prior written permission.
X * 5. The source code must be available for anyone who wishes to have it.
X *
X * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
X * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
X * SUCH DAMAGE.
X *
X * %W% (Jukka Ukkonen) %E%
X */
X
X#ifndef lint
Xstatic const char sccsid[] = "%W%\t(Jukka Ukkonen)\t%E%";
X#endif
X
X
X#include <sys/types.h>
X#include <sys/time.h>
X#include <sys/resource.h>
X#include <sched.h>
X#include <errno.h>
X
Xint
Xsched_get_priority_max (policy)
X int policy;
X{
X switch (policy) {
X
X case SCHED_FIFO:
X case SCHED_RR:
X case SCHED_IDLE:
X return (RTP_PRIO_MAX);
X
X case SCHED_TIMESHARE:
X return (PRIO_MAX);
X
X default:
X errno = EINVAL; /* Here is a gotcha! Always check errno! */
X return (-1); /* Whether negatives are valid is unspecified. */
X }
X}
X
END-of-sched_get_priority_max.c
echo x - sched_get_priority_min.c
sed 's/^X//' >sched_get_priority_min.c << 'END-of-sched_get_priority_min.c'
X/*
X * Copyright (c) 1995,1996 Jukka Ukkonen <jau@funet.fi>
X *
X * Redistribution and use in source and binary forms, with or without
X * modification, are permitted provided that the following conditions
X * are met:
X * 1. Redistributions of source code must retain the above copyright
X * notice, this list of conditions and the following disclaimer.
X * 2. Redistributions in binary form must reproduce the above copyright
X * notice, this list of conditions and the following disclaimer in the
X * documentation and/or other materials provided with the distribution.
X * 3. All advertising materials mentioning features or use of this software
X * must display the following acknowledgement:
X * This product includes software developed by Jukka Antero Ukkonen.
X * 4. Neither the names of the authors nor the names of contributors
X * may be used to endorse or promote products derived from this software
X * without specific prior written permission.
X * 5. The source code must be available for anyone who wishes to have it.
X *
X * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
X * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
X * SUCH DAMAGE.
X *
X * %W% (Jukka Ukkonen) %E%
X */
X
X#ifndef lint
Xstatic const char sccsid[] = "%W%\t(Jukka Ukkonen)\t%E%";
X#endif
X
X
X#include <sys/types.h>
X#include <sys/time.h>
X#include <sys/resource.h>
X#include <sched.h>
X#include <errno.h>
X
Xint
Xsched_get_priority_max (policy)
X int policy;
X{
X switch (policy) {
X
X case SCHED_FIFO:
X case SCHED_RR:
X case SCHED_IDLE:
X return (RTP_PRIO_MIN);
X
X case SCHED_TIMESHARE:
X return (PRIO_MIN);
X
X default:
X errno = EINVAL; /* Here is a gotcha! Always check errno! */
X return (-1); /* Whether negatives are valid is unspecified. */
X }
X}
X
END-of-sched_get_priority_min.c
echo x - sched_setparam.c
sed 's/^X//' >sched_setparam.c << 'END-of-sched_setparam.c'
X/*
X * Copyright (c) 1995,1996 Jukka Ukkonen <jau@funet.fi>
X *
X * Redistribution and use in source and binary forms, with or without
X * modification, are permitted provided that the following conditions
X * are met:
X * 1. Redistributions of source code must retain the above copyright
X * notice, this list of conditions and the following disclaimer.
X * 2. Redistributions in binary form must reproduce the above copyright
X * notice, this list of conditions and the following disclaimer in the
X * documentation and/or other materials provided with the distribution.
X * 3. All advertising materials mentioning features or use of this software
X * must display the following acknowledgement:
X * This product includes software developed by Jukka Antero Ukkonen.
X * 4. Neither the names of the authors nor the names of contributors
X * may be used to endorse or promote products derived from this software
X * without specific prior written permission.
X * 5. The source code must be available for anyone who wishes to have it.
X *
X * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
X * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
X * SUCH DAMAGE.
X *
X * %W% (Jukka Ukkonen) %E%
X */
X
X#ifndef lint
Xstatic const char sccsid[] = "%W%\t(Jukka Ukkonen)\t%E%";
X#endif
X
X
X#include <sys/types.h>
X#include <sys/time.h>
X#include <sys/resource.h>
X#include <sys/rtprio.h>
X#include <sched.h>
X#include <errno.h>
X
Xint
Xsched_setparam (pid, param)
X pid_t pid;
X struct sched_param *param;
X{
X struct rtprio rtp;
X
X if (! param) {
X errno = EINVAL;
X return (-1);
X }
X
X if (rtprio (RTP_LOOKUP, pid, &rtp) < 0)
X return (-1);
X
X if (rtp.type == RTP_PRIO_NORMAL) {
X if (setpriority (PRIO_PROCESS, pid, -param->sched_priority) < 0)
X return (-1);
X
X if (setpriority (PRIO_PGRP, pid, -param->sched_pgprio) < 0)
X return (-1);
X
X if (setpriority (PRIO_USER, pid, -param->sched_userprio) < 0)
X return (-1);
X
X rtp.prio = 0;
X }
X else
X rtp.prio = RTP_PRIO_MAX - param->sched_priority;
X
X if (rtprio (RTP_SET, pid, &rtp) < 0)
X return (-1);
X
X return (0);
X}
END-of-sched_setparam.c
echo x - sched_setscheduler.c
sed 's/^X//' >sched_setscheduler.c << 'END-of-sched_setscheduler.c'
X/*
X * Copyright (c) 1995,1996 Jukka Ukkonen <jau@funet.fi>
X *
X * Redistribution and use in source and binary forms, with or without
X * modification, are permitted provided that the following conditions
X * are met:
X * 1. Redistributions of source code must retain the above copyright
X * notice, this list of conditions and the following disclaimer.
X * 2. Redistributions in binary form must reproduce the above copyright
X * notice, this list of conditions and the following disclaimer in the
X * documentation and/or other materials provided with the distribution.
X * 3. All advertising materials mentioning features or use of this software
X * must display the following acknowledgement:
X * This product includes software developed by Jukka Antero Ukkonen.
X * 4. Neither the names of the authors nor the names of contributors
X * may be used to endorse or promote products derived from this software
X * without specific prior written permission.
X * 5. The source code must be available for anyone who wishes to have it.
X *
X * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
X * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
X * SUCH DAMAGE.
X *
X * %W% (Jukka Ukkonen) %E%
X */
X
X#ifndef lint
Xstatic const char sccsid[] = "%W%\t(Jukka Ukkonen)\t%E%";
X#endif
X
X
X#include <sys/types.h>
X#include <sys/time.h>
X#include <sys/resource.h>
X#include <sys/rtprio.h>
X#include <sched.h>
X#include <errno.h>
X
Xint
Xsched_setscheduler (pid, policy, param)
X pid_t pid;
X int policy;
X struct sched_param *param;
X{
X struct rtprio rtp;
X
X if (! param) {
X errno = EINVAL;
X return (-1);
X }
X
X rtp.type = policy;
X
X if (policy == RTP_PRIO_NORMAL) {
X if (setpriority (PRIO_PROCESS, pid, -param->sched_priority) < 0)
X return (-1);
X
X if (setpriority (PRIO_PGRP, pid, -param->sched_pgprio) < 0)
X return (-1);
X
X if (setpriority (PRIO_USER, pid, -param->sched_userprio) < 0)
X return (-1);
X
X rtp.prio = 0;
X }
X else
X rtp.prio = RTP_PRIO_MAX - param->sched_priority;
X
X if (rtprio (RTP_SET, pid, &rtp) < 0)
X return (-1);
X
X return (0);
X}
END-of-sched_setscheduler.c
echo x - sched_yield.c
sed 's/^X//' >sched_yield.c << 'END-of-sched_yield.c'
X/*
X * Copyright (c) 1995,1996 Jukka Ukkonen <jau@funet.fi>
X *
X * Redistribution and use in source and binary forms, with or without
X * modification, are permitted provided that the following conditions
X * are met:
X * 1. Redistributions of source code must retain the above copyright
X * notice, this list of conditions and the following disclaimer.
X * 2. Redistributions in binary form must reproduce the above copyright
X * notice, this list of conditions and the following disclaimer in the
X * documentation and/or other materials provided with the distribution.
X * 3. All advertising materials mentioning features or use of this software
X * must display the following acknowledgement:
X * This product includes software developed by Jukka Antero Ukkonen.
X * 4. Neither the names of the authors nor the names of contributors
X * may be used to endorse or promote products derived from this software
X * without specific prior written permission.
X * 5. The source code must be available for anyone who wishes to have it.
X *
X * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
X * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
X * SUCH DAMAGE.
X *
X * %W% (Jukka Ukkonen) %E%
X */
X
X#ifndef lint
Xstatic const char sccsid[] = "%W%\t(Jukka Ukkonen)\t%E%";
X#endif
X
X
X#include <sys/time.h>
X#include <sched.h>
X#include <errno.h>
X
Xint
Xsched_yield ()
X{
X struct timeval timeout;
X
X timeout.tv_sec = timeout.tv_usec = 0;
X
X /*
X * Select a system call that will never hang waiting for
X * something really happen to force an entry to the kernel.
X *
X * The entry to kernel code with zero timeout should cause
X * a new scheduling decission to be made.
X */
X
X if ((select (0, NULL, NULL, NULL, &timeout) < 0) && (errno != EINTR))
X return (-1);
X
X return (0);
X}
X
END-of-sched_yield.c
echo x - Kernel.Diffs
sed 's/^X//' >Kernel.Diffs << 'END-of-Kernel.Diffs'
X--- /sys/kern/kern_resource.c.orig Tue May 30 11:05:39 1995
X+++ /sys/kern/kern_resource.c Mon Dec 25 20:52:30 1995
X@@ -247,8 +247,11 @@
X /* can't set realtime priority */
X if (rtp.type == RTP_PRIO_REALTIME)
X return (EPERM);
X+ if (rtp.type == RTP_PRIO_FIFO)
X+ return (EPERM);
X }
X switch (rtp.type) {
X+ case RTP_PRIO_FIFO:
X case RTP_PRIO_REALTIME:
X case RTP_PRIO_NORMAL:
X case RTP_PRIO_IDLE:
X--- /sys/kern/kern_synch.c.orig Tue May 30 11:05:44 1995
X+++ /sys/kern/kern_synch.c Tue Dec 26 16:23:20 1995
X@@ -67,8 +67,10 @@
X roundrobin(arg)
X void *arg;
X {
X+ if (! curproc || curproc->p_rtprio.type != RTP_PRIO_FIFO) {
X+ need_resched();
X+ }
X
X- need_resched();
X timeout(roundrobin, NULL, hz / 10);
X }
X
X@@ -670,7 +672,11 @@
X p->p_usrpri = newpriority;
X if (newpriority < curpriority)
X need_resched();
X- } else {
X+ } else if (! curproc ||
X+ (curproc->p_rtprio.type != RTP_PRIO_FIFO) ||
X+ (((p->p_rtprio.type == RTP_PRIO_FIFO) ||
X+ (p->p_rtprio.type == RTP_PRIO_REALTIME)) &&
X+ (p->p_rtprio.prio < curproc->p_rtprio.prio))) {
X need_resched();
X }
X }
X--- /sys/sys/rtprio.h.orig Sun Oct 2 06:45:59 1994
X+++ /sys/sys/rtprio.h Mon Dec 25 20:48:18 1995
X@@ -42,7 +42,26 @@
X #define RTP_PRIO_REALTIME 0
X #define RTP_PRIO_NORMAL 1
X #define RTP_PRIO_IDLE 2
X+#define RTP_PRIO_FIFO 3
X
X+/*
X+ * RTP_PRIO_QUANTUM -- not implemented yet!
X+ * Actually this is intended as another type
X+ * of round-robin policy with the ability to
X+ * allow processes request a non-default
X+ * time-slice or time-quantum.
X+ */
X+/* #define RTP_PRIO_QUANTUM 4 */
X+
X+/*
X+ * RTP_PRIO_DEADLINE -- not implemented yet!
X+ */
X+/* #define RTP_PRIO_DEADLINE 5 */
X+
X+/*
X+ * Actual priority ranges should be changed
X+ * to cover at least some 128 to 256 steps!
X+ */
X /* priority range */
X #define RTP_PRIO_MIN 0 /* Highest priority */
X #define RTP_PRIO_MAX 31 /* Lowest priority */
X@@ -57,6 +76,10 @@
X struct rtprio {
X u_short type;
X u_short prio;
X+#if defined(RTP_PRIO_DEADLINE) || defined(RTP_PRIO_QUANTUM)
X+ struct timeval deadline; /* Fail if not ready to repeat. */
X+ struct timeval quantum; /* Min./required time slice. */
X+#endif
X };
X #endif
X
X--- /sys/i386/i386/swtch.s.orig Tue Dec 26 14:19:25 1995
X+++ /sys/i386/i386/swtch.s Tue Dec 26 14:20:58 1995
X@@ -90,6 +90,9 @@
X
X movzwl P_RTPRIO_PRIO(%eax),%edx
X
X+ cmpw $RTP_PRIO_FIFO,P_RTPRIO_TYPE(%eax) /* fifo rt priority? */
X+ je set_rt
X+
X cmpw $RTP_PRIO_REALTIME,P_RTPRIO_TYPE(%eax) /* realtime priority? */
X jne set_id /* must be idle priority */
X
X--- /sys/vm/vm_glue.c.orig Mon Oct 16 22:43:05 1995
X+++ /sys/vm/vm_glue.c Mon Dec 25 20:52:32 1995
X@@ -430,6 +430,9 @@
X /*
X * do not swapout a realtime process
X */
X+ if (p->p_rtprio.type == RTP_PRIO_FIFO)
X+ continue;
X+
X if (p->p_rtprio.type == RTP_PRIO_REALTIME)
X continue;
X
X--- /usr/include/sys/rtprio.h.orig Sun Oct 2 06:45:59 1994
X+++ /usr/include/sys/rtprio.h Mon Dec 25 20:48:18 1995
X@@ -42,7 +42,26 @@
X #define RTP_PRIO_REALTIME 0
X #define RTP_PRIO_NORMAL 1
X #define RTP_PRIO_IDLE 2
X+#define RTP_PRIO_FIFO 3
X
X+/*
X+ * RTP_PRIO_QUANTUM -- not implemented yet!
X+ * Actually this is intended as another type
X+ * of round-robin policy with the ability to
X+ * allow processes request a non-default
X+ * time-slice or time-quantum.
X+ */
X+/* #define RTP_PRIO_QUANTUM 4 */
X+
X+/*
X+ * RTP_PRIO_DEADLINE -- not implemented yet!
X+ */
X+/* #define RTP_PRIO_DEADLINE 5 */
X+
X+/*
X+ * Actual priority ranges should be changed
X+ * to cover at least some 128 to 256 steps!
X+ */
X /* priority range */
X #define RTP_PRIO_MIN 0 /* Highest priority */
X #define RTP_PRIO_MAX 31 /* Lowest priority */
X@@ -57,6 +76,10 @@
X struct rtprio {
X u_short type;
X u_short prio;
X+#if defined(RTP_PRIO_DEADLINE) || defined(RTP_PRIO_QUANTUM)
X+ struct timeval deadline; /* Fail if not ready to repeat. */
X+ struct timeval quantum; /* Min./required time slice. */
X+#endif
X };
X #endif
X
END-of-Kernel.Diffs
echo x - RTprio.diffs
sed 's/^X//' >RTprio.diffs << 'END-of-RTprio.diffs'
X--- /usr/src/usr.sbin/rtprio/rtprio.c.orig Sun Oct 2 06:48:21 1994
X+++ /usr/src/usr.sbin/rtprio/rtprio.c Tue Dec 26 11:18:20 1995
X@@ -63,6 +63,10 @@
X
X if (!strcmp(p, "rtprio"))
X rtp.type = RTP_PRIO_REALTIME;
X+#ifdef RTP_PRIO_FIFO
X+ else if (!strcmp(p, "rtfifoprio"))
X+ rtp.type = RTP_PRIO_FIFO;
X+#endif
X else if (!strcmp(p, "idprio"))
X rtp.type = RTP_PRIO_IDLE;
X
X@@ -76,8 +80,13 @@
X perror(argv[0]);
X exit (1);
X }
X+
X printf("%s: ", p);
X+
X switch (rtp.type) {
X+ case RTP_PRIO_FIFO:
X+ printf("hard realtime fifo priority %d\n", rtp.prio);
X+ break;
X case RTP_PRIO_REALTIME:
X printf("realtime priority %d\n", rtp.prio);
X break;
END-of-RTprio.diffs
exit
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199612251037.MAA09646>
