diff --git a/sys/compat/freebsd/files.freebsd b/sys/compat/freebsd/files.freebsd index 61a2df56cf84..8b14d5611315 100644 --- a/sys/compat/freebsd/files.freebsd +++ b/sys/compat/freebsd/files.freebsd @@ -1,4 +1,4 @@ -# $NetBSD: files.freebsd,v 1.7 2002/12/08 00:52:04 manu Exp $ +# $NetBSD: files.freebsd,v 1.8 2002/12/22 00:05:59 gmcgarry Exp $ # # Config file description for machine-independent FreeBSD compat code. # Included by ports that need it. @@ -15,5 +15,6 @@ file compat/freebsd/freebsd_ioctl.c compat_freebsd file compat/freebsd/freebsd_ipc.c compat_freebsd file compat/freebsd/freebsd_misc.c compat_freebsd file compat/freebsd/freebsd_ptrace.c compat_freebsd +file compat/freebsd/freebsd_sched.c compat_freebsd file compat/freebsd/freebsd_sysent.c compat_freebsd file compat/freebsd/freebsd_syscalls.c compat_freebsd diff --git a/sys/compat/freebsd/freebsd_sched.c b/sys/compat/freebsd/freebsd_sched.c new file mode 100644 index 000000000000..81e7f74b6611 --- /dev/null +++ b/sys/compat/freebsd/freebsd_sched.c @@ -0,0 +1,286 @@ +/* $NetBSD: freebsd_sched.c,v 1.1 2002/12/22 00:05:59 gmcgarry Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center; by Matthias Scheler. + * + * 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 the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION 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 compatibility module. Try to deal with scheduler related syscalls. + */ + +#include +__KERNEL_RCSID(0, "$NetBSD: freebsd_sched.c,v 1.1 2002/12/22 00:05:59 gmcgarry Exp $"); + +#include +#include +#include +#include +#include + +#include + +#include +#include + +int +freebsd_sys_yield(cp, v, retval) + struct proc *cp; + void *v; + register_t *retval; +{ + + yield(); + return 0; +} + +int +freebsd_sys_sched_setparam(cp, v, retval) + struct proc *cp; + void *v; + register_t *retval; +{ + struct freebsd_sys_sched_setparam_args /* { + syscallarg(pid_t) pid; + syscallarg(const struct freebsd_sched_param *) sp; + } */ *uap = v; + int error; + struct freebsd_sched_param lp; + struct proc *p; + + /* + * We only check for valid parameters and return afterwards. + */ + if (SCARG(uap, pid) < 0 || SCARG(uap, sp) == NULL) + return EINVAL; + + error = copyin(SCARG(uap, sp), &lp, sizeof(lp)); + if (error) + return error; + + if (SCARG(uap, pid) != 0) { + struct pcred *pc = cp->p_cred; + + if ((p = pfind(SCARG(uap, pid))) == NULL) + return ESRCH; + if (!(cp == p || + pc->pc_ucred->cr_uid == 0 || + pc->p_ruid == p->p_cred->p_ruid || + pc->pc_ucred->cr_uid == p->p_cred->p_ruid || + pc->p_ruid == p->p_ucred->cr_uid || + pc->pc_ucred->cr_uid == p->p_ucred->cr_uid)) + return EPERM; + } + + return 0; +} + +int +freebsd_sys_sched_getparam(cp, v, retval) + struct proc *cp; + void *v; + register_t *retval; +{ + struct freebsd_sys_sched_getparam_args /* { + syscallarg(pid_t) pid; + syscallarg(struct freebsd_sched_param *) sp; + } */ *uap = v; + struct proc *p; + struct freebsd_sched_param lp; + + /* + * We only check for valid parameters and return a dummy + * priority afterwards. + */ + if (SCARG(uap, pid) < 0 || SCARG(uap, sp) == NULL) + return EINVAL; + + if (SCARG(uap, pid) != 0) { + struct pcred *pc = cp->p_cred; + + if ((p = pfind(SCARG(uap, pid))) == NULL) + return ESRCH; + if (!(cp == p || + pc->pc_ucred->cr_uid == 0 || + pc->p_ruid == p->p_cred->p_ruid || + pc->pc_ucred->cr_uid == p->p_cred->p_ruid || + pc->p_ruid == p->p_ucred->cr_uid || + pc->pc_ucred->cr_uid == p->p_ucred->cr_uid)) + return EPERM; + } + + lp.sched_priority = 0; + return copyout(&lp, SCARG(uap, sp), sizeof(lp)); +} + +int +freebsd_sys_sched_setscheduler(cp, v, retval) + struct proc *cp; + void *v; + register_t *retval; +{ + struct freebsd_sys_sched_setscheduler_args /* { + syscallarg(pid_t) pid; + syscallarg(int) policy; + syscallarg(cont struct freebsd_sched_scheduler *) sp; + } */ *uap = v; + int error; + struct freebsd_sched_param lp; + struct proc *p; + + /* + * We only check for valid parameters and return afterwards. + */ + if (SCARG(uap, pid) < 0 || SCARG(uap, sp) == NULL) + return EINVAL; + + error = copyin(SCARG(uap, sp), &lp, sizeof(lp)); + if (error) + return error; + + if (SCARG(uap, pid) != 0) { + struct pcred *pc = cp->p_cred; + + if ((p = pfind(SCARG(uap, pid))) == NULL) + return ESRCH; + if (!(cp == p || + pc->pc_ucred->cr_uid == 0 || + pc->p_ruid == p->p_cred->p_ruid || + pc->pc_ucred->cr_uid == p->p_cred->p_ruid || + pc->p_ruid == p->p_ucred->cr_uid || + pc->pc_ucred->cr_uid == p->p_ucred->cr_uid)) + return EPERM; + } + + /* + * We can't emulate anything put the default scheduling policy. + */ + if (SCARG(uap, policy) != FREEBSD_SCHED_OTHER || lp.sched_priority != 0) + return EINVAL; + + return 0; +} + +int +freebsd_sys_sched_getscheduler(cp, v, retval) + struct proc *cp; + void *v; + register_t *retval; +{ + struct freebsd_sys_sched_getscheduler_args /* { + syscallarg(pid_t) pid; + } */ *uap = v; + struct proc *p; + + *retval = -1; + + /* + * We only check for valid parameters and return afterwards. + */ + if (SCARG(uap, pid) != 0) { + struct pcred *pc = cp->p_cred; + + if ((p = pfind(SCARG(uap, pid))) == NULL) + return ESRCH; + if (!(cp == p || + pc->pc_ucred->cr_uid == 0 || + pc->p_ruid == p->p_cred->p_ruid || + pc->pc_ucred->cr_uid == p->p_cred->p_ruid || + pc->p_ruid == p->p_ucred->cr_uid || + pc->pc_ucred->cr_uid == p->p_ucred->cr_uid)) + return EPERM; + } + + /* + * We can't emulate anything put the default scheduling policy. + */ + *retval = FREEBSD_SCHED_OTHER; + return 0; +} + +int +freebsd_sys_sched_yield(cp, v, retval) + struct proc *cp; + void *v; + register_t *retval; +{ + + yield(); + return 0; +} + +int +freebsd_sys_sched_get_priority_max(cp, v, retval) + struct proc *cp; + void *v; + register_t *retval; +{ + struct freebsd_sys_sched_get_priority_max_args /* { + syscallarg(int) policy; + } */ *uap = v; + + /* + * We can't emulate anything put the default scheduling policy. + */ + if (SCARG(uap, policy) != FREEBSD_SCHED_OTHER) { + *retval = -1; + return EINVAL; + } + + *retval = 0; + return 0; +} + +int +freebsd_sys_sched_get_priority_min(cp, v, retval) + struct proc *cp; + void *v; + register_t *retval; +{ + struct freebsd_sys_sched_get_priority_min_args /* { + syscallarg(int) policy; + } */ *uap = v; + + /* + * We can't emulate anything put the default scheduling policy. + */ + if (SCARG(uap, policy) != FREEBSD_SCHED_OTHER) { + *retval = -1; + return EINVAL; + } + + *retval = 0; + return 0; +} diff --git a/sys/compat/freebsd/freebsd_sched.h b/sys/compat/freebsd/freebsd_sched.h new file mode 100644 index 000000000000..c57443fd7973 --- /dev/null +++ b/sys/compat/freebsd/freebsd_sched.h @@ -0,0 +1,51 @@ +/* $NetBSD: freebsd_sched.h,v 1.1 2002/12/22 00:06:00 gmcgarry Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * 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 the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION 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. + */ + +#ifndef _FREEBSD_SCHED_H +#define _FREEBSD_SCHED_H + +struct freebsd_sched_param { + int sched_priority; +}; + +#define FREEBSD_SCHED_FIFO 0 +#define FREEBSD_SCHED_RR 1 +#define FREEBSD_SCHED_OTHER 2 + +#endif /* _FREEBSD_SCHED_H */ diff --git a/sys/compat/freebsd/freebsd_syscall.h b/sys/compat/freebsd/freebsd_syscall.h index ddb8143e91b6..96ec1697b1f3 100644 --- a/sys/compat/freebsd/freebsd_syscall.h +++ b/sys/compat/freebsd/freebsd_syscall.h @@ -1,4 +1,4 @@ -/* $NetBSD: freebsd_syscall.h,v 1.47 2002/10/09 20:24:10 pooka Exp $ */ +/* $NetBSD: freebsd_syscall.h,v 1.48 2002/12/22 00:06:00 gmcgarry Exp $ */ /* * System call numbers. @@ -669,6 +669,9 @@ /* syscall: "getsid" ret: "pid_t" args: "pid_t" */ #define FREEBSD_SYS_getsid 310 +/* syscall: "yield" ret: "void" args: */ +#define FREEBSD_SYS_yield 321 + /* syscall: "mlockall" ret: "int" args: "int" */ #define FREEBSD_SYS_mlockall 324 @@ -678,6 +681,27 @@ /* syscall: "__getcwd" ret: "int" args: "char *" "size_t" */ #define FREEBSD_SYS___getcwd 326 +/* syscall: "sched_setparam" ret: "int" args: "pid_t" "const struct freebsd_sched_param *" */ +#define FREEBSD_SYS_sched_setparam 327 + +/* syscall: "sched_getparam" ret: "int" args: "pid_t" "struct freebsd_sched_param *" */ +#define FREEBSD_SYS_sched_getparam 328 + +/* syscall: "sched_setscheduler" ret: "int" args: "pid_t" "int" "const struct sched_param *" */ +#define FREEBSD_SYS_sched_setscheduler 329 + +/* syscall: "sched_getscheduler" ret: "int" args: "pid_t" */ +#define FREEBSD_SYS_sched_getscheduler 330 + +/* syscall: "sched_yield" ret: "int" args: */ +#define FREEBSD_SYS_sched_yield 331 + +/* syscall: "sched_get_priority_max" ret: "int" args: "int" */ +#define FREEBSD_SYS_sched_get_priority_max 332 + +/* syscall: "sched_get_priority_min" ret: "int" args: "int" */ +#define FREEBSD_SYS_sched_get_priority_min 333 + /* syscall: "utrace" ret: "int" args: "void *" "size_t" */ #define FREEBSD_SYS_utrace 335 diff --git a/sys/compat/freebsd/freebsd_syscallargs.h b/sys/compat/freebsd/freebsd_syscallargs.h index 792161a601a2..750b981ba60e 100644 --- a/sys/compat/freebsd/freebsd_syscallargs.h +++ b/sys/compat/freebsd/freebsd_syscallargs.h @@ -1,4 +1,4 @@ -/* $NetBSD: freebsd_syscallargs.h,v 1.49 2002/10/09 20:24:10 pooka Exp $ */ +/* $NetBSD: freebsd_syscallargs.h,v 1.50 2002/12/22 00:06:00 gmcgarry Exp $ */ /* * System call argument lists. @@ -251,6 +251,34 @@ struct freebsd_sys_lchown_args { syscallarg(int) gid; }; +struct freebsd_sys_sched_setparam_args { + syscallarg(pid_t) pid; + syscallarg(const struct freebsd_sched_param *) sp; +}; + +struct freebsd_sys_sched_getparam_args { + syscallarg(pid_t) pid; + syscallarg(struct freebsd_sched_param *) sp; +}; + +struct freebsd_sys_sched_setscheduler_args { + syscallarg(pid_t) pid; + syscallarg(int) policy; + syscallarg(const struct sched_param *) sp; +}; + +struct freebsd_sys_sched_getscheduler_args { + syscallarg(pid_t) pid; +}; + +struct freebsd_sys_sched_get_priority_max_args { + syscallarg(int) policy; +}; + +struct freebsd_sys_sched_get_priority_min_args { + syscallarg(int) policy; +}; + struct freebsd_sys_utrace_args { syscallarg(void *) addr; syscallarg(size_t) len; @@ -525,9 +553,17 @@ int sys_fhstatfs(struct proc *, void *, register_t *); int sys_fhopen(struct proc *, void *, register_t *); int sys_fhstat(struct proc *, void *, register_t *); int sys_getsid(struct proc *, void *, register_t *); +int freebsd_sys_yield(struct proc *, void *, register_t *); int sys_mlockall(struct proc *, void *, register_t *); int sys_munlockall(struct proc *, void *, register_t *); int sys___getcwd(struct proc *, void *, register_t *); +int freebsd_sys_sched_setparam(struct proc *, void *, register_t *); +int freebsd_sys_sched_getparam(struct proc *, void *, register_t *); +int freebsd_sys_sched_setscheduler(struct proc *, void *, register_t *); +int freebsd_sys_sched_getscheduler(struct proc *, void *, register_t *); +int freebsd_sys_sched_yield(struct proc *, void *, register_t *); +int freebsd_sys_sched_get_priority_max(struct proc *, void *, register_t *); +int freebsd_sys_sched_get_priority_min(struct proc *, void *, register_t *); int freebsd_sys_utrace(struct proc *, void *, register_t *); int sys___sigprocmask14(struct proc *, void *, register_t *); int sys___sigsuspend14(struct proc *, void *, register_t *); diff --git a/sys/compat/freebsd/freebsd_syscalls.c b/sys/compat/freebsd/freebsd_syscalls.c index e49eae64483b..6f67aa266d8d 100644 --- a/sys/compat/freebsd/freebsd_syscalls.c +++ b/sys/compat/freebsd/freebsd_syscalls.c @@ -1,4 +1,4 @@ -/* $NetBSD: freebsd_syscalls.c,v 1.47 2002/10/09 20:24:10 pooka Exp $ */ +/* $NetBSD: freebsd_syscalls.c,v 1.48 2002/12/22 00:06:01 gmcgarry Exp $ */ /* * System call names. @@ -8,7 +8,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: freebsd_syscalls.c,v 1.47 2002/10/09 20:24:10 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: freebsd_syscalls.c,v 1.48 2002/12/22 00:06:01 gmcgarry Exp $"); #if defined(_KERNEL_OPT) #if defined(_KERNEL_OPT) @@ -419,19 +419,19 @@ const char *const freebsd_syscallnames[] = { "#318 (unimplemented aio_read)", /* 318 = unimplemented aio_read */ "#319 (unimplemented aio_write)", /* 319 = unimplemented aio_write */ "#320 (unimplemented lio_listio)", /* 320 = unimplemented lio_listio */ - "#321 (unimplemented yield)", /* 321 = unimplemented yield */ + "yield", /* 321 = yield */ "#322 (unimplemented thr_sleep)", /* 322 = unimplemented thr_sleep */ "#323 (unimplemented thr_wakeup)", /* 323 = unimplemented thr_wakeup */ "mlockall", /* 324 = mlockall */ "munlockall", /* 325 = munlockall */ "__getcwd", /* 326 = __getcwd */ - "#327 (unimplemented sched_setparam)", /* 327 = unimplemented sched_setparam */ - "#328 (unimplemented sched_getparam)", /* 328 = unimplemented sched_getparam */ - "#329 (unimplemented sched_setscheduler)", /* 329 = unimplemented sched_setscheduler */ - "#330 (unimplemented sched_getscheduler)", /* 330 = unimplemented sched_getscheduler */ - "#331 (unimplemented sched_yield)", /* 331 = unimplemented sched_yield */ - "#332 (unimplemented sched_get_priority_max)", /* 332 = unimplemented sched_get_priority_max */ - "#333 (unimplemented sched_get_priority_min)", /* 333 = unimplemented sched_get_priority_min */ + "sched_setparam", /* 327 = sched_setparam */ + "sched_getparam", /* 328 = sched_getparam */ + "sched_setscheduler", /* 329 = sched_setscheduler */ + "sched_getscheduler", /* 330 = sched_getscheduler */ + "sched_yield", /* 331 = sched_yield */ + "sched_get_priority_max", /* 332 = sched_get_priority_max */ + "sched_get_priority_min", /* 333 = sched_get_priority_min */ "#334 (unimplemented sched_rr_get_interval)", /* 334 = unimplemented sched_rr_get_interval */ "utrace", /* 335 = utrace */ "#336 (unimplemented sendfile)", /* 336 = unimplemented sendfile */ diff --git a/sys/compat/freebsd/freebsd_sysent.c b/sys/compat/freebsd/freebsd_sysent.c index f3505d46dd8d..388d4afcc97e 100644 --- a/sys/compat/freebsd/freebsd_sysent.c +++ b/sys/compat/freebsd/freebsd_sysent.c @@ -1,4 +1,4 @@ -/* $NetBSD: freebsd_sysent.c,v 1.49 2002/10/09 20:24:11 pooka Exp $ */ +/* $NetBSD: freebsd_sysent.c,v 1.50 2002/12/22 00:06:01 gmcgarry Exp $ */ /* * System call switch table. @@ -8,7 +8,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: freebsd_sysent.c,v 1.49 2002/10/09 20:24:11 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: freebsd_sysent.c,v 1.50 2002/12/22 00:06:01 gmcgarry Exp $"); #if defined(_KERNEL_OPT) #include "opt_ktrace.h" @@ -767,7 +767,7 @@ struct sysent freebsd_sysent[] = { { 0, 0, 0, sys_nosys }, /* 320 = unimplemented lio_listio */ { 0, 0, 0, - sys_nosys }, /* 321 = unimplemented yield */ + freebsd_sys_yield }, /* 321 = yield */ { 0, 0, 0, sys_nosys }, /* 322 = unimplemented thr_sleep */ { 0, 0, 0, @@ -778,20 +778,20 @@ struct sysent freebsd_sysent[] = { sys_munlockall }, /* 325 = munlockall */ { 2, s(struct sys___getcwd_args), 0, sys___getcwd }, /* 326 = __getcwd */ + { 2, s(struct freebsd_sys_sched_setparam_args), 0, + freebsd_sys_sched_setparam }, /* 327 = sched_setparam */ + { 2, s(struct freebsd_sys_sched_getparam_args), 0, + freebsd_sys_sched_getparam }, /* 328 = sched_getparam */ + { 3, s(struct freebsd_sys_sched_setscheduler_args), 0, + freebsd_sys_sched_setscheduler }, /* 329 = sched_setscheduler */ + { 1, s(struct freebsd_sys_sched_getscheduler_args), 0, + freebsd_sys_sched_getscheduler }, /* 330 = sched_getscheduler */ { 0, 0, 0, - sys_nosys }, /* 327 = unimplemented sched_setparam */ - { 0, 0, 0, - sys_nosys }, /* 328 = unimplemented sched_getparam */ - { 0, 0, 0, - sys_nosys }, /* 329 = unimplemented sched_setscheduler */ - { 0, 0, 0, - sys_nosys }, /* 330 = unimplemented sched_getscheduler */ - { 0, 0, 0, - sys_nosys }, /* 331 = unimplemented sched_yield */ - { 0, 0, 0, - sys_nosys }, /* 332 = unimplemented sched_get_priority_max */ - { 0, 0, 0, - sys_nosys }, /* 333 = unimplemented sched_get_priority_min */ + freebsd_sys_sched_yield }, /* 331 = sched_yield */ + { 1, s(struct freebsd_sys_sched_get_priority_max_args), 0, + freebsd_sys_sched_get_priority_max },/* 332 = sched_get_priority_max */ + { 1, s(struct freebsd_sys_sched_get_priority_min_args), 0, + freebsd_sys_sched_get_priority_min },/* 333 = sched_get_priority_min */ { 0, 0, 0, sys_nosys }, /* 334 = unimplemented sched_rr_get_interval */ { 2, s(struct freebsd_sys_utrace_args), 0,