summaryrefslogtreecommitdiffstats
path: root/modules/spl/spl-taskq.c
diff options
context:
space:
mode:
authorbehlendo <behlendo@7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c>2008-04-23 21:19:47 +0000
committerbehlendo <behlendo@7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c>2008-04-23 21:19:47 +0000
commit6e605b6e5824c300b9e1953fe4ac9c8fc15d695f (patch)
tree6ce2960fd7de21d4e1daf95286b0ce883d5c325d /modules/spl/spl-taskq.c
parent18c9eadf976dda5c4b36f86290e674ec3e85f7dc (diff)
Minor improvement to taskq handling. This is a small step towards
dynamic taskqs which still need to be fully implemented. git-svn-id: https://outreach.scidac.gov/svn/spl/trunk@87 7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c
Diffstat (limited to 'modules/spl/spl-taskq.c')
-rw-r--r--modules/spl/spl-taskq.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/modules/spl/spl-taskq.c b/modules/spl/spl-taskq.c
index 4869daa3d..d26b40db8 100644
--- a/modules/spl/spl-taskq.c
+++ b/modules/spl/spl-taskq.c
@@ -66,10 +66,14 @@ __taskq_dispatch(taskq_t *tq, task_func_t func, void *priv, uint_t flags)
}
EXPORT_SYMBOL(__taskq_dispatch);
-/* XXX - Most args ignored until we decide if it's worth the effort
- * to emulate the solaris notion of dynamic thread pools. For
- * now we simply serialize everything through one thread which
- * may come back to bite us as a performance issue.
+/* XXX - We must fully implement dynamic workqueues since they make a
+ * significant impact in terms of performance. For now I've made
+ * a trivial compromise. If you ask for one thread you get one
+ * thread, if you ask for more than that you get one per core.
+ * It's unclear if you ever really need/want more than one per-core
+ * anyway. More analysis is required.
+ *
+ * name - Workqueue names are limited to 10 chars
* pri - Ignore priority
* min - Ignored until this is a dynamic thread pool
* max - Ignored until this is a dynamic thread pool
@@ -79,9 +83,15 @@ taskq_t *
__taskq_create(const char *name, int nthreads, pri_t pri,
int minalloc, int maxalloc, uint_t flags)
{
- /* NOTE: Linux workqueue names are limited to 10 chars */
+ taskq_t *tq;
ENTRY;
- RETURN(create_singlethread_workqueue(name));
+
+ if (nthreads == 1)
+ tq = create_singlethread_workqueue(name);
+ else
+ tq = create_workqueue(name);
+
+ return tq;
}
EXPORT_SYMBOL(__taskq_create);