From owner-p4-projects@FreeBSD.ORG Sat Nov 20 03:42:50 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id CC54716A4D0; Sat, 20 Nov 2004 03:42:49 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7C10316A4CE for ; Sat, 20 Nov 2004 03:42:49 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5D2BA43D55 for ; Sat, 20 Nov 2004 03:42:49 +0000 (GMT) (envelope-from davidxu@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.11/8.12.11) with ESMTP id iAK3gnDh004303 for ; Sat, 20 Nov 2004 03:42:49 GMT (envelope-from davidxu@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id iAK3gncf004300 for perforce@freebsd.org; Sat, 20 Nov 2004 03:42:49 GMT (envelope-from davidxu@freebsd.org) Date: Sat, 20 Nov 2004 03:42:49 GMT Message-Id: <200411200342.iAK3gncf004300@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to davidxu@freebsd.org using -f From: David Xu To: Perforce Change Reviews Subject: PERFORCE change 65503 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Nov 2004 03:42:50 -0000 http://perforce.freebsd.org/chv.cgi?CH=65503 Change 65503 by davidxu@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); -} -