diff options
author | davidxu <davidxu@FreeBSD.org> | 2006-07-11 06:11:34 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2006-07-11 06:11:34 +0000 |
commit | 40d04d694150afd1ba0b9ea88cdb7c0e6037c573 (patch) | |
tree | a7dcf765fafac57207135f59db9fd4f34f8b125d /sys/kern/ksched.c | |
parent | 2adaf33d1dc45602666c15e66108be95ef82e305 (diff) | |
download | FreeBSD-src-40d04d694150afd1ba0b9ea88cdb7c0e6037c573.zip FreeBSD-src-40d04d694150afd1ba0b9ea88cdb7c0e6037c573.tar.gz |
Extended the POSIX scheduler APIs to accept lwpid as well, we've already
done this in ptrace syscall, when a pid is large than PID_MAX, the syscall
will search a thread in current process. It permits 1:1 thread library to
get and set a thread's scheduler attributes.
Diffstat (limited to 'sys/kern/ksched.c')
-rw-r--r-- | sys/kern/ksched.c | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/sys/kern/ksched.c b/sys/kern/ksched.c index 7884d90..7031c40a 100644 --- a/sys/kern/ksched.c +++ b/sys/kern/ksched.c @@ -100,7 +100,7 @@ ksched_detach(struct ksched *ks) #define P1B_PRIO_MAX rtpprio_to_p4prio(RTP_PRIO_MIN) static __inline int -getscheduler(register_t *ret, struct ksched *ksched, struct thread *td) +getscheduler(struct ksched *ksched, struct thread *td, int *policy) { struct rtprio rtp; int e = 0; @@ -111,15 +111,15 @@ getscheduler(register_t *ret, struct ksched *ksched, struct thread *td) switch (rtp.type) { case RTP_PRIO_FIFO: - *ret = SCHED_FIFO; + *policy = SCHED_FIFO; break; case RTP_PRIO_REALTIME: - *ret = SCHED_RR; + *policy = SCHED_RR; break; default: - *ret = SCHED_OTHER; + *policy = SCHED_OTHER; break; } @@ -127,27 +127,27 @@ getscheduler(register_t *ret, struct ksched *ksched, struct thread *td) } int -ksched_setparam(register_t *ret, struct ksched *ksched, +ksched_setparam(struct ksched *ksched, struct thread *td, const struct sched_param *param) { - register_t policy; + int policy; int e; - e = getscheduler(&policy, ksched, td); + e = getscheduler(ksched, td, &policy); if (e == 0) { if (policy == SCHED_OTHER) e = EINVAL; else - e = ksched_setscheduler(ret, ksched, td, policy, param); + e = ksched_setscheduler(ksched, td, policy, param); } return e; } int -ksched_getparam(register_t *ret, struct ksched *ksched, +ksched_getparam(struct ksched *ksched, struct thread *td, struct sched_param *param) { struct rtprio rtp; @@ -169,7 +169,7 @@ ksched_getparam(register_t *ret, struct ksched *ksched, * */ int -ksched_setscheduler(register_t *ret, struct ksched *ksched, +ksched_setscheduler(struct ksched *ksched, struct thread *td, int policy, const struct sched_param *param) { int e = 0; @@ -243,22 +243,22 @@ ksched_setscheduler(register_t *ret, struct ksched *ksched, } int -ksched_getscheduler(register_t *ret, struct ksched *ksched, struct thread *td) +ksched_getscheduler(struct ksched *ksched, struct thread *td, int *policy) { - return getscheduler(ret, ksched, td); + return getscheduler(ksched, td, policy); } /* ksched_yield: Yield the CPU. */ int -ksched_yield(register_t *ret, struct ksched *ksched) +ksched_yield(struct ksched *ksched) { sched_relinquish(curthread); return 0; } int -ksched_get_priority_max(register_t*ret, struct ksched *ksched, int policy) +ksched_get_priority_max(struct ksched *ksched, int policy, int *prio) { int e = 0; @@ -266,11 +266,11 @@ ksched_get_priority_max(register_t*ret, struct ksched *ksched, int policy) { case SCHED_FIFO: case SCHED_RR: - *ret = RTP_PRIO_MAX; + *prio = RTP_PRIO_MAX; break; case SCHED_OTHER: - *ret = PRIO_MAX; + *prio = PRIO_MAX; break; default: @@ -281,7 +281,7 @@ ksched_get_priority_max(register_t*ret, struct ksched *ksched, int policy) } int -ksched_get_priority_min(register_t *ret, struct ksched *ksched, int policy) +ksched_get_priority_min(struct ksched *ksched, int policy, int *prio) { int e = 0; @@ -289,11 +289,11 @@ ksched_get_priority_min(register_t *ret, struct ksched *ksched, int policy) { case SCHED_FIFO: case SCHED_RR: - *ret = P1B_PRIO_MIN; + *prio = P1B_PRIO_MIN; break; case SCHED_OTHER: - *ret = PRIO_MIN; + *prio = PRIO_MIN; break; default: @@ -304,8 +304,8 @@ ksched_get_priority_min(register_t *ret, struct ksched *ksched, int policy) } int -ksched_rr_get_interval(register_t *ret, struct ksched *ksched, - struct thread *td, struct timespec *timespec) +ksched_rr_get_interval(struct ksched *ksched, + struct thread *td, struct timespec *timespec) { *timespec = ksched->rr_interval; |