Linux Audio

Check our new training course

Loading...
v3.15
  1/* Kernel thread helper functions.
  2 *   Copyright (C) 2004 IBM Corporation, Rusty Russell.
  3 *
  4 * Creation is done via kthreadd, so that we get a clean environment
  5 * even if we're invoked from userspace (think modprobe, hotplug cpu,
  6 * etc.).
  7 */
  8#include <linux/sched.h>
  9#include <linux/kthread.h>
 10#include <linux/completion.h>
 11#include <linux/err.h>
 12#include <linux/cpuset.h>
 13#include <linux/unistd.h>
 14#include <linux/file.h>
 15#include <linux/export.h>
 16#include <linux/mutex.h>
 17#include <linux/slab.h>
 18#include <linux/freezer.h>
 19#include <linux/ptrace.h>
 20#include <linux/uaccess.h>
 21#include <trace/events/sched.h>
 22
 23static DEFINE_SPINLOCK(kthread_create_lock);
 24static LIST_HEAD(kthread_create_list);
 25struct task_struct *kthreadd_task;
 26
 27struct kthread_create_info
 28{
 29	/* Information passed to kthread() from kthreadd. */
 30	int (*threadfn)(void *data);
 31	void *data;
 32	int node;
 33
 34	/* Result passed back to kthread_create() from kthreadd. */
 35	struct task_struct *result;
 36	struct completion *done;
 37
 38	struct list_head list;
 39};
 40
 41struct kthread {
 42	unsigned long flags;
 43	unsigned int cpu;
 44	void *data;
 45	struct completion parked;
 46	struct completion exited;
 47};
 48
 49enum KTHREAD_BITS {
 50	KTHREAD_IS_PER_CPU = 0,
 51	KTHREAD_SHOULD_STOP,
 52	KTHREAD_SHOULD_PARK,
 53	KTHREAD_IS_PARKED,
 54};
 55
 56#define __to_kthread(vfork)	\
 57	container_of(vfork, struct kthread, exited)
 58
 59static inline struct kthread *to_kthread(struct task_struct *k)
 60{
 61	return __to_kthread(k->vfork_done);
 62}
 63
 64static struct kthread *to_live_kthread(struct task_struct *k)
 65{
 66	struct completion *vfork = ACCESS_ONCE(k->vfork_done);
 67	if (likely(vfork))
 68		return __to_kthread(vfork);
 69	return NULL;
 70}
 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 */
 79bool kthread_should_stop(void)
 80{
 81	return test_bit(KTHREAD_SHOULD_STOP, &to_kthread(current)->flags);
 82}
 83EXPORT_SYMBOL(kthread_should_stop);
 84
 85/**
 86 * kthread_should_park - should this kthread park now?
 87 *
 88 * When someone calls kthread_park() on your kthread, it will be woken
 89 * and this will return true.  You should then do the necessary
 90 * cleanup and call kthread_parkme()
 91 *
 92 * Similar to kthread_should_stop(), but this keeps the thread alive
 93 * and in a park position. kthread_unpark() "restarts" the thread and
 94 * calls the thread function again.
 95 */
 96bool kthread_should_park(void)
 97{
 98	return test_bit(KTHREAD_SHOULD_PARK, &to_kthread(current)->flags);
 99}
 
100
101/**
102 * kthread_freezable_should_stop - should this freezable kthread return now?
103 * @was_frozen: optional out parameter, indicates whether %current was frozen
104 *
105 * kthread_should_stop() for freezable kthreads, which will enter
106 * refrigerator if necessary.  This function is safe from kthread_stop() /
107 * freezer deadlock and freezable kthreads should use this function instead
108 * of calling try_to_freeze() directly.
109 */
110bool kthread_freezable_should_stop(bool *was_frozen)
111{
112	bool frozen = false;
113
114	might_sleep();
115
116	if (unlikely(freezing(current)))
117		frozen = __refrigerator(true);
118
119	if (was_frozen)
120		*was_frozen = frozen;
121
122	return kthread_should_stop();
123}
124EXPORT_SYMBOL_GPL(kthread_freezable_should_stop);
125
126/**
127 * kthread_data - return data value specified on kthread creation
128 * @task: kthread task in question
129 *
130 * Return the data value specified when kthread @task was created.
131 * The caller is responsible for ensuring the validity of @task when
132 * calling this function.
133 */
134void *kthread_data(struct task_struct *task)
135{
136	return to_kthread(task)->data;
137}
138
139/**
140 * probe_kthread_data - speculative version of kthread_data()
141 * @task: possible kthread task in question
142 *
143 * @task could be a kthread task.  Return the data value specified when it
144 * was created if accessible.  If @task isn't a kthread task or its data is
145 * inaccessible for any reason, %NULL is returned.  This function requires
146 * that @task itself is safe to dereference.
147 */
148void *probe_kthread_data(struct task_struct *task)
149{
150	struct kthread *kthread = to_kthread(task);
151	void *data = NULL;
152
153	probe_kernel_read(&data, &kthread->data, sizeof(data));
154	return data;
155}
156
157static void __kthread_parkme(struct kthread *self)
158{
159	__set_current_state(TASK_PARKED);
160	while (test_bit(KTHREAD_SHOULD_PARK, &self->flags)) {
161		if (!test_and_set_bit(KTHREAD_IS_PARKED, &self->flags))
162			complete(&self->parked);
163		schedule();
164		__set_current_state(TASK_PARKED);
165	}
166	clear_bit(KTHREAD_IS_PARKED, &self->flags);
167	__set_current_state(TASK_RUNNING);
168}
169
170void kthread_parkme(void)
171{
172	__kthread_parkme(to_kthread(current));
173}
 
174
175static int kthread(void *_create)
176{
177	/* Copy data: it's on kthread's stack */
178	struct kthread_create_info *create = _create;
179	int (*threadfn)(void *data) = create->threadfn;
180	void *data = create->data;
181	struct completion *done;
182	struct kthread self;
183	int ret;
184
185	self.flags = 0;
186	self.data = data;
187	init_completion(&self.exited);
188	init_completion(&self.parked);
189	current->vfork_done = &self.exited;
190
191	/* If user was SIGKILLed, I release the structure. */
192	done = xchg(&create->done, NULL);
193	if (!done) {
194		kfree(create);
195		do_exit(-EINTR);
196	}
197	/* OK, tell user we're spawned, wait for stop or wakeup */
198	__set_current_state(TASK_UNINTERRUPTIBLE);
199	create->result = current;
200	complete(done);
201	schedule();
202
203	ret = -EINTR;
204
205	if (!test_bit(KTHREAD_SHOULD_STOP, &self.flags)) {
206		__kthread_parkme(&self);
207		ret = threadfn(data);
208	}
209	/* we can't just return, we must preserve "self" on stack */
210	do_exit(ret);
211}
212
213/* called from do_fork() to get node information for about to be created task */
214int tsk_fork_get_node(struct task_struct *tsk)
215{
216#ifdef CONFIG_NUMA
217	if (tsk == kthreadd_task)
218		return tsk->pref_node_fork;
219#endif
220	return NUMA_NO_NODE;
221}
222
223static void create_kthread(struct kthread_create_info *create)
224{
225	int pid;
226
227#ifdef CONFIG_NUMA
228	current->pref_node_fork = create->node;
229#endif
230	/* We want our own signal handler (we take no signals by default). */
231	pid = kernel_thread(kthread, create, CLONE_FS | CLONE_FILES | SIGCHLD);
232	if (pid < 0) {
233		/* If user was SIGKILLed, I release the structure. */
234		struct completion *done = xchg(&create->done, NULL);
235
236		if (!done) {
237			kfree(create);
238			return;
239		}
240		create->result = ERR_PTR(pid);
241		complete(done);
242	}
243}
244
245/**
246 * kthread_create_on_node - create a kthread.
247 * @threadfn: the function to run until signal_pending(current).
248 * @data: data ptr for @threadfn.
249 * @node: memory node number.
250 * @namefmt: printf-style name for the thread.
251 *
252 * Description: This helper function creates and names a kernel
253 * thread.  The thread will be stopped: use wake_up_process() to start
254 * it.  See also kthread_run().
 
255 *
256 * If thread is going to be bound on a particular cpu, give its node
257 * in @node, to get NUMA affinity for kthread stack, or else give -1.
258 * When woken, the thread will run @threadfn() with @data as its
259 * argument. @threadfn() can either call do_exit() directly if it is a
260 * standalone thread for which no one will call kthread_stop(), or
261 * return when 'kthread_should_stop()' is true (which means
262 * kthread_stop() has been called).  The return value should be zero
263 * or a negative error number; it will be passed to kthread_stop().
264 *
265 * Returns a task_struct or ERR_PTR(-ENOMEM).
266 */
267struct task_struct *kthread_create_on_node(int (*threadfn)(void *data),
268					   void *data, int node,
269					   const char namefmt[],
270					   ...)
271{
272	DECLARE_COMPLETION_ONSTACK(done);
273	struct task_struct *task;
274	struct kthread_create_info *create = kmalloc(sizeof(*create),
275						     GFP_KERNEL);
276
277	if (!create)
278		return ERR_PTR(-ENOMEM);
279	create->threadfn = threadfn;
280	create->data = data;
281	create->node = node;
282	create->done = &done;
283
284	spin_lock(&kthread_create_lock);
285	list_add_tail(&create->list, &kthread_create_list);
286	spin_unlock(&kthread_create_lock);
287
288	wake_up_process(kthreadd_task);
289	/*
290	 * Wait for completion in killable state, for I might be chosen by
291	 * the OOM killer while kthreadd is trying to allocate memory for
292	 * new kernel thread.
293	 */
294	if (unlikely(wait_for_completion_killable(&done))) {
295		/*
296		 * If I was SIGKILLed before kthreadd (or new kernel thread)
297		 * calls complete(), leave the cleanup of this structure to
298		 * that thread.
299		 */
300		if (xchg(&create->done, NULL))
301			return ERR_PTR(-ENOMEM);
302		/*
303		 * kthreadd (or new kernel thread) will call complete()
304		 * shortly.
305		 */
306		wait_for_completion(&done);
307	}
308	task = create->result;
309	if (!IS_ERR(task)) {
310		static const struct sched_param param = { .sched_priority = 0 };
311		va_list args;
312
313		va_start(args, namefmt);
314		vsnprintf(task->comm, sizeof(task->comm), namefmt, args);
315		va_end(args);
316		/*
317		 * root may have changed our (kthreadd's) priority or CPU mask.
318		 * The kernel thread should not inherit these properties.
319		 */
320		sched_setscheduler_nocheck(task, SCHED_NORMAL, &param);
321		set_cpus_allowed_ptr(task, cpu_all_mask);
322	}
323	kfree(create);
324	return task;
325}
326EXPORT_SYMBOL(kthread_create_on_node);
327
328static void __kthread_bind(struct task_struct *p, unsigned int cpu, long state)
329{
330	/* Must have done schedule() in kthread() before we set_task_cpu */
 
331	if (!wait_task_inactive(p, state)) {
332		WARN_ON(1);
333		return;
334	}
 
335	/* It's safe because the task is inactive. */
336	do_set_cpus_allowed(p, cpumask_of(cpu));
 
337	p->flags |= PF_NO_SETAFFINITY;
 
 
 
 
 
 
 
 
 
 
 
338}
339
340/**
341 * kthread_bind - bind a just-created kthread to a cpu.
342 * @p: thread created by kthread_create().
343 * @cpu: cpu (might not be online, must be possible) for @k to run on.
344 *
345 * Description: This function is equivalent to set_cpus_allowed(),
346 * except that @cpu doesn't need to be online, and the thread must be
347 * stopped (i.e., just returned from kthread_create()).
348 */
349void kthread_bind(struct task_struct *p, unsigned int cpu)
350{
351	__kthread_bind(p, cpu, TASK_UNINTERRUPTIBLE);
352}
353EXPORT_SYMBOL(kthread_bind);
354
355/**
356 * kthread_create_on_cpu - Create a cpu bound kthread
357 * @threadfn: the function to run until signal_pending(current).
358 * @data: data ptr for @threadfn.
359 * @cpu: The cpu on which the thread should be bound,
360 * @namefmt: printf-style name for the thread. Format is restricted
361 *	     to "name.*%u". Code fills in cpu number.
362 *
363 * Description: This helper function creates and names a kernel thread
364 * The thread will be woken and put into park mode.
365 */
366struct task_struct *kthread_create_on_cpu(int (*threadfn)(void *data),
367					  void *data, unsigned int cpu,
368					  const char *namefmt)
369{
370	struct task_struct *p;
371
372	p = kthread_create_on_node(threadfn, data, cpu_to_mem(cpu), namefmt,
373				   cpu);
374	if (IS_ERR(p))
375		return p;
376	set_bit(KTHREAD_IS_PER_CPU, &to_kthread(p)->flags);
377	to_kthread(p)->cpu = cpu;
378	/* Park the thread to get it out of TASK_UNINTERRUPTIBLE state */
379	kthread_park(p);
380	return p;
381}
382
383static void __kthread_unpark(struct task_struct *k, struct kthread *kthread)
384{
385	clear_bit(KTHREAD_SHOULD_PARK, &kthread->flags);
386	/*
387	 * We clear the IS_PARKED bit here as we don't wait
388	 * until the task has left the park code. So if we'd
389	 * park before that happens we'd see the IS_PARKED bit
390	 * which might be about to be cleared.
391	 */
392	if (test_and_clear_bit(KTHREAD_IS_PARKED, &kthread->flags)) {
393		if (test_bit(KTHREAD_IS_PER_CPU, &kthread->flags))
394			__kthread_bind(k, kthread->cpu, TASK_PARKED);
395		wake_up_state(k, TASK_PARKED);
396	}
397}
398
399/**
400 * kthread_unpark - unpark a thread created by kthread_create().
401 * @k:		thread created by kthread_create().
402 *
403 * Sets kthread_should_park() for @k to return false, wakes it, and
404 * waits for it to return. If the thread is marked percpu then its
405 * bound to the cpu again.
406 */
407void kthread_unpark(struct task_struct *k)
408{
409	struct kthread *kthread = to_live_kthread(k);
410
411	if (kthread)
412		__kthread_unpark(k, kthread);
413}
 
414
415/**
416 * kthread_park - park a thread created by kthread_create().
417 * @k: thread created by kthread_create().
418 *
419 * Sets kthread_should_park() for @k to return true, wakes it, and
420 * waits for it to return. This can also be called after kthread_create()
421 * instead of calling wake_up_process(): the thread will park without
422 * calling threadfn().
423 *
424 * Returns 0 if the thread is parked, -ENOSYS if the thread exited.
425 * If called by the kthread itself just the park bit is set.
426 */
427int kthread_park(struct task_struct *k)
428{
429	struct kthread *kthread = to_live_kthread(k);
430	int ret = -ENOSYS;
431
432	if (kthread) {
433		if (!test_bit(KTHREAD_IS_PARKED, &kthread->flags)) {
434			set_bit(KTHREAD_SHOULD_PARK, &kthread->flags);
435			if (k != current) {
436				wake_up_process(k);
437				wait_for_completion(&kthread->parked);
438			}
439		}
440		ret = 0;
441	}
442	return ret;
443}
 
444
445/**
446 * kthread_stop - stop a thread created by kthread_create().
447 * @k: thread created by kthread_create().
448 *
449 * Sets kthread_should_stop() for @k to return true, wakes it, and
450 * waits for it to exit. This can also be called after kthread_create()
451 * instead of calling wake_up_process(): the thread will exit without
452 * calling threadfn().
453 *
454 * If threadfn() may call do_exit() itself, the caller must ensure
455 * task_struct can't go away.
456 *
457 * Returns the result of threadfn(), or %-EINTR if wake_up_process()
458 * was never called.
459 */
460int kthread_stop(struct task_struct *k)
461{
462	struct kthread *kthread;
463	int ret;
464
465	trace_sched_kthread_stop(k);
466
467	get_task_struct(k);
468	kthread = to_live_kthread(k);
469	if (kthread) {
470		set_bit(KTHREAD_SHOULD_STOP, &kthread->flags);
471		__kthread_unpark(k, kthread);
472		wake_up_process(k);
473		wait_for_completion(&kthread->exited);
474	}
475	ret = k->exit_code;
476	put_task_struct(k);
477
478	trace_sched_kthread_stop_ret(ret);
479	return ret;
480}
481EXPORT_SYMBOL(kthread_stop);
482
483int kthreadd(void *unused)
484{
485	struct task_struct *tsk = current;
486
487	/* Setup a clean context for our children to inherit. */
488	set_task_comm(tsk, "kthreadd");
489	ignore_signals(tsk);
490	set_cpus_allowed_ptr(tsk, cpu_all_mask);
491	set_mems_allowed(node_states[N_MEMORY]);
492
493	current->flags |= PF_NOFREEZE;
494
495	for (;;) {
496		set_current_state(TASK_INTERRUPTIBLE);
497		if (list_empty(&kthread_create_list))
498			schedule();
499		__set_current_state(TASK_RUNNING);
500
501		spin_lock(&kthread_create_lock);
502		while (!list_empty(&kthread_create_list)) {
503			struct kthread_create_info *create;
504
505			create = list_entry(kthread_create_list.next,
506					    struct kthread_create_info, list);
507			list_del_init(&create->list);
508			spin_unlock(&kthread_create_lock);
509
510			create_kthread(create);
511
512			spin_lock(&kthread_create_lock);
513		}
514		spin_unlock(&kthread_create_lock);
515	}
516
517	return 0;
518}
519
520void __init_kthread_worker(struct kthread_worker *worker,
521				const char *name,
522				struct lock_class_key *key)
523{
524	spin_lock_init(&worker->lock);
525	lockdep_set_class_and_name(&worker->lock, key, name);
526	INIT_LIST_HEAD(&worker->work_list);
527	worker->task = NULL;
528}
529EXPORT_SYMBOL_GPL(__init_kthread_worker);
530
531/**
532 * kthread_worker_fn - kthread function to process kthread_worker
533 * @worker_ptr: pointer to initialized kthread_worker
534 *
535 * This function can be used as @threadfn to kthread_create() or
536 * kthread_run() with @worker_ptr argument pointing to an initialized
537 * kthread_worker.  The started kthread will process work_list until
538 * the it is stopped with kthread_stop().  A kthread can also call
539 * this function directly after extra initialization.
540 *
541 * Different kthreads can be used for the same kthread_worker as long
542 * as there's only one kthread attached to it at any given time.  A
543 * kthread_worker without an attached kthread simply collects queued
544 * kthread_works.
545 */
546int kthread_worker_fn(void *worker_ptr)
547{
548	struct kthread_worker *worker = worker_ptr;
549	struct kthread_work *work;
550
551	WARN_ON(worker->task);
552	worker->task = current;
553repeat:
554	set_current_state(TASK_INTERRUPTIBLE);	/* mb paired w/ kthread_stop */
555
556	if (kthread_should_stop()) {
557		__set_current_state(TASK_RUNNING);
558		spin_lock_irq(&worker->lock);
559		worker->task = NULL;
560		spin_unlock_irq(&worker->lock);
561		return 0;
562	}
563
564	work = NULL;
565	spin_lock_irq(&worker->lock);
566	if (!list_empty(&worker->work_list)) {
567		work = list_first_entry(&worker->work_list,
568					struct kthread_work, node);
569		list_del_init(&work->node);
570	}
571	worker->current_work = work;
572	spin_unlock_irq(&worker->lock);
573
574	if (work) {
575		__set_current_state(TASK_RUNNING);
576		work->func(work);
577	} else if (!freezing(current))
578		schedule();
579
580	try_to_freeze();
581	goto repeat;
582}
583EXPORT_SYMBOL_GPL(kthread_worker_fn);
584
585/* insert @work before @pos in @worker */
586static void insert_kthread_work(struct kthread_worker *worker,
587			       struct kthread_work *work,
588			       struct list_head *pos)
589{
590	lockdep_assert_held(&worker->lock);
591
592	list_add_tail(&work->node, pos);
593	work->worker = worker;
594	if (likely(worker->task))
595		wake_up_process(worker->task);
596}
597
598/**
599 * queue_kthread_work - queue a kthread_work
600 * @worker: target kthread_worker
601 * @work: kthread_work to queue
602 *
603 * Queue @work to work processor @task for async execution.  @task
604 * must have been created with kthread_worker_create().  Returns %true
605 * if @work was successfully queued, %false if it was already pending.
606 */
607bool queue_kthread_work(struct kthread_worker *worker,
608			struct kthread_work *work)
609{
610	bool ret = false;
611	unsigned long flags;
612
613	spin_lock_irqsave(&worker->lock, flags);
614	if (list_empty(&work->node)) {
615		insert_kthread_work(worker, work, &worker->work_list);
616		ret = true;
617	}
618	spin_unlock_irqrestore(&worker->lock, flags);
619	return ret;
620}
621EXPORT_SYMBOL_GPL(queue_kthread_work);
622
623struct kthread_flush_work {
624	struct kthread_work	work;
625	struct completion	done;
626};
627
628static void kthread_flush_work_fn(struct kthread_work *work)
629{
630	struct kthread_flush_work *fwork =
631		container_of(work, struct kthread_flush_work, work);
632	complete(&fwork->done);
633}
634
635/**
636 * flush_kthread_work - flush a kthread_work
637 * @work: work to flush
638 *
639 * If @work is queued or executing, wait for it to finish execution.
640 */
641void flush_kthread_work(struct kthread_work *work)
642{
643	struct kthread_flush_work fwork = {
644		KTHREAD_WORK_INIT(fwork.work, kthread_flush_work_fn),
645		COMPLETION_INITIALIZER_ONSTACK(fwork.done),
646	};
647	struct kthread_worker *worker;
648	bool noop = false;
649
650retry:
651	worker = work->worker;
652	if (!worker)
653		return;
654
655	spin_lock_irq(&worker->lock);
656	if (work->worker != worker) {
657		spin_unlock_irq(&worker->lock);
658		goto retry;
659	}
660
661	if (!list_empty(&work->node))
662		insert_kthread_work(worker, &fwork.work, work->node.next);
663	else if (worker->current_work == work)
664		insert_kthread_work(worker, &fwork.work, worker->work_list.next);
665	else
666		noop = true;
667
668	spin_unlock_irq(&worker->lock);
669
670	if (!noop)
671		wait_for_completion(&fwork.done);
672}
673EXPORT_SYMBOL_GPL(flush_kthread_work);
674
675/**
676 * flush_kthread_worker - flush all current works on a kthread_worker
677 * @worker: worker to flush
678 *
679 * Wait until all currently executing or pending works on @worker are
680 * finished.
681 */
682void flush_kthread_worker(struct kthread_worker *worker)
683{
684	struct kthread_flush_work fwork = {
685		KTHREAD_WORK_INIT(fwork.work, kthread_flush_work_fn),
686		COMPLETION_INITIALIZER_ONSTACK(fwork.done),
687	};
688
689	queue_kthread_work(worker, &fwork.work);
690	wait_for_completion(&fwork.done);
691}
692EXPORT_SYMBOL_GPL(flush_kthread_worker);
v4.6
  1/* Kernel thread helper functions.
  2 *   Copyright (C) 2004 IBM Corporation, Rusty Russell.
  3 *
  4 * Creation is done via kthreadd, so that we get a clean environment
  5 * even if we're invoked from userspace (think modprobe, hotplug cpu,
  6 * etc.).
  7 */
  8#include <linux/sched.h>
  9#include <linux/kthread.h>
 10#include <linux/completion.h>
 11#include <linux/err.h>
 12#include <linux/cpuset.h>
 13#include <linux/unistd.h>
 14#include <linux/file.h>
 15#include <linux/export.h>
 16#include <linux/mutex.h>
 17#include <linux/slab.h>
 18#include <linux/freezer.h>
 19#include <linux/ptrace.h>
 20#include <linux/uaccess.h>
 21#include <trace/events/sched.h>
 22
 23static DEFINE_SPINLOCK(kthread_create_lock);
 24static LIST_HEAD(kthread_create_list);
 25struct task_struct *kthreadd_task;
 26
 27struct kthread_create_info
 28{
 29	/* Information passed to kthread() from kthreadd. */
 30	int (*threadfn)(void *data);
 31	void *data;
 32	int node;
 33
 34	/* Result passed back to kthread_create() from kthreadd. */
 35	struct task_struct *result;
 36	struct completion *done;
 37
 38	struct list_head list;
 39};
 40
 41struct kthread {
 42	unsigned long flags;
 43	unsigned int cpu;
 44	void *data;
 45	struct completion parked;
 46	struct completion exited;
 47};
 48
 49enum KTHREAD_BITS {
 50	KTHREAD_IS_PER_CPU = 0,
 51	KTHREAD_SHOULD_STOP,
 52	KTHREAD_SHOULD_PARK,
 53	KTHREAD_IS_PARKED,
 54};
 55
 56#define __to_kthread(vfork)	\
 57	container_of(vfork, struct kthread, exited)
 58
 59static inline struct kthread *to_kthread(struct task_struct *k)
 60{
 61	return __to_kthread(k->vfork_done);
 62}
 63
 64static struct kthread *to_live_kthread(struct task_struct *k)
 65{
 66	struct completion *vfork = ACCESS_ONCE(k->vfork_done);
 67	if (likely(vfork))
 68		return __to_kthread(vfork);
 69	return NULL;
 70}
 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 */
 79bool kthread_should_stop(void)
 80{
 81	return test_bit(KTHREAD_SHOULD_STOP, &to_kthread(current)->flags);
 82}
 83EXPORT_SYMBOL(kthread_should_stop);
 84
 85/**
 86 * kthread_should_park - should this kthread park now?
 87 *
 88 * When someone calls kthread_park() on your kthread, it will be woken
 89 * and this will return true.  You should then do the necessary
 90 * cleanup and call kthread_parkme()
 91 *
 92 * Similar to kthread_should_stop(), but this keeps the thread alive
 93 * and in a park position. kthread_unpark() "restarts" the thread and
 94 * calls the thread function again.
 95 */
 96bool kthread_should_park(void)
 97{
 98	return test_bit(KTHREAD_SHOULD_PARK, &to_kthread(current)->flags);
 99}
100EXPORT_SYMBOL_GPL(kthread_should_park);
101
102/**
103 * kthread_freezable_should_stop - should this freezable kthread return now?
104 * @was_frozen: optional out parameter, indicates whether %current was frozen
105 *
106 * kthread_should_stop() for freezable kthreads, which will enter
107 * refrigerator if necessary.  This function is safe from kthread_stop() /
108 * freezer deadlock and freezable kthreads should use this function instead
109 * of calling try_to_freeze() directly.
110 */
111bool kthread_freezable_should_stop(bool *was_frozen)
112{
113	bool frozen = false;
114
115	might_sleep();
116
117	if (unlikely(freezing(current)))
118		frozen = __refrigerator(true);
119
120	if (was_frozen)
121		*was_frozen = frozen;
122
123	return kthread_should_stop();
124}
125EXPORT_SYMBOL_GPL(kthread_freezable_should_stop);
126
127/**
128 * kthread_data - return data value specified on kthread creation
129 * @task: kthread task in question
130 *
131 * Return the data value specified when kthread @task was created.
132 * The caller is responsible for ensuring the validity of @task when
133 * calling this function.
134 */
135void *kthread_data(struct task_struct *task)
136{
137	return to_kthread(task)->data;
138}
139
140/**
141 * probe_kthread_data - speculative version of kthread_data()
142 * @task: possible kthread task in question
143 *
144 * @task could be a kthread task.  Return the data value specified when it
145 * was created if accessible.  If @task isn't a kthread task or its data is
146 * inaccessible for any reason, %NULL is returned.  This function requires
147 * that @task itself is safe to dereference.
148 */
149void *probe_kthread_data(struct task_struct *task)
150{
151	struct kthread *kthread = to_kthread(task);
152	void *data = NULL;
153
154	probe_kernel_read(&data, &kthread->data, sizeof(data));
155	return data;
156}
157
158static void __kthread_parkme(struct kthread *self)
159{
160	__set_current_state(TASK_PARKED);
161	while (test_bit(KTHREAD_SHOULD_PARK, &self->flags)) {
162		if (!test_and_set_bit(KTHREAD_IS_PARKED, &self->flags))
163			complete(&self->parked);
164		schedule();
165		__set_current_state(TASK_PARKED);
166	}
167	clear_bit(KTHREAD_IS_PARKED, &self->flags);
168	__set_current_state(TASK_RUNNING);
169}
170
171void kthread_parkme(void)
172{
173	__kthread_parkme(to_kthread(current));
174}
175EXPORT_SYMBOL_GPL(kthread_parkme);
176
177static int kthread(void *_create)
178{
179	/* Copy data: it's on kthread's stack */
180	struct kthread_create_info *create = _create;
181	int (*threadfn)(void *data) = create->threadfn;
182	void *data = create->data;
183	struct completion *done;
184	struct kthread self;
185	int ret;
186
187	self.flags = 0;
188	self.data = data;
189	init_completion(&self.exited);
190	init_completion(&self.parked);
191	current->vfork_done = &self.exited;
192
193	/* If user was SIGKILLed, I release the structure. */
194	done = xchg(&create->done, NULL);
195	if (!done) {
196		kfree(create);
197		do_exit(-EINTR);
198	}
199	/* OK, tell user we're spawned, wait for stop or wakeup */
200	__set_current_state(TASK_UNINTERRUPTIBLE);
201	create->result = current;
202	complete(done);
203	schedule();
204
205	ret = -EINTR;
206
207	if (!test_bit(KTHREAD_SHOULD_STOP, &self.flags)) {
208		__kthread_parkme(&self);
209		ret = threadfn(data);
210	}
211	/* we can't just return, we must preserve "self" on stack */
212	do_exit(ret);
213}
214
215/* called from do_fork() to get node information for about to be created task */
216int tsk_fork_get_node(struct task_struct *tsk)
217{
218#ifdef CONFIG_NUMA
219	if (tsk == kthreadd_task)
220		return tsk->pref_node_fork;
221#endif
222	return NUMA_NO_NODE;
223}
224
225static void create_kthread(struct kthread_create_info *create)
226{
227	int pid;
228
229#ifdef CONFIG_NUMA
230	current->pref_node_fork = create->node;
231#endif
232	/* We want our own signal handler (we take no signals by default). */
233	pid = kernel_thread(kthread, create, CLONE_FS | CLONE_FILES | SIGCHLD);
234	if (pid < 0) {
235		/* If user was SIGKILLed, I release the structure. */
236		struct completion *done = xchg(&create->done, NULL);
237
238		if (!done) {
239			kfree(create);
240			return;
241		}
242		create->result = ERR_PTR(pid);
243		complete(done);
244	}
245}
246
247/**
248 * kthread_create_on_node - create a kthread.
249 * @threadfn: the function to run until signal_pending(current).
250 * @data: data ptr for @threadfn.
251 * @node: task and thread structures for the thread are allocated on this node
252 * @namefmt: printf-style name for the thread.
253 *
254 * Description: This helper function creates and names a kernel
255 * thread.  The thread will be stopped: use wake_up_process() to start
256 * it.  See also kthread_run().  The new thread has SCHED_NORMAL policy and
257 * is affine to all CPUs.
258 *
259 * If thread is going to be bound on a particular cpu, give its node
260 * in @node, to get NUMA affinity for kthread stack, or else give NUMA_NO_NODE.
261 * When woken, the thread will run @threadfn() with @data as its
262 * argument. @threadfn() can either call do_exit() directly if it is a
263 * standalone thread for which no one will call kthread_stop(), or
264 * return when 'kthread_should_stop()' is true (which means
265 * kthread_stop() has been called).  The return value should be zero
266 * or a negative error number; it will be passed to kthread_stop().
267 *
268 * Returns a task_struct or ERR_PTR(-ENOMEM) or ERR_PTR(-EINTR).
269 */
270struct task_struct *kthread_create_on_node(int (*threadfn)(void *data),
271					   void *data, int node,
272					   const char namefmt[],
273					   ...)
274{
275	DECLARE_COMPLETION_ONSTACK(done);
276	struct task_struct *task;
277	struct kthread_create_info *create = kmalloc(sizeof(*create),
278						     GFP_KERNEL);
279
280	if (!create)
281		return ERR_PTR(-ENOMEM);
282	create->threadfn = threadfn;
283	create->data = data;
284	create->node = node;
285	create->done = &done;
286
287	spin_lock(&kthread_create_lock);
288	list_add_tail(&create->list, &kthread_create_list);
289	spin_unlock(&kthread_create_lock);
290
291	wake_up_process(kthreadd_task);
292	/*
293	 * Wait for completion in killable state, for I might be chosen by
294	 * the OOM killer while kthreadd is trying to allocate memory for
295	 * new kernel thread.
296	 */
297	if (unlikely(wait_for_completion_killable(&done))) {
298		/*
299		 * If I was SIGKILLed before kthreadd (or new kernel thread)
300		 * calls complete(), leave the cleanup of this structure to
301		 * that thread.
302		 */
303		if (xchg(&create->done, NULL))
304			return ERR_PTR(-EINTR);
305		/*
306		 * kthreadd (or new kernel thread) will call complete()
307		 * shortly.
308		 */
309		wait_for_completion(&done);
310	}
311	task = create->result;
312	if (!IS_ERR(task)) {
313		static const struct sched_param param = { .sched_priority = 0 };
314		va_list args;
315
316		va_start(args, namefmt);
317		vsnprintf(task->comm, sizeof(task->comm), namefmt, args);
318		va_end(args);
319		/*
320		 * root may have changed our (kthreadd's) priority or CPU mask.
321		 * The kernel thread should not inherit these properties.
322		 */
323		sched_setscheduler_nocheck(task, SCHED_NORMAL, &param);
324		set_cpus_allowed_ptr(task, cpu_all_mask);
325	}
326	kfree(create);
327	return task;
328}
329EXPORT_SYMBOL(kthread_create_on_node);
330
331static void __kthread_bind_mask(struct task_struct *p, const struct cpumask *mask, long state)
332{
333	unsigned long flags;
334
335	if (!wait_task_inactive(p, state)) {
336		WARN_ON(1);
337		return;
338	}
339
340	/* It's safe because the task is inactive. */
341	raw_spin_lock_irqsave(&p->pi_lock, flags);
342	do_set_cpus_allowed(p, mask);
343	p->flags |= PF_NO_SETAFFINITY;
344	raw_spin_unlock_irqrestore(&p->pi_lock, flags);
345}
346
347static void __kthread_bind(struct task_struct *p, unsigned int cpu, long state)
348{
349	__kthread_bind_mask(p, cpumask_of(cpu), state);
350}
351
352void kthread_bind_mask(struct task_struct *p, const struct cpumask *mask)
353{
354	__kthread_bind_mask(p, mask, TASK_UNINTERRUPTIBLE);
355}
356
357/**
358 * kthread_bind - bind a just-created kthread to a cpu.
359 * @p: thread created by kthread_create().
360 * @cpu: cpu (might not be online, must be possible) for @k to run on.
361 *
362 * Description: This function is equivalent to set_cpus_allowed(),
363 * except that @cpu doesn't need to be online, and the thread must be
364 * stopped (i.e., just returned from kthread_create()).
365 */
366void kthread_bind(struct task_struct *p, unsigned int cpu)
367{
368	__kthread_bind(p, cpu, TASK_UNINTERRUPTIBLE);
369}
370EXPORT_SYMBOL(kthread_bind);
371
372/**
373 * kthread_create_on_cpu - Create a cpu bound kthread
374 * @threadfn: the function to run until signal_pending(current).
375 * @data: data ptr for @threadfn.
376 * @cpu: The cpu on which the thread should be bound,
377 * @namefmt: printf-style name for the thread. Format is restricted
378 *	     to "name.*%u". Code fills in cpu number.
379 *
380 * Description: This helper function creates and names a kernel thread
381 * The thread will be woken and put into park mode.
382 */
383struct task_struct *kthread_create_on_cpu(int (*threadfn)(void *data),
384					  void *data, unsigned int cpu,
385					  const char *namefmt)
386{
387	struct task_struct *p;
388
389	p = kthread_create_on_node(threadfn, data, cpu_to_node(cpu), namefmt,
390				   cpu);
391	if (IS_ERR(p))
392		return p;
393	set_bit(KTHREAD_IS_PER_CPU, &to_kthread(p)->flags);
394	to_kthread(p)->cpu = cpu;
395	/* Park the thread to get it out of TASK_UNINTERRUPTIBLE state */
396	kthread_park(p);
397	return p;
398}
399
400static void __kthread_unpark(struct task_struct *k, struct kthread *kthread)
401{
402	clear_bit(KTHREAD_SHOULD_PARK, &kthread->flags);
403	/*
404	 * We clear the IS_PARKED bit here as we don't wait
405	 * until the task has left the park code. So if we'd
406	 * park before that happens we'd see the IS_PARKED bit
407	 * which might be about to be cleared.
408	 */
409	if (test_and_clear_bit(KTHREAD_IS_PARKED, &kthread->flags)) {
410		if (test_bit(KTHREAD_IS_PER_CPU, &kthread->flags))
411			__kthread_bind(k, kthread->cpu, TASK_PARKED);
412		wake_up_state(k, TASK_PARKED);
413	}
414}
415
416/**
417 * kthread_unpark - unpark a thread created by kthread_create().
418 * @k:		thread created by kthread_create().
419 *
420 * Sets kthread_should_park() for @k to return false, wakes it, and
421 * waits for it to return. If the thread is marked percpu then its
422 * bound to the cpu again.
423 */
424void kthread_unpark(struct task_struct *k)
425{
426	struct kthread *kthread = to_live_kthread(k);
427
428	if (kthread)
429		__kthread_unpark(k, kthread);
430}
431EXPORT_SYMBOL_GPL(kthread_unpark);
432
433/**
434 * kthread_park - park a thread created by kthread_create().
435 * @k: thread created by kthread_create().
436 *
437 * Sets kthread_should_park() for @k to return true, wakes it, and
438 * waits for it to return. This can also be called after kthread_create()
439 * instead of calling wake_up_process(): the thread will park without
440 * calling threadfn().
441 *
442 * Returns 0 if the thread is parked, -ENOSYS if the thread exited.
443 * If called by the kthread itself just the park bit is set.
444 */
445int kthread_park(struct task_struct *k)
446{
447	struct kthread *kthread = to_live_kthread(k);
448	int ret = -ENOSYS;
449
450	if (kthread) {
451		if (!test_bit(KTHREAD_IS_PARKED, &kthread->flags)) {
452			set_bit(KTHREAD_SHOULD_PARK, &kthread->flags);
453			if (k != current) {
454				wake_up_process(k);
455				wait_for_completion(&kthread->parked);
456			}
457		}
458		ret = 0;
459	}
460	return ret;
461}
462EXPORT_SYMBOL_GPL(kthread_park);
463
464/**
465 * kthread_stop - stop a thread created by kthread_create().
466 * @k: thread created by kthread_create().
467 *
468 * Sets kthread_should_stop() for @k to return true, wakes it, and
469 * waits for it to exit. This can also be called after kthread_create()
470 * instead of calling wake_up_process(): the thread will exit without
471 * calling threadfn().
472 *
473 * If threadfn() may call do_exit() itself, the caller must ensure
474 * task_struct can't go away.
475 *
476 * Returns the result of threadfn(), or %-EINTR if wake_up_process()
477 * was never called.
478 */
479int kthread_stop(struct task_struct *k)
480{
481	struct kthread *kthread;
482	int ret;
483
484	trace_sched_kthread_stop(k);
485
486	get_task_struct(k);
487	kthread = to_live_kthread(k);
488	if (kthread) {
489		set_bit(KTHREAD_SHOULD_STOP, &kthread->flags);
490		__kthread_unpark(k, kthread);
491		wake_up_process(k);
492		wait_for_completion(&kthread->exited);
493	}
494	ret = k->exit_code;
495	put_task_struct(k);
496
497	trace_sched_kthread_stop_ret(ret);
498	return ret;
499}
500EXPORT_SYMBOL(kthread_stop);
501
502int kthreadd(void *unused)
503{
504	struct task_struct *tsk = current;
505
506	/* Setup a clean context for our children to inherit. */
507	set_task_comm(tsk, "kthreadd");
508	ignore_signals(tsk);
509	set_cpus_allowed_ptr(tsk, cpu_all_mask);
510	set_mems_allowed(node_states[N_MEMORY]);
511
512	current->flags |= PF_NOFREEZE;
513
514	for (;;) {
515		set_current_state(TASK_INTERRUPTIBLE);
516		if (list_empty(&kthread_create_list))
517			schedule();
518		__set_current_state(TASK_RUNNING);
519
520		spin_lock(&kthread_create_lock);
521		while (!list_empty(&kthread_create_list)) {
522			struct kthread_create_info *create;
523
524			create = list_entry(kthread_create_list.next,
525					    struct kthread_create_info, list);
526			list_del_init(&create->list);
527			spin_unlock(&kthread_create_lock);
528
529			create_kthread(create);
530
531			spin_lock(&kthread_create_lock);
532		}
533		spin_unlock(&kthread_create_lock);
534	}
535
536	return 0;
537}
538
539void __init_kthread_worker(struct kthread_worker *worker,
540				const char *name,
541				struct lock_class_key *key)
542{
543	spin_lock_init(&worker->lock);
544	lockdep_set_class_and_name(&worker->lock, key, name);
545	INIT_LIST_HEAD(&worker->work_list);
546	worker->task = NULL;
547}
548EXPORT_SYMBOL_GPL(__init_kthread_worker);
549
550/**
551 * kthread_worker_fn - kthread function to process kthread_worker
552 * @worker_ptr: pointer to initialized kthread_worker
553 *
554 * This function can be used as @threadfn to kthread_create() or
555 * kthread_run() with @worker_ptr argument pointing to an initialized
556 * kthread_worker.  The started kthread will process work_list until
557 * the it is stopped with kthread_stop().  A kthread can also call
558 * this function directly after extra initialization.
559 *
560 * Different kthreads can be used for the same kthread_worker as long
561 * as there's only one kthread attached to it at any given time.  A
562 * kthread_worker without an attached kthread simply collects queued
563 * kthread_works.
564 */
565int kthread_worker_fn(void *worker_ptr)
566{
567	struct kthread_worker *worker = worker_ptr;
568	struct kthread_work *work;
569
570	WARN_ON(worker->task);
571	worker->task = current;
572repeat:
573	set_current_state(TASK_INTERRUPTIBLE);	/* mb paired w/ kthread_stop */
574
575	if (kthread_should_stop()) {
576		__set_current_state(TASK_RUNNING);
577		spin_lock_irq(&worker->lock);
578		worker->task = NULL;
579		spin_unlock_irq(&worker->lock);
580		return 0;
581	}
582
583	work = NULL;
584	spin_lock_irq(&worker->lock);
585	if (!list_empty(&worker->work_list)) {
586		work = list_first_entry(&worker->work_list,
587					struct kthread_work, node);
588		list_del_init(&work->node);
589	}
590	worker->current_work = work;
591	spin_unlock_irq(&worker->lock);
592
593	if (work) {
594		__set_current_state(TASK_RUNNING);
595		work->func(work);
596	} else if (!freezing(current))
597		schedule();
598
599	try_to_freeze();
600	goto repeat;
601}
602EXPORT_SYMBOL_GPL(kthread_worker_fn);
603
604/* insert @work before @pos in @worker */
605static void insert_kthread_work(struct kthread_worker *worker,
606			       struct kthread_work *work,
607			       struct list_head *pos)
608{
609	lockdep_assert_held(&worker->lock);
610
611	list_add_tail(&work->node, pos);
612	work->worker = worker;
613	if (!worker->current_work && likely(worker->task))
614		wake_up_process(worker->task);
615}
616
617/**
618 * queue_kthread_work - queue a kthread_work
619 * @worker: target kthread_worker
620 * @work: kthread_work to queue
621 *
622 * Queue @work to work processor @task for async execution.  @task
623 * must have been created with kthread_worker_create().  Returns %true
624 * if @work was successfully queued, %false if it was already pending.
625 */
626bool queue_kthread_work(struct kthread_worker *worker,
627			struct kthread_work *work)
628{
629	bool ret = false;
630	unsigned long flags;
631
632	spin_lock_irqsave(&worker->lock, flags);
633	if (list_empty(&work->node)) {
634		insert_kthread_work(worker, work, &worker->work_list);
635		ret = true;
636	}
637	spin_unlock_irqrestore(&worker->lock, flags);
638	return ret;
639}
640EXPORT_SYMBOL_GPL(queue_kthread_work);
641
642struct kthread_flush_work {
643	struct kthread_work	work;
644	struct completion	done;
645};
646
647static void kthread_flush_work_fn(struct kthread_work *work)
648{
649	struct kthread_flush_work *fwork =
650		container_of(work, struct kthread_flush_work, work);
651	complete(&fwork->done);
652}
653
654/**
655 * flush_kthread_work - flush a kthread_work
656 * @work: work to flush
657 *
658 * If @work is queued or executing, wait for it to finish execution.
659 */
660void flush_kthread_work(struct kthread_work *work)
661{
662	struct kthread_flush_work fwork = {
663		KTHREAD_WORK_INIT(fwork.work, kthread_flush_work_fn),
664		COMPLETION_INITIALIZER_ONSTACK(fwork.done),
665	};
666	struct kthread_worker *worker;
667	bool noop = false;
668
669retry:
670	worker = work->worker;
671	if (!worker)
672		return;
673
674	spin_lock_irq(&worker->lock);
675	if (work->worker != worker) {
676		spin_unlock_irq(&worker->lock);
677		goto retry;
678	}
679
680	if (!list_empty(&work->node))
681		insert_kthread_work(worker, &fwork.work, work->node.next);
682	else if (worker->current_work == work)
683		insert_kthread_work(worker, &fwork.work, worker->work_list.next);
684	else
685		noop = true;
686
687	spin_unlock_irq(&worker->lock);
688
689	if (!noop)
690		wait_for_completion(&fwork.done);
691}
692EXPORT_SYMBOL_GPL(flush_kthread_work);
693
694/**
695 * flush_kthread_worker - flush all current works on a kthread_worker
696 * @worker: worker to flush
697 *
698 * Wait until all currently executing or pending works on @worker are
699 * finished.
700 */
701void flush_kthread_worker(struct kthread_worker *worker)
702{
703	struct kthread_flush_work fwork = {
704		KTHREAD_WORK_INIT(fwork.work, kthread_flush_work_fn),
705		COMPLETION_INITIALIZER_ONSTACK(fwork.done),
706	};
707
708	queue_kthread_work(worker, &fwork.work);
709	wait_for_completion(&fwork.done);
710}
711EXPORT_SYMBOL_GPL(flush_kthread_worker);