at v2.6.16 3.4 kB view raw
1#ifndef _LINUX_KTHREAD_H 2#define _LINUX_KTHREAD_H 3/* Simple interface for creating and stopping kernel threads without mess. */ 4#include <linux/err.h> 5#include <linux/sched.h> 6 7/** 8 * kthread_create: create a kthread. 9 * @threadfn: the function to run until signal_pending(current). 10 * @data: data ptr for @threadfn. 11 * @namefmt: printf-style name for the thread. 12 * 13 * Description: This helper function creates and names a kernel 14 * thread. The thread will be stopped: use wake_up_process() to start 15 * it. See also kthread_run(), kthread_create_on_cpu(). 16 * 17 * When woken, the thread will run @threadfn() with @data as its 18 * argument. @threadfn can either call do_exit() directly if it is a 19 * standalone thread for which noone will call kthread_stop(), or 20 * return when 'kthread_should_stop()' is true (which means 21 * kthread_stop() has been called). The return value should be zero 22 * or a negative error number: it will be passed to kthread_stop(). 23 * 24 * Returns a task_struct or ERR_PTR(-ENOMEM). 25 */ 26struct task_struct *kthread_create(int (*threadfn)(void *data), 27 void *data, 28 const char namefmt[], ...); 29 30/** 31 * kthread_run: create and wake a thread. 32 * @threadfn: the function to run until signal_pending(current). 33 * @data: data ptr for @threadfn. 34 * @namefmt: printf-style name for the thread. 35 * 36 * Description: Convenient wrapper for kthread_create() followed by 37 * wake_up_process(). Returns the kthread, or ERR_PTR(-ENOMEM). */ 38#define kthread_run(threadfn, data, namefmt, ...) \ 39({ \ 40 struct task_struct *__k \ 41 = kthread_create(threadfn, data, namefmt, ## __VA_ARGS__); \ 42 if (!IS_ERR(__k)) \ 43 wake_up_process(__k); \ 44 __k; \ 45}) 46 47/** 48 * kthread_bind: bind a just-created kthread to a cpu. 49 * @k: thread created by kthread_create(). 50 * @cpu: cpu (might not be online, must be possible) for @k to run on. 51 * 52 * Description: This function is equivalent to set_cpus_allowed(), 53 * except that @cpu doesn't need to be online, and the thread must be 54 * stopped (ie. just returned from kthread_create(). 55 */ 56void kthread_bind(struct task_struct *k, unsigned int cpu); 57 58/** 59 * kthread_stop: stop a thread created by kthread_create(). 60 * @k: thread created by kthread_create(). 61 * 62 * Sets kthread_should_stop() for @k to return true, wakes it, and 63 * waits for it to exit. Your threadfn() must not call do_exit() 64 * itself if you use this function! This can also be called after 65 * kthread_create() instead of calling wake_up_process(): the thread 66 * will exit without calling threadfn(). 67 * 68 * Returns the result of threadfn(), or -EINTR if wake_up_process() 69 * was never called. */ 70int kthread_stop(struct task_struct *k); 71 72/** 73 * kthread_stop_sem: stop a thread created by kthread_create(). 74 * @k: thread created by kthread_create(). 75 * @s: semaphore that @k waits on while idle. 76 * 77 * Does essentially the same thing as kthread_stop() above, but wakes 78 * @k by calling up(@s). 79 * 80 * Returns the result of threadfn(), or -EINTR if wake_up_process() 81 * was never called. */ 82int kthread_stop_sem(struct task_struct *k, struct semaphore *s); 83 84/** 85 * kthread_should_stop: should this kthread return now? 86 * 87 * When someone calls kthread_stop on your kthread, it will be woken 88 * and this will return true. You should then return, and your return 89 * value will be passed through to kthread_stop(). 90 */ 91int kthread_should_stop(void); 92 93#endif /* _LINUX_KTHREAD_H */