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