summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_resource.c
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2006-11-20 05:50:59 +0000
committerdavidxu <davidxu@FreeBSD.org>2006-11-20 05:50:59 +0000
commita25887447d7ffa914e2432228d5c116a23654f69 (patch)
tree0f095710ce371eca88e01b94550c29cb4ffeba3a /sys/kern/kern_resource.c
parent4800f71e236b016c6ef5e788d256b822e8218ced (diff)
downloadFreeBSD-src-a25887447d7ffa914e2432228d5c116a23654f69.zip
FreeBSD-src-a25887447d7ffa914e2432228d5c116a23654f69.tar.gz
Use scheduler API sched_user_prio() to adjust thread's userland priority,
use td_base_user_prio to get real userland priority since POSIX priority mutex may adjust td_user_pri which is an effective priority.
Diffstat (limited to 'sys/kern/kern_resource.c')
-rw-r--r--sys/kern/kern_resource.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/sys/kern/kern_resource.c b/sys/kern/kern_resource.c
index 3ba110f..f885953 100644
--- a/sys/kern/kern_resource.c
+++ b/sys/kern/kern_resource.c
@@ -545,6 +545,7 @@ rtp_to_pri(struct rtprio *rtp, struct ksegrp *kg)
rtp_to_pri(struct rtprio *rtp, struct thread *td)
#endif
{
+ u_char newpri;
mtx_assert(&sched_lock, MA_OWNED);
if (rtp->prio > RTP_PRIO_MAX)
@@ -552,23 +553,23 @@ rtp_to_pri(struct rtprio *rtp, struct thread *td)
switch (RTP_PRIO_BASE(rtp->type)) {
case RTP_PRIO_REALTIME:
#ifdef KSE
- kg->kg_user_pri = PRI_MIN_REALTIME + rtp->prio;
+ newpri = PRI_MIN_REALTIME + rtp->prio;
#else
- td->td_user_pri = PRI_MIN_REALTIME + rtp->prio;
+ newpri = PRI_MIN_REALTIME + rtp->prio;
#endif
break;
case RTP_PRIO_NORMAL:
#ifdef KSE
- kg->kg_user_pri = PRI_MIN_TIMESHARE + rtp->prio;
+ newpri = PRI_MIN_TIMESHARE + rtp->prio;
#else
- td->td_user_pri = PRI_MIN_TIMESHARE + rtp->prio;
+ newpri = PRI_MIN_TIMESHARE + rtp->prio;
#endif
break;
case RTP_PRIO_IDLE:
#ifdef KSE
- kg->kg_user_pri = PRI_MIN_IDLE + rtp->prio;
+ newpri = PRI_MIN_IDLE + rtp->prio;
#else
- td->td_user_pri = PRI_MIN_IDLE + rtp->prio;
+ newpri = PRI_MIN_IDLE + rtp->prio;
#endif
break;
default:
@@ -576,11 +577,13 @@ rtp_to_pri(struct rtprio *rtp, struct thread *td)
}
#ifdef KSE
sched_class(kg, rtp->type);
+ sched_user_prio(kg, newpri);
if (curthread->td_ksegrp == kg) {
sched_prio(curthread, kg->kg_user_pri); /* XXX dubious */
}
#else
sched_class(td, rtp->type); /* XXX fix */
+ sched_user_prio(td, newpri);
if (curthread == td)
sched_prio(curthread, td->td_user_pri); /* XXX dubious */
#endif
@@ -603,23 +606,23 @@ pri_to_rtp(struct thread *td, struct rtprio *rtp)
#endif
case PRI_REALTIME:
#ifdef KSE
- rtp->prio = kg->kg_user_pri - PRI_MIN_REALTIME;
+ rtp->prio = kg->kg_base_user_pri - PRI_MIN_REALTIME;
#else
- rtp->prio = td->td_user_pri - PRI_MIN_REALTIME;
+ rtp->prio = td->td_base_user_pri - PRI_MIN_REALTIME;
#endif
break;
case PRI_TIMESHARE:
#ifdef KSE
- rtp->prio = kg->kg_user_pri - PRI_MIN_TIMESHARE;
+ rtp->prio = kg->kg_base_user_pri - PRI_MIN_TIMESHARE;
#else
- rtp->prio = td->td_user_pri - PRI_MIN_TIMESHARE;
+ rtp->prio = td->td_base_user_pri - PRI_MIN_TIMESHARE;
#endif
break;
case PRI_IDLE:
#ifdef KSE
- rtp->prio = kg->kg_user_pri - PRI_MIN_IDLE;
+ rtp->prio = kg->kg_base_user_pri - PRI_MIN_IDLE;
#else
- rtp->prio = td->td_user_pri - PRI_MIN_IDLE;
+ rtp->prio = td->td_base_user_pri - PRI_MIN_IDLE;
#endif
break;
default:
OpenPOWER on IntegriCloud