diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2008-05-16 10:03:49 +1000 |
---|---|---|
committer | Stephen Rothwell <sfr@canb.auug.org.au> | 2008-05-16 10:03:49 +1000 |
commit | 3ba0cc6aa6851837d2c525cd15577987f538e395 (patch) | |
tree | 9df8bf7f666f994ee8d3817014fd86d592c01810 /include | |
parent | 4c77ddc0ca831dd615caabd31b7cb4f4d4373e55 (diff) |
misc:kthread-typesafe
Straight-forward conversion to allow typesafe callbacks.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/kthread.h | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/include/linux/kthread.h b/include/linux/kthread.h index aabc8a13ba71..3152c1ef1d08 100644 --- a/include/linux/kthread.h +++ b/include/linux/kthread.h @@ -4,9 +4,31 @@ #include <linux/err.h> #include <linux/sched.h> -struct task_struct *kthread_create(int (*threadfn)(void *data), - void *data, - const char namefmt[], ...) +/** + * kthread_create - create a kthread. + * @threadfn: the function to run until signal_pending(current). + * @data: data ptr for @threadfn. + * @namefmt: printf-style name for the thread. + * + * Description: This helper function creates and names a kernel + * thread. The thread will be stopped: use wake_up_process() to start + * it. See also kthread_run(), kthread_create_on_cpu(). + * + * When woken, the thread will run @threadfn() with @data as its + * argument. @threadfn() can either call do_exit() directly if it is a + * standalone thread for which noone will call kthread_stop(), or + * return when 'kthread_should_stop()' is true (which means + * kthread_stop() has been called). The return value should be zero + * or a negative error number; it will be passed to kthread_stop(). + * + * Returns a task_struct or ERR_PTR(-ENOMEM). + */ +#define kthread_create(threadfn, data, namefmt...) \ + __kthread_create(typesafe_cb(int,(threadfn),(data)), (data), namefmt) + +struct task_struct *__kthread_create(int (*threadfn)(void *data), + void *data, + const char namefmt[], ...) __attribute__((format(printf, 3, 4))); /** |