the helper macro kthread_run_on_cpu() inculdes kthread_create_on_cpu/wake_up_process(). In some cases, use kthread_run_on_cpu() directly instead of kthread_create_on_node/kthread_bind/wake_up_process() or kthread_create_on_cpu/wake_up_process() or kthreadd_create/kthread_bind/wake_up_process() to simplify the code. Signed-off-by: Cai Huoqing <caihuoqing@xxxxxxxxx> --- include/linux/kthread.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/include/linux/kthread.h b/include/linux/kthread.h index 346b0f269161..dfd125523aa9 100644 --- a/include/linux/kthread.h +++ b/include/linux/kthread.h @@ -56,6 +56,28 @@ bool kthread_is_per_cpu(struct task_struct *k); __k; \ }) +/** + * kthread_run_on_cpu - create and wake a cpu bound thread. + * @threadfn: the function to run until signal_pending(current). + * @data: data ptr for @threadfn. + * @cpu: The cpu on which the thread should be bound, + * @namefmt: printf-style name for the thread. Format is restricted + * to "name.*%u". Code fills in cpu number. + * + * Description: Convenient wrapper for kthread_create_on_node() + * followed by wake_up_process(). Returns the kthread or + * ERR_PTR(-ENOMEM). + */ +#define kthread_run_on_cpu(threadfn, data, cpu, namefmt) \ +({ \ + struct task_struct *__k \ + = kthread_create_on_cpu(threadfn, data, cpu_to_node(cpu), \ + namefmt); \ + if (!IS_ERR(__k)) \ + wake_up_process(__k); \ + __k; \ +}) + void free_kthread_struct(struct task_struct *k); void kthread_bind(struct task_struct *k, unsigned int cpu); void kthread_bind_mask(struct task_struct *k, const struct cpumask *mask); -- 2.25.1