summaryrefslogtreecommitdiffstats
path: root/sys/cddl/compat/opensolaris/kern
diff options
context:
space:
mode:
authordelphij <delphij@FreeBSD.org>2010-04-19 09:03:36 +0000
committerdelphij <delphij@FreeBSD.org>2010-04-19 09:03:36 +0000
commitf7bf5e736384695724335bb887bea8d81238745e (patch)
tree5051c54bf3593c11e8a05fe07a6a92bf2dbc72bc /sys/cddl/compat/opensolaris/kern
parent80306ecde695ceb65c90b2b6d796a4b0595257fd (diff)
downloadFreeBSD-src-f7bf5e736384695724335bb887bea8d81238745e.zip
FreeBSD-src-f7bf5e736384695724335bb887bea8d81238745e.tar.gz
Partially MFp4 #176265 by pjd@:
- Properly initialize and destroy system_taskq. - Add a dummy implementation of taskq_create_proc(). Note: We do not currently use system_taskq in ZFS so this is mostly a no-op at this time. Proper system_taskq initialization is required by newer ZFS code. Ok'ed by: pjd MFC after: 2 weeks
Diffstat (limited to 'sys/cddl/compat/opensolaris/kern')
-rw-r--r--sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c b/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c
index 584be24..1e3b1ef 100644
--- a/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c
+++ b/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c
@@ -52,9 +52,9 @@ static void
system_taskq_init(void *arg)
{
- system_taskq = (taskq_t *)taskqueue_thread;
taskq_zone = uma_zcreate("taskq_zone", sizeof(struct ostask),
NULL, NULL, NULL, NULL, 0, 0);
+ system_taskq = taskq_create("system_taskq", mp_ncpus, 0, 0, 0, 0);
}
SYSINIT(system_taskq_init, SI_SUB_CONFIGURE, SI_ORDER_ANY, system_taskq_init, NULL);
@@ -62,6 +62,7 @@ static void
system_taskq_fini(void *arg)
{
+ taskq_destroy(system_taskq);
uma_zdestroy(taskq_zone);
}
SYSUNINIT(system_taskq_fini, SI_SUB_CONFIGURE, SI_ORDER_ANY, system_taskq_fini, NULL);
@@ -72,10 +73,8 @@ taskq_create(const char *name, int nthreads, pri_t pri, int minalloc __unused,
{
taskq_t *tq;
- if ((flags & TASKQ_THREADS_CPU_PCT) != 0) {
- /* TODO: Calculate number od threads. */
- printf("%s: TASKQ_THREADS_CPU_PCT\n", __func__);
- }
+ if ((flags & TASKQ_THREADS_CPU_PCT) != 0)
+ nthreads = MAX((mp_ncpus * nthreads) / 100, 1);
tq = kmem_alloc(sizeof(*tq), KM_SLEEP);
tq->tq_queue = taskqueue_create(name, M_WAITOK, taskqueue_thread_enqueue,
@@ -85,6 +84,14 @@ taskq_create(const char *name, int nthreads, pri_t pri, int minalloc __unused,
return ((taskq_t *)tq);
}
+taskq_t *
+taskq_create_proc(const char *name, int nthreads, pri_t pri, int minalloc,
+ int maxalloc, proc_t *proc __unused, uint_t flags)
+{
+
+ return (taskq_create(name, nthreads, pri, minalloc, maxalloc, flags));
+}
+
void
taskq_destroy(taskq_t *tq)
{
OpenPOWER on IntegriCloud