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