Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Apr 2008 21:24:18 GMT
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 139544 for review
Message-ID:  <200804072124.m37LOIlL096101@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=139544

Change 139544 by sam@sam_ebb on 2008/04/07 21:23:17

	change taskqueue_start_threads to create threads of proc0 instead
	of procs; note this means these are no longer visible (by default)
	in ps, top, etc.

Affected files ...

.. //depot/projects/vap/sys/kern/subr_taskqueue.c#7 edit

Differences ...

==== //depot/projects/vap/sys/kern/subr_taskqueue.c#7 (text+ko) ====

@@ -56,8 +56,8 @@
 	void			*tq_context;
 	struct task		*tq_running;
 	struct mtx		tq_mutex;
-	struct proc		**tq_pproc;
-	int			tq_pcount;
+	struct thread		**tq_threads;
+	int			tq_tcount;
 	int			tq_spin;
 	int			tq_flags;
 };
@@ -143,10 +143,10 @@
  * Signal a taskqueue thread to terminate.
  */
 static void
-taskqueue_terminate(struct proc **pp, struct taskqueue *tq)
+taskqueue_terminate(struct thread **pp, struct taskqueue *tq)
 {
 
-	while (tq->tq_pcount > 0) {
+	while (tq->tq_tcount > 0) {
 		wakeup(tq);
 		TQ_SLEEP(tq, pp, &tq->tq_mutex, PWAIT, "taskqueue_destroy", 0);
 	}
@@ -163,9 +163,9 @@
 	TQ_LOCK(queue);
 	queue->tq_flags &= ~TQ_FLAGS_ACTIVE;
 	taskqueue_run(queue);
-	taskqueue_terminate(queue->tq_pproc, queue);
+	taskqueue_terminate(queue->tq_threads, queue);
 	mtx_destroy(&queue->tq_mutex);
-	free(queue->tq_pproc, M_TASKQUEUE);
+	free(queue->tq_threads, M_TASKQUEUE);
 	free(queue, M_TASKQUEUE);
 }
 
@@ -341,45 +341,47 @@
 			const char *name, ...)
 {
 	va_list ap;
+	struct thread *td;
 	struct taskqueue *tq;
-	struct thread *td;
+	int i, error;
 	char ktname[MAXCOMLEN];
-	int i, error;
 
 	if (count <= 0)
 		return (EINVAL);
+
 	tq = *tqp;
 
 	va_start(ap, name);
 	vsnprintf(ktname, MAXCOMLEN, name, ap);
 	va_end(ap);
 
-	tq->tq_pproc = malloc(sizeof(struct proc *) * count, M_TASKQUEUE,
+	tq->tq_threads = malloc(sizeof(struct thread *) * count, M_TASKQUEUE,
 	    M_NOWAIT | M_ZERO);
-	if (tq->tq_pproc == NULL) {
+	if (tq->tq_threads == NULL) {
 		printf("%s: no memory for %s threads\n", __func__, ktname);
 		return (ENOMEM);
 	}
 
 	for (i = 0; i < count; i++) {
 		if (count == 1)
-			error = kproc_create(taskqueue_thread_loop, tqp,
-			    &tq->tq_pproc[i], RFSTOPPED, 0, ktname);
+			error = kthread_add(taskqueue_thread_loop, tqp, NULL,
+			    &tq->tq_threads[i], RFSTOPPED, 0, ktname);
 		else
-			error = kproc_create(taskqueue_thread_loop, tqp,
-			    &tq->tq_pproc[i], RFSTOPPED, 0, "%s_%d", ktname, i);
+			error = kthread_add(taskqueue_thread_loop, tqp, NULL,
+			    &tq->tq_threads[i], RFSTOPPED, 0,
+			    "%s_%d", ktname, i);
 		if (error) {
 			/* should be ok to continue, taskqueue_free will dtrt */
-			printf("%s: kproc_create(%s): error %d",
-				__func__, ktname, error);
-			tq->tq_pproc[i] = NULL;		/* paranoid */
+			printf("%s: kthread_add(%s): error %d", __func__,
+			    ktname, error);
+			tq->tq_threads[i] = NULL;		/* paranoid */
 		} else
-			tq->tq_pcount++;
+			tq->tq_tcount++;
 	}
 	for (i = 0; i < count; i++) {
-		if (tq->tq_pproc[i] == NULL)
+		if (tq->tq_threads[i] == NULL)
 			continue;
-		td = FIRST_THREAD_IN_PROC(tq->tq_pproc[i]);
+		td = tq->tq_threads[i];
 		thread_lock(td);
 		sched_prio(td, pri);
 		sched_add(td, SRQ_BORING);
@@ -403,8 +405,8 @@
 	} while ((tq->tq_flags & TQ_FLAGS_ACTIVE) != 0);
 
 	/* rendezvous with thread that asked us to terminate */
-	tq->tq_pcount--;
-	wakeup_one(tq->tq_pproc);
+	tq->tq_tcount--;
+	wakeup_one(tq->tq_threads);
 	TQ_UNLOCK(tq);
 	kproc_exit(0);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200804072124.m37LOIlL096101>