From 6e605b6e5824c300b9e1953fe4ac9c8fc15d695f Mon Sep 17 00:00:00 2001 From: behlendo Date: Wed, 23 Apr 2008 21:19:47 +0000 Subject: [PATCH] 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 --- include/sys/debug.h | 2 +- modules/spl/spl-taskq.c | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/include/sys/debug.h b/include/sys/debug.h index ab881c5..64aa180 100644 --- a/include/sys/debug.h +++ b/include/sys/debug.h @@ -198,7 +198,7 @@ do { \ do { \ if (unlikely(!(cond))) { \ printk(KERN_ERR "ASSERTION(" #cond ") failed"); \ - SBUG(); \ + BUG(); \ } \ } while (0) diff --git a/modules/spl/spl-taskq.c b/modules/spl/spl-taskq.c index 4869daa..d26b40d 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); -- 2.39.5