svn commit: r353678 - in head/sys: kern sys

Andriy Gapon avg at FreeBSD.org
Thu Oct 17 06:32:35 UTC 2019


Author: avg
Date: Thu Oct 17 06:32:34 2019
New Revision: 353678
URL: https://svnweb.freebsd.org/changeset/base/353678

Log:
  provide a way to assign taskqueue threads to a kernel process
  
  This can be used to group all threads belonging to a single logical
  entity under a common kernel process.
  I am planning to use the new interface for ZFS threads.
  
  MFC after:	4 weeks

Modified:
  head/sys/kern/subr_taskqueue.c
  head/sys/sys/taskqueue.h

Modified: head/sys/kern/subr_taskqueue.c
==============================================================================
--- head/sys/kern/subr_taskqueue.c	Thu Oct 17 06:21:09 2019	(r353677)
+++ head/sys/kern/subr_taskqueue.c	Thu Oct 17 06:32:34 2019	(r353678)
@@ -654,7 +654,7 @@ taskqueue_swi_giant_run(void *dummy)
 
 static int
 _taskqueue_start_threads(struct taskqueue **tqp, int count, int pri,
-    cpuset_t *mask, const char *name, va_list ap)
+    cpuset_t *mask, struct proc *p, const char *name, va_list ap)
 {
 	char ktname[MAXCOMLEN + 1];
 	struct thread *td;
@@ -676,10 +676,10 @@ _taskqueue_start_threads(struct taskqueue **tqp, int c
 
 	for (i = 0; i < count; i++) {
 		if (count == 1)
-			error = kthread_add(taskqueue_thread_loop, tqp, NULL,
+			error = kthread_add(taskqueue_thread_loop, tqp, p,
 			    &tq->tq_threads[i], RFSTOPPED, 0, "%s", ktname);
 		else
-			error = kthread_add(taskqueue_thread_loop, tqp, NULL,
+			error = kthread_add(taskqueue_thread_loop, tqp, p,
 			    &tq->tq_threads[i], RFSTOPPED, 0,
 			    "%s_%d", ktname, i);
 		if (error) {
@@ -729,12 +729,25 @@ taskqueue_start_threads(struct taskqueue **tqp, int co
 	int error;
 
 	va_start(ap, name);
-	error = _taskqueue_start_threads(tqp, count, pri, NULL, name, ap);
+	error = _taskqueue_start_threads(tqp, count, pri, NULL, NULL, name, ap);
 	va_end(ap);
 	return (error);
 }
 
 int
+taskqueue_start_threads_in_proc(struct taskqueue **tqp, int count, int pri,
+    struct proc *proc, const char *name, ...)
+{
+	va_list ap;
+	int error;
+
+	va_start(ap, name);
+	error = _taskqueue_start_threads(tqp, count, pri, NULL, proc, name, ap);
+	va_end(ap);
+	return (error);
+}
+
+int
 taskqueue_start_threads_cpuset(struct taskqueue **tqp, int count, int pri,
     cpuset_t *mask, const char *name, ...)
 {
@@ -742,7 +755,7 @@ taskqueue_start_threads_cpuset(struct taskqueue **tqp,
 	int error;
 
 	va_start(ap, name);
-	error = _taskqueue_start_threads(tqp, count, pri, mask, name, ap);
+	error = _taskqueue_start_threads(tqp, count, pri, mask, NULL, name, ap);
 	va_end(ap);
 	return (error);
 }

Modified: head/sys/sys/taskqueue.h
==============================================================================
--- head/sys/sys/taskqueue.h	Thu Oct 17 06:21:09 2019	(r353677)
+++ head/sys/sys/taskqueue.h	Thu Oct 17 06:32:34 2019	(r353678)
@@ -42,6 +42,7 @@
 
 struct taskqueue;
 struct taskqgroup;
+struct proc;
 struct thread;
 
 struct timeout_task {
@@ -75,7 +76,9 @@ struct taskqueue *taskqueue_create(const char *name, i
 				    taskqueue_enqueue_fn enqueue,
 				    void *context);
 int	taskqueue_start_threads(struct taskqueue **tqp, int count, int pri,
-				const char *name, ...) __printflike(4, 5);
+	    const char *name, ...) __printflike(4, 5);
+int	taskqueue_start_threads_in_proc(struct taskqueue **tqp, int count,
+	    int pri, struct proc *p, const char *name, ...) __printflike(5, 6);
 int	taskqueue_start_threads_cpuset(struct taskqueue **tqp, int count,
 	    int pri, cpuset_t *mask, const char *name, ...) __printflike(5, 6);
 int	taskqueue_enqueue(struct taskqueue *queue, struct task *task);


More information about the svn-src-all mailing list