PERFORCE change 65503 for review
David Xu
davidxu at FreeBSD.org
Fri Nov 19 19:42:50 PST 2004
http://perforce.freebsd.org/chv.cgi?CH=65503
Change 65503 by davidxu at davidxu_alona on 2004/11/20 03:42:00
Nothing to do, just some stubs.
Affected files ...
.. //depot/projects/davidxu_thread/src/lib/libthread/thread/thr_concurrency.c#2 edit
Differences ...
==== //depot/projects/davidxu_thread/src/lib/libthread/thread/thr_concurrency.c#2 (text+ko) ====
@@ -54,112 +54,6 @@
int
_pthread_setconcurrency(int new_level)
{
- int ret;
-
- if (new_level < 0)
- ret = EINVAL;
- else if (new_level == level)
- ret = 0;
- else if (new_level == 0) {
- level = 0;
- ret = 0;
- } else if ((_kse_isthreaded() == 0) && (_kse_setthreaded(1) != 0)) {
- DBG_MSG("Can't enable threading.\n");
- ret = EAGAIN;
- } else {
- ret = _thr_setconcurrency(new_level);
- if (ret == 0)
- level = new_level;
- }
- return (ret);
-}
-
-int
-_thr_setconcurrency(int new_level)
-{
- struct pthread *curthread;
- struct kse *newkse, *kse;
- kse_critical_t crit;
- int kse_count;
- int i;
- int ret;
-
- ret = 0;
- curthread = _get_curthread();
- /* Race condition, but so what. */
- kse_count = _kse_initial->k_kseg->kg_ksecount;
- if (new_level > kse_count) {
- for (i = kse_count; i < new_level; i++) {
- newkse = _kse_alloc(curthread, 0);
- if (newkse == NULL) {
- DBG_MSG("Can't alloc new KSE.\n");
- ret = EAGAIN;
- break;
- }
- newkse->k_kseg = _kse_initial->k_kseg;
- newkse->k_schedq = _kse_initial->k_schedq;
- newkse->k_curthread = NULL;
- crit = _kse_critical_enter();
- KSE_SCHED_LOCK(curthread->kse, newkse->k_kseg);
- TAILQ_INSERT_TAIL(&newkse->k_kseg->kg_kseq,
- newkse, k_kgqe);
- newkse->k_kseg->kg_ksecount++;
- newkse->k_flags |= KF_STARTED;
- KSE_SCHED_UNLOCK(curthread->kse, newkse->k_kseg);
- if (kse_create(&newkse->k_kcb->kcb_kmbx, 0) != 0) {
- KSE_SCHED_LOCK(curthread->kse, newkse->k_kseg);
- TAILQ_REMOVE(&newkse->k_kseg->kg_kseq,
- newkse, k_kgqe);
- newkse->k_kseg->kg_ksecount--;
- KSE_SCHED_UNLOCK(curthread->kse,
- newkse->k_kseg);
- _kse_critical_leave(crit);
- _kse_free(curthread, newkse);
- DBG_MSG("kse_create syscall failed.\n");
- ret = EAGAIN;
- break;
- } else {
- _kse_critical_leave(crit);
- }
- }
- } else if (new_level < kse_count) {
- kse_count = 0;
- crit = _kse_critical_enter();
- KSE_SCHED_LOCK(curthread->kse, _kse_initial->k_kseg);
- /* Count the number of active KSEs */
- TAILQ_FOREACH(kse, &_kse_initial->k_kseg->kg_kseq, k_kgqe) {
- if ((kse->k_flags & KF_TERMINATED) == 0)
- kse_count++;
- }
- /* Reduce the number of active KSEs appropriately. */
- kse = TAILQ_FIRST(&_kse_initial->k_kseg->kg_kseq);
- while ((kse != NULL) && (kse_count > new_level)) {
- if ((kse != _kse_initial) &&
- ((kse->k_flags & KF_TERMINATED) == 0)) {
- kse->k_flags |= KF_TERMINATED;
- kse_count--;
- /* Wakup the KSE in case it is idle. */
- kse_wakeup(&kse->k_kcb->kcb_kmbx);
- }
- kse = TAILQ_NEXT(kse, k_kgqe);
- }
- KSE_SCHED_UNLOCK(curthread->kse, _kse_initial->k_kseg);
- _kse_critical_leave(crit);
- }
- return (ret);
+ level = new_level;
+ return 0;
}
-
-int
-_thr_setmaxconcurrency(void)
-{
- int vcpu;
- size_t len;
- int ret;
-
- len = sizeof(vcpu);
- ret = sysctlbyname("kern.threads.virtual_cpu", &vcpu, &len, NULL, 0);
- if (ret == 0 && vcpu > 0)
- ret = _thr_setconcurrency(vcpu);
- return (ret);
-}
-
More information about the p4-projects
mailing list