1
2
3
4
5
6
7
8#include <uapi/linux/sched/types.h>
9#include <linux/sched.h>
10#include <linux/sched/task.h>
11#include <linux/kthread.h>
12#include <linux/completion.h>
13#include <linux/err.h>
14#include <linux/cpuset.h>
15#include <linux/unistd.h>
16#include <linux/file.h>
17#include <linux/export.h>
18#include <linux/mutex.h>
19#include <linux/slab.h>
20#include <linux/freezer.h>
21#include <linux/ptrace.h>
22#include <linux/uaccess.h>
23#include <linux/numa.h>
24#include <trace/events/sched.h>
25
26static DEFINE_SPINLOCK(kthread_create_lock);
27static LIST_HEAD(kthread_create_list);
28struct task_struct *kthreadd_task;
29
30struct kthread_create_info
31{
32
33 int (*threadfn)(void *data);
34 void *data;
35 int node;
36
37
38 struct task_struct *result;
39 struct completion *done;
40
41 struct list_head list;
42};
43
44struct kthread {
45 unsigned long flags;
46 unsigned int cpu;
47 void *data;
48 struct completion parked;
49 struct completion exited;
50#ifdef CONFIG_BLK_CGROUP
51 struct cgroup_subsys_state *blkcg_css;
52#endif
53};
54
55enum KTHREAD_BITS {
56 KTHREAD_IS_PER_CPU = 0,
57 KTHREAD_SHOULD_STOP,
58 KTHREAD_SHOULD_PARK,
59};
60
61static inline void set_kthread_struct(void *kthread)
62{
63
64
65
66
67
68 current->set_child_tid = (__force void __user *)kthread;
69}
70
71static inline struct kthread *to_kthread(struct task_struct *k)
72{
73 WARN_ON(!(k->flags & PF_KTHREAD));
74 return (__force void *)k->set_child_tid;
75}
76
77void free_kthread_struct(struct task_struct *k)
78{
79 struct kthread *kthread;
80
81
82
83
84
85 kthread = to_kthread(k);
86#ifdef CONFIG_BLK_CGROUP
87 WARN_ON_ONCE(kthread && kthread->blkcg_css);
88#endif
89 kfree(kthread);
90}
91
92
93
94
95
96
97
98
99bool kthread_should_stop(void)
100{
101 return test_bit(KTHREAD_SHOULD_STOP, &to_kthread(current)->flags);
102}
103EXPORT_SYMBOL(kthread_should_stop);
104
105bool __kthread_should_park(struct task_struct *k)
106{
107 return test_bit(KTHREAD_SHOULD_PARK, &to_kthread(k)->flags);
108}
109EXPORT_SYMBOL_GPL(__kthread_should_park);
110
111
112
113
114
115
116
117
118
119
120
121
122bool kthread_should_park(void)
123{
124 return __kthread_should_park(current);
125}
126EXPORT_SYMBOL_GPL(kthread_should_park);
127
128
129
130
131
132
133
134
135
136
137bool kthread_freezable_should_stop(bool *was_frozen)
138{
139 bool frozen = false;
140
141 might_sleep();
142
143 if (unlikely(freezing(current)))
144 frozen = __refrigerator(true);
145
146 if (was_frozen)
147 *was_frozen = frozen;
148
149 return kthread_should_stop();
150}
151EXPORT_SYMBOL_GPL(kthread_freezable_should_stop);
152
153
154
155
156
157
158
159
160
161void *kthread_data(struct task_struct *task)
162{
163 return to_kthread(task)->data;
164}
165
166
167
168
169
170
171
172
173
174
175void *kthread_probe_data(struct task_struct *task)
176{
177 struct kthread *kthread = to_kthread(task);
178 void *data = NULL;
179
180 probe_kernel_read(&data, &kthread->data, sizeof(data));
181 return data;
182}
183
184static void __kthread_parkme(struct kthread *self)
185{
186 for (;;) {
187
188
189
190
191
192
193
194
195
196 set_special_state(TASK_PARKED);
197 if (!test_bit(KTHREAD_SHOULD_PARK, &self->flags))
198 break;
199
200 complete(&self->parked);
201 schedule();
202 }
203 __set_current_state(TASK_RUNNING);
204}
205
206void kthread_parkme(void)
207{
208 __kthread_parkme(to_kthread(current));
209}
210EXPORT_SYMBOL_GPL(kthread_parkme);
211
212static int kthread(void *_create)
213{
214
215 struct kthread_create_info *create = _create;
216 int (*threadfn)(void *data) = create->threadfn;
217 void *data = create->data;
218 struct completion *done;
219 struct kthread *self;
220 int ret;
221
222 self = kzalloc(sizeof(*self), GFP_KERNEL);
223 set_kthread_struct(self);
224
225
226 done = xchg(&create->done, NULL);
227 if (!done) {
228 kfree(create);
229 do_exit(-EINTR);
230 }
231
232 if (!self) {
233 create->result = ERR_PTR(-ENOMEM);
234 complete(done);
235 do_exit(-ENOMEM);
236 }
237
238 self->data = data;
239 init_completion(&self->exited);
240 init_completion(&self->parked);
241 current->vfork_done = &self->exited;
242
243
244 __set_current_state(TASK_UNINTERRUPTIBLE);
245 create->result = current;
246 complete(done);
247 schedule();
248
249 ret = -EINTR;
250 if (!test_bit(KTHREAD_SHOULD_STOP, &self->flags)) {
251 cgroup_kthread_ready();
252 __kthread_parkme(self);
253 ret = threadfn(data);
254 }
255 do_exit(ret);
256}
257
258
259int tsk_fork_get_node(struct task_struct *tsk)
260{
261#ifdef CONFIG_NUMA
262 if (tsk == kthreadd_task)
263 return tsk->pref_node_fork;
264#endif
265 return NUMA_NO_NODE;
266}
267
268static void create_kthread(struct kthread_create_info *create)
269{
270 int pid;
271
272#ifdef CONFIG_NUMA
273 current->pref_node_fork = create->node;
274#endif
275
276 pid = kernel_thread(kthread, create, CLONE_FS | CLONE_FILES | SIGCHLD);
277 if (pid < 0) {
278
279 struct completion *done = xchg(&create->done, NULL);
280
281 if (!done) {
282 kfree(create);
283 return;
284 }
285 create->result = ERR_PTR(pid);
286 complete(done);
287 }
288}
289
290static __printf(4, 0)
291struct task_struct *__kthread_create_on_node(int (*threadfn)(void *data),
292 void *data, int node,
293 const char namefmt[],
294 va_list args)
295{
296 DECLARE_COMPLETION_ONSTACK(done);
297 struct task_struct *task;
298 struct kthread_create_info *create = kmalloc(sizeof(*create),
299 GFP_KERNEL);
300
301 if (!create)
302 return ERR_PTR(-ENOMEM);
303 create->threadfn = threadfn;
304 create->data = data;
305 create->node = node;
306 create->done = &done;
307
308 spin_lock(&kthread_create_lock);
309 list_add_tail(&create->list, &kthread_create_list);
310 spin_unlock(&kthread_create_lock);
311
312 wake_up_process(kthreadd_task);
313
314
315
316
317
318 if (unlikely(wait_for_completion_killable(&done))) {
319
320
321
322
323
324 if (xchg(&create->done, NULL))
325 return ERR_PTR(-EINTR);
326
327
328
329
330 wait_for_completion(&done);
331 }
332 task = create->result;
333 if (!IS_ERR(task)) {
334 static const struct sched_param param = { .sched_priority = 0 };
335 char name[TASK_COMM_LEN];
336
337
338
339
340
341 vsnprintf(name, sizeof(name), namefmt, args);
342 set_task_comm(task, name);
343
344
345
346
347 sched_setscheduler_nocheck(task, SCHED_NORMAL, ¶m);
348 set_cpus_allowed_ptr(task, cpu_all_mask);
349 }
350 kfree(create);
351 return task;
352}
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377struct task_struct *kthread_create_on_node(int (*threadfn)(void *data),
378 void *data, int node,
379 const char namefmt[],
380 ...)
381{
382 struct task_struct *task;
383 va_list args;
384
385 va_start(args, namefmt);
386 task = __kthread_create_on_node(threadfn, data, node, namefmt, args);
387 va_end(args);
388
389 return task;
390}
391EXPORT_SYMBOL(kthread_create_on_node);
392
393static void __kthread_bind_mask(struct task_struct *p, const struct cpumask *mask, long state)
394{
395 unsigned long flags;
396
397 if (!wait_task_inactive(p, state)) {
398 WARN_ON(1);
399 return;
400 }
401
402
403 raw_spin_lock_irqsave(&p->pi_lock, flags);
404 do_set_cpus_allowed(p, mask);
405 p->flags |= PF_NO_SETAFFINITY;
406 raw_spin_unlock_irqrestore(&p->pi_lock, flags);
407}
408
409static void __kthread_bind(struct task_struct *p, unsigned int cpu, long state)
410{
411 __kthread_bind_mask(p, cpumask_of(cpu), state);
412}
413
414void kthread_bind_mask(struct task_struct *p, const struct cpumask *mask)
415{
416 __kthread_bind_mask(p, mask, TASK_UNINTERRUPTIBLE);
417}
418
419
420
421
422
423
424
425
426
427
428void kthread_bind(struct task_struct *p, unsigned int cpu)
429{
430 __kthread_bind(p, cpu, TASK_UNINTERRUPTIBLE);
431}
432EXPORT_SYMBOL(kthread_bind);
433
434
435
436
437
438
439
440
441
442
443
444
445struct task_struct *kthread_create_on_cpu(int (*threadfn)(void *data),
446 void *data, unsigned int cpu,
447 const char *namefmt)
448{
449 struct task_struct *p;
450
451 p = kthread_create_on_node(threadfn, data, cpu_to_node(cpu), namefmt,
452 cpu);
453 if (IS_ERR(p))
454 return p;
455 kthread_bind(p, cpu);
456
457 set_bit(KTHREAD_IS_PER_CPU, &to_kthread(p)->flags);
458 to_kthread(p)->cpu = cpu;
459 return p;
460}
461
462
463
464
465
466
467
468
469
470void kthread_unpark(struct task_struct *k)
471{
472 struct kthread *kthread = to_kthread(k);
473
474
475
476
477
478 if (test_bit(KTHREAD_IS_PER_CPU, &kthread->flags))
479 __kthread_bind(k, kthread->cpu, TASK_PARKED);
480
481 clear_bit(KTHREAD_SHOULD_PARK, &kthread->flags);
482
483
484
485 wake_up_state(k, TASK_PARKED);
486}
487EXPORT_SYMBOL_GPL(kthread_unpark);
488
489
490
491
492
493
494
495
496
497
498
499
500
501int kthread_park(struct task_struct *k)
502{
503 struct kthread *kthread = to_kthread(k);
504
505 if (WARN_ON(k->flags & PF_EXITING))
506 return -ENOSYS;
507
508 if (WARN_ON_ONCE(test_bit(KTHREAD_SHOULD_PARK, &kthread->flags)))
509 return -EBUSY;
510
511 set_bit(KTHREAD_SHOULD_PARK, &kthread->flags);
512 if (k != current) {
513 wake_up_process(k);
514
515
516
517
518 wait_for_completion(&kthread->parked);
519
520
521
522
523 WARN_ON_ONCE(!wait_task_inactive(k, TASK_PARKED));
524 }
525
526 return 0;
527}
528EXPORT_SYMBOL_GPL(kthread_park);
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545int kthread_stop(struct task_struct *k)
546{
547 struct kthread *kthread;
548 int ret;
549
550 trace_sched_kthread_stop(k);
551
552 get_task_struct(k);
553 kthread = to_kthread(k);
554 set_bit(KTHREAD_SHOULD_STOP, &kthread->flags);
555 kthread_unpark(k);
556 wake_up_process(k);
557 wait_for_completion(&kthread->exited);
558 ret = k->exit_code;
559 put_task_struct(k);
560
561 trace_sched_kthread_stop_ret(ret);
562 return ret;
563}
564EXPORT_SYMBOL(kthread_stop);
565
566int kthreadd(void *unused)
567{
568 struct task_struct *tsk = current;
569
570
571 set_task_comm(tsk, "kthreadd");
572 ignore_signals(tsk);
573 set_cpus_allowed_ptr(tsk, cpu_all_mask);
574 set_mems_allowed(node_states[N_MEMORY]);
575
576 current->flags |= PF_NOFREEZE;
577 cgroup_init_kthreadd();
578
579 for (;;) {
580 set_current_state(TASK_INTERRUPTIBLE);
581 if (list_empty(&kthread_create_list))
582 schedule();
583 __set_current_state(TASK_RUNNING);
584
585 spin_lock(&kthread_create_lock);
586 while (!list_empty(&kthread_create_list)) {
587 struct kthread_create_info *create;
588
589 create = list_entry(kthread_create_list.next,
590 struct kthread_create_info, list);
591 list_del_init(&create->list);
592 spin_unlock(&kthread_create_lock);
593
594 create_kthread(create);
595
596 spin_lock(&kthread_create_lock);
597 }
598 spin_unlock(&kthread_create_lock);
599 }
600
601 return 0;
602}
603
604void __kthread_init_worker(struct kthread_worker *worker,
605 const char *name,
606 struct lock_class_key *key)
607{
608 memset(worker, 0, sizeof(struct kthread_worker));
609 raw_spin_lock_init(&worker->lock);
610 lockdep_set_class_and_name(&worker->lock, key, name);
611 INIT_LIST_HEAD(&worker->work_list);
612 INIT_LIST_HEAD(&worker->delayed_work_list);
613}
614EXPORT_SYMBOL_GPL(__kthread_init_worker);
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631int kthread_worker_fn(void *worker_ptr)
632{
633 struct kthread_worker *worker = worker_ptr;
634 struct kthread_work *work;
635
636
637
638
639
640 WARN_ON(worker->task && worker->task != current);
641 worker->task = current;
642
643 if (worker->flags & KTW_FREEZABLE)
644 set_freezable();
645
646repeat:
647 set_current_state(TASK_INTERRUPTIBLE);
648
649 if (kthread_should_stop()) {
650 __set_current_state(TASK_RUNNING);
651 raw_spin_lock_irq(&worker->lock);
652 worker->task = NULL;
653 raw_spin_unlock_irq(&worker->lock);
654 return 0;
655 }
656
657 work = NULL;
658 raw_spin_lock_irq(&worker->lock);
659 if (!list_empty(&worker->work_list)) {
660 work = list_first_entry(&worker->work_list,
661 struct kthread_work, node);
662 list_del_init(&work->node);
663 }
664 worker->current_work = work;
665 raw_spin_unlock_irq(&worker->lock);
666
667 if (work) {
668 __set_current_state(TASK_RUNNING);
669 work->func(work);
670 } else if (!freezing(current))
671 schedule();
672
673 try_to_freeze();
674 cond_resched();
675 goto repeat;
676}
677EXPORT_SYMBOL_GPL(kthread_worker_fn);
678
679static __printf(3, 0) struct kthread_worker *
680__kthread_create_worker(int cpu, unsigned int flags,
681 const char namefmt[], va_list args)
682{
683 struct kthread_worker *worker;
684 struct task_struct *task;
685 int node = NUMA_NO_NODE;
686
687 worker = kzalloc(sizeof(*worker), GFP_KERNEL);
688 if (!worker)
689 return ERR_PTR(-ENOMEM);
690
691 kthread_init_worker(worker);
692
693 if (cpu >= 0)
694 node = cpu_to_node(cpu);
695
696 task = __kthread_create_on_node(kthread_worker_fn, worker,
697 node, namefmt, args);
698 if (IS_ERR(task))
699 goto fail_task;
700
701 if (cpu >= 0)
702 kthread_bind(task, cpu);
703
704 worker->flags = flags;
705 worker->task = task;
706 wake_up_process(task);
707 return worker;
708
709fail_task:
710 kfree(worker);
711 return ERR_CAST(task);
712}
713
714
715
716
717
718
719
720
721
722
723struct kthread_worker *
724kthread_create_worker(unsigned int flags, const char namefmt[], ...)
725{
726 struct kthread_worker *worker;
727 va_list args;
728
729 va_start(args, namefmt);
730 worker = __kthread_create_worker(-1, flags, namefmt, args);
731 va_end(args);
732
733 return worker;
734}
735EXPORT_SYMBOL(kthread_create_worker);
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754struct kthread_worker *
755kthread_create_worker_on_cpu(int cpu, unsigned int flags,
756 const char namefmt[], ...)
757{
758 struct kthread_worker *worker;
759 va_list args;
760
761 va_start(args, namefmt);
762 worker = __kthread_create_worker(cpu, flags, namefmt, args);
763 va_end(args);
764
765 return worker;
766}
767EXPORT_SYMBOL(kthread_create_worker_on_cpu);
768
769
770
771
772
773
774static inline bool queuing_blocked(struct kthread_worker *worker,
775 struct kthread_work *work)
776{
777 lockdep_assert_held(&worker->lock);
778
779 return !list_empty(&work->node) || work->canceling;
780}
781
782static void kthread_insert_work_sanity_check(struct kthread_worker *worker,
783 struct kthread_work *work)
784{
785 lockdep_assert_held(&worker->lock);
786 WARN_ON_ONCE(!list_empty(&work->node));
787
788 WARN_ON_ONCE(work->worker && work->worker != worker);
789}
790
791
792static void kthread_insert_work(struct kthread_worker *worker,
793 struct kthread_work *work,
794 struct list_head *pos)
795{
796 kthread_insert_work_sanity_check(worker, work);
797
798 list_add_tail(&work->node, pos);
799 work->worker = worker;
800 if (!worker->current_work && likely(worker->task))
801 wake_up_process(worker->task);
802}
803
804
805
806
807
808
809
810
811
812
813
814
815
816bool kthread_queue_work(struct kthread_worker *worker,
817 struct kthread_work *work)
818{
819 bool ret = false;
820 unsigned long flags;
821
822 raw_spin_lock_irqsave(&worker->lock, flags);
823 if (!queuing_blocked(worker, work)) {
824 kthread_insert_work(worker, work, &worker->work_list);
825 ret = true;
826 }
827 raw_spin_unlock_irqrestore(&worker->lock, flags);
828 return ret;
829}
830EXPORT_SYMBOL_GPL(kthread_queue_work);
831
832
833
834
835
836
837
838
839
840void kthread_delayed_work_timer_fn(struct timer_list *t)
841{
842 struct kthread_delayed_work *dwork = from_timer(dwork, t, timer);
843 struct kthread_work *work = &dwork->work;
844 struct kthread_worker *worker = work->worker;
845 unsigned long flags;
846
847
848
849
850
851 if (WARN_ON_ONCE(!worker))
852 return;
853
854 raw_spin_lock_irqsave(&worker->lock, flags);
855
856 WARN_ON_ONCE(work->worker != worker);
857
858
859 WARN_ON_ONCE(list_empty(&work->node));
860 list_del_init(&work->node);
861 kthread_insert_work(worker, work, &worker->work_list);
862
863 raw_spin_unlock_irqrestore(&worker->lock, flags);
864}
865EXPORT_SYMBOL(kthread_delayed_work_timer_fn);
866
867void __kthread_queue_delayed_work(struct kthread_worker *worker,
868 struct kthread_delayed_work *dwork,
869 unsigned long delay)
870{
871 struct timer_list *timer = &dwork->timer;
872 struct kthread_work *work = &dwork->work;
873
874 WARN_ON_ONCE(timer->function != kthread_delayed_work_timer_fn);
875
876
877
878
879
880
881
882 if (!delay) {
883 kthread_insert_work(worker, work, &worker->work_list);
884 return;
885 }
886
887
888 kthread_insert_work_sanity_check(worker, work);
889
890 list_add(&work->node, &worker->delayed_work_list);
891 work->worker = worker;
892 timer->expires = jiffies + delay;
893 add_timer(timer);
894}
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911bool kthread_queue_delayed_work(struct kthread_worker *worker,
912 struct kthread_delayed_work *dwork,
913 unsigned long delay)
914{
915 struct kthread_work *work = &dwork->work;
916 unsigned long flags;
917 bool ret = false;
918
919 raw_spin_lock_irqsave(&worker->lock, flags);
920
921 if (!queuing_blocked(worker, work)) {
922 __kthread_queue_delayed_work(worker, dwork, delay);
923 ret = true;
924 }
925
926 raw_spin_unlock_irqrestore(&worker->lock, flags);
927 return ret;
928}
929EXPORT_SYMBOL_GPL(kthread_queue_delayed_work);
930
931struct kthread_flush_work {
932 struct kthread_work work;
933 struct completion done;
934};
935
936static void kthread_flush_work_fn(struct kthread_work *work)
937{
938 struct kthread_flush_work *fwork =
939 container_of(work, struct kthread_flush_work, work);
940 complete(&fwork->done);
941}
942
943
944
945
946
947
948
949void kthread_flush_work(struct kthread_work *work)
950{
951 struct kthread_flush_work fwork = {
952 KTHREAD_WORK_INIT(fwork.work, kthread_flush_work_fn),
953 COMPLETION_INITIALIZER_ONSTACK(fwork.done),
954 };
955 struct kthread_worker *worker;
956 bool noop = false;
957
958 worker = work->worker;
959 if (!worker)
960 return;
961
962 raw_spin_lock_irq(&worker->lock);
963
964 WARN_ON_ONCE(work->worker != worker);
965
966 if (!list_empty(&work->node))
967 kthread_insert_work(worker, &fwork.work, work->node.next);
968 else if (worker->current_work == work)
969 kthread_insert_work(worker, &fwork.work,
970 worker->work_list.next);
971 else
972 noop = true;
973
974 raw_spin_unlock_irq(&worker->lock);
975
976 if (!noop)
977 wait_for_completion(&fwork.done);
978}
979EXPORT_SYMBOL_GPL(kthread_flush_work);
980
981
982
983
984
985
986
987
988
989
990
991static bool __kthread_cancel_work(struct kthread_work *work, bool is_dwork,
992 unsigned long *flags)
993{
994
995 if (is_dwork) {
996 struct kthread_delayed_work *dwork =
997 container_of(work, struct kthread_delayed_work, work);
998 struct kthread_worker *worker = work->worker;
999
1000
1001
1002
1003
1004
1005
1006 work->canceling++;
1007 raw_spin_unlock_irqrestore(&worker->lock, *flags);
1008 del_timer_sync(&dwork->timer);
1009 raw_spin_lock_irqsave(&worker->lock, *flags);
1010 work->canceling--;
1011 }
1012
1013
1014
1015
1016
1017 if (!list_empty(&work->node)) {
1018 list_del_init(&work->node);
1019 return true;
1020 }
1021
1022 return false;
1023}
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048bool kthread_mod_delayed_work(struct kthread_worker *worker,
1049 struct kthread_delayed_work *dwork,
1050 unsigned long delay)
1051{
1052 struct kthread_work *work = &dwork->work;
1053 unsigned long flags;
1054 int ret = false;
1055
1056 raw_spin_lock_irqsave(&worker->lock, flags);
1057
1058
1059 if (!work->worker)
1060 goto fast_queue;
1061
1062
1063 WARN_ON_ONCE(work->worker != worker);
1064
1065
1066 if (work->canceling)
1067 goto out;
1068
1069 ret = __kthread_cancel_work(work, true, &flags);
1070fast_queue:
1071 __kthread_queue_delayed_work(worker, dwork, delay);
1072out:
1073 raw_spin_unlock_irqrestore(&worker->lock, flags);
1074 return ret;
1075}
1076EXPORT_SYMBOL_GPL(kthread_mod_delayed_work);
1077
1078static bool __kthread_cancel_work_sync(struct kthread_work *work, bool is_dwork)
1079{
1080 struct kthread_worker *worker = work->worker;
1081 unsigned long flags;
1082 int ret = false;
1083
1084 if (!worker)
1085 goto out;
1086
1087 raw_spin_lock_irqsave(&worker->lock, flags);
1088
1089 WARN_ON_ONCE(work->worker != worker);
1090
1091 ret = __kthread_cancel_work(work, is_dwork, &flags);
1092
1093 if (worker->current_work != work)
1094 goto out_fast;
1095
1096
1097
1098
1099
1100 work->canceling++;
1101 raw_spin_unlock_irqrestore(&worker->lock, flags);
1102 kthread_flush_work(work);
1103 raw_spin_lock_irqsave(&worker->lock, flags);
1104 work->canceling--;
1105
1106out_fast:
1107 raw_spin_unlock_irqrestore(&worker->lock, flags);
1108out:
1109 return ret;
1110}
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128bool kthread_cancel_work_sync(struct kthread_work *work)
1129{
1130 return __kthread_cancel_work_sync(work, false);
1131}
1132EXPORT_SYMBOL_GPL(kthread_cancel_work_sync);
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143bool kthread_cancel_delayed_work_sync(struct kthread_delayed_work *dwork)
1144{
1145 return __kthread_cancel_work_sync(&dwork->work, true);
1146}
1147EXPORT_SYMBOL_GPL(kthread_cancel_delayed_work_sync);
1148
1149
1150
1151
1152
1153
1154
1155
1156void kthread_flush_worker(struct kthread_worker *worker)
1157{
1158 struct kthread_flush_work fwork = {
1159 KTHREAD_WORK_INIT(fwork.work, kthread_flush_work_fn),
1160 COMPLETION_INITIALIZER_ONSTACK(fwork.done),
1161 };
1162
1163 kthread_queue_work(worker, &fwork.work);
1164 wait_for_completion(&fwork.done);
1165}
1166EXPORT_SYMBOL_GPL(kthread_flush_worker);
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176void kthread_destroy_worker(struct kthread_worker *worker)
1177{
1178 struct task_struct *task;
1179
1180 task = worker->task;
1181 if (WARN_ON(!task))
1182 return;
1183
1184 kthread_flush_worker(worker);
1185 kthread_stop(task);
1186 WARN_ON(!list_empty(&worker->work_list));
1187 kfree(worker);
1188}
1189EXPORT_SYMBOL(kthread_destroy_worker);
1190
1191#ifdef CONFIG_BLK_CGROUP
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202void kthread_associate_blkcg(struct cgroup_subsys_state *css)
1203{
1204 struct kthread *kthread;
1205
1206 if (!(current->flags & PF_KTHREAD))
1207 return;
1208 kthread = to_kthread(current);
1209 if (!kthread)
1210 return;
1211
1212 if (kthread->blkcg_css) {
1213 css_put(kthread->blkcg_css);
1214 kthread->blkcg_css = NULL;
1215 }
1216 if (css) {
1217 css_get(css);
1218 kthread->blkcg_css = css;
1219 }
1220}
1221EXPORT_SYMBOL(kthread_associate_blkcg);
1222
1223
1224
1225
1226
1227
1228struct cgroup_subsys_state *kthread_blkcg(void)
1229{
1230 struct kthread *kthread;
1231
1232 if (current->flags & PF_KTHREAD) {
1233 kthread = to_kthread(current);
1234 if (kthread)
1235 return kthread->blkcg_css;
1236 }
1237 return NULL;
1238}
1239EXPORT_SYMBOL(kthread_blkcg);
1240#endif
1241