LCOV - code coverage report
Current view: top level - kernel - kthread.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 153 436 35.1 %
Date: 2023-04-06 08:38:28 Functions: 21 51 41.2 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-only
       2             : /* Kernel thread helper functions.
       3             :  *   Copyright (C) 2004 IBM Corporation, Rusty Russell.
       4             :  *   Copyright (C) 2009 Red Hat, Inc.
       5             :  *
       6             :  * Creation is done via kthreadd, so that we get a clean environment
       7             :  * even if we're invoked from userspace (think modprobe, hotplug cpu,
       8             :  * etc.).
       9             :  */
      10             : #include <uapi/linux/sched/types.h>
      11             : #include <linux/mm.h>
      12             : #include <linux/mmu_context.h>
      13             : #include <linux/sched.h>
      14             : #include <linux/sched/mm.h>
      15             : #include <linux/sched/task.h>
      16             : #include <linux/kthread.h>
      17             : #include <linux/completion.h>
      18             : #include <linux/err.h>
      19             : #include <linux/cgroup.h>
      20             : #include <linux/cpuset.h>
      21             : #include <linux/unistd.h>
      22             : #include <linux/file.h>
      23             : #include <linux/export.h>
      24             : #include <linux/mutex.h>
      25             : #include <linux/slab.h>
      26             : #include <linux/freezer.h>
      27             : #include <linux/ptrace.h>
      28             : #include <linux/uaccess.h>
      29             : #include <linux/numa.h>
      30             : #include <linux/sched/isolation.h>
      31             : #include <trace/events/sched.h>
      32             : 
      33             : 
      34             : static DEFINE_SPINLOCK(kthread_create_lock);
      35             : static LIST_HEAD(kthread_create_list);
      36             : struct task_struct *kthreadd_task;
      37             : 
      38             : struct kthread_create_info
      39             : {
      40             :         /* Information passed to kthread() from kthreadd. */
      41             :         int (*threadfn)(void *data);
      42             :         void *data;
      43             :         int node;
      44             : 
      45             :         /* Result passed back to kthread_create() from kthreadd. */
      46             :         struct task_struct *result;
      47             :         struct completion *done;
      48             : 
      49             :         struct list_head list;
      50             : };
      51             : 
      52             : struct kthread {
      53             :         unsigned long flags;
      54             :         unsigned int cpu;
      55             :         int result;
      56             :         int (*threadfn)(void *);
      57             :         void *data;
      58             :         struct completion parked;
      59             :         struct completion exited;
      60             : #ifdef CONFIG_BLK_CGROUP
      61             :         struct cgroup_subsys_state *blkcg_css;
      62             : #endif
      63             :         /* To store the full name if task comm is truncated. */
      64             :         char *full_name;
      65             : };
      66             : 
      67             : enum KTHREAD_BITS {
      68             :         KTHREAD_IS_PER_CPU = 0,
      69             :         KTHREAD_SHOULD_STOP,
      70             :         KTHREAD_SHOULD_PARK,
      71             : };
      72             : 
      73             : static inline struct kthread *to_kthread(struct task_struct *k)
      74             : {
      75        3430 :         WARN_ON(!(k->flags & PF_KTHREAD));
      76        3430 :         return k->worker_private;
      77             : }
      78             : 
      79             : /*
      80             :  * Variant of to_kthread() that doesn't assume @p is a kthread.
      81             :  *
      82             :  * Per construction; when:
      83             :  *
      84             :  *   (p->flags & PF_KTHREAD) && p->worker_private
      85             :  *
      86             :  * the task is both a kthread and struct kthread is persistent. However
      87             :  * PF_KTHREAD on it's own is not, kernel_thread() can exec() (See umh.c and
      88             :  * begin_new_exec()).
      89             :  */
      90             : static inline struct kthread *__to_kthread(struct task_struct *p)
      91             : {
      92           0 :         void *kthread = p->worker_private;
      93           0 :         if (kthread && !(p->flags & PF_KTHREAD))
      94           0 :                 kthread = NULL;
      95             :         return kthread;
      96             : }
      97             : 
      98           0 : void get_kthread_comm(char *buf, size_t buf_size, struct task_struct *tsk)
      99             : {
     100           0 :         struct kthread *kthread = to_kthread(tsk);
     101             : 
     102           0 :         if (!kthread || !kthread->full_name) {
     103           0 :                 __get_task_comm(buf, buf_size, tsk);
     104           0 :                 return;
     105             :         }
     106             : 
     107           0 :         strscpy_pad(buf, kthread->full_name, buf_size);
     108             : }
     109             : 
     110         348 : bool set_kthread_struct(struct task_struct *p)
     111             : {
     112             :         struct kthread *kthread;
     113             : 
     114         696 :         if (WARN_ON_ONCE(to_kthread(p)))
     115             :                 return false;
     116             : 
     117         348 :         kthread = kzalloc(sizeof(*kthread), GFP_KERNEL);
     118         348 :         if (!kthread)
     119             :                 return false;
     120             : 
     121         696 :         init_completion(&kthread->exited);
     122         696 :         init_completion(&kthread->parked);
     123         348 :         p->vfork_done = &kthread->exited;
     124             : 
     125         348 :         p->worker_private = kthread;
     126         348 :         return true;
     127             : }
     128             : 
     129         332 : void free_kthread_struct(struct task_struct *k)
     130             : {
     131             :         struct kthread *kthread;
     132             : 
     133             :         /*
     134             :          * Can be NULL if kmalloc() in set_kthread_struct() failed.
     135             :          */
     136         664 :         kthread = to_kthread(k);
     137         332 :         if (!kthread)
     138             :                 return;
     139             : 
     140             : #ifdef CONFIG_BLK_CGROUP
     141             :         WARN_ON_ONCE(kthread->blkcg_css);
     142             : #endif
     143         332 :         k->worker_private = NULL;
     144         332 :         kfree(kthread->full_name);
     145         332 :         kfree(kthread);
     146             : }
     147             : 
     148             : /**
     149             :  * kthread_should_stop - should this kthread return now?
     150             :  *
     151             :  * When someone calls kthread_stop() on your kthread, it will be woken
     152             :  * and this will return true.  You should then return, and your return
     153             :  * value will be passed through to kthread_stop().
     154             :  */
     155         915 : bool kthread_should_stop(void)
     156             : {
     157        2745 :         return test_bit(KTHREAD_SHOULD_STOP, &to_kthread(current)->flags);
     158             : }
     159             : EXPORT_SYMBOL(kthread_should_stop);
     160             : 
     161         702 : bool __kthread_should_park(struct task_struct *k)
     162             : {
     163        2106 :         return test_bit(KTHREAD_SHOULD_PARK, &to_kthread(k)->flags);
     164             : }
     165             : EXPORT_SYMBOL_GPL(__kthread_should_park);
     166             : 
     167             : /**
     168             :  * kthread_should_park - should this kthread park now?
     169             :  *
     170             :  * When someone calls kthread_park() on your kthread, it will be woken
     171             :  * and this will return true.  You should then do the necessary
     172             :  * cleanup and call kthread_parkme()
     173             :  *
     174             :  * Similar to kthread_should_stop(), but this keeps the thread alive
     175             :  * and in a park position. kthread_unpark() "restarts" the thread and
     176             :  * calls the thread function again.
     177             :  */
     178         702 : bool kthread_should_park(void)
     179             : {
     180         702 :         return __kthread_should_park(current);
     181             : }
     182             : EXPORT_SYMBOL_GPL(kthread_should_park);
     183             : 
     184             : /**
     185             :  * kthread_freezable_should_stop - should this freezable kthread return now?
     186             :  * @was_frozen: optional out parameter, indicates whether %current was frozen
     187             :  *
     188             :  * kthread_should_stop() for freezable kthreads, which will enter
     189             :  * refrigerator if necessary.  This function is safe from kthread_stop() /
     190             :  * freezer deadlock and freezable kthreads should use this function instead
     191             :  * of calling try_to_freeze() directly.
     192             :  */
     193           0 : bool kthread_freezable_should_stop(bool *was_frozen)
     194             : {
     195           0 :         bool frozen = false;
     196             : 
     197             :         might_sleep();
     198             : 
     199           0 :         if (unlikely(freezing(current)))
     200           0 :                 frozen = __refrigerator(true);
     201             : 
     202           0 :         if (was_frozen)
     203           0 :                 *was_frozen = frozen;
     204             : 
     205           0 :         return kthread_should_stop();
     206             : }
     207             : EXPORT_SYMBOL_GPL(kthread_freezable_should_stop);
     208             : 
     209             : /**
     210             :  * kthread_func - return the function specified on kthread creation
     211             :  * @task: kthread task in question
     212             :  *
     213             :  * Returns NULL if the task is not a kthread.
     214             :  */
     215           0 : void *kthread_func(struct task_struct *task)
     216             : {
     217           0 :         struct kthread *kthread = __to_kthread(task);
     218           0 :         if (kthread)
     219           0 :                 return kthread->threadfn;
     220             :         return NULL;
     221             : }
     222             : EXPORT_SYMBOL_GPL(kthread_func);
     223             : 
     224             : /**
     225             :  * kthread_data - return data value specified on kthread creation
     226             :  * @task: kthread task in question
     227             :  *
     228             :  * Return the data value specified when kthread @task was created.
     229             :  * The caller is responsible for ensuring the validity of @task when
     230             :  * calling this function.
     231             :  */
     232         113 : void *kthread_data(struct task_struct *task)
     233             : {
     234         226 :         return to_kthread(task)->data;
     235             : }
     236             : EXPORT_SYMBOL_GPL(kthread_data);
     237             : 
     238             : /**
     239             :  * kthread_probe_data - speculative version of kthread_data()
     240             :  * @task: possible kthread task in question
     241             :  *
     242             :  * @task could be a kthread task.  Return the data value specified when it
     243             :  * was created if accessible.  If @task isn't a kthread task or its data is
     244             :  * inaccessible for any reason, %NULL is returned.  This function requires
     245             :  * that @task itself is safe to dereference.
     246             :  */
     247           0 : void *kthread_probe_data(struct task_struct *task)
     248             : {
     249           0 :         struct kthread *kthread = __to_kthread(task);
     250           0 :         void *data = NULL;
     251             : 
     252           0 :         if (kthread)
     253           0 :                 copy_from_kernel_nofault(&data, &kthread->data, sizeof(data));
     254           0 :         return data;
     255             : }
     256             : 
     257         346 : static void __kthread_parkme(struct kthread *self)
     258             : {
     259             :         for (;;) {
     260             :                 /*
     261             :                  * TASK_PARKED is a special state; we must serialize against
     262             :                  * possible pending wakeups to avoid store-store collisions on
     263             :                  * task->state.
     264             :                  *
     265             :                  * Such a collision might possibly result in the task state
     266             :                  * changin from TASK_PARKED and us failing the
     267             :                  * wait_task_inactive() in kthread_park().
     268             :                  */
     269        1736 :                 set_special_state(TASK_PARKED);
     270         694 :                 if (!test_bit(KTHREAD_SHOULD_PARK, &self->flags))
     271             :                         break;
     272             : 
     273             :                 /*
     274             :                  * Thread is going to call schedule(), do not preempt it,
     275             :                  * or the caller of kthread_park() may spend more time in
     276             :                  * wait_task_inactive().
     277             :                  */
     278           1 :                 preempt_disable();
     279           1 :                 complete(&self->parked);
     280           1 :                 schedule_preempt_disabled();
     281           1 :                 preempt_enable();
     282             :         }
     283         346 :         __set_current_state(TASK_RUNNING);
     284         346 : }
     285             : 
     286           0 : void kthread_parkme(void)
     287             : {
     288           0 :         __kthread_parkme(to_kthread(current));
     289           0 : }
     290             : EXPORT_SYMBOL_GPL(kthread_parkme);
     291             : 
     292             : /**
     293             :  * kthread_exit - Cause the current kthread return @result to kthread_stop().
     294             :  * @result: The integer value to return to kthread_stop().
     295             :  *
     296             :  * While kthread_exit can be called directly, it exists so that
     297             :  * functions which do some additional work in non-modular code such as
     298             :  * module_put_and_kthread_exit can be implemented.
     299             :  *
     300             :  * Does not return.
     301             :  */
     302         333 : void __noreturn kthread_exit(long result)
     303             : {
     304         666 :         struct kthread *kthread = to_kthread(current);
     305         333 :         kthread->result = result;
     306         333 :         do_exit(0);
     307             : }
     308             : 
     309             : /**
     310             :  * kthread_complete_and_exit - Exit the current kthread.
     311             :  * @comp: Completion to complete
     312             :  * @code: The integer value to return to kthread_stop().
     313             :  *
     314             :  * If present complete @comp and the reuturn code to kthread_stop().
     315             :  *
     316             :  * A kernel thread whose module may be removed after the completion of
     317             :  * @comp can use this function exit safely.
     318             :  *
     319             :  * Does not return.
     320             :  */
     321         333 : void __noreturn kthread_complete_and_exit(struct completion *comp, long code)
     322             : {
     323         333 :         if (comp)
     324         333 :                 complete(comp);
     325             : 
     326         333 :         kthread_exit(code);
     327             : }
     328             : EXPORT_SYMBOL(kthread_complete_and_exit);
     329             : 
     330         346 : static int kthread(void *_create)
     331             : {
     332             :         static const struct sched_param param = { .sched_priority = 0 };
     333             :         /* Copy data: it's on kthread's stack */
     334         346 :         struct kthread_create_info *create = _create;
     335         346 :         int (*threadfn)(void *data) = create->threadfn;
     336         346 :         void *data = create->data;
     337             :         struct completion *done;
     338             :         struct kthread *self;
     339             :         int ret;
     340             : 
     341         692 :         self = to_kthread(current);
     342             : 
     343             :         /* Release the structure when caller killed by a fatal signal. */
     344         692 :         done = xchg(&create->done, NULL);
     345         346 :         if (!done) {
     346           0 :                 kfree(create);
     347           0 :                 kthread_exit(-EINTR);
     348             :         }
     349             : 
     350         346 :         self->threadfn = threadfn;
     351         346 :         self->data = data;
     352             : 
     353             :         /*
     354             :          * The new thread inherited kthreadd's priority and CPU mask. Reset
     355             :          * back to default in case they have been changed.
     356             :          */
     357         346 :         sched_setscheduler_nocheck(current, SCHED_NORMAL, &param);
     358        1038 :         set_cpus_allowed_ptr(current, housekeeping_cpumask(HK_TYPE_KTHREAD));
     359             : 
     360             :         /* OK, tell user we're spawned, wait for stop or wakeup */
     361         346 :         __set_current_state(TASK_UNINTERRUPTIBLE);
     362         346 :         create->result = current;
     363             :         /*
     364             :          * Thread is going to call schedule(), do not preempt it,
     365             :          * or the creator may spend more time in wait_task_inactive().
     366             :          */
     367         346 :         preempt_disable();
     368         346 :         complete(done);
     369         346 :         schedule_preempt_disabled();
     370         346 :         preempt_enable();
     371             : 
     372         346 :         ret = -EINTR;
     373         692 :         if (!test_bit(KTHREAD_SHOULD_STOP, &self->flags)) {
     374             :                 cgroup_kthread_ready();
     375         346 :                 __kthread_parkme(self);
     376         346 :                 ret = threadfn(data);
     377             :         }
     378           0 :         kthread_exit(ret);
     379             : }
     380             : 
     381             : /* called from kernel_clone() to get node information for about to be created task */
     382         348 : int tsk_fork_get_node(struct task_struct *tsk)
     383             : {
     384             : #ifdef CONFIG_NUMA
     385             :         if (tsk == kthreadd_task)
     386             :                 return tsk->pref_node_fork;
     387             : #endif
     388         348 :         return NUMA_NO_NODE;
     389             : }
     390             : 
     391         346 : static void create_kthread(struct kthread_create_info *create)
     392             : {
     393             :         int pid;
     394             : 
     395             : #ifdef CONFIG_NUMA
     396             :         current->pref_node_fork = create->node;
     397             : #endif
     398             :         /* We want our own signal handler (we take no signals by default). */
     399         346 :         pid = kernel_thread(kthread, create, CLONE_FS | CLONE_FILES | SIGCHLD);
     400         346 :         if (pid < 0) {
     401             :                 /* Release the structure when caller killed by a fatal signal. */
     402           0 :                 struct completion *done = xchg(&create->done, NULL);
     403             : 
     404           0 :                 if (!done) {
     405           0 :                         kfree(create);
     406           0 :                         return;
     407             :                 }
     408           0 :                 create->result = ERR_PTR(pid);
     409           0 :                 complete(done);
     410             :         }
     411             : }
     412             : 
     413             : static __printf(4, 0)
     414         346 : struct task_struct *__kthread_create_on_node(int (*threadfn)(void *data),
     415             :                                                     void *data, int node,
     416             :                                                     const char namefmt[],
     417             :                                                     va_list args)
     418             : {
     419         346 :         DECLARE_COMPLETION_ONSTACK(done);
     420             :         struct task_struct *task;
     421         346 :         struct kthread_create_info *create = kmalloc(sizeof(*create),
     422             :                                                      GFP_KERNEL);
     423             : 
     424         346 :         if (!create)
     425             :                 return ERR_PTR(-ENOMEM);
     426         346 :         create->threadfn = threadfn;
     427         346 :         create->data = data;
     428         346 :         create->node = node;
     429         346 :         create->done = &done;
     430             : 
     431         346 :         spin_lock(&kthread_create_lock);
     432         692 :         list_add_tail(&create->list, &kthread_create_list);
     433         346 :         spin_unlock(&kthread_create_lock);
     434             : 
     435         346 :         wake_up_process(kthreadd_task);
     436             :         /*
     437             :          * Wait for completion in killable state, for I might be chosen by
     438             :          * the OOM killer while kthreadd is trying to allocate memory for
     439             :          * new kernel thread.
     440             :          */
     441         346 :         if (unlikely(wait_for_completion_killable(&done))) {
     442             :                 /*
     443             :                  * If I was killed by a fatal signal before kthreadd (or new
     444             :                  * kernel thread) calls complete(), leave the cleanup of this
     445             :                  * structure to that thread.
     446             :                  */
     447           0 :                 if (xchg(&create->done, NULL))
     448             :                         return ERR_PTR(-EINTR);
     449             :                 /*
     450             :                  * kthreadd (or new kernel thread) will call complete()
     451             :                  * shortly.
     452             :                  */
     453           0 :                 wait_for_completion(&done);
     454             :         }
     455         346 :         task = create->result;
     456         346 :         if (!IS_ERR(task)) {
     457             :                 char name[TASK_COMM_LEN];
     458             :                 va_list aq;
     459             :                 int len;
     460             : 
     461             :                 /*
     462             :                  * task is already visible to other tasks, so updating
     463             :                  * COMM must be protected.
     464             :                  */
     465         346 :                 va_copy(aq, args);
     466         346 :                 len = vsnprintf(name, sizeof(name), namefmt, aq);
     467         346 :                 va_end(aq);
     468         346 :                 if (len >= TASK_COMM_LEN) {
     469         666 :                         struct kthread *kthread = to_kthread(task);
     470             : 
     471             :                         /* leave it truncated when out of memory. */
     472         333 :                         kthread->full_name = kvasprintf(GFP_KERNEL, namefmt, args);
     473             :                 }
     474         346 :                 set_task_comm(task, name);
     475             :         }
     476         346 :         kfree(create);
     477         346 :         return task;
     478             : }
     479             : 
     480             : /**
     481             :  * kthread_create_on_node - create a kthread.
     482             :  * @threadfn: the function to run until signal_pending(current).
     483             :  * @data: data ptr for @threadfn.
     484             :  * @node: task and thread structures for the thread are allocated on this node
     485             :  * @namefmt: printf-style name for the thread.
     486             :  *
     487             :  * Description: This helper function creates and names a kernel
     488             :  * thread.  The thread will be stopped: use wake_up_process() to start
     489             :  * it.  See also kthread_run().  The new thread has SCHED_NORMAL policy and
     490             :  * is affine to all CPUs.
     491             :  *
     492             :  * If thread is going to be bound on a particular cpu, give its node
     493             :  * in @node, to get NUMA affinity for kthread stack, or else give NUMA_NO_NODE.
     494             :  * When woken, the thread will run @threadfn() with @data as its
     495             :  * argument. @threadfn() can either return directly if it is a
     496             :  * standalone thread for which no one will call kthread_stop(), or
     497             :  * return when 'kthread_should_stop()' is true (which means
     498             :  * kthread_stop() has been called).  The return value should be zero
     499             :  * or a negative error number; it will be passed to kthread_stop().
     500             :  *
     501             :  * Returns a task_struct or ERR_PTR(-ENOMEM) or ERR_PTR(-EINTR).
     502             :  */
     503         346 : struct task_struct *kthread_create_on_node(int (*threadfn)(void *data),
     504             :                                            void *data, int node,
     505             :                                            const char namefmt[],
     506             :                                            ...)
     507             : {
     508             :         struct task_struct *task;
     509             :         va_list args;
     510             : 
     511         346 :         va_start(args, namefmt);
     512         346 :         task = __kthread_create_on_node(threadfn, data, node, namefmt, args);
     513         346 :         va_end(args);
     514             : 
     515         346 :         return task;
     516             : }
     517             : EXPORT_SYMBOL(kthread_create_on_node);
     518             : 
     519          11 : static void __kthread_bind_mask(struct task_struct *p, const struct cpumask *mask, unsigned int state)
     520             : {
     521             :         unsigned long flags;
     522             : 
     523          11 :         if (!wait_task_inactive(p, state)) {
     524             :                 WARN_ON(1);
     525             :                 return;
     526             :         }
     527             : 
     528             :         /* It's safe because the task is inactive. */
     529          11 :         raw_spin_lock_irqsave(&p->pi_lock, flags);
     530          11 :         do_set_cpus_allowed(p, mask);
     531          11 :         p->flags |= PF_NO_SETAFFINITY;
     532          22 :         raw_spin_unlock_irqrestore(&p->pi_lock, flags);
     533             : }
     534             : 
     535             : static void __kthread_bind(struct task_struct *p, unsigned int cpu, unsigned int state)
     536             : {
     537           2 :         __kthread_bind_mask(p, cpumask_of(cpu), state);
     538             : }
     539             : 
     540           9 : void kthread_bind_mask(struct task_struct *p, const struct cpumask *mask)
     541             : {
     542           9 :         __kthread_bind_mask(p, mask, TASK_UNINTERRUPTIBLE);
     543           9 : }
     544             : 
     545             : /**
     546             :  * kthread_bind - bind a just-created kthread to a cpu.
     547             :  * @p: thread created by kthread_create().
     548             :  * @cpu: cpu (might not be online, must be possible) for @k to run on.
     549             :  *
     550             :  * Description: This function is equivalent to set_cpus_allowed(),
     551             :  * except that @cpu doesn't need to be online, and the thread must be
     552             :  * stopped (i.e., just returned from kthread_create()).
     553             :  */
     554           0 : void kthread_bind(struct task_struct *p, unsigned int cpu)
     555             : {
     556           2 :         __kthread_bind(p, cpu, TASK_UNINTERRUPTIBLE);
     557           0 : }
     558             : EXPORT_SYMBOL(kthread_bind);
     559             : 
     560             : /**
     561             :  * kthread_create_on_cpu - Create a cpu bound kthread
     562             :  * @threadfn: the function to run until signal_pending(current).
     563             :  * @data: data ptr for @threadfn.
     564             :  * @cpu: The cpu on which the thread should be bound,
     565             :  * @namefmt: printf-style name for the thread. Format is restricted
     566             :  *           to "name.*%u". Code fills in cpu number.
     567             :  *
     568             :  * Description: This helper function creates and names a kernel thread
     569             :  */
     570           1 : struct task_struct *kthread_create_on_cpu(int (*threadfn)(void *data),
     571             :                                           void *data, unsigned int cpu,
     572             :                                           const char *namefmt)
     573             : {
     574             :         struct task_struct *p;
     575             : 
     576           1 :         p = kthread_create_on_node(threadfn, data, cpu_to_node(cpu), namefmt,
     577             :                                    cpu);
     578           1 :         if (IS_ERR(p))
     579             :                 return p;
     580           1 :         kthread_bind(p, cpu);
     581             :         /* CPU hotplug need to bind once again when unparking the thread. */
     582           2 :         to_kthread(p)->cpu = cpu;
     583           1 :         return p;
     584             : }
     585             : EXPORT_SYMBOL(kthread_create_on_cpu);
     586             : 
     587           5 : void kthread_set_per_cpu(struct task_struct *k, int cpu)
     588             : {
     589          10 :         struct kthread *kthread = to_kthread(k);
     590           5 :         if (!kthread)
     591             :                 return;
     592             : 
     593           5 :         WARN_ON_ONCE(!(k->flags & PF_NO_SETAFFINITY));
     594             : 
     595           5 :         if (cpu < 0) {
     596           0 :                 clear_bit(KTHREAD_IS_PER_CPU, &kthread->flags);
     597             :                 return;
     598             :         }
     599             : 
     600           5 :         kthread->cpu = cpu;
     601           5 :         set_bit(KTHREAD_IS_PER_CPU, &kthread->flags);
     602             : }
     603             : 
     604           0 : bool kthread_is_per_cpu(struct task_struct *p)
     605             : {
     606           0 :         struct kthread *kthread = __to_kthread(p);
     607           0 :         if (!kthread)
     608             :                 return false;
     609             : 
     610           0 :         return test_bit(KTHREAD_IS_PER_CPU, &kthread->flags);
     611             : }
     612             : 
     613             : /**
     614             :  * kthread_unpark - unpark a thread created by kthread_create().
     615             :  * @k:          thread created by kthread_create().
     616             :  *
     617             :  * Sets kthread_should_park() for @k to return false, wakes it, and
     618             :  * waits for it to return. If the thread is marked percpu then its
     619             :  * bound to the cpu again.
     620             :  */
     621           1 : void kthread_unpark(struct task_struct *k)
     622             : {
     623           2 :         struct kthread *kthread = to_kthread(k);
     624             : 
     625             :         /*
     626             :          * Newly created kthread was parked when the CPU was offline.
     627             :          * The binding was lost and we need to set it again.
     628             :          */
     629           2 :         if (test_bit(KTHREAD_IS_PER_CPU, &kthread->flags))
     630           1 :                 __kthread_bind(k, kthread->cpu, TASK_PARKED);
     631             : 
     632           2 :         clear_bit(KTHREAD_SHOULD_PARK, &kthread->flags);
     633             :         /*
     634             :          * __kthread_parkme() will either see !SHOULD_PARK or get the wakeup.
     635             :          */
     636           1 :         wake_up_state(k, TASK_PARKED);
     637           1 : }
     638             : EXPORT_SYMBOL_GPL(kthread_unpark);
     639             : 
     640             : /**
     641             :  * kthread_park - park a thread created by kthread_create().
     642             :  * @k: thread created by kthread_create().
     643             :  *
     644             :  * Sets kthread_should_park() for @k to return true, wakes it, and
     645             :  * waits for it to return. This can also be called after kthread_create()
     646             :  * instead of calling wake_up_process(): the thread will park without
     647             :  * calling threadfn().
     648             :  *
     649             :  * Returns 0 if the thread is parked, -ENOSYS if the thread exited.
     650             :  * If called by the kthread itself just the park bit is set.
     651             :  */
     652           1 : int kthread_park(struct task_struct *k)
     653             : {
     654           2 :         struct kthread *kthread = to_kthread(k);
     655             : 
     656           1 :         if (WARN_ON(k->flags & PF_EXITING))
     657             :                 return -ENOSYS;
     658             : 
     659           2 :         if (WARN_ON_ONCE(test_bit(KTHREAD_SHOULD_PARK, &kthread->flags)))
     660             :                 return -EBUSY;
     661             : 
     662           2 :         set_bit(KTHREAD_SHOULD_PARK, &kthread->flags);
     663           1 :         if (k != current) {
     664           1 :                 wake_up_process(k);
     665             :                 /*
     666             :                  * Wait for __kthread_parkme() to complete(), this means we
     667             :                  * _will_ have TASK_PARKED and are about to call schedule().
     668             :                  */
     669           1 :                 wait_for_completion(&kthread->parked);
     670             :                 /*
     671             :                  * Now wait for that schedule() to complete and the task to
     672             :                  * get scheduled out.
     673             :                  */
     674           1 :                 WARN_ON_ONCE(!wait_task_inactive(k, TASK_PARKED));
     675             :         }
     676             : 
     677             :         return 0;
     678             : }
     679             : EXPORT_SYMBOL_GPL(kthread_park);
     680             : 
     681             : /**
     682             :  * kthread_stop - stop a thread created by kthread_create().
     683             :  * @k: thread created by kthread_create().
     684             :  *
     685             :  * Sets kthread_should_stop() for @k to return true, wakes it, and
     686             :  * waits for it to exit. This can also be called after kthread_create()
     687             :  * instead of calling wake_up_process(): the thread will exit without
     688             :  * calling threadfn().
     689             :  *
     690             :  * If threadfn() may call kthread_exit() itself, the caller must ensure
     691             :  * task_struct can't go away.
     692             :  *
     693             :  * Returns the result of threadfn(), or %-EINTR if wake_up_process()
     694             :  * was never called.
     695             :  */
     696           0 : int kthread_stop(struct task_struct *k)
     697             : {
     698             :         struct kthread *kthread;
     699             :         int ret;
     700             : 
     701           0 :         trace_sched_kthread_stop(k);
     702             : 
     703           0 :         get_task_struct(k);
     704           0 :         kthread = to_kthread(k);
     705           0 :         set_bit(KTHREAD_SHOULD_STOP, &kthread->flags);
     706           0 :         kthread_unpark(k);
     707           0 :         set_tsk_thread_flag(k, TIF_NOTIFY_SIGNAL);
     708           0 :         wake_up_process(k);
     709           0 :         wait_for_completion(&kthread->exited);
     710           0 :         ret = kthread->result;
     711           0 :         put_task_struct(k);
     712             : 
     713           0 :         trace_sched_kthread_stop_ret(ret);
     714           0 :         return ret;
     715             : }
     716             : EXPORT_SYMBOL(kthread_stop);
     717             : 
     718           1 : int kthreadd(void *unused)
     719             : {
     720           1 :         struct task_struct *tsk = current;
     721             : 
     722             :         /* Setup a clean context for our children to inherit. */
     723           1 :         set_task_comm(tsk, "kthreadd");
     724           1 :         ignore_signals(tsk);
     725           2 :         set_cpus_allowed_ptr(tsk, housekeeping_cpumask(HK_TYPE_KTHREAD));
     726           1 :         set_mems_allowed(node_states[N_MEMORY]);
     727             : 
     728           1 :         current->flags |= PF_NOFREEZE;
     729             :         cgroup_init_kthreadd();
     730             : 
     731             :         for (;;) {
     732         346 :                 set_current_state(TASK_INTERRUPTIBLE);
     733         346 :                 if (list_empty(&kthread_create_list))
     734         346 :                         schedule();
     735         345 :                 __set_current_state(TASK_RUNNING);
     736             : 
     737             :                 spin_lock(&kthread_create_lock);
     738         691 :                 while (!list_empty(&kthread_create_list)) {
     739             :                         struct kthread_create_info *create;
     740             : 
     741         346 :                         create = list_entry(kthread_create_list.next,
     742             :                                             struct kthread_create_info, list);
     743         692 :                         list_del_init(&create->list);
     744         346 :                         spin_unlock(&kthread_create_lock);
     745             : 
     746         346 :                         create_kthread(create);
     747             : 
     748             :                         spin_lock(&kthread_create_lock);
     749             :                 }
     750             :                 spin_unlock(&kthread_create_lock);
     751             :         }
     752             : 
     753             :         return 0;
     754             : }
     755             : 
     756           0 : void __kthread_init_worker(struct kthread_worker *worker,
     757             :                                 const char *name,
     758             :                                 struct lock_class_key *key)
     759             : {
     760           0 :         memset(worker, 0, sizeof(struct kthread_worker));
     761             :         raw_spin_lock_init(&worker->lock);
     762             :         lockdep_set_class_and_name(&worker->lock, key, name);
     763           0 :         INIT_LIST_HEAD(&worker->work_list);
     764           0 :         INIT_LIST_HEAD(&worker->delayed_work_list);
     765           0 : }
     766             : EXPORT_SYMBOL_GPL(__kthread_init_worker);
     767             : 
     768             : /**
     769             :  * kthread_worker_fn - kthread function to process kthread_worker
     770             :  * @worker_ptr: pointer to initialized kthread_worker
     771             :  *
     772             :  * This function implements the main cycle of kthread worker. It processes
     773             :  * work_list until it is stopped with kthread_stop(). It sleeps when the queue
     774             :  * is empty.
     775             :  *
     776             :  * The works are not allowed to keep any locks, disable preemption or interrupts
     777             :  * when they finish. There is defined a safe point for freezing when one work
     778             :  * finishes and before a new one is started.
     779             :  *
     780             :  * Also the works must not be handled by more than one worker at the same time,
     781             :  * see also kthread_queue_work().
     782             :  */
     783           0 : int kthread_worker_fn(void *worker_ptr)
     784             : {
     785           0 :         struct kthread_worker *worker = worker_ptr;
     786             :         struct kthread_work *work;
     787             : 
     788             :         /*
     789             :          * FIXME: Update the check and remove the assignment when all kthread
     790             :          * worker users are created using kthread_create_worker*() functions.
     791             :          */
     792           0 :         WARN_ON(worker->task && worker->task != current);
     793           0 :         worker->task = current;
     794             : 
     795           0 :         if (worker->flags & KTW_FREEZABLE)
     796           0 :                 set_freezable();
     797             : 
     798             : repeat:
     799           0 :         set_current_state(TASK_INTERRUPTIBLE);  /* mb paired w/ kthread_stop */
     800             : 
     801           0 :         if (kthread_should_stop()) {
     802           0 :                 __set_current_state(TASK_RUNNING);
     803           0 :                 raw_spin_lock_irq(&worker->lock);
     804           0 :                 worker->task = NULL;
     805           0 :                 raw_spin_unlock_irq(&worker->lock);
     806           0 :                 return 0;
     807             :         }
     808             : 
     809           0 :         work = NULL;
     810           0 :         raw_spin_lock_irq(&worker->lock);
     811           0 :         if (!list_empty(&worker->work_list)) {
     812           0 :                 work = list_first_entry(&worker->work_list,
     813             :                                         struct kthread_work, node);
     814           0 :                 list_del_init(&work->node);
     815             :         }
     816           0 :         worker->current_work = work;
     817           0 :         raw_spin_unlock_irq(&worker->lock);
     818             : 
     819           0 :         if (work) {
     820           0 :                 kthread_work_func_t func = work->func;
     821           0 :                 __set_current_state(TASK_RUNNING);
     822           0 :                 trace_sched_kthread_work_execute_start(work);
     823           0 :                 work->func(work);
     824             :                 /*
     825             :                  * Avoid dereferencing work after this point.  The trace
     826             :                  * event only cares about the address.
     827             :                  */
     828           0 :                 trace_sched_kthread_work_execute_end(work, func);
     829           0 :         } else if (!freezing(current))
     830           0 :                 schedule();
     831             : 
     832           0 :         try_to_freeze();
     833           0 :         cond_resched();
     834           0 :         goto repeat;
     835             : }
     836             : EXPORT_SYMBOL_GPL(kthread_worker_fn);
     837             : 
     838             : static __printf(3, 0) struct kthread_worker *
     839           0 : __kthread_create_worker(int cpu, unsigned int flags,
     840             :                         const char namefmt[], va_list args)
     841             : {
     842             :         struct kthread_worker *worker;
     843             :         struct task_struct *task;
     844           0 :         int node = NUMA_NO_NODE;
     845             : 
     846           0 :         worker = kzalloc(sizeof(*worker), GFP_KERNEL);
     847           0 :         if (!worker)
     848             :                 return ERR_PTR(-ENOMEM);
     849             : 
     850           0 :         kthread_init_worker(worker);
     851             : 
     852           0 :         if (cpu >= 0)
     853           0 :                 node = cpu_to_node(cpu);
     854             : 
     855           0 :         task = __kthread_create_on_node(kthread_worker_fn, worker,
     856             :                                                 node, namefmt, args);
     857           0 :         if (IS_ERR(task))
     858             :                 goto fail_task;
     859             : 
     860           0 :         if (cpu >= 0)
     861           0 :                 kthread_bind(task, cpu);
     862             : 
     863           0 :         worker->flags = flags;
     864           0 :         worker->task = task;
     865           0 :         wake_up_process(task);
     866           0 :         return worker;
     867             : 
     868             : fail_task:
     869           0 :         kfree(worker);
     870           0 :         return ERR_CAST(task);
     871             : }
     872             : 
     873             : /**
     874             :  * kthread_create_worker - create a kthread worker
     875             :  * @flags: flags modifying the default behavior of the worker
     876             :  * @namefmt: printf-style name for the kthread worker (task).
     877             :  *
     878             :  * Returns a pointer to the allocated worker on success, ERR_PTR(-ENOMEM)
     879             :  * when the needed structures could not get allocated, and ERR_PTR(-EINTR)
     880             :  * when the caller was killed by a fatal signal.
     881             :  */
     882             : struct kthread_worker *
     883           0 : kthread_create_worker(unsigned int flags, const char namefmt[], ...)
     884             : {
     885             :         struct kthread_worker *worker;
     886             :         va_list args;
     887             : 
     888           0 :         va_start(args, namefmt);
     889           0 :         worker = __kthread_create_worker(-1, flags, namefmt, args);
     890           0 :         va_end(args);
     891             : 
     892           0 :         return worker;
     893             : }
     894             : EXPORT_SYMBOL(kthread_create_worker);
     895             : 
     896             : /**
     897             :  * kthread_create_worker_on_cpu - create a kthread worker and bind it
     898             :  *      to a given CPU and the associated NUMA node.
     899             :  * @cpu: CPU number
     900             :  * @flags: flags modifying the default behavior of the worker
     901             :  * @namefmt: printf-style name for the kthread worker (task).
     902             :  *
     903             :  * Use a valid CPU number if you want to bind the kthread worker
     904             :  * to the given CPU and the associated NUMA node.
     905             :  *
     906             :  * A good practice is to add the cpu number also into the worker name.
     907             :  * For example, use kthread_create_worker_on_cpu(cpu, "helper/%d", cpu).
     908             :  *
     909             :  * CPU hotplug:
     910             :  * The kthread worker API is simple and generic. It just provides a way
     911             :  * to create, use, and destroy workers.
     912             :  *
     913             :  * It is up to the API user how to handle CPU hotplug. They have to decide
     914             :  * how to handle pending work items, prevent queuing new ones, and
     915             :  * restore the functionality when the CPU goes off and on. There are a
     916             :  * few catches:
     917             :  *
     918             :  *    - CPU affinity gets lost when it is scheduled on an offline CPU.
     919             :  *
     920             :  *    - The worker might not exist when the CPU was off when the user
     921             :  *      created the workers.
     922             :  *
     923             :  * Good practice is to implement two CPU hotplug callbacks and to
     924             :  * destroy/create the worker when the CPU goes down/up.
     925             :  *
     926             :  * Return:
     927             :  * The pointer to the allocated worker on success, ERR_PTR(-ENOMEM)
     928             :  * when the needed structures could not get allocated, and ERR_PTR(-EINTR)
     929             :  * when the caller was killed by a fatal signal.
     930             :  */
     931             : struct kthread_worker *
     932           0 : kthread_create_worker_on_cpu(int cpu, unsigned int flags,
     933             :                              const char namefmt[], ...)
     934             : {
     935             :         struct kthread_worker *worker;
     936             :         va_list args;
     937             : 
     938           0 :         va_start(args, namefmt);
     939           0 :         worker = __kthread_create_worker(cpu, flags, namefmt, args);
     940           0 :         va_end(args);
     941             : 
     942           0 :         return worker;
     943             : }
     944             : EXPORT_SYMBOL(kthread_create_worker_on_cpu);
     945             : 
     946             : /*
     947             :  * Returns true when the work could not be queued at the moment.
     948             :  * It happens when it is already pending in a worker list
     949             :  * or when it is being cancelled.
     950             :  */
     951             : static inline bool queuing_blocked(struct kthread_worker *worker,
     952             :                                    struct kthread_work *work)
     953             : {
     954             :         lockdep_assert_held(&worker->lock);
     955             : 
     956           0 :         return !list_empty(&work->node) || work->canceling;
     957             : }
     958             : 
     959           0 : static void kthread_insert_work_sanity_check(struct kthread_worker *worker,
     960             :                                              struct kthread_work *work)
     961             : {
     962             :         lockdep_assert_held(&worker->lock);
     963           0 :         WARN_ON_ONCE(!list_empty(&work->node));
     964             :         /* Do not use a work with >1 worker, see kthread_queue_work() */
     965           0 :         WARN_ON_ONCE(work->worker && work->worker != worker);
     966           0 : }
     967             : 
     968             : /* insert @work before @pos in @worker */
     969           0 : static void kthread_insert_work(struct kthread_worker *worker,
     970             :                                 struct kthread_work *work,
     971             :                                 struct list_head *pos)
     972             : {
     973           0 :         kthread_insert_work_sanity_check(worker, work);
     974             : 
     975           0 :         trace_sched_kthread_work_queue_work(worker, work);
     976             : 
     977           0 :         list_add_tail(&work->node, pos);
     978           0 :         work->worker = worker;
     979           0 :         if (!worker->current_work && likely(worker->task))
     980           0 :                 wake_up_process(worker->task);
     981           0 : }
     982             : 
     983             : /**
     984             :  * kthread_queue_work - queue a kthread_work
     985             :  * @worker: target kthread_worker
     986             :  * @work: kthread_work to queue
     987             :  *
     988             :  * Queue @work to work processor @task for async execution.  @task
     989             :  * must have been created with kthread_worker_create().  Returns %true
     990             :  * if @work was successfully queued, %false if it was already pending.
     991             :  *
     992             :  * Reinitialize the work if it needs to be used by another worker.
     993             :  * For example, when the worker was stopped and started again.
     994             :  */
     995           0 : bool kthread_queue_work(struct kthread_worker *worker,
     996             :                         struct kthread_work *work)
     997             : {
     998           0 :         bool ret = false;
     999             :         unsigned long flags;
    1000             : 
    1001           0 :         raw_spin_lock_irqsave(&worker->lock, flags);
    1002           0 :         if (!queuing_blocked(worker, work)) {
    1003           0 :                 kthread_insert_work(worker, work, &worker->work_list);
    1004           0 :                 ret = true;
    1005             :         }
    1006           0 :         raw_spin_unlock_irqrestore(&worker->lock, flags);
    1007           0 :         return ret;
    1008             : }
    1009             : EXPORT_SYMBOL_GPL(kthread_queue_work);
    1010             : 
    1011             : /**
    1012             :  * kthread_delayed_work_timer_fn - callback that queues the associated kthread
    1013             :  *      delayed work when the timer expires.
    1014             :  * @t: pointer to the expired timer
    1015             :  *
    1016             :  * The format of the function is defined by struct timer_list.
    1017             :  * It should have been called from irqsafe timer with irq already off.
    1018             :  */
    1019           0 : void kthread_delayed_work_timer_fn(struct timer_list *t)
    1020             : {
    1021           0 :         struct kthread_delayed_work *dwork = from_timer(dwork, t, timer);
    1022           0 :         struct kthread_work *work = &dwork->work;
    1023           0 :         struct kthread_worker *worker = work->worker;
    1024             :         unsigned long flags;
    1025             : 
    1026             :         /*
    1027             :          * This might happen when a pending work is reinitialized.
    1028             :          * It means that it is used a wrong way.
    1029             :          */
    1030           0 :         if (WARN_ON_ONCE(!worker))
    1031             :                 return;
    1032             : 
    1033           0 :         raw_spin_lock_irqsave(&worker->lock, flags);
    1034             :         /* Work must not be used with >1 worker, see kthread_queue_work(). */
    1035           0 :         WARN_ON_ONCE(work->worker != worker);
    1036             : 
    1037             :         /* Move the work from worker->delayed_work_list. */
    1038           0 :         WARN_ON_ONCE(list_empty(&work->node));
    1039           0 :         list_del_init(&work->node);
    1040           0 :         if (!work->canceling)
    1041           0 :                 kthread_insert_work(worker, work, &worker->work_list);
    1042             : 
    1043           0 :         raw_spin_unlock_irqrestore(&worker->lock, flags);
    1044             : }
    1045             : EXPORT_SYMBOL(kthread_delayed_work_timer_fn);
    1046             : 
    1047           0 : static void __kthread_queue_delayed_work(struct kthread_worker *worker,
    1048             :                                          struct kthread_delayed_work *dwork,
    1049             :                                          unsigned long delay)
    1050             : {
    1051           0 :         struct timer_list *timer = &dwork->timer;
    1052           0 :         struct kthread_work *work = &dwork->work;
    1053             : 
    1054           0 :         WARN_ON_ONCE(timer->function != kthread_delayed_work_timer_fn);
    1055             : 
    1056             :         /*
    1057             :          * If @delay is 0, queue @dwork->work immediately.  This is for
    1058             :          * both optimization and correctness.  The earliest @timer can
    1059             :          * expire is on the closest next tick and delayed_work users depend
    1060             :          * on that there's no such delay when @delay is 0.
    1061             :          */
    1062           0 :         if (!delay) {
    1063           0 :                 kthread_insert_work(worker, work, &worker->work_list);
    1064           0 :                 return;
    1065             :         }
    1066             : 
    1067             :         /* Be paranoid and try to detect possible races already now. */
    1068           0 :         kthread_insert_work_sanity_check(worker, work);
    1069             : 
    1070           0 :         list_add(&work->node, &worker->delayed_work_list);
    1071           0 :         work->worker = worker;
    1072           0 :         timer->expires = jiffies + delay;
    1073           0 :         add_timer(timer);
    1074             : }
    1075             : 
    1076             : /**
    1077             :  * kthread_queue_delayed_work - queue the associated kthread work
    1078             :  *      after a delay.
    1079             :  * @worker: target kthread_worker
    1080             :  * @dwork: kthread_delayed_work to queue
    1081             :  * @delay: number of jiffies to wait before queuing
    1082             :  *
    1083             :  * If the work has not been pending it starts a timer that will queue
    1084             :  * the work after the given @delay. If @delay is zero, it queues the
    1085             :  * work immediately.
    1086             :  *
    1087             :  * Return: %false if the @work has already been pending. It means that
    1088             :  * either the timer was running or the work was queued. It returns %true
    1089             :  * otherwise.
    1090             :  */
    1091           0 : bool kthread_queue_delayed_work(struct kthread_worker *worker,
    1092             :                                 struct kthread_delayed_work *dwork,
    1093             :                                 unsigned long delay)
    1094             : {
    1095           0 :         struct kthread_work *work = &dwork->work;
    1096             :         unsigned long flags;
    1097           0 :         bool ret = false;
    1098             : 
    1099           0 :         raw_spin_lock_irqsave(&worker->lock, flags);
    1100             : 
    1101           0 :         if (!queuing_blocked(worker, work)) {
    1102           0 :                 __kthread_queue_delayed_work(worker, dwork, delay);
    1103           0 :                 ret = true;
    1104             :         }
    1105             : 
    1106           0 :         raw_spin_unlock_irqrestore(&worker->lock, flags);
    1107           0 :         return ret;
    1108             : }
    1109             : EXPORT_SYMBOL_GPL(kthread_queue_delayed_work);
    1110             : 
    1111             : struct kthread_flush_work {
    1112             :         struct kthread_work     work;
    1113             :         struct completion       done;
    1114             : };
    1115             : 
    1116           0 : static void kthread_flush_work_fn(struct kthread_work *work)
    1117             : {
    1118           0 :         struct kthread_flush_work *fwork =
    1119           0 :                 container_of(work, struct kthread_flush_work, work);
    1120           0 :         complete(&fwork->done);
    1121           0 : }
    1122             : 
    1123             : /**
    1124             :  * kthread_flush_work - flush a kthread_work
    1125             :  * @work: work to flush
    1126             :  *
    1127             :  * If @work is queued or executing, wait for it to finish execution.
    1128             :  */
    1129           0 : void kthread_flush_work(struct kthread_work *work)
    1130             : {
    1131           0 :         struct kthread_flush_work fwork = {
    1132             :                 KTHREAD_WORK_INIT(fwork.work, kthread_flush_work_fn),
    1133           0 :                 COMPLETION_INITIALIZER_ONSTACK(fwork.done),
    1134             :         };
    1135             :         struct kthread_worker *worker;
    1136           0 :         bool noop = false;
    1137             : 
    1138           0 :         worker = work->worker;
    1139           0 :         if (!worker)
    1140           0 :                 return;
    1141             : 
    1142           0 :         raw_spin_lock_irq(&worker->lock);
    1143             :         /* Work must not be used with >1 worker, see kthread_queue_work(). */
    1144           0 :         WARN_ON_ONCE(work->worker != worker);
    1145             : 
    1146           0 :         if (!list_empty(&work->node))
    1147           0 :                 kthread_insert_work(worker, &fwork.work, work->node.next);
    1148           0 :         else if (worker->current_work == work)
    1149           0 :                 kthread_insert_work(worker, &fwork.work,
    1150             :                                     worker->work_list.next);
    1151             :         else
    1152             :                 noop = true;
    1153             : 
    1154           0 :         raw_spin_unlock_irq(&worker->lock);
    1155             : 
    1156           0 :         if (!noop)
    1157           0 :                 wait_for_completion(&fwork.done);
    1158             : }
    1159             : EXPORT_SYMBOL_GPL(kthread_flush_work);
    1160             : 
    1161             : /*
    1162             :  * Make sure that the timer is neither set nor running and could
    1163             :  * not manipulate the work list_head any longer.
    1164             :  *
    1165             :  * The function is called under worker->lock. The lock is temporary
    1166             :  * released but the timer can't be set again in the meantime.
    1167             :  */
    1168           0 : static void kthread_cancel_delayed_work_timer(struct kthread_work *work,
    1169             :                                               unsigned long *flags)
    1170             : {
    1171           0 :         struct kthread_delayed_work *dwork =
    1172           0 :                 container_of(work, struct kthread_delayed_work, work);
    1173           0 :         struct kthread_worker *worker = work->worker;
    1174             : 
    1175             :         /*
    1176             :          * del_timer_sync() must be called to make sure that the timer
    1177             :          * callback is not running. The lock must be temporary released
    1178             :          * to avoid a deadlock with the callback. In the meantime,
    1179             :          * any queuing is blocked by setting the canceling counter.
    1180             :          */
    1181           0 :         work->canceling++;
    1182           0 :         raw_spin_unlock_irqrestore(&worker->lock, *flags);
    1183           0 :         del_timer_sync(&dwork->timer);
    1184           0 :         raw_spin_lock_irqsave(&worker->lock, *flags);
    1185           0 :         work->canceling--;
    1186           0 : }
    1187             : 
    1188             : /*
    1189             :  * This function removes the work from the worker queue.
    1190             :  *
    1191             :  * It is called under worker->lock. The caller must make sure that
    1192             :  * the timer used by delayed work is not running, e.g. by calling
    1193             :  * kthread_cancel_delayed_work_timer().
    1194             :  *
    1195             :  * The work might still be in use when this function finishes. See the
    1196             :  * current_work proceed by the worker.
    1197             :  *
    1198             :  * Return: %true if @work was pending and successfully canceled,
    1199             :  *      %false if @work was not pending
    1200             :  */
    1201             : static bool __kthread_cancel_work(struct kthread_work *work)
    1202             : {
    1203             :         /*
    1204             :          * Try to remove the work from a worker list. It might either
    1205             :          * be from worker->work_list or from worker->delayed_work_list.
    1206             :          */
    1207           0 :         if (!list_empty(&work->node)) {
    1208           0 :                 list_del_init(&work->node);
    1209             :                 return true;
    1210             :         }
    1211             : 
    1212             :         return false;
    1213             : }
    1214             : 
    1215             : /**
    1216             :  * kthread_mod_delayed_work - modify delay of or queue a kthread delayed work
    1217             :  * @worker: kthread worker to use
    1218             :  * @dwork: kthread delayed work to queue
    1219             :  * @delay: number of jiffies to wait before queuing
    1220             :  *
    1221             :  * If @dwork is idle, equivalent to kthread_queue_delayed_work(). Otherwise,
    1222             :  * modify @dwork's timer so that it expires after @delay. If @delay is zero,
    1223             :  * @work is guaranteed to be queued immediately.
    1224             :  *
    1225             :  * Return: %false if @dwork was idle and queued, %true otherwise.
    1226             :  *
    1227             :  * A special case is when the work is being canceled in parallel.
    1228             :  * It might be caused either by the real kthread_cancel_delayed_work_sync()
    1229             :  * or yet another kthread_mod_delayed_work() call. We let the other command
    1230             :  * win and return %true here. The return value can be used for reference
    1231             :  * counting and the number of queued works stays the same. Anyway, the caller
    1232             :  * is supposed to synchronize these operations a reasonable way.
    1233             :  *
    1234             :  * This function is safe to call from any context including IRQ handler.
    1235             :  * See __kthread_cancel_work() and kthread_delayed_work_timer_fn()
    1236             :  * for details.
    1237             :  */
    1238           0 : bool kthread_mod_delayed_work(struct kthread_worker *worker,
    1239             :                               struct kthread_delayed_work *dwork,
    1240             :                               unsigned long delay)
    1241             : {
    1242           0 :         struct kthread_work *work = &dwork->work;
    1243             :         unsigned long flags;
    1244             :         int ret;
    1245             : 
    1246           0 :         raw_spin_lock_irqsave(&worker->lock, flags);
    1247             : 
    1248             :         /* Do not bother with canceling when never queued. */
    1249           0 :         if (!work->worker) {
    1250             :                 ret = false;
    1251             :                 goto fast_queue;
    1252             :         }
    1253             : 
    1254             :         /* Work must not be used with >1 worker, see kthread_queue_work() */
    1255           0 :         WARN_ON_ONCE(work->worker != worker);
    1256             : 
    1257             :         /*
    1258             :          * Temporary cancel the work but do not fight with another command
    1259             :          * that is canceling the work as well.
    1260             :          *
    1261             :          * It is a bit tricky because of possible races with another
    1262             :          * mod_delayed_work() and cancel_delayed_work() callers.
    1263             :          *
    1264             :          * The timer must be canceled first because worker->lock is released
    1265             :          * when doing so. But the work can be removed from the queue (list)
    1266             :          * only when it can be queued again so that the return value can
    1267             :          * be used for reference counting.
    1268             :          */
    1269           0 :         kthread_cancel_delayed_work_timer(work, &flags);
    1270           0 :         if (work->canceling) {
    1271             :                 /* The number of works in the queue does not change. */
    1272             :                 ret = true;
    1273             :                 goto out;
    1274             :         }
    1275           0 :         ret = __kthread_cancel_work(work);
    1276             : 
    1277             : fast_queue:
    1278           0 :         __kthread_queue_delayed_work(worker, dwork, delay);
    1279             : out:
    1280           0 :         raw_spin_unlock_irqrestore(&worker->lock, flags);
    1281           0 :         return ret;
    1282             : }
    1283             : EXPORT_SYMBOL_GPL(kthread_mod_delayed_work);
    1284             : 
    1285           0 : static bool __kthread_cancel_work_sync(struct kthread_work *work, bool is_dwork)
    1286             : {
    1287           0 :         struct kthread_worker *worker = work->worker;
    1288             :         unsigned long flags;
    1289           0 :         int ret = false;
    1290             : 
    1291           0 :         if (!worker)
    1292             :                 goto out;
    1293             : 
    1294           0 :         raw_spin_lock_irqsave(&worker->lock, flags);
    1295             :         /* Work must not be used with >1 worker, see kthread_queue_work(). */
    1296           0 :         WARN_ON_ONCE(work->worker != worker);
    1297             : 
    1298           0 :         if (is_dwork)
    1299           0 :                 kthread_cancel_delayed_work_timer(work, &flags);
    1300             : 
    1301           0 :         ret = __kthread_cancel_work(work);
    1302             : 
    1303           0 :         if (worker->current_work != work)
    1304             :                 goto out_fast;
    1305             : 
    1306             :         /*
    1307             :          * The work is in progress and we need to wait with the lock released.
    1308             :          * In the meantime, block any queuing by setting the canceling counter.
    1309             :          */
    1310           0 :         work->canceling++;
    1311           0 :         raw_spin_unlock_irqrestore(&worker->lock, flags);
    1312           0 :         kthread_flush_work(work);
    1313           0 :         raw_spin_lock_irqsave(&worker->lock, flags);
    1314           0 :         work->canceling--;
    1315             : 
    1316             : out_fast:
    1317           0 :         raw_spin_unlock_irqrestore(&worker->lock, flags);
    1318             : out:
    1319           0 :         return ret;
    1320             : }
    1321             : 
    1322             : /**
    1323             :  * kthread_cancel_work_sync - cancel a kthread work and wait for it to finish
    1324             :  * @work: the kthread work to cancel
    1325             :  *
    1326             :  * Cancel @work and wait for its execution to finish.  This function
    1327             :  * can be used even if the work re-queues itself. On return from this
    1328             :  * function, @work is guaranteed to be not pending or executing on any CPU.
    1329             :  *
    1330             :  * kthread_cancel_work_sync(&delayed_work->work) must not be used for
    1331             :  * delayed_work's. Use kthread_cancel_delayed_work_sync() instead.
    1332             :  *
    1333             :  * The caller must ensure that the worker on which @work was last
    1334             :  * queued can't be destroyed before this function returns.
    1335             :  *
    1336             :  * Return: %true if @work was pending, %false otherwise.
    1337             :  */
    1338           0 : bool kthread_cancel_work_sync(struct kthread_work *work)
    1339             : {
    1340           0 :         return __kthread_cancel_work_sync(work, false);
    1341             : }
    1342             : EXPORT_SYMBOL_GPL(kthread_cancel_work_sync);
    1343             : 
    1344             : /**
    1345             :  * kthread_cancel_delayed_work_sync - cancel a kthread delayed work and
    1346             :  *      wait for it to finish.
    1347             :  * @dwork: the kthread delayed work to cancel
    1348             :  *
    1349             :  * This is kthread_cancel_work_sync() for delayed works.
    1350             :  *
    1351             :  * Return: %true if @dwork was pending, %false otherwise.
    1352             :  */
    1353           0 : bool kthread_cancel_delayed_work_sync(struct kthread_delayed_work *dwork)
    1354             : {
    1355           0 :         return __kthread_cancel_work_sync(&dwork->work, true);
    1356             : }
    1357             : EXPORT_SYMBOL_GPL(kthread_cancel_delayed_work_sync);
    1358             : 
    1359             : /**
    1360             :  * kthread_flush_worker - flush all current works on a kthread_worker
    1361             :  * @worker: worker to flush
    1362             :  *
    1363             :  * Wait until all currently executing or pending works on @worker are
    1364             :  * finished.
    1365             :  */
    1366           0 : void kthread_flush_worker(struct kthread_worker *worker)
    1367             : {
    1368           0 :         struct kthread_flush_work fwork = {
    1369             :                 KTHREAD_WORK_INIT(fwork.work, kthread_flush_work_fn),
    1370           0 :                 COMPLETION_INITIALIZER_ONSTACK(fwork.done),
    1371             :         };
    1372             : 
    1373           0 :         kthread_queue_work(worker, &fwork.work);
    1374           0 :         wait_for_completion(&fwork.done);
    1375           0 : }
    1376             : EXPORT_SYMBOL_GPL(kthread_flush_worker);
    1377             : 
    1378             : /**
    1379             :  * kthread_destroy_worker - destroy a kthread worker
    1380             :  * @worker: worker to be destroyed
    1381             :  *
    1382             :  * Flush and destroy @worker.  The simple flush is enough because the kthread
    1383             :  * worker API is used only in trivial scenarios.  There are no multi-step state
    1384             :  * machines needed.
    1385             :  *
    1386             :  * Note that this function is not responsible for handling delayed work, so
    1387             :  * caller should be responsible for queuing or canceling all delayed work items
    1388             :  * before invoke this function.
    1389             :  */
    1390           0 : void kthread_destroy_worker(struct kthread_worker *worker)
    1391             : {
    1392             :         struct task_struct *task;
    1393             : 
    1394           0 :         task = worker->task;
    1395           0 :         if (WARN_ON(!task))
    1396             :                 return;
    1397             : 
    1398           0 :         kthread_flush_worker(worker);
    1399           0 :         kthread_stop(task);
    1400           0 :         WARN_ON(!list_empty(&worker->delayed_work_list));
    1401           0 :         WARN_ON(!list_empty(&worker->work_list));
    1402           0 :         kfree(worker);
    1403             : }
    1404             : EXPORT_SYMBOL(kthread_destroy_worker);
    1405             : 
    1406             : /**
    1407             :  * kthread_use_mm - make the calling kthread operate on an address space
    1408             :  * @mm: address space to operate on
    1409             :  */
    1410           0 : void kthread_use_mm(struct mm_struct *mm)
    1411             : {
    1412             :         struct mm_struct *active_mm;
    1413           0 :         struct task_struct *tsk = current;
    1414             : 
    1415           0 :         WARN_ON_ONCE(!(tsk->flags & PF_KTHREAD));
    1416           0 :         WARN_ON_ONCE(tsk->mm);
    1417             : 
    1418           0 :         task_lock(tsk);
    1419             :         /* Hold off tlb flush IPIs while switching mm's */
    1420             :         local_irq_disable();
    1421           0 :         active_mm = tsk->active_mm;
    1422           0 :         if (active_mm != mm) {
    1423           0 :                 mmgrab(mm);
    1424           0 :                 tsk->active_mm = mm;
    1425             :         }
    1426           0 :         tsk->mm = mm;
    1427           0 :         membarrier_update_current_mm(mm);
    1428           0 :         switch_mm_irqs_off(active_mm, mm, tsk);
    1429             :         local_irq_enable();
    1430           0 :         task_unlock(tsk);
    1431             : #ifdef finish_arch_post_lock_switch
    1432             :         finish_arch_post_lock_switch();
    1433             : #endif
    1434             : 
    1435             :         /*
    1436             :          * When a kthread starts operating on an address space, the loop
    1437             :          * in membarrier_{private,global}_expedited() may not observe
    1438             :          * that tsk->mm, and not issue an IPI. Membarrier requires a
    1439             :          * memory barrier after storing to tsk->mm, before accessing
    1440             :          * user-space memory. A full memory barrier for membarrier
    1441             :          * {PRIVATE,GLOBAL}_EXPEDITED is implicitly provided by
    1442             :          * mmdrop(), or explicitly with smp_mb().
    1443             :          */
    1444           0 :         if (active_mm != mm)
    1445             :                 mmdrop(active_mm);
    1446             :         else
    1447           0 :                 smp_mb();
    1448           0 : }
    1449             : EXPORT_SYMBOL_GPL(kthread_use_mm);
    1450             : 
    1451             : /**
    1452             :  * kthread_unuse_mm - reverse the effect of kthread_use_mm()
    1453             :  * @mm: address space to operate on
    1454             :  */
    1455           0 : void kthread_unuse_mm(struct mm_struct *mm)
    1456             : {
    1457           0 :         struct task_struct *tsk = current;
    1458             : 
    1459           0 :         WARN_ON_ONCE(!(tsk->flags & PF_KTHREAD));
    1460           0 :         WARN_ON_ONCE(!tsk->mm);
    1461             : 
    1462           0 :         task_lock(tsk);
    1463             :         /*
    1464             :          * When a kthread stops operating on an address space, the loop
    1465             :          * in membarrier_{private,global}_expedited() may not observe
    1466             :          * that tsk->mm, and not issue an IPI. Membarrier requires a
    1467             :          * memory barrier after accessing user-space memory, before
    1468             :          * clearing tsk->mm.
    1469             :          */
    1470             :         smp_mb__after_spinlock();
    1471           0 :         sync_mm_rss(mm);
    1472             :         local_irq_disable();
    1473           0 :         tsk->mm = NULL;
    1474           0 :         membarrier_update_current_mm(NULL);
    1475             :         /* active_mm is still 'mm' */
    1476           0 :         enter_lazy_tlb(mm, tsk);
    1477             :         local_irq_enable();
    1478           0 :         task_unlock(tsk);
    1479           0 : }
    1480             : EXPORT_SYMBOL_GPL(kthread_unuse_mm);
    1481             : 
    1482             : #ifdef CONFIG_BLK_CGROUP
    1483             : /**
    1484             :  * kthread_associate_blkcg - associate blkcg to current kthread
    1485             :  * @css: the cgroup info
    1486             :  *
    1487             :  * Current thread must be a kthread. The thread is running jobs on behalf of
    1488             :  * other threads. In some cases, we expect the jobs attach cgroup info of
    1489             :  * original threads instead of that of current thread. This function stores
    1490             :  * original thread's cgroup info in current kthread context for later
    1491             :  * retrieval.
    1492             :  */
    1493             : void kthread_associate_blkcg(struct cgroup_subsys_state *css)
    1494             : {
    1495             :         struct kthread *kthread;
    1496             : 
    1497             :         if (!(current->flags & PF_KTHREAD))
    1498             :                 return;
    1499             :         kthread = to_kthread(current);
    1500             :         if (!kthread)
    1501             :                 return;
    1502             : 
    1503             :         if (kthread->blkcg_css) {
    1504             :                 css_put(kthread->blkcg_css);
    1505             :                 kthread->blkcg_css = NULL;
    1506             :         }
    1507             :         if (css) {
    1508             :                 css_get(css);
    1509             :                 kthread->blkcg_css = css;
    1510             :         }
    1511             : }
    1512             : EXPORT_SYMBOL(kthread_associate_blkcg);
    1513             : 
    1514             : /**
    1515             :  * kthread_blkcg - get associated blkcg css of current kthread
    1516             :  *
    1517             :  * Current thread must be a kthread.
    1518             :  */
    1519             : struct cgroup_subsys_state *kthread_blkcg(void)
    1520             : {
    1521             :         struct kthread *kthread;
    1522             : 
    1523             :         if (current->flags & PF_KTHREAD) {
    1524             :                 kthread = to_kthread(current);
    1525             :                 if (kthread)
    1526             :                         return kthread->blkcg_css;
    1527             :         }
    1528             :         return NULL;
    1529             : }
    1530             : #endif

Generated by: LCOV version 1.14