linux/include/linux/kthread.h
<<
>>
Prefs
   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_should_stop: should this kthread return now?
  74 *
  75 * When someone calls kthread_stop on your kthread, it will be woken
  76 * and this will return true.  You should then return, and your return
  77 * value will be passed through to kthread_stop().
  78 */
  79int kthread_should_stop(void);
  80
  81#endif /* _LINUX_KTHREAD_H */
  82
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.