svn commit: r357684 - in stable/12/sys: kern sys
Alexander Motin
mav at FreeBSD.org
Sat Feb 8 21:55:57 UTC 2020
Author: mav
Date: Sat Feb 8 21:55:56 2020
New Revision: 357684
URL: https://svnweb.freebsd.org/changeset/base/357684
Log:
MFC r353678 (by avg):
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.
Modified:
stable/12/sys/kern/subr_taskqueue.c
stable/12/sys/sys/taskqueue.h
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/kern/subr_taskqueue.c
==============================================================================
--- stable/12/sys/kern/subr_taskqueue.c Sat Feb 8 21:17:48 2020 (r357683)
+++ stable/12/sys/kern/subr_taskqueue.c Sat Feb 8 21:55:56 2020 (r357684)
@@ -649,7 +649,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;
@@ -671,10 +671,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) {
@@ -724,12 +724,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, ...)
{
@@ -737,7 +750,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: stable/12/sys/sys/taskqueue.h
==============================================================================
--- stable/12/sys/sys/taskqueue.h Sat Feb 8 21:17:48 2020 (r357683)
+++ stable/12/sys/sys/taskqueue.h Sat Feb 8 21:55:56 2020 (r357684)
@@ -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