diff options
author | raf <none@none> | 2006-06-20 19:21:46 -0700 |
---|---|---|
committer | raf <none@none> | 2006-06-20 19:21:46 -0700 |
commit | f841f6ad96ea6675d6c6b35c749eaac601799fdf (patch) | |
tree | 698db5d44fc99bd070613c93a497f5e93e803bc5 /usr/src/lib/libc/port/threads/rtsched.c | |
parent | 545e5dad7996785cfebf226c5ef410c1b154740f (diff) | |
download | illumos-gate-f841f6ad96ea6675d6c6b35c749eaac601799fdf.tar.gz |
6416832 libaio and librt can and should be folded into libc
--HG--
rename : usr/src/cmd/perl/5.8.4/distrib/ext/Time/HiRes/hints/solaris.pl => deleted_files/usr/src/cmd/perl/5.8.4/distrib/ext/Time/HiRes/hints/solaris.pl
rename : usr/src/lib/libaio/common/Makefile => deleted_files/usr/src/lib/libaio/common/Makefile
rename : usr/src/lib/libaio/common/scalls.c => deleted_files/usr/src/lib/libaio/common/scalls.c
rename : usr/src/lib/libaio/common/sig.c => deleted_files/usr/src/lib/libaio/common/sig.c
rename : usr/src/lib/libaio/common/subr.c => deleted_files/usr/src/lib/libaio/common/subr.c
rename : usr/src/lib/libaio/spec/Makefile => deleted_files/usr/src/lib/libaio/spec/Makefile
rename : usr/src/lib/libaio/spec/Makefile.targ => deleted_files/usr/src/lib/libaio/spec/Makefile.targ
rename : usr/src/lib/libaio/spec/amd64/Makefile => deleted_files/usr/src/lib/libaio/spec/amd64/Makefile
rename : usr/src/lib/libaio/spec/i386/Makefile => deleted_files/usr/src/lib/libaio/spec/i386/Makefile
rename : usr/src/lib/libaio/spec/sparc/Makefile => deleted_files/usr/src/lib/libaio/spec/sparc/Makefile
rename : usr/src/lib/libaio/spec/sparcv9/Makefile => deleted_files/usr/src/lib/libaio/spec/sparcv9/Makefile
rename : usr/src/lib/libaio/spec/versions => deleted_files/usr/src/lib/libaio/spec/versions
rename : usr/src/lib/librt/common/Makefile => deleted_files/usr/src/lib/librt/common/Makefile
rename : usr/src/lib/librt/common/aio.c => deleted_files/usr/src/lib/librt/common/aio.c
rename : usr/src/lib/librt/common/fdatasync.c => deleted_files/usr/src/lib/librt/common/fdatasync.c
rename : usr/src/lib/librt/common/mqlib.h => deleted_files/usr/src/lib/librt/common/mqlib.h
rename : usr/src/lib/librt/common/pos4.c => deleted_files/usr/src/lib/librt/common/pos4.c
rename : usr/src/lib/librt/common/pos4.h => deleted_files/usr/src/lib/librt/common/pos4.h
rename : usr/src/lib/librt/common/sigrt.c => deleted_files/usr/src/lib/librt/common/sigrt.c
rename : usr/src/lib/librt/req.flg => deleted_files/usr/src/lib/librt/req.flg
rename : usr/src/lib/librt/spec/Makefile => deleted_files/usr/src/lib/librt/spec/Makefile
rename : usr/src/lib/librt/spec/Makefile.targ => deleted_files/usr/src/lib/librt/spec/Makefile.targ
rename : usr/src/lib/librt/spec/amd64/Makefile => deleted_files/usr/src/lib/librt/spec/amd64/Makefile
rename : usr/src/lib/librt/spec/i386/Makefile => deleted_files/usr/src/lib/librt/spec/i386/Makefile
rename : usr/src/lib/librt/spec/sparc/Makefile => deleted_files/usr/src/lib/librt/spec/sparc/Makefile
rename : usr/src/lib/librt/spec/sparcv9/Makefile => deleted_files/usr/src/lib/librt/spec/sparcv9/Makefile
rename : usr/src/lib/librt/spec/versions => deleted_files/usr/src/lib/librt/spec/versions
rename : usr/src/lib/libaio/common/libaio.h => usr/src/lib/libc/inc/asyncio.h
rename : usr/src/lib/librt/common/thread_pool.h => usr/src/lib/libc/inc/thread_pool.h
rename : usr/src/lib/libaio/common/aio.c => usr/src/lib/libc/port/aio/aio.c
rename : usr/src/lib/libaio/common/ma.c => usr/src/lib/libc/port/aio/aio_alloc.c
rename : usr/src/lib/libaio/common/posix_aio.c => usr/src/lib/libc/port/aio/posix_aio.c
rename : usr/src/lib/librt/common/clock_timer.c => usr/src/lib/libc/port/rt/clock_timer.c
rename : usr/src/lib/librt/common/fallocate.c => usr/src/lib/libc/port/rt/fallocate.c
rename : usr/src/lib/librt/common/mqueue.c => usr/src/lib/libc/port/rt/mqueue.c
rename : usr/src/lib/librt/common/pos4obj.c => usr/src/lib/libc/port/rt/pos4obj.c
rename : usr/src/lib/librt/common/pos4obj.h => usr/src/lib/libc/port/rt/pos4obj.h
rename : usr/src/lib/librt/common/sched.c => usr/src/lib/libc/port/rt/sched.c
rename : usr/src/lib/librt/common/sem.c => usr/src/lib/libc/port/rt/sem.c
rename : usr/src/lib/librt/common/shm.c => usr/src/lib/libc/port/rt/shm.c
rename : usr/src/lib/librt/common/sigev_thread.c => usr/src/lib/libc/port/rt/sigev_thread.c
rename : usr/src/lib/librt/common/sigev_thread.h => usr/src/lib/libc/port/rt/sigev_thread.h
rename : usr/src/lib/librt/common/thread_pool.c => usr/src/lib/libc/port/tpool/thread_pool.c
rename : usr/src/lib/librt/common/thread_pool_impl.h => usr/src/lib/libc/port/tpool/thread_pool_impl.h
rename : usr/src/lib/libaio/spec/aio.spec => usr/src/lib/libc/spec/aio.spec
rename : usr/src/lib/librt/spec/rt.spec => usr/src/lib/libc/spec/rt.spec
rename : usr/src/lib/libaio/asynch.h => usr/src/uts/common/sys/asynch.h
Diffstat (limited to 'usr/src/lib/libc/port/threads/rtsched.c')
-rw-r--r-- | usr/src/lib/libc/port/threads/rtsched.c | 120 |
1 files changed, 11 insertions, 109 deletions
diff --git a/usr/src/lib/libc/port/threads/rtsched.c b/usr/src/lib/libc/port/threads/rtsched.c index 60d3357655..a85118dc5c 100644 --- a/usr/src/lib/libc/port/threads/rtsched.c +++ b/usr/src/lib/libc/port/threads/rtsched.c @@ -2,9 +2,8 @@ * CDDL HEADER START * * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. @@ -19,8 +18,9 @@ * * CDDL HEADER END */ + /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -39,9 +39,6 @@ * The following variables are used for caching information * for priocntl TS and RT scheduling classs. */ -struct pcclass ts_class, rt_class; - -static rtdpent_t *rt_dptbl; /* RT class parameter table */ static int rt_rrmin; static int rt_rrmax; static int rt_fifomin; @@ -50,87 +47,6 @@ static int rt_othermin; static int rt_othermax; /* - * Get the RT class parameter table - */ -static void -_get_rt_dptbl() -{ - struct pcclass *pccp; - pcadmin_t pcadmin; - rtadmin_t rtadmin; - size_t rtdpsize; - - pccp = &ts_class; - /* get class's info */ - (void) strcpy(pccp->pcc_info.pc_clname, "TS"); - if (priocntl(P_PID, 0, PC_GETCID, (caddr_t)&(pccp->pcc_info)) < 0) - goto out; - - pccp = &rt_class; - /* get class's info */ - (void) strcpy(pccp->pcc_info.pc_clname, "RT"); - if (priocntl(P_PID, 0, PC_GETCID, (caddr_t)&(pccp->pcc_info)) < 0) - goto out; - - /* get RT class dispatch table in rt_dptbl */ - pcadmin.pc_cid = rt_class.pcc_info.pc_cid; - pcadmin.pc_cladmin = (caddr_t)&rtadmin; - rtadmin.rt_cmd = RT_GETDPSIZE; - if (priocntl(P_PID, 0, PC_ADMIN, (caddr_t)&pcadmin) < 0) - goto out; - rtdpsize = rtadmin.rt_ndpents * sizeof (rtdpent_t); - if (rt_dptbl == NULL && (rt_dptbl = lmalloc(rtdpsize)) == NULL) - goto out; - rtadmin.rt_dpents = rt_dptbl; - rtadmin.rt_cmd = RT_GETDPTBL; - if (priocntl(P_PID, 0, PC_ADMIN, (caddr_t)&pcadmin) < 0) - goto out; - pccp->pcc_primin = 0; - pccp->pcc_primax = ((rtinfo_t *)rt_class.pcc_info.pc_clinfo)->rt_maxpri; - return; -out: - thr_panic("get_rt_dptbl failed"); -} - -/* - * Translate RT class's user priority to global scheduling priority. - * This is for priorities coming from librt. - */ -pri_t -_map_rtpri_to_gp(pri_t pri) -{ - static mutex_t map_lock = DEFAULTMUTEX; - static int mapped = 0; - rtdpent_t *rtdp; - pri_t gpri; - - if (!mapped) { - lmutex_lock(&map_lock); - if (!mapped) { /* do this only once */ - _get_rt_dptbl(); - mapped = 1; - } - lmutex_unlock(&map_lock); - } - - /* First case is the default case, other two are seldomly taken */ - if (pri <= rt_dptbl[rt_class.pcc_primin].rt_globpri) { - gpri = pri + rt_dptbl[rt_class.pcc_primin].rt_globpri - - rt_class.pcc_primin; - } else if (pri >= rt_dptbl[rt_class.pcc_primax].rt_globpri) { - gpri = pri + rt_dptbl[rt_class.pcc_primax].rt_globpri - - rt_class.pcc_primax; - } else { - gpri = rt_dptbl[rt_class.pcc_primin].rt_globpri + 1; - for (rtdp = rt_dptbl+1; rtdp->rt_globpri < pri; ++rtdp, ++gpri) - ; - if (rtdp->rt_globpri > pri) - --gpri; - } - return (gpri); -} - -/* * Set the RT priority/policy of a lwp/thread. */ int @@ -175,30 +91,16 @@ _thrp_setlwpprio(lwpid_t lwpid, int policy, int pri) static void _init_rt_prio_ranges() { - pcinfo_t info; - - (void) strcpy(info.pc_clname, "RT"); - if (priocntl(P_PID, 0, PC_GETCID, (caddr_t)&info) == -1L) - rt_fifomin = rt_rrmin = rt_fifomax = rt_rrmax = 0; - else { - rtinfo_t *rtinfop = (rtinfo_t *)info.pc_clinfo; - rt_fifomin = rt_rrmin = 0; - rt_fifomax = rt_rrmax = rtinfop->rt_maxpri; - } - - (void) strcpy(info.pc_clname, "TS"); - if (priocntl(P_PID, 0, PC_GETCID, (caddr_t)&info) == -1L) - rt_othermin = rt_othermax = 0; - else { - tsinfo_t *tsinfop = (tsinfo_t *)info.pc_clinfo; - pri_t pri = tsinfop->ts_maxupri / 3; - rt_othermin = -pri; - rt_othermax = pri; - } + rt_rrmin = sched_get_priority_min(SCHED_RR); + rt_rrmax = sched_get_priority_max(SCHED_RR); + rt_fifomin = sched_get_priority_min(SCHED_FIFO); + rt_fifomax = sched_get_priority_max(SCHED_FIFO); + rt_othermin = sched_get_priority_min(SCHED_OTHER); + rt_othermax = sched_get_priority_max(SCHED_OTHER); } /* - * Validate priorities from librt. + * Validate priorities. */ int _validate_rt_prio(int policy, int pri) |