Name: Test Single-Threaded Workqueues Status: Booted on 2.6.6-rc1-bk3 Depends: Tests for create_singlethread_workqueue(). diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .21134-linux-2.6.6-rc1-bk3/kernel/workqueue.c .21134-linux-2.6.6-rc1-bk3.updated/kernel/workqueue.c --- .21134-linux-2.6.6-rc1-bk3/kernel/workqueue.c 2004-04-19 16:03:50.000000000 +1000 +++ .21134-linux-2.6.6-rc1-bk3.updated/kernel/workqueue.c 2004-04-19 16:05:04.000000000 +1000 @@ -500,3 +503,29 @@ EXPORT_SYMBOL(schedule_work); EXPORT_SYMBOL(schedule_delayed_work); EXPORT_SYMBOL(flush_scheduled_work); +static DECLARE_COMPLETION(done); +static void testfn(void *arg) +{ + printk("%s: %lu %s\n", current->comm, current->cpus_allowed, + (char *)arg); + complete(&done); +} + +static int __init test_workqueue(void) +{ + DECLARE_WORK(work1, testfn, "work1"); + DECLARE_WORK(work2, testfn, "work2"); + struct workqueue_struct *test_wq; + + test_wq = create_singlethread_workqueue("testqueue"); + init_completion(&done); + queue_work(test_wq, &work1); + flush_workqueue(test_wq); + wait_for_completion(&done); + init_completion(&done); + queue_delayed_work(test_wq, &work2, HZ); + wait_for_completion(&done); + destroy_workqueue(test_wq); + return 0; +} +__initcall(test_workqueue);