Linux Audio

Check our new training course

Loading...
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);
v3.5.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 <trace/events/sched.h>
 20
 21static DEFINE_SPINLOCK(kthread_create_lock);
 22static LIST_HEAD(kthread_create_list);
 23struct task_struct *kthreadd_task;
 24
 25struct kthread_create_info
 26{
 27	/* Information passed to kthread() from kthreadd. */
 28	int (*threadfn)(void *data);
 29	void *data;
 30	int node;
 31
 32	/* Result passed back to kthread_create() from kthreadd. */
 33	struct task_struct *result;
 34	struct completion done;
 35
 36	struct list_head list;
 37};
 38
 39struct kthread {
 40	int should_stop;
 
 41	void *data;
 
 42	struct completion exited;
 43};
 44
 45#define to_kthread(tsk)	\
 46	container_of((tsk)->vfork_done, struct kthread, exited)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 47
 48/**
 49 * kthread_should_stop - should this kthread return now?
 50 *
 51 * When someone calls kthread_stop() on your kthread, it will be woken
 52 * and this will return true.  You should then return, and your return
 53 * value will be passed through to kthread_stop().
 54 */
 55int kthread_should_stop(void)
 56{
 57	return to_kthread(current)->should_stop;
 58}
 59EXPORT_SYMBOL(kthread_should_stop);
 60
 61/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 62 * kthread_freezable_should_stop - should this freezable kthread return now?
 63 * @was_frozen: optional out parameter, indicates whether %current was frozen
 64 *
 65 * kthread_should_stop() for freezable kthreads, which will enter
 66 * refrigerator if necessary.  This function is safe from kthread_stop() /
 67 * freezer deadlock and freezable kthreads should use this function instead
 68 * of calling try_to_freeze() directly.
 69 */
 70bool kthread_freezable_should_stop(bool *was_frozen)
 71{
 72	bool frozen = false;
 73
 74	might_sleep();
 75
 76	if (unlikely(freezing(current)))
 77		frozen = __refrigerator(true);
 78
 79	if (was_frozen)
 80		*was_frozen = frozen;
 81
 82	return kthread_should_stop();
 83}
 84EXPORT_SYMBOL_GPL(kthread_freezable_should_stop);
 85
 86/**
 87 * kthread_data - return data value specified on kthread creation
 88 * @task: kthread task in question
 89 *
 90 * Return the data value specified when kthread @task was created.
 91 * The caller is responsible for ensuring the validity of @task when
 92 * calling this function.
 93 */
 94void *kthread_data(struct task_struct *task)
 95{
 96	return to_kthread(task)->data;
 97}
 98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 99static int kthread(void *_create)
100{
101	/* Copy data: it's on kthread's stack */
102	struct kthread_create_info *create = _create;
103	int (*threadfn)(void *data) = create->threadfn;
104	void *data = create->data;
 
105	struct kthread self;
106	int ret;
107
108	self.should_stop = 0;
109	self.data = data;
110	init_completion(&self.exited);
 
111	current->vfork_done = &self.exited;
112
 
 
 
 
 
 
113	/* OK, tell user we're spawned, wait for stop or wakeup */
114	__set_current_state(TASK_UNINTERRUPTIBLE);
115	create->result = current;
116	complete(&create->done);
117	schedule();
118
119	ret = -EINTR;
120	if (!self.should_stop)
 
 
121		ret = threadfn(data);
122
123	/* we can't just return, we must preserve "self" on stack */
124	do_exit(ret);
125}
126
127/* called from do_fork() to get node information for about to be created task */
128int tsk_fork_get_node(struct task_struct *tsk)
129{
130#ifdef CONFIG_NUMA
131	if (tsk == kthreadd_task)
132		return tsk->pref_node_fork;
133#endif
134	return numa_node_id();
135}
136
137static void create_kthread(struct kthread_create_info *create)
138{
139	int pid;
140
141#ifdef CONFIG_NUMA
142	current->pref_node_fork = create->node;
143#endif
144	/* We want our own signal handler (we take no signals by default). */
145	pid = kernel_thread(kthread, create, CLONE_FS | CLONE_FILES | SIGCHLD);
146	if (pid < 0) {
 
 
 
 
 
 
 
147		create->result = ERR_PTR(pid);
148		complete(&create->done);
149	}
150}
151
152/**
153 * kthread_create_on_node - create a kthread.
154 * @threadfn: the function to run until signal_pending(current).
155 * @data: data ptr for @threadfn.
156 * @node: memory node number.
157 * @namefmt: printf-style name for the thread.
158 *
159 * Description: This helper function creates and names a kernel
160 * thread.  The thread will be stopped: use wake_up_process() to start
161 * it.  See also kthread_run().
 
162 *
163 * If thread is going to be bound on a particular cpu, give its node
164 * in @node, to get NUMA affinity for kthread stack, or else give -1.
165 * When woken, the thread will run @threadfn() with @data as its
166 * argument. @threadfn() can either call do_exit() directly if it is a
167 * standalone thread for which no one will call kthread_stop(), or
168 * return when 'kthread_should_stop()' is true (which means
169 * kthread_stop() has been called).  The return value should be zero
170 * or a negative error number; it will be passed to kthread_stop().
171 *
172 * Returns a task_struct or ERR_PTR(-ENOMEM).
173 */
174struct task_struct *kthread_create_on_node(int (*threadfn)(void *data),
175					   void *data,
176					   int node,
177					   const char namefmt[],
178					   ...)
179{
180	struct kthread_create_info create;
181
182	create.threadfn = threadfn;
183	create.data = data;
184	create.node = node;
185	init_completion(&create.done);
 
 
 
 
 
186
187	spin_lock(&kthread_create_lock);
188	list_add_tail(&create.list, &kthread_create_list);
189	spin_unlock(&kthread_create_lock);
190
191	wake_up_process(kthreadd_task);
192	wait_for_completion(&create.done);
193
194	if (!IS_ERR(create.result)) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195		static const struct sched_param param = { .sched_priority = 0 };
196		va_list args;
197
198		va_start(args, namefmt);
199		vsnprintf(create.result->comm, sizeof(create.result->comm),
200			  namefmt, args);
201		va_end(args);
202		/*
203		 * root may have changed our (kthreadd's) priority or CPU mask.
204		 * The kernel thread should not inherit these properties.
205		 */
206		sched_setscheduler_nocheck(create.result, SCHED_NORMAL, &param);
207		set_cpus_allowed_ptr(create.result, cpu_all_mask);
208	}
209	return create.result;
 
210}
211EXPORT_SYMBOL(kthread_create_on_node);
212
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213/**
214 * kthread_bind - bind a just-created kthread to a cpu.
215 * @p: thread created by kthread_create().
216 * @cpu: cpu (might not be online, must be possible) for @k to run on.
217 *
218 * Description: This function is equivalent to set_cpus_allowed(),
219 * except that @cpu doesn't need to be online, and the thread must be
220 * stopped (i.e., just returned from kthread_create()).
221 */
222void kthread_bind(struct task_struct *p, unsigned int cpu)
223{
224	/* Must have done schedule() in kthread() before we set_task_cpu */
225	if (!wait_task_inactive(p, TASK_UNINTERRUPTIBLE)) {
226		WARN_ON(1);
227		return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228	}
 
 
 
 
 
 
 
 
 
 
 
 
 
229
230	/* It's safe because the task is inactive. */
231	do_set_cpus_allowed(p, cpumask_of(cpu));
232	p->flags |= PF_THREAD_BOUND;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233}
234EXPORT_SYMBOL(kthread_bind);
235
236/**
237 * kthread_stop - stop a thread created by kthread_create().
238 * @k: thread created by kthread_create().
239 *
240 * Sets kthread_should_stop() for @k to return true, wakes it, and
241 * waits for it to exit. This can also be called after kthread_create()
242 * instead of calling wake_up_process(): the thread will exit without
243 * calling threadfn().
244 *
245 * If threadfn() may call do_exit() itself, the caller must ensure
246 * task_struct can't go away.
247 *
248 * Returns the result of threadfn(), or %-EINTR if wake_up_process()
249 * was never called.
250 */
251int kthread_stop(struct task_struct *k)
252{
253	struct kthread *kthread;
254	int ret;
255
256	trace_sched_kthread_stop(k);
 
257	get_task_struct(k);
258
259	kthread = to_kthread(k);
260	barrier(); /* it might have exited */
261	if (k->vfork_done != NULL) {
262		kthread->should_stop = 1;
263		wake_up_process(k);
264		wait_for_completion(&kthread->exited);
265	}
266	ret = k->exit_code;
 
267
268	put_task_struct(k);
269	trace_sched_kthread_stop_ret(ret);
270
271	return ret;
272}
273EXPORT_SYMBOL(kthread_stop);
274
275int kthreadd(void *unused)
276{
277	struct task_struct *tsk = current;
278
279	/* Setup a clean context for our children to inherit. */
280	set_task_comm(tsk, "kthreadd");
281	ignore_signals(tsk);
282	set_cpus_allowed_ptr(tsk, cpu_all_mask);
283	set_mems_allowed(node_states[N_HIGH_MEMORY]);
284
285	current->flags |= PF_NOFREEZE;
286
287	for (;;) {
288		set_current_state(TASK_INTERRUPTIBLE);
289		if (list_empty(&kthread_create_list))
290			schedule();
291		__set_current_state(TASK_RUNNING);
292
293		spin_lock(&kthread_create_lock);
294		while (!list_empty(&kthread_create_list)) {
295			struct kthread_create_info *create;
296
297			create = list_entry(kthread_create_list.next,
298					    struct kthread_create_info, list);
299			list_del_init(&create->list);
300			spin_unlock(&kthread_create_lock);
301
302			create_kthread(create);
303
304			spin_lock(&kthread_create_lock);
305		}
306		spin_unlock(&kthread_create_lock);
307	}
308
309	return 0;
310}
311
312void __init_kthread_worker(struct kthread_worker *worker,
313				const char *name,
314				struct lock_class_key *key)
315{
316	spin_lock_init(&worker->lock);
317	lockdep_set_class_and_name(&worker->lock, key, name);
318	INIT_LIST_HEAD(&worker->work_list);
319	worker->task = NULL;
320}
321EXPORT_SYMBOL_GPL(__init_kthread_worker);
322
323/**
324 * kthread_worker_fn - kthread function to process kthread_worker
325 * @worker_ptr: pointer to initialized kthread_worker
326 *
327 * This function can be used as @threadfn to kthread_create() or
328 * kthread_run() with @worker_ptr argument pointing to an initialized
329 * kthread_worker.  The started kthread will process work_list until
330 * the it is stopped with kthread_stop().  A kthread can also call
331 * this function directly after extra initialization.
332 *
333 * Different kthreads can be used for the same kthread_worker as long
334 * as there's only one kthread attached to it at any given time.  A
335 * kthread_worker without an attached kthread simply collects queued
336 * kthread_works.
337 */
338int kthread_worker_fn(void *worker_ptr)
339{
340	struct kthread_worker *worker = worker_ptr;
341	struct kthread_work *work;
342
343	WARN_ON(worker->task);
344	worker->task = current;
345repeat:
346	set_current_state(TASK_INTERRUPTIBLE);	/* mb paired w/ kthread_stop */
347
348	if (kthread_should_stop()) {
349		__set_current_state(TASK_RUNNING);
350		spin_lock_irq(&worker->lock);
351		worker->task = NULL;
352		spin_unlock_irq(&worker->lock);
353		return 0;
354	}
355
356	work = NULL;
357	spin_lock_irq(&worker->lock);
358	if (!list_empty(&worker->work_list)) {
359		work = list_first_entry(&worker->work_list,
360					struct kthread_work, node);
361		list_del_init(&work->node);
362	}
363	worker->current_work = work;
364	spin_unlock_irq(&worker->lock);
365
366	if (work) {
367		__set_current_state(TASK_RUNNING);
368		work->func(work);
369	} else if (!freezing(current))
370		schedule();
371
372	try_to_freeze();
373	goto repeat;
374}
375EXPORT_SYMBOL_GPL(kthread_worker_fn);
376
377/* insert @work before @pos in @worker */
378static void insert_kthread_work(struct kthread_worker *worker,
379			       struct kthread_work *work,
380			       struct list_head *pos)
381{
382	lockdep_assert_held(&worker->lock);
383
384	list_add_tail(&work->node, pos);
385	work->worker = worker;
386	if (likely(worker->task))
387		wake_up_process(worker->task);
388}
389
390/**
391 * queue_kthread_work - queue a kthread_work
392 * @worker: target kthread_worker
393 * @work: kthread_work to queue
394 *
395 * Queue @work to work processor @task for async execution.  @task
396 * must have been created with kthread_worker_create().  Returns %true
397 * if @work was successfully queued, %false if it was already pending.
398 */
399bool queue_kthread_work(struct kthread_worker *worker,
400			struct kthread_work *work)
401{
402	bool ret = false;
403	unsigned long flags;
404
405	spin_lock_irqsave(&worker->lock, flags);
406	if (list_empty(&work->node)) {
407		insert_kthread_work(worker, work, &worker->work_list);
408		ret = true;
409	}
410	spin_unlock_irqrestore(&worker->lock, flags);
411	return ret;
412}
413EXPORT_SYMBOL_GPL(queue_kthread_work);
414
415struct kthread_flush_work {
416	struct kthread_work	work;
417	struct completion	done;
418};
419
420static void kthread_flush_work_fn(struct kthread_work *work)
421{
422	struct kthread_flush_work *fwork =
423		container_of(work, struct kthread_flush_work, work);
424	complete(&fwork->done);
425}
426
427/**
428 * flush_kthread_work - flush a kthread_work
429 * @work: work to flush
430 *
431 * If @work is queued or executing, wait for it to finish execution.
432 */
433void flush_kthread_work(struct kthread_work *work)
434{
435	struct kthread_flush_work fwork = {
436		KTHREAD_WORK_INIT(fwork.work, kthread_flush_work_fn),
437		COMPLETION_INITIALIZER_ONSTACK(fwork.done),
438	};
439	struct kthread_worker *worker;
440	bool noop = false;
441
442retry:
443	worker = work->worker;
444	if (!worker)
445		return;
446
447	spin_lock_irq(&worker->lock);
448	if (work->worker != worker) {
449		spin_unlock_irq(&worker->lock);
450		goto retry;
451	}
452
453	if (!list_empty(&work->node))
454		insert_kthread_work(worker, &fwork.work, work->node.next);
455	else if (worker->current_work == work)
456		insert_kthread_work(worker, &fwork.work, worker->work_list.next);
457	else
458		noop = true;
459
460	spin_unlock_irq(&worker->lock);
461
462	if (!noop)
463		wait_for_completion(&fwork.done);
464}
465EXPORT_SYMBOL_GPL(flush_kthread_work);
466
467/**
468 * flush_kthread_worker - flush all current works on a kthread_worker
469 * @worker: worker to flush
470 *
471 * Wait until all currently executing or pending works on @worker are
472 * finished.
473 */
474void flush_kthread_worker(struct kthread_worker *worker)
475{
476	struct kthread_flush_work fwork = {
477		KTHREAD_WORK_INIT(fwork.work, kthread_flush_work_fn),
478		COMPLETION_INITIALIZER_ONSTACK(fwork.done),
479	};
480
481	queue_kthread_work(worker, &fwork.work);
482	wait_for_completion(&fwork.done);
483}
484EXPORT_SYMBOL_GPL(flush_kthread_worker);