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