diff options
Diffstat (limited to 'static/netbsd/man9/workqueue.9')
| -rw-r--r-- | static/netbsd/man9/workqueue.9 | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/static/netbsd/man9/workqueue.9 b/static/netbsd/man9/workqueue.9 new file mode 100644 index 00000000..39fbe7c5 --- /dev/null +++ b/static/netbsd/man9/workqueue.9 @@ -0,0 +1,163 @@ +.\" $NetBSD: workqueue.9,v 1.15 2020/09/08 17:02:18 riastradh Exp $ +.\" +.\" Copyright (c)2005 YAMAMOTO Takashi, +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" ------------------------------------------------------------ +.Dd December 28, 2017 +.Dt WORKQUEUE 9 +.Os +.\" ------------------------------------------------------------ +.Sh NAME +.Nm workqueue +.Nd simple do-it-in-thread-context framework +.\" ------------------------------------------------------------ +.Sh SYNOPSIS +.In sys/workqueue.h +.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +.Ft int +.Fn workqueue_create \ +"struct workqueue **wqp" "const char *name" \ +"void (*func)(struct work *, void *)" "void *arg" \ +"pri_t prio" "int ipl" "int flags" +.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +.Ft void +.Fn workqueue_enqueue \ +"struct workqueue *wq" "struct work *wk" "struct cpu_info *ci" +.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +.Ft void +.Fn workqueue_wait \ +"struct workqueue *wq" "struct work *wk" +.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +.Ft void +.Fn workqueue_destroy \ +"struct workqueue *wq" +.\" ------------------------------------------------------------ +.Sh DESCRIPTION +The +.Nm +utility routines are provided to defer work which is needed to be +processed in a thread context. +.Pp +.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +.Fn workqueue_create +creates a workqueue. +It takes the following arguments: +.Bl -tag -width flags +.It Fa wqp +Specify where to store the created workqueue. +.It Fa name +The name of the workqueue. +.It Fa func +The function to be called for each +.Fa work . +.It Fa arg +An argument to be passed as a second argument of +.Fa func . +.It Fa prio +The priority level for the worker threads. +.It Fa ipl +The highest IPL at which this workqueue is used. +.It Fa flags +The value of 0 indicates a standard create operation, however the following +flags may be bitwise ORed together: +.Bl -tag -width WQ_MPSAFE +.It Dv WQ_FPU +Specifies that the kthread must be allowed to use any machine-dependent +per-CPU floating-point units or SIMD vector units, as in +.Xr kthread_fpu_enter 9 / Xr kthread_fpu_exit 9 , +when it executes the worker function. +.It Dv WQ_MPSAFE +Specifies that the workqueue is multiprocessor safe and does its own locking; +otherwise the kernel lock will be held while processing work. +.It Dv WQ_PERCPU +Specifies that the workqueue should have a separate queue for each CPU, +thus the work could be enqueued on concrete CPUs. +.El +.El +.Pp +.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +.Fn workqueue_enqueue +enqueues the work +.Fa wk +into the workqueue +.Fa wq . +.Pp +If the +.Dv WQ_PERCPU +flag was set on workqueue creation, the +.Fa ci +argument may be used to specify the CPU on which the work should +be enqueued. +Also it may be +.Dv NULL , +then work will be enqueued on the current CPU. +If +.Dv WQ_PERCPU +flag was not set, +.Fa ci +must be +.Dv NULL . +.Pp +The enqueued work will be processed in a thread context. +A work must not be enqueued again until the callback is called by +the +.Nm +framework. +.Pp +.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +.Fn workqueue_wait +waits for a specified work +.Fa wk +on the workqueue +.Fa wq +to finish. +The caller must ensure that +.Fa wk +will not be enqueued to the workqueue again until after +.Fn workqueue_wait +returns. +.Pp +.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +.Fn workqueue_destroy +destroys a workqueue and frees associated resources. +The caller should ensure that the workqueue has no work enqueued beforehand. +.\" ------------------------------------------------------------ +.Sh RETURN VALUES +.Fn workqueue_create +returns 0 on success. +Otherwise, it returns an +.Xr errno 2 . +.\" ------------------------------------------------------------ +.Sh CODE REFERENCES +The +.Nm +subsystem is implemented within the file +.Pa sys/kern/subr_workqueue.c . +.\" ------------------------------------------------------------ +.Sh SEE ALSO +.Xr callout 9 , +.Xr condvar 9 , +.Xr kthread 9 , +.Xr softint 9 |
