1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#include <linux/export.h>
27#include <linux/kernel.h>
28#include <linux/sched.h>
29#include <linux/init.h>
30#include <linux/signal.h>
31#include <linux/completion.h>
32#include <linux/workqueue.h>
33#include <linux/slab.h>
34#include <linux/cpu.h>
35#include <linux/notifier.h>
36#include <linux/kthread.h>
37#include <linux/hardirq.h>
38#include <linux/mempolicy.h>
39#include <linux/freezer.h>
40#include <linux/kallsyms.h>
41#include <linux/debug_locks.h>
42#include <linux/lockdep.h>
43#include <linux/idr.h>
44
45#include "workqueue_sched.h"
46
47enum {
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 GCWQ_DISASSOCIATED = 1 << 0,
65 GCWQ_FREEZING = 1 << 1,
66
67
68 POOL_MANAGE_WORKERS = 1 << 0,
69 POOL_MANAGING_WORKERS = 1 << 1,
70
71
72 WORKER_STARTED = 1 << 0,
73 WORKER_DIE = 1 << 1,
74 WORKER_IDLE = 1 << 2,
75 WORKER_PREP = 1 << 3,
76 WORKER_CPU_INTENSIVE = 1 << 6,
77 WORKER_UNBOUND = 1 << 7,
78
79 WORKER_NOT_RUNNING = WORKER_PREP | WORKER_UNBOUND |
80 WORKER_CPU_INTENSIVE,
81
82 NR_WORKER_POOLS = 2,
83
84 BUSY_WORKER_HASH_ORDER = 6,
85 BUSY_WORKER_HASH_SIZE = 1 << BUSY_WORKER_HASH_ORDER,
86 BUSY_WORKER_HASH_MASK = BUSY_WORKER_HASH_SIZE - 1,
87
88 MAX_IDLE_WORKERS_RATIO = 4,
89 IDLE_WORKER_TIMEOUT = 300 * HZ,
90
91 MAYDAY_INITIAL_TIMEOUT = HZ / 100 >= 2 ? HZ / 100 : 2,
92
93
94 MAYDAY_INTERVAL = HZ / 10,
95 CREATE_COOLDOWN = HZ,
96
97
98
99
100
101 RESCUER_NICE_LEVEL = -20,
102 HIGHPRI_NICE_LEVEL = -20,
103};
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126struct global_cwq;
127struct worker_pool;
128
129
130
131
132
133struct worker {
134
135 union {
136 struct list_head entry;
137 struct hlist_node hentry;
138 };
139
140 struct work_struct *current_work;
141 struct cpu_workqueue_struct *current_cwq;
142 struct list_head scheduled;
143 struct task_struct *task;
144 struct worker_pool *pool;
145
146 unsigned long last_active;
147 unsigned int flags;
148 int id;
149
150
151 struct work_struct rebind_work;
152};
153
154struct worker_pool {
155 struct global_cwq *gcwq;
156 unsigned int flags;
157
158 struct list_head worklist;
159 int nr_workers;
160
161
162 int nr_idle;
163
164 struct list_head idle_list;
165 struct timer_list idle_timer;
166 struct timer_list mayday_timer;
167
168 struct mutex assoc_mutex;
169 struct ida worker_ida;
170};
171
172
173
174
175
176
177struct global_cwq {
178 spinlock_t lock;
179 unsigned int cpu;
180 unsigned int flags;
181
182
183 struct hlist_head busy_hash[BUSY_WORKER_HASH_SIZE];
184
185
186 struct worker_pool pools[NR_WORKER_POOLS];
187
188} ____cacheline_aligned_in_smp;
189
190
191
192
193
194
195struct cpu_workqueue_struct {
196 struct worker_pool *pool;
197 struct workqueue_struct *wq;
198 int work_color;
199 int flush_color;
200 int nr_in_flight[WORK_NR_COLORS];
201
202 int nr_active;
203 int max_active;
204 struct list_head delayed_works;
205};
206
207
208
209
210struct wq_flusher {
211 struct list_head list;
212 int flush_color;
213 struct completion done;
214};
215
216
217
218
219
220#ifdef CONFIG_SMP
221typedef cpumask_var_t mayday_mask_t;
222#define mayday_test_and_set_cpu(cpu, mask) \
223 cpumask_test_and_set_cpu((cpu), (mask))
224#define mayday_clear_cpu(cpu, mask) cpumask_clear_cpu((cpu), (mask))
225#define for_each_mayday_cpu(cpu, mask) for_each_cpu((cpu), (mask))
226#define alloc_mayday_mask(maskp, gfp) zalloc_cpumask_var((maskp), (gfp))
227#define free_mayday_mask(mask) free_cpumask_var((mask))
228#else
229typedef unsigned long mayday_mask_t;
230#define mayday_test_and_set_cpu(cpu, mask) test_and_set_bit(0, &(mask))
231#define mayday_clear_cpu(cpu, mask) clear_bit(0, &(mask))
232#define for_each_mayday_cpu(cpu, mask) if ((cpu) = 0, (mask))
233#define alloc_mayday_mask(maskp, gfp) true
234#define free_mayday_mask(mask) do { } while (0)
235#endif
236
237
238
239
240
241struct workqueue_struct {
242 unsigned int flags;
243 union {
244 struct cpu_workqueue_struct __percpu *pcpu;
245 struct cpu_workqueue_struct *single;
246 unsigned long v;
247 } cpu_wq;
248 struct list_head list;
249
250 struct mutex flush_mutex;
251 int work_color;
252 int flush_color;
253 atomic_t nr_cwqs_to_flush;
254 struct wq_flusher *first_flusher;
255 struct list_head flusher_queue;
256 struct list_head flusher_overflow;
257
258 mayday_mask_t mayday_mask;
259 struct worker *rescuer;
260
261 int nr_drainers;
262 int saved_max_active;
263#ifdef CONFIG_LOCKDEP
264 struct lockdep_map lockdep_map;
265#endif
266 char name[];
267};
268
269struct workqueue_struct *system_wq __read_mostly;
270EXPORT_SYMBOL_GPL(system_wq);
271struct workqueue_struct *system_highpri_wq __read_mostly;
272EXPORT_SYMBOL_GPL(system_highpri_wq);
273struct workqueue_struct *system_long_wq __read_mostly;
274EXPORT_SYMBOL_GPL(system_long_wq);
275struct workqueue_struct *system_unbound_wq __read_mostly;
276EXPORT_SYMBOL_GPL(system_unbound_wq);
277struct workqueue_struct *system_freezable_wq __read_mostly;
278EXPORT_SYMBOL_GPL(system_freezable_wq);
279
280#define CREATE_TRACE_POINTS
281#include <trace/events/workqueue.h>
282
283#define for_each_worker_pool(pool, gcwq) \
284 for ((pool) = &(gcwq)->pools[0]; \
285 (pool) < &(gcwq)->pools[NR_WORKER_POOLS]; (pool)++)
286
287#define for_each_busy_worker(worker, i, pos, gcwq) \
288 for (i = 0; i < BUSY_WORKER_HASH_SIZE; i++) \
289 hlist_for_each_entry(worker, pos, &gcwq->busy_hash[i], hentry)
290
291static inline int __next_gcwq_cpu(int cpu, const struct cpumask *mask,
292 unsigned int sw)
293{
294 if (cpu < nr_cpu_ids) {
295 if (sw & 1) {
296 cpu = cpumask_next(cpu, mask);
297 if (cpu < nr_cpu_ids)
298 return cpu;
299 }
300 if (sw & 2)
301 return WORK_CPU_UNBOUND;
302 }
303 return WORK_CPU_NONE;
304}
305
306static inline int __next_wq_cpu(int cpu, const struct cpumask *mask,
307 struct workqueue_struct *wq)
308{
309 return __next_gcwq_cpu(cpu, mask, !(wq->flags & WQ_UNBOUND) ? 1 : 2);
310}
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325#define for_each_gcwq_cpu(cpu) \
326 for ((cpu) = __next_gcwq_cpu(-1, cpu_possible_mask, 3); \
327 (cpu) < WORK_CPU_NONE; \
328 (cpu) = __next_gcwq_cpu((cpu), cpu_possible_mask, 3))
329
330#define for_each_online_gcwq_cpu(cpu) \
331 for ((cpu) = __next_gcwq_cpu(-1, cpu_online_mask, 3); \
332 (cpu) < WORK_CPU_NONE; \
333 (cpu) = __next_gcwq_cpu((cpu), cpu_online_mask, 3))
334
335#define for_each_cwq_cpu(cpu, wq) \
336 for ((cpu) = __next_wq_cpu(-1, cpu_possible_mask, (wq)); \
337 (cpu) < WORK_CPU_NONE; \
338 (cpu) = __next_wq_cpu((cpu), cpu_possible_mask, (wq)))
339
340#ifdef CONFIG_DEBUG_OBJECTS_WORK
341
342static struct debug_obj_descr work_debug_descr;
343
344static void *work_debug_hint(void *addr)
345{
346 return ((struct work_struct *) addr)->func;
347}
348
349
350
351
352
353static int work_fixup_init(void *addr, enum debug_obj_state state)
354{
355 struct work_struct *work = addr;
356
357 switch (state) {
358 case ODEBUG_STATE_ACTIVE:
359 cancel_work_sync(work);
360 debug_object_init(work, &work_debug_descr);
361 return 1;
362 default:
363 return 0;
364 }
365}
366
367
368
369
370
371
372static int work_fixup_activate(void *addr, enum debug_obj_state state)
373{
374 struct work_struct *work = addr;
375
376 switch (state) {
377
378 case ODEBUG_STATE_NOTAVAILABLE:
379
380
381
382
383
384 if (test_bit(WORK_STRUCT_STATIC_BIT, work_data_bits(work))) {
385 debug_object_init(work, &work_debug_descr);
386 debug_object_activate(work, &work_debug_descr);
387 return 0;
388 }
389 WARN_ON_ONCE(1);
390 return 0;
391
392 case ODEBUG_STATE_ACTIVE:
393 WARN_ON(1);
394
395 default:
396 return 0;
397 }
398}
399
400
401
402
403
404static int work_fixup_free(void *addr, enum debug_obj_state state)
405{
406 struct work_struct *work = addr;
407
408 switch (state) {
409 case ODEBUG_STATE_ACTIVE:
410 cancel_work_sync(work);
411 debug_object_free(work, &work_debug_descr);
412 return 1;
413 default:
414 return 0;
415 }
416}
417
418static struct debug_obj_descr work_debug_descr = {
419 .name = "work_struct",
420 .debug_hint = work_debug_hint,
421 .fixup_init = work_fixup_init,
422 .fixup_activate = work_fixup_activate,
423 .fixup_free = work_fixup_free,
424};
425
426static inline void debug_work_activate(struct work_struct *work)
427{
428 debug_object_activate(work, &work_debug_descr);
429}
430
431static inline void debug_work_deactivate(struct work_struct *work)
432{
433 debug_object_deactivate(work, &work_debug_descr);
434}
435
436void __init_work(struct work_struct *work, int onstack)
437{
438 if (onstack)
439 debug_object_init_on_stack(work, &work_debug_descr);
440 else
441 debug_object_init(work, &work_debug_descr);
442}
443EXPORT_SYMBOL_GPL(__init_work);
444
445void destroy_work_on_stack(struct work_struct *work)
446{
447 debug_object_free(work, &work_debug_descr);
448}
449EXPORT_SYMBOL_GPL(destroy_work_on_stack);
450
451#else
452static inline void debug_work_activate(struct work_struct *work) { }
453static inline void debug_work_deactivate(struct work_struct *work) { }
454#endif
455
456
457static DEFINE_SPINLOCK(workqueue_lock);
458static LIST_HEAD(workqueues);
459static bool workqueue_freezing;
460
461
462
463
464
465
466static DEFINE_PER_CPU(struct global_cwq, global_cwq);
467static DEFINE_PER_CPU_SHARED_ALIGNED(atomic_t, pool_nr_running[NR_WORKER_POOLS]);
468
469
470
471
472
473
474static struct global_cwq unbound_global_cwq;
475static atomic_t unbound_pool_nr_running[NR_WORKER_POOLS] = {
476 [0 ... NR_WORKER_POOLS - 1] = ATOMIC_INIT(0),
477};
478
479static int worker_thread(void *__worker);
480
481static int worker_pool_pri(struct worker_pool *pool)
482{
483 return pool - pool->gcwq->pools;
484}
485
486static struct global_cwq *get_gcwq(unsigned int cpu)
487{
488 if (cpu != WORK_CPU_UNBOUND)
489 return &per_cpu(global_cwq, cpu);
490 else
491 return &unbound_global_cwq;
492}
493
494static atomic_t *get_pool_nr_running(struct worker_pool *pool)
495{
496 int cpu = pool->gcwq->cpu;
497 int idx = worker_pool_pri(pool);
498
499 if (cpu != WORK_CPU_UNBOUND)
500 return &per_cpu(pool_nr_running, cpu)[idx];
501 else
502 return &unbound_pool_nr_running[idx];
503}
504
505static struct cpu_workqueue_struct *get_cwq(unsigned int cpu,
506 struct workqueue_struct *wq)
507{
508 if (!(wq->flags & WQ_UNBOUND)) {
509 if (likely(cpu < nr_cpu_ids))
510 return per_cpu_ptr(wq->cpu_wq.pcpu, cpu);
511 } else if (likely(cpu == WORK_CPU_UNBOUND))
512 return wq->cpu_wq.single;
513 return NULL;
514}
515
516static unsigned int work_color_to_flags(int color)
517{
518 return color << WORK_STRUCT_COLOR_SHIFT;
519}
520
521static int get_work_color(struct work_struct *work)
522{
523 return (*work_data_bits(work) >> WORK_STRUCT_COLOR_SHIFT) &
524 ((1 << WORK_STRUCT_COLOR_BITS) - 1);
525}
526
527static int work_next_color(int color)
528{
529 return (color + 1) % WORK_NR_COLORS;
530}
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552static inline void set_work_data(struct work_struct *work, unsigned long data,
553 unsigned long flags)
554{
555 BUG_ON(!work_pending(work));
556 atomic_long_set(&work->data, data | flags | work_static(work));
557}
558
559static void set_work_cwq(struct work_struct *work,
560 struct cpu_workqueue_struct *cwq,
561 unsigned long extra_flags)
562{
563 set_work_data(work, (unsigned long)cwq,
564 WORK_STRUCT_PENDING | WORK_STRUCT_CWQ | extra_flags);
565}
566
567static void set_work_cpu_and_clear_pending(struct work_struct *work,
568 unsigned int cpu)
569{
570
571
572
573
574
575
576 smp_wmb();
577 set_work_data(work, (unsigned long)cpu << WORK_OFFQ_CPU_SHIFT, 0);
578}
579
580static void clear_work_data(struct work_struct *work)
581{
582 smp_wmb();
583 set_work_data(work, WORK_STRUCT_NO_CPU, 0);
584}
585
586static struct cpu_workqueue_struct *get_work_cwq(struct work_struct *work)
587{
588 unsigned long data = atomic_long_read(&work->data);
589
590 if (data & WORK_STRUCT_CWQ)
591 return (void *)(data & WORK_STRUCT_WQ_DATA_MASK);
592 else
593 return NULL;
594}
595
596static struct global_cwq *get_work_gcwq(struct work_struct *work)
597{
598 unsigned long data = atomic_long_read(&work->data);
599 unsigned int cpu;
600
601 if (data & WORK_STRUCT_CWQ)
602 return ((struct cpu_workqueue_struct *)
603 (data & WORK_STRUCT_WQ_DATA_MASK))->pool->gcwq;
604
605 cpu = data >> WORK_OFFQ_CPU_SHIFT;
606 if (cpu == WORK_CPU_NONE)
607 return NULL;
608
609 BUG_ON(cpu >= nr_cpu_ids && cpu != WORK_CPU_UNBOUND);
610 return get_gcwq(cpu);
611}
612
613static void mark_work_canceling(struct work_struct *work)
614{
615 struct global_cwq *gcwq = get_work_gcwq(work);
616 unsigned long cpu = gcwq ? gcwq->cpu : WORK_CPU_NONE;
617
618 set_work_data(work, (cpu << WORK_OFFQ_CPU_SHIFT) | WORK_OFFQ_CANCELING,
619 WORK_STRUCT_PENDING);
620}
621
622static bool work_is_canceling(struct work_struct *work)
623{
624 unsigned long data = atomic_long_read(&work->data);
625
626 return !(data & WORK_STRUCT_CWQ) && (data & WORK_OFFQ_CANCELING);
627}
628
629
630
631
632
633
634
635static bool __need_more_worker(struct worker_pool *pool)
636{
637 return !atomic_read(get_pool_nr_running(pool));
638}
639
640
641
642
643
644
645
646
647
648static bool need_more_worker(struct worker_pool *pool)
649{
650 return !list_empty(&pool->worklist) && __need_more_worker(pool);
651}
652
653
654static bool may_start_working(struct worker_pool *pool)
655{
656 return pool->nr_idle;
657}
658
659
660static bool keep_working(struct worker_pool *pool)
661{
662 atomic_t *nr_running = get_pool_nr_running(pool);
663
664 return !list_empty(&pool->worklist) && atomic_read(nr_running) <= 1;
665}
666
667
668static bool need_to_create_worker(struct worker_pool *pool)
669{
670 return need_more_worker(pool) && !may_start_working(pool);
671}
672
673
674static bool need_to_manage_workers(struct worker_pool *pool)
675{
676 return need_to_create_worker(pool) ||
677 (pool->flags & POOL_MANAGE_WORKERS);
678}
679
680
681static bool too_many_workers(struct worker_pool *pool)
682{
683 bool managing = pool->flags & POOL_MANAGING_WORKERS;
684 int nr_idle = pool->nr_idle + managing;
685 int nr_busy = pool->nr_workers - nr_idle;
686
687
688
689
690
691 if (list_empty(&pool->idle_list))
692 return false;
693
694 return nr_idle > 2 && (nr_idle - 2) * MAX_IDLE_WORKERS_RATIO >= nr_busy;
695}
696
697
698
699
700
701
702static struct worker *first_worker(struct worker_pool *pool)
703{
704 if (unlikely(list_empty(&pool->idle_list)))
705 return NULL;
706
707 return list_first_entry(&pool->idle_list, struct worker, entry);
708}
709
710
711
712
713
714
715
716
717
718
719static void wake_up_worker(struct worker_pool *pool)
720{
721 struct worker *worker = first_worker(pool);
722
723 if (likely(worker))
724 wake_up_process(worker->task);
725}
726
727
728
729
730
731
732
733
734
735
736
737
738void wq_worker_waking_up(struct task_struct *task, unsigned int cpu)
739{
740 struct worker *worker = kthread_data(task);
741
742 if (!(worker->flags & WORKER_NOT_RUNNING))
743 atomic_inc(get_pool_nr_running(worker->pool));
744}
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761struct task_struct *wq_worker_sleeping(struct task_struct *task,
762 unsigned int cpu)
763{
764 struct worker *worker = kthread_data(task), *to_wakeup = NULL;
765 struct worker_pool *pool = worker->pool;
766 atomic_t *nr_running = get_pool_nr_running(pool);
767
768 if (worker->flags & WORKER_NOT_RUNNING)
769 return NULL;
770
771
772 BUG_ON(cpu != raw_smp_processor_id());
773
774
775
776
777
778
779
780
781
782
783
784
785 if (atomic_dec_and_test(nr_running) && !list_empty(&pool->worklist))
786 to_wakeup = first_worker(pool);
787 return to_wakeup ? to_wakeup->task : NULL;
788}
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803static inline void worker_set_flags(struct worker *worker, unsigned int flags,
804 bool wakeup)
805{
806 struct worker_pool *pool = worker->pool;
807
808 WARN_ON_ONCE(worker->task != current);
809
810
811
812
813
814
815 if ((flags & WORKER_NOT_RUNNING) &&
816 !(worker->flags & WORKER_NOT_RUNNING)) {
817 atomic_t *nr_running = get_pool_nr_running(pool);
818
819 if (wakeup) {
820 if (atomic_dec_and_test(nr_running) &&
821 !list_empty(&pool->worklist))
822 wake_up_worker(pool);
823 } else
824 atomic_dec(nr_running);
825 }
826
827 worker->flags |= flags;
828}
829
830
831
832
833
834
835
836
837
838
839
840static inline void worker_clr_flags(struct worker *worker, unsigned int flags)
841{
842 struct worker_pool *pool = worker->pool;
843 unsigned int oflags = worker->flags;
844
845 WARN_ON_ONCE(worker->task != current);
846
847 worker->flags &= ~flags;
848
849
850
851
852
853
854 if ((flags & WORKER_NOT_RUNNING) && (oflags & WORKER_NOT_RUNNING))
855 if (!(worker->flags & WORKER_NOT_RUNNING))
856 atomic_inc(get_pool_nr_running(pool));
857}
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872static struct hlist_head *busy_worker_head(struct global_cwq *gcwq,
873 struct work_struct *work)
874{
875 const int base_shift = ilog2(sizeof(struct work_struct));
876 unsigned long v = (unsigned long)work;
877
878
879 v >>= base_shift;
880 v += v >> BUSY_WORKER_HASH_ORDER;
881 v &= BUSY_WORKER_HASH_MASK;
882
883 return &gcwq->busy_hash[v];
884}
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903static struct worker *__find_worker_executing_work(struct global_cwq *gcwq,
904 struct hlist_head *bwh,
905 struct work_struct *work)
906{
907 struct worker *worker;
908 struct hlist_node *tmp;
909
910 hlist_for_each_entry(worker, tmp, bwh, hentry)
911 if (worker->current_work == work)
912 return worker;
913 return NULL;
914}
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932static struct worker *find_worker_executing_work(struct global_cwq *gcwq,
933 struct work_struct *work)
934{
935 return __find_worker_executing_work(gcwq, busy_worker_head(gcwq, work),
936 work);
937}
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956static void move_linked_works(struct work_struct *work, struct list_head *head,
957 struct work_struct **nextp)
958{
959 struct work_struct *n;
960
961
962
963
964
965 list_for_each_entry_safe_from(work, n, NULL, entry) {
966 list_move_tail(&work->entry, head);
967 if (!(*work_data_bits(work) & WORK_STRUCT_LINKED))
968 break;
969 }
970
971
972
973
974
975
976 if (nextp)
977 *nextp = n;
978}
979
980static void cwq_activate_delayed_work(struct work_struct *work)
981{
982 struct cpu_workqueue_struct *cwq = get_work_cwq(work);
983
984 trace_workqueue_activate_work(work);
985 move_linked_works(work, &cwq->pool->worklist, NULL);
986 __clear_bit(WORK_STRUCT_DELAYED_BIT, work_data_bits(work));
987 cwq->nr_active++;
988}
989
990static void cwq_activate_first_delayed(struct cpu_workqueue_struct *cwq)
991{
992 struct work_struct *work = list_first_entry(&cwq->delayed_works,
993 struct work_struct, entry);
994
995 cwq_activate_delayed_work(work);
996}
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009static void cwq_dec_nr_in_flight(struct cpu_workqueue_struct *cwq, int color)
1010{
1011
1012 if (color == WORK_NO_COLOR)
1013 return;
1014
1015 cwq->nr_in_flight[color]--;
1016
1017 cwq->nr_active--;
1018 if (!list_empty(&cwq->delayed_works)) {
1019
1020 if (cwq->nr_active < cwq->max_active)
1021 cwq_activate_first_delayed(cwq);
1022 }
1023
1024
1025 if (likely(cwq->flush_color != color))
1026 return;
1027
1028
1029 if (cwq->nr_in_flight[color])
1030 return;
1031
1032
1033 cwq->flush_color = -1;
1034
1035
1036
1037
1038
1039 if (atomic_dec_and_test(&cwq->wq->nr_cwqs_to_flush))
1040 complete(&cwq->wq->first_flusher->done);
1041}
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068static int try_to_grab_pending(struct work_struct *work, bool is_dwork,
1069 unsigned long *flags)
1070{
1071 struct global_cwq *gcwq;
1072
1073 local_irq_save(*flags);
1074
1075
1076 if (is_dwork) {
1077 struct delayed_work *dwork = to_delayed_work(work);
1078
1079
1080
1081
1082
1083
1084 if (likely(del_timer(&dwork->timer)))
1085 return 1;
1086 }
1087
1088
1089 if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work)))
1090 return 0;
1091
1092
1093
1094
1095
1096 gcwq = get_work_gcwq(work);
1097 if (!gcwq)
1098 goto fail;
1099
1100 spin_lock(&gcwq->lock);
1101 if (!list_empty(&work->entry)) {
1102
1103
1104
1105
1106
1107 smp_rmb();
1108 if (gcwq == get_work_gcwq(work)) {
1109 debug_work_deactivate(work);
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119 if (*work_data_bits(work) & WORK_STRUCT_DELAYED)
1120 cwq_activate_delayed_work(work);
1121
1122 list_del_init(&work->entry);
1123 cwq_dec_nr_in_flight(get_work_cwq(work),
1124 get_work_color(work));
1125
1126 spin_unlock(&gcwq->lock);
1127 return 1;
1128 }
1129 }
1130 spin_unlock(&gcwq->lock);
1131fail:
1132 local_irq_restore(*flags);
1133 if (work_is_canceling(work))
1134 return -ENOENT;
1135 cpu_relax();
1136 return -EAGAIN;
1137}
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152static void insert_work(struct cpu_workqueue_struct *cwq,
1153 struct work_struct *work, struct list_head *head,
1154 unsigned int extra_flags)
1155{
1156 struct worker_pool *pool = cwq->pool;
1157
1158
1159 set_work_cwq(work, cwq, extra_flags);
1160
1161
1162
1163
1164
1165 smp_wmb();
1166
1167 list_add_tail(&work->entry, head);
1168
1169
1170
1171
1172
1173
1174 smp_mb();
1175
1176 if (__need_more_worker(pool))
1177 wake_up_worker(pool);
1178}
1179
1180
1181
1182
1183
1184
1185static bool is_chained_work(struct workqueue_struct *wq)
1186{
1187 unsigned long flags;
1188 unsigned int cpu;
1189
1190 for_each_gcwq_cpu(cpu) {
1191 struct global_cwq *gcwq = get_gcwq(cpu);
1192 struct worker *worker;
1193 struct hlist_node *pos;
1194 int i;
1195
1196 spin_lock_irqsave(&gcwq->lock, flags);
1197 for_each_busy_worker(worker, i, pos, gcwq) {
1198 if (worker->task != current)
1199 continue;
1200 spin_unlock_irqrestore(&gcwq->lock, flags);
1201
1202
1203
1204
1205 return worker->current_cwq->wq == wq;
1206 }
1207 spin_unlock_irqrestore(&gcwq->lock, flags);
1208 }
1209 return false;
1210}
1211
1212static void __queue_work(unsigned int cpu, struct workqueue_struct *wq,
1213 struct work_struct *work)
1214{
1215 struct global_cwq *gcwq;
1216 struct cpu_workqueue_struct *cwq;
1217 struct list_head *worklist;
1218 unsigned int work_flags;
1219 unsigned int req_cpu = cpu;
1220
1221
1222
1223
1224
1225
1226
1227 WARN_ON_ONCE(!irqs_disabled());
1228
1229 debug_work_activate(work);
1230
1231
1232 if (unlikely(wq->flags & WQ_DRAINING) &&
1233 WARN_ON_ONCE(!is_chained_work(wq)))
1234 return;
1235
1236
1237 if (!(wq->flags & WQ_UNBOUND)) {
1238 struct global_cwq *last_gcwq;
1239
1240 if (cpu == WORK_CPU_UNBOUND)
1241 cpu = raw_smp_processor_id();
1242
1243
1244
1245
1246
1247
1248
1249 gcwq = get_gcwq(cpu);
1250 last_gcwq = get_work_gcwq(work);
1251
1252 if (last_gcwq && last_gcwq != gcwq) {
1253 struct worker *worker;
1254
1255 spin_lock(&last_gcwq->lock);
1256
1257 worker = find_worker_executing_work(last_gcwq, work);
1258
1259 if (worker && worker->current_cwq->wq == wq)
1260 gcwq = last_gcwq;
1261 else {
1262
1263 spin_unlock(&last_gcwq->lock);
1264 spin_lock(&gcwq->lock);
1265 }
1266 } else {
1267 spin_lock(&gcwq->lock);
1268 }
1269 } else {
1270 gcwq = get_gcwq(WORK_CPU_UNBOUND);
1271 spin_lock(&gcwq->lock);
1272 }
1273
1274
1275 cwq = get_cwq(gcwq->cpu, wq);
1276 trace_workqueue_queue_work(req_cpu, cwq, work);
1277
1278 if (WARN_ON(!list_empty(&work->entry))) {
1279 spin_unlock(&gcwq->lock);
1280 return;
1281 }
1282
1283 cwq->nr_in_flight[cwq->work_color]++;
1284 work_flags = work_color_to_flags(cwq->work_color);
1285
1286 if (likely(cwq->nr_active < cwq->max_active)) {
1287 trace_workqueue_activate_work(work);
1288 cwq->nr_active++;
1289 worklist = &cwq->pool->worklist;
1290 } else {
1291 work_flags |= WORK_STRUCT_DELAYED;
1292 worklist = &cwq->delayed_works;
1293 }
1294
1295 insert_work(cwq, work, worklist, work_flags);
1296
1297 spin_unlock(&gcwq->lock);
1298}
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311bool queue_work_on(int cpu, struct workqueue_struct *wq,
1312 struct work_struct *work)
1313{
1314 bool ret = false;
1315 unsigned long flags;
1316
1317 local_irq_save(flags);
1318
1319 if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work))) {
1320 __queue_work(cpu, wq, work);
1321 ret = true;
1322 }
1323
1324 local_irq_restore(flags);
1325 return ret;
1326}
1327EXPORT_SYMBOL_GPL(queue_work_on);
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339bool queue_work(struct workqueue_struct *wq, struct work_struct *work)
1340{
1341 return queue_work_on(WORK_CPU_UNBOUND, wq, work);
1342}
1343EXPORT_SYMBOL_GPL(queue_work);
1344
1345void delayed_work_timer_fn(unsigned long __data)
1346{
1347 struct delayed_work *dwork = (struct delayed_work *)__data;
1348 struct cpu_workqueue_struct *cwq = get_work_cwq(&dwork->work);
1349
1350
1351 __queue_work(dwork->cpu, cwq->wq, &dwork->work);
1352}
1353EXPORT_SYMBOL_GPL(delayed_work_timer_fn);
1354
1355static void __queue_delayed_work(int cpu, struct workqueue_struct *wq,
1356 struct delayed_work *dwork, unsigned long delay)
1357{
1358 struct timer_list *timer = &dwork->timer;
1359 struct work_struct *work = &dwork->work;
1360 unsigned int lcpu;
1361
1362 WARN_ON_ONCE(timer->function != delayed_work_timer_fn ||
1363 timer->data != (unsigned long)dwork);
1364 WARN_ON_ONCE(timer_pending(timer));
1365 WARN_ON_ONCE(!list_empty(&work->entry));
1366
1367
1368
1369
1370
1371
1372
1373 if (!delay) {
1374 __queue_work(cpu, wq, &dwork->work);
1375 return;
1376 }
1377
1378 timer_stats_timer_set_start_info(&dwork->timer);
1379
1380
1381
1382
1383
1384
1385 if (!(wq->flags & WQ_UNBOUND)) {
1386 struct global_cwq *gcwq = get_work_gcwq(work);
1387
1388
1389
1390
1391
1392
1393 lcpu = cpu;
1394 if (gcwq)
1395 lcpu = gcwq->cpu;
1396 if (lcpu == WORK_CPU_UNBOUND)
1397 lcpu = raw_smp_processor_id();
1398 } else {
1399 lcpu = WORK_CPU_UNBOUND;
1400 }
1401
1402 set_work_cwq(work, get_cwq(lcpu, wq), 0);
1403
1404 dwork->cpu = cpu;
1405 timer->expires = jiffies + delay;
1406
1407 if (unlikely(cpu != WORK_CPU_UNBOUND))
1408 add_timer_on(timer, cpu);
1409 else
1410 add_timer(timer);
1411}
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424bool queue_delayed_work_on(int cpu, struct workqueue_struct *wq,
1425 struct delayed_work *dwork, unsigned long delay)
1426{
1427 struct work_struct *work = &dwork->work;
1428 bool ret = false;
1429 unsigned long flags;
1430
1431
1432 local_irq_save(flags);
1433
1434 if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work))) {
1435 __queue_delayed_work(cpu, wq, dwork, delay);
1436 ret = true;
1437 }
1438
1439 local_irq_restore(flags);
1440 return ret;
1441}
1442EXPORT_SYMBOL_GPL(queue_delayed_work_on);
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452bool queue_delayed_work(struct workqueue_struct *wq,
1453 struct delayed_work *dwork, unsigned long delay)
1454{
1455 return queue_delayed_work_on(WORK_CPU_UNBOUND, wq, dwork, delay);
1456}
1457EXPORT_SYMBOL_GPL(queue_delayed_work);
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477bool mod_delayed_work_on(int cpu, struct workqueue_struct *wq,
1478 struct delayed_work *dwork, unsigned long delay)
1479{
1480 unsigned long flags;
1481 int ret;
1482
1483 do {
1484 ret = try_to_grab_pending(&dwork->work, true, &flags);
1485 } while (unlikely(ret == -EAGAIN));
1486
1487 if (likely(ret >= 0)) {
1488 __queue_delayed_work(cpu, wq, dwork, delay);
1489 local_irq_restore(flags);
1490 }
1491
1492
1493 return ret;
1494}
1495EXPORT_SYMBOL_GPL(mod_delayed_work_on);
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505bool mod_delayed_work(struct workqueue_struct *wq, struct delayed_work *dwork,
1506 unsigned long delay)
1507{
1508 return mod_delayed_work_on(WORK_CPU_UNBOUND, wq, dwork, delay);
1509}
1510EXPORT_SYMBOL_GPL(mod_delayed_work);
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522static void worker_enter_idle(struct worker *worker)
1523{
1524 struct worker_pool *pool = worker->pool;
1525 struct global_cwq *gcwq = pool->gcwq;
1526
1527 BUG_ON(worker->flags & WORKER_IDLE);
1528 BUG_ON(!list_empty(&worker->entry) &&
1529 (worker->hentry.next || worker->hentry.pprev));
1530
1531
1532 worker->flags |= WORKER_IDLE;
1533 pool->nr_idle++;
1534 worker->last_active = jiffies;
1535
1536
1537 list_add(&worker->entry, &pool->idle_list);
1538
1539 if (too_many_workers(pool) && !timer_pending(&pool->idle_timer))
1540 mod_timer(&pool->idle_timer, jiffies + IDLE_WORKER_TIMEOUT);
1541
1542
1543
1544
1545
1546
1547
1548 WARN_ON_ONCE(!(gcwq->flags & GCWQ_DISASSOCIATED) &&
1549 pool->nr_workers == pool->nr_idle &&
1550 atomic_read(get_pool_nr_running(pool)));
1551}
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562static void worker_leave_idle(struct worker *worker)
1563{
1564 struct worker_pool *pool = worker->pool;
1565
1566 BUG_ON(!(worker->flags & WORKER_IDLE));
1567 worker_clr_flags(worker, WORKER_IDLE);
1568 pool->nr_idle--;
1569 list_del_init(&worker->entry);
1570}
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602static bool worker_maybe_bind_and_lock(struct worker *worker)
1603__acquires(&gcwq->lock)
1604{
1605 struct global_cwq *gcwq = worker->pool->gcwq;
1606 struct task_struct *task = worker->task;
1607
1608 while (true) {
1609
1610
1611
1612
1613
1614
1615 if (!(gcwq->flags & GCWQ_DISASSOCIATED))
1616 set_cpus_allowed_ptr(task, get_cpu_mask(gcwq->cpu));
1617
1618 spin_lock_irq(&gcwq->lock);
1619 if (gcwq->flags & GCWQ_DISASSOCIATED)
1620 return false;
1621 if (task_cpu(task) == gcwq->cpu &&
1622 cpumask_equal(¤t->cpus_allowed,
1623 get_cpu_mask(gcwq->cpu)))
1624 return true;
1625 spin_unlock_irq(&gcwq->lock);
1626
1627
1628
1629
1630
1631
1632
1633 cpu_relax();
1634 cond_resched();
1635 }
1636}
1637
1638
1639
1640
1641
1642static void idle_worker_rebind(struct worker *worker)
1643{
1644 struct global_cwq *gcwq = worker->pool->gcwq;
1645
1646
1647 if (worker_maybe_bind_and_lock(worker))
1648 worker_clr_flags(worker, WORKER_UNBOUND);
1649
1650
1651 list_add(&worker->entry, &worker->pool->idle_list);
1652 spin_unlock_irq(&gcwq->lock);
1653}
1654
1655
1656
1657
1658
1659
1660
1661static void busy_worker_rebind_fn(struct work_struct *work)
1662{
1663 struct worker *worker = container_of(work, struct worker, rebind_work);
1664 struct global_cwq *gcwq = worker->pool->gcwq;
1665
1666 if (worker_maybe_bind_and_lock(worker))
1667 worker_clr_flags(worker, WORKER_UNBOUND);
1668
1669 spin_unlock_irq(&gcwq->lock);
1670}
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694static void rebind_workers(struct global_cwq *gcwq)
1695{
1696 struct worker_pool *pool;
1697 struct worker *worker, *n;
1698 struct hlist_node *pos;
1699 int i;
1700
1701 lockdep_assert_held(&gcwq->lock);
1702
1703 for_each_worker_pool(pool, gcwq)
1704 lockdep_assert_held(&pool->assoc_mutex);
1705
1706
1707 for_each_worker_pool(pool, gcwq) {
1708 list_for_each_entry_safe(worker, n, &pool->idle_list, entry) {
1709
1710
1711
1712
1713
1714 list_del_init(&worker->entry);
1715
1716
1717
1718
1719
1720 wake_up_process(worker->task);
1721 }
1722 }
1723
1724
1725 for_each_busy_worker(worker, i, pos, gcwq) {
1726 struct work_struct *rebind_work = &worker->rebind_work;
1727 struct workqueue_struct *wq;
1728
1729 if (test_and_set_bit(WORK_STRUCT_PENDING_BIT,
1730 work_data_bits(rebind_work)))
1731 continue;
1732
1733 debug_work_activate(rebind_work);
1734
1735
1736
1737
1738
1739 if (worker_pool_pri(worker->pool))
1740 wq = system_highpri_wq;
1741 else
1742 wq = system_wq;
1743
1744 insert_work(get_cwq(gcwq->cpu, wq), rebind_work,
1745 worker->scheduled.next,
1746 work_color_to_flags(WORK_NO_COLOR));
1747 }
1748}
1749
1750static struct worker *alloc_worker(void)
1751{
1752 struct worker *worker;
1753
1754 worker = kzalloc(sizeof(*worker), GFP_KERNEL);
1755 if (worker) {
1756 INIT_LIST_HEAD(&worker->entry);
1757 INIT_LIST_HEAD(&worker->scheduled);
1758 INIT_WORK(&worker->rebind_work, busy_worker_rebind_fn);
1759
1760 worker->flags = WORKER_PREP;
1761 }
1762 return worker;
1763}
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779static struct worker *create_worker(struct worker_pool *pool)
1780{
1781 struct global_cwq *gcwq = pool->gcwq;
1782 const char *pri = worker_pool_pri(pool) ? "H" : "";
1783 struct worker *worker = NULL;
1784 int id = -1;
1785
1786 spin_lock_irq(&gcwq->lock);
1787 while (ida_get_new(&pool->worker_ida, &id)) {
1788 spin_unlock_irq(&gcwq->lock);
1789 if (!ida_pre_get(&pool->worker_ida, GFP_KERNEL))
1790 goto fail;
1791 spin_lock_irq(&gcwq->lock);
1792 }
1793 spin_unlock_irq(&gcwq->lock);
1794
1795 worker = alloc_worker();
1796 if (!worker)
1797 goto fail;
1798
1799 worker->pool = pool;
1800 worker->id = id;
1801
1802 if (gcwq->cpu != WORK_CPU_UNBOUND)
1803 worker->task = kthread_create_on_node(worker_thread,
1804 worker, cpu_to_node(gcwq->cpu),
1805 "kworker/%u:%d%s", gcwq->cpu, id, pri);
1806 else
1807 worker->task = kthread_create(worker_thread, worker,
1808 "kworker/u:%d%s", id, pri);
1809 if (IS_ERR(worker->task))
1810 goto fail;
1811
1812 if (worker_pool_pri(pool))
1813 set_user_nice(worker->task, HIGHPRI_NICE_LEVEL);
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824 if (!(gcwq->flags & GCWQ_DISASSOCIATED)) {
1825 kthread_bind(worker->task, gcwq->cpu);
1826 } else {
1827 worker->task->flags |= PF_THREAD_BOUND;
1828 worker->flags |= WORKER_UNBOUND;
1829 }
1830
1831 return worker;
1832fail:
1833 if (id >= 0) {
1834 spin_lock_irq(&gcwq->lock);
1835 ida_remove(&pool->worker_ida, id);
1836 spin_unlock_irq(&gcwq->lock);
1837 }
1838 kfree(worker);
1839 return NULL;
1840}
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851static void start_worker(struct worker *worker)
1852{
1853 worker->flags |= WORKER_STARTED;
1854 worker->pool->nr_workers++;
1855 worker_enter_idle(worker);
1856 wake_up_process(worker->task);
1857}
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868static void destroy_worker(struct worker *worker)
1869{
1870 struct worker_pool *pool = worker->pool;
1871 struct global_cwq *gcwq = pool->gcwq;
1872 int id = worker->id;
1873
1874
1875 BUG_ON(worker->current_work);
1876 BUG_ON(!list_empty(&worker->scheduled));
1877
1878 if (worker->flags & WORKER_STARTED)
1879 pool->nr_workers--;
1880 if (worker->flags & WORKER_IDLE)
1881 pool->nr_idle--;
1882
1883 list_del_init(&worker->entry);
1884 worker->flags |= WORKER_DIE;
1885
1886 spin_unlock_irq(&gcwq->lock);
1887
1888 kthread_stop(worker->task);
1889 kfree(worker);
1890
1891 spin_lock_irq(&gcwq->lock);
1892 ida_remove(&pool->worker_ida, id);
1893}
1894
1895static void idle_worker_timeout(unsigned long __pool)
1896{
1897 struct worker_pool *pool = (void *)__pool;
1898 struct global_cwq *gcwq = pool->gcwq;
1899
1900 spin_lock_irq(&gcwq->lock);
1901
1902 if (too_many_workers(pool)) {
1903 struct worker *worker;
1904 unsigned long expires;
1905
1906
1907 worker = list_entry(pool->idle_list.prev, struct worker, entry);
1908 expires = worker->last_active + IDLE_WORKER_TIMEOUT;
1909
1910 if (time_before(jiffies, expires))
1911 mod_timer(&pool->idle_timer, expires);
1912 else {
1913
1914 pool->flags |= POOL_MANAGE_WORKERS;
1915 wake_up_worker(pool);
1916 }
1917 }
1918
1919 spin_unlock_irq(&gcwq->lock);
1920}
1921
1922static bool send_mayday(struct work_struct *work)
1923{
1924 struct cpu_workqueue_struct *cwq = get_work_cwq(work);
1925 struct workqueue_struct *wq = cwq->wq;
1926 unsigned int cpu;
1927
1928 if (!(wq->flags & WQ_RESCUER))
1929 return false;
1930
1931
1932 cpu = cwq->pool->gcwq->cpu;
1933
1934 if (cpu == WORK_CPU_UNBOUND)
1935 cpu = 0;
1936 if (!mayday_test_and_set_cpu(cpu, wq->mayday_mask))
1937 wake_up_process(wq->rescuer->task);
1938 return true;
1939}
1940
1941static void gcwq_mayday_timeout(unsigned long __pool)
1942{
1943 struct worker_pool *pool = (void *)__pool;
1944 struct global_cwq *gcwq = pool->gcwq;
1945 struct work_struct *work;
1946
1947 spin_lock_irq(&gcwq->lock);
1948
1949 if (need_to_create_worker(pool)) {
1950
1951
1952
1953
1954
1955
1956 list_for_each_entry(work, &pool->worklist, entry)
1957 send_mayday(work);
1958 }
1959
1960 spin_unlock_irq(&gcwq->lock);
1961
1962 mod_timer(&pool->mayday_timer, jiffies + MAYDAY_INTERVAL);
1963}
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987static bool maybe_create_worker(struct worker_pool *pool)
1988__releases(&gcwq->lock)
1989__acquires(&gcwq->lock)
1990{
1991 struct global_cwq *gcwq = pool->gcwq;
1992
1993 if (!need_to_create_worker(pool))
1994 return false;
1995restart:
1996 spin_unlock_irq(&gcwq->lock);
1997
1998
1999 mod_timer(&pool->mayday_timer, jiffies + MAYDAY_INITIAL_TIMEOUT);
2000
2001 while (true) {
2002 struct worker *worker;
2003
2004 worker = create_worker(pool);
2005 if (worker) {
2006 del_timer_sync(&pool->mayday_timer);
2007 spin_lock_irq(&gcwq->lock);
2008 start_worker(worker);
2009 BUG_ON(need_to_create_worker(pool));
2010 return true;
2011 }
2012
2013 if (!need_to_create_worker(pool))
2014 break;
2015
2016 __set_current_state(TASK_INTERRUPTIBLE);
2017 schedule_timeout(CREATE_COOLDOWN);
2018
2019 if (!need_to_create_worker(pool))
2020 break;
2021 }
2022
2023 del_timer_sync(&pool->mayday_timer);
2024 spin_lock_irq(&gcwq->lock);
2025 if (need_to_create_worker(pool))
2026 goto restart;
2027 return true;
2028}
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045static bool maybe_destroy_workers(struct worker_pool *pool)
2046{
2047 bool ret = false;
2048
2049 while (too_many_workers(pool)) {
2050 struct worker *worker;
2051 unsigned long expires;
2052
2053 worker = list_entry(pool->idle_list.prev, struct worker, entry);
2054 expires = worker->last_active + IDLE_WORKER_TIMEOUT;
2055
2056 if (time_before(jiffies, expires)) {
2057 mod_timer(&pool->idle_timer, expires);
2058 break;
2059 }
2060
2061 destroy_worker(worker);
2062 ret = true;
2063 }
2064
2065 return ret;
2066}
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088static bool manage_workers(struct worker *worker)
2089{
2090 struct worker_pool *pool = worker->pool;
2091 bool ret = false;
2092
2093 if (pool->flags & POOL_MANAGING_WORKERS)
2094 return ret;
2095
2096 pool->flags |= POOL_MANAGING_WORKERS;
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110 if (unlikely(!mutex_trylock(&pool->assoc_mutex))) {
2111 spin_unlock_irq(&pool->gcwq->lock);
2112 mutex_lock(&pool->assoc_mutex);
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124 if (worker_maybe_bind_and_lock(worker))
2125 worker->flags &= ~WORKER_UNBOUND;
2126 else
2127 worker->flags |= WORKER_UNBOUND;
2128
2129 ret = true;
2130 }
2131
2132 pool->flags &= ~POOL_MANAGE_WORKERS;
2133
2134
2135
2136
2137
2138 ret |= maybe_destroy_workers(pool);
2139 ret |= maybe_create_worker(pool);
2140
2141 pool->flags &= ~POOL_MANAGING_WORKERS;
2142 mutex_unlock(&pool->assoc_mutex);
2143 return ret;
2144}
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160static void process_one_work(struct worker *worker, struct work_struct *work)
2161__releases(&gcwq->lock)
2162__acquires(&gcwq->lock)
2163{
2164 struct cpu_workqueue_struct *cwq = get_work_cwq(work);
2165 struct worker_pool *pool = worker->pool;
2166 struct global_cwq *gcwq = pool->gcwq;
2167 struct hlist_head *bwh = busy_worker_head(gcwq, work);
2168 bool cpu_intensive = cwq->wq->flags & WQ_CPU_INTENSIVE;
2169 work_func_t f = work->func;
2170 int work_color;
2171 struct worker *collision;
2172#ifdef CONFIG_LOCKDEP
2173
2174
2175
2176
2177
2178
2179
2180 struct lockdep_map lockdep_map;
2181
2182 lockdep_copy_map(&lockdep_map, &work->lockdep_map);
2183#endif
2184
2185
2186
2187
2188
2189 WARN_ON_ONCE(!(worker->flags & WORKER_UNBOUND) &&
2190 !(gcwq->flags & GCWQ_DISASSOCIATED) &&
2191 raw_smp_processor_id() != gcwq->cpu);
2192
2193
2194
2195
2196
2197
2198
2199 collision = __find_worker_executing_work(gcwq, bwh, work);
2200 if (unlikely(collision)) {
2201 move_linked_works(work, &collision->scheduled, NULL);
2202 return;
2203 }
2204
2205
2206 debug_work_deactivate(work);
2207 hlist_add_head(&worker->hentry, bwh);
2208 worker->current_work = work;
2209 worker->current_cwq = cwq;
2210 work_color = get_work_color(work);
2211
2212 list_del_init(&work->entry);
2213
2214
2215
2216
2217
2218 if (unlikely(cpu_intensive))
2219 worker_set_flags(worker, WORKER_CPU_INTENSIVE, true);
2220
2221
2222
2223
2224
2225 if ((worker->flags & WORKER_UNBOUND) && need_more_worker(pool))
2226 wake_up_worker(pool);
2227
2228
2229
2230
2231
2232
2233
2234 set_work_cpu_and_clear_pending(work, gcwq->cpu);
2235
2236 spin_unlock_irq(&gcwq->lock);
2237
2238 lock_map_acquire_read(&cwq->wq->lockdep_map);
2239 lock_map_acquire(&lockdep_map);
2240 trace_workqueue_execute_start(work);
2241 f(work);
2242
2243
2244
2245
2246 trace_workqueue_execute_end(work);
2247 lock_map_release(&lockdep_map);
2248 lock_map_release(&cwq->wq->lockdep_map);
2249
2250 if (unlikely(in_atomic() || lockdep_depth(current) > 0)) {
2251 pr_err("BUG: workqueue leaked lock or atomic: %s/0x%08x/%d\n"
2252 " last function: %pf\n",
2253 current->comm, preempt_count(), task_pid_nr(current), f);
2254 debug_show_held_locks(current);
2255 dump_stack();
2256 }
2257
2258 spin_lock_irq(&gcwq->lock);
2259
2260
2261 if (unlikely(cpu_intensive))
2262 worker_clr_flags(worker, WORKER_CPU_INTENSIVE);
2263
2264
2265 hlist_del_init(&worker->hentry);
2266 worker->current_work = NULL;
2267 worker->current_cwq = NULL;
2268 cwq_dec_nr_in_flight(cwq, work_color);
2269}
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283static void process_scheduled_works(struct worker *worker)
2284{
2285 while (!list_empty(&worker->scheduled)) {
2286 struct work_struct *work = list_first_entry(&worker->scheduled,
2287 struct work_struct, entry);
2288 process_one_work(worker, work);
2289 }
2290}
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302static int worker_thread(void *__worker)
2303{
2304 struct worker *worker = __worker;
2305 struct worker_pool *pool = worker->pool;
2306 struct global_cwq *gcwq = pool->gcwq;
2307
2308
2309 worker->task->flags |= PF_WQ_WORKER;
2310woke_up:
2311 spin_lock_irq(&gcwq->lock);
2312
2313
2314 if (unlikely(list_empty(&worker->entry))) {
2315 spin_unlock_irq(&gcwq->lock);
2316
2317
2318 if (worker->flags & WORKER_DIE) {
2319 worker->task->flags &= ~PF_WQ_WORKER;
2320 return 0;
2321 }
2322
2323
2324 idle_worker_rebind(worker);
2325 goto woke_up;
2326 }
2327
2328 worker_leave_idle(worker);
2329recheck:
2330
2331 if (!need_more_worker(pool))
2332 goto sleep;
2333
2334
2335 if (unlikely(!may_start_working(pool)) && manage_workers(worker))
2336 goto recheck;
2337
2338
2339
2340
2341
2342
2343 BUG_ON(!list_empty(&worker->scheduled));
2344
2345
2346
2347
2348
2349
2350 worker_clr_flags(worker, WORKER_PREP);
2351
2352 do {
2353 struct work_struct *work =
2354 list_first_entry(&pool->worklist,
2355 struct work_struct, entry);
2356
2357 if (likely(!(*work_data_bits(work) & WORK_STRUCT_LINKED))) {
2358
2359 process_one_work(worker, work);
2360 if (unlikely(!list_empty(&worker->scheduled)))
2361 process_scheduled_works(worker);
2362 } else {
2363 move_linked_works(work, &worker->scheduled, NULL);
2364 process_scheduled_works(worker);
2365 }
2366 } while (keep_working(pool));
2367
2368 worker_set_flags(worker, WORKER_PREP, false);
2369sleep:
2370 if (unlikely(need_to_manage_workers(pool)) && manage_workers(worker))
2371 goto recheck;
2372
2373
2374
2375
2376
2377
2378
2379
2380 worker_enter_idle(worker);
2381 __set_current_state(TASK_INTERRUPTIBLE);
2382 spin_unlock_irq(&gcwq->lock);
2383 schedule();
2384 goto woke_up;
2385}
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406static int rescuer_thread(void *__wq)
2407{
2408 struct workqueue_struct *wq = __wq;
2409 struct worker *rescuer = wq->rescuer;
2410 struct list_head *scheduled = &rescuer->scheduled;
2411 bool is_unbound = wq->flags & WQ_UNBOUND;
2412 unsigned int cpu;
2413
2414 set_user_nice(current, RESCUER_NICE_LEVEL);
2415repeat:
2416 set_current_state(TASK_INTERRUPTIBLE);
2417
2418 if (kthread_should_stop()) {
2419 __set_current_state(TASK_RUNNING);
2420 return 0;
2421 }
2422
2423
2424
2425
2426
2427 for_each_mayday_cpu(cpu, wq->mayday_mask) {
2428 unsigned int tcpu = is_unbound ? WORK_CPU_UNBOUND : cpu;
2429 struct cpu_workqueue_struct *cwq = get_cwq(tcpu, wq);
2430 struct worker_pool *pool = cwq->pool;
2431 struct global_cwq *gcwq = pool->gcwq;
2432 struct work_struct *work, *n;
2433
2434 __set_current_state(TASK_RUNNING);
2435 mayday_clear_cpu(cpu, wq->mayday_mask);
2436
2437
2438 rescuer->pool = pool;
2439 worker_maybe_bind_and_lock(rescuer);
2440
2441
2442
2443
2444
2445 BUG_ON(!list_empty(&rescuer->scheduled));
2446 list_for_each_entry_safe(work, n, &pool->worklist, entry)
2447 if (get_work_cwq(work) == cwq)
2448 move_linked_works(work, scheduled, &n);
2449
2450 process_scheduled_works(rescuer);
2451
2452
2453
2454
2455
2456
2457 if (keep_working(pool))
2458 wake_up_worker(pool);
2459
2460 spin_unlock_irq(&gcwq->lock);
2461 }
2462
2463 schedule();
2464 goto repeat;
2465}
2466
2467struct wq_barrier {
2468 struct work_struct work;
2469 struct completion done;
2470};
2471
2472static void wq_barrier_func(struct work_struct *work)
2473{
2474 struct wq_barrier *barr = container_of(work, struct wq_barrier, work);
2475 complete(&barr->done);
2476}
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502static void insert_wq_barrier(struct cpu_workqueue_struct *cwq,
2503 struct wq_barrier *barr,
2504 struct work_struct *target, struct worker *worker)
2505{
2506 struct list_head *head;
2507 unsigned int linked = 0;
2508
2509
2510
2511
2512
2513
2514
2515 INIT_WORK_ONSTACK(&barr->work, wq_barrier_func);
2516 __set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(&barr->work));
2517 init_completion(&barr->done);
2518
2519
2520
2521
2522
2523 if (worker)
2524 head = worker->scheduled.next;
2525 else {
2526 unsigned long *bits = work_data_bits(target);
2527
2528 head = target->entry.next;
2529
2530 linked = *bits & WORK_STRUCT_LINKED;
2531 __set_bit(WORK_STRUCT_LINKED_BIT, bits);
2532 }
2533
2534 debug_work_activate(&barr->work);
2535 insert_work(cwq, &barr->work, head,
2536 work_color_to_flags(WORK_NO_COLOR) | linked);
2537}
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570static bool flush_workqueue_prep_cwqs(struct workqueue_struct *wq,
2571 int flush_color, int work_color)
2572{
2573 bool wait = false;
2574 unsigned int cpu;
2575
2576 if (flush_color >= 0) {
2577 BUG_ON(atomic_read(&wq->nr_cwqs_to_flush));
2578 atomic_set(&wq->nr_cwqs_to_flush, 1);
2579 }
2580
2581 for_each_cwq_cpu(cpu, wq) {
2582 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
2583 struct global_cwq *gcwq = cwq->pool->gcwq;
2584
2585 spin_lock_irq(&gcwq->lock);
2586
2587 if (flush_color >= 0) {
2588 BUG_ON(cwq->flush_color != -1);
2589
2590 if (cwq->nr_in_flight[flush_color]) {
2591 cwq->flush_color = flush_color;
2592 atomic_inc(&wq->nr_cwqs_to_flush);
2593 wait = true;
2594 }
2595 }
2596
2597 if (work_color >= 0) {
2598 BUG_ON(work_color != work_next_color(cwq->work_color));
2599 cwq->work_color = work_color;
2600 }
2601
2602 spin_unlock_irq(&gcwq->lock);
2603 }
2604
2605 if (flush_color >= 0 && atomic_dec_and_test(&wq->nr_cwqs_to_flush))
2606 complete(&wq->first_flusher->done);
2607
2608 return wait;
2609}
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621void flush_workqueue(struct workqueue_struct *wq)
2622{
2623 struct wq_flusher this_flusher = {
2624 .list = LIST_HEAD_INIT(this_flusher.list),
2625 .flush_color = -1,
2626 .done = COMPLETION_INITIALIZER_ONSTACK(this_flusher.done),
2627 };
2628 int next_color;
2629
2630 lock_map_acquire(&wq->lockdep_map);
2631 lock_map_release(&wq->lockdep_map);
2632
2633 mutex_lock(&wq->flush_mutex);
2634
2635
2636
2637
2638 next_color = work_next_color(wq->work_color);
2639
2640 if (next_color != wq->flush_color) {
2641
2642
2643
2644
2645
2646 BUG_ON(!list_empty(&wq->flusher_overflow));
2647 this_flusher.flush_color = wq->work_color;
2648 wq->work_color = next_color;
2649
2650 if (!wq->first_flusher) {
2651
2652 BUG_ON(wq->flush_color != this_flusher.flush_color);
2653
2654 wq->first_flusher = &this_flusher;
2655
2656 if (!flush_workqueue_prep_cwqs(wq, wq->flush_color,
2657 wq->work_color)) {
2658
2659 wq->flush_color = next_color;
2660 wq->first_flusher = NULL;
2661 goto out_unlock;
2662 }
2663 } else {
2664
2665 BUG_ON(wq->flush_color == this_flusher.flush_color);
2666 list_add_tail(&this_flusher.list, &wq->flusher_queue);
2667 flush_workqueue_prep_cwqs(wq, -1, wq->work_color);
2668 }
2669 } else {
2670
2671
2672
2673
2674
2675 list_add_tail(&this_flusher.list, &wq->flusher_overflow);
2676 }
2677
2678 mutex_unlock(&wq->flush_mutex);
2679
2680 wait_for_completion(&this_flusher.done);
2681
2682
2683
2684
2685
2686
2687
2688 if (wq->first_flusher != &this_flusher)
2689 return;
2690
2691 mutex_lock(&wq->flush_mutex);
2692
2693
2694 if (wq->first_flusher != &this_flusher)
2695 goto out_unlock;
2696
2697 wq->first_flusher = NULL;
2698
2699 BUG_ON(!list_empty(&this_flusher.list));
2700 BUG_ON(wq->flush_color != this_flusher.flush_color);
2701
2702 while (true) {
2703 struct wq_flusher *next, *tmp;
2704
2705
2706 list_for_each_entry_safe(next, tmp, &wq->flusher_queue, list) {
2707 if (next->flush_color != wq->flush_color)
2708 break;
2709 list_del_init(&next->list);
2710 complete(&next->done);
2711 }
2712
2713 BUG_ON(!list_empty(&wq->flusher_overflow) &&
2714 wq->flush_color != work_next_color(wq->work_color));
2715
2716
2717 wq->flush_color = work_next_color(wq->flush_color);
2718
2719
2720 if (!list_empty(&wq->flusher_overflow)) {
2721
2722
2723
2724
2725
2726
2727 list_for_each_entry(tmp, &wq->flusher_overflow, list)
2728 tmp->flush_color = wq->work_color;
2729
2730 wq->work_color = work_next_color(wq->work_color);
2731
2732 list_splice_tail_init(&wq->flusher_overflow,
2733 &wq->flusher_queue);
2734 flush_workqueue_prep_cwqs(wq, -1, wq->work_color);
2735 }
2736
2737 if (list_empty(&wq->flusher_queue)) {
2738 BUG_ON(wq->flush_color != wq->work_color);
2739 break;
2740 }
2741
2742
2743
2744
2745
2746 BUG_ON(wq->flush_color == wq->work_color);
2747 BUG_ON(wq->flush_color != next->flush_color);
2748
2749 list_del_init(&next->list);
2750 wq->first_flusher = next;
2751
2752 if (flush_workqueue_prep_cwqs(wq, wq->flush_color, -1))
2753 break;
2754
2755
2756
2757
2758
2759 wq->first_flusher = NULL;
2760 }
2761
2762out_unlock:
2763 mutex_unlock(&wq->flush_mutex);
2764}
2765EXPORT_SYMBOL_GPL(flush_workqueue);
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778void drain_workqueue(struct workqueue_struct *wq)
2779{
2780 unsigned int flush_cnt = 0;
2781 unsigned int cpu;
2782
2783
2784
2785
2786
2787
2788 spin_lock(&workqueue_lock);
2789 if (!wq->nr_drainers++)
2790 wq->flags |= WQ_DRAINING;
2791 spin_unlock(&workqueue_lock);
2792reflush:
2793 flush_workqueue(wq);
2794
2795 for_each_cwq_cpu(cpu, wq) {
2796 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
2797 bool drained;
2798
2799 spin_lock_irq(&cwq->pool->gcwq->lock);
2800 drained = !cwq->nr_active && list_empty(&cwq->delayed_works);
2801 spin_unlock_irq(&cwq->pool->gcwq->lock);
2802
2803 if (drained)
2804 continue;
2805
2806 if (++flush_cnt == 10 ||
2807 (flush_cnt % 100 == 0 && flush_cnt <= 1000))
2808 pr_warn("workqueue %s: flush on destruction isn't complete after %u tries\n",
2809 wq->name, flush_cnt);
2810 goto reflush;
2811 }
2812
2813 spin_lock(&workqueue_lock);
2814 if (!--wq->nr_drainers)
2815 wq->flags &= ~WQ_DRAINING;
2816 spin_unlock(&workqueue_lock);
2817}
2818EXPORT_SYMBOL_GPL(drain_workqueue);
2819
2820static bool start_flush_work(struct work_struct *work, struct wq_barrier *barr)
2821{
2822 struct worker *worker = NULL;
2823 struct global_cwq *gcwq;
2824 struct cpu_workqueue_struct *cwq;
2825
2826 might_sleep();
2827 gcwq = get_work_gcwq(work);
2828 if (!gcwq)
2829 return false;
2830
2831 spin_lock_irq(&gcwq->lock);
2832 if (!list_empty(&work->entry)) {
2833
2834
2835
2836
2837
2838 smp_rmb();
2839 cwq = get_work_cwq(work);
2840 if (unlikely(!cwq || gcwq != cwq->pool->gcwq))
2841 goto already_gone;
2842 } else {
2843 worker = find_worker_executing_work(gcwq, work);
2844 if (!worker)
2845 goto already_gone;
2846 cwq = worker->current_cwq;
2847 }
2848
2849 insert_wq_barrier(cwq, barr, work, worker);
2850 spin_unlock_irq(&gcwq->lock);
2851
2852
2853
2854
2855
2856
2857
2858 if (cwq->wq->saved_max_active == 1 || cwq->wq->flags & WQ_RESCUER)
2859 lock_map_acquire(&cwq->wq->lockdep_map);
2860 else
2861 lock_map_acquire_read(&cwq->wq->lockdep_map);
2862 lock_map_release(&cwq->wq->lockdep_map);
2863
2864 return true;
2865already_gone:
2866 spin_unlock_irq(&gcwq->lock);
2867 return false;
2868}
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881bool flush_work(struct work_struct *work)
2882{
2883 struct wq_barrier barr;
2884
2885 lock_map_acquire(&work->lockdep_map);
2886 lock_map_release(&work->lockdep_map);
2887
2888 if (start_flush_work(work, &barr)) {
2889 wait_for_completion(&barr.done);
2890 destroy_work_on_stack(&barr.work);
2891 return true;
2892 } else {
2893 return false;
2894 }
2895}
2896EXPORT_SYMBOL_GPL(flush_work);
2897
2898static bool __cancel_work_timer(struct work_struct *work, bool is_dwork)
2899{
2900 unsigned long flags;
2901 int ret;
2902
2903 do {
2904 ret = try_to_grab_pending(work, is_dwork, &flags);
2905
2906
2907
2908
2909 if (unlikely(ret == -ENOENT))
2910 flush_work(work);
2911 } while (unlikely(ret < 0));
2912
2913
2914 mark_work_canceling(work);
2915 local_irq_restore(flags);
2916
2917 flush_work(work);
2918 clear_work_data(work);
2919 return ret;
2920}
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940bool cancel_work_sync(struct work_struct *work)
2941{
2942 return __cancel_work_timer(work, false);
2943}
2944EXPORT_SYMBOL_GPL(cancel_work_sync);
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958bool flush_delayed_work(struct delayed_work *dwork)
2959{
2960 local_irq_disable();
2961 if (del_timer_sync(&dwork->timer))
2962 __queue_work(dwork->cpu,
2963 get_work_cwq(&dwork->work)->wq, &dwork->work);
2964 local_irq_enable();
2965 return flush_work(&dwork->work);
2966}
2967EXPORT_SYMBOL(flush_delayed_work);
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981bool cancel_delayed_work(struct delayed_work *dwork)
2982{
2983 unsigned long flags;
2984 int ret;
2985
2986 do {
2987 ret = try_to_grab_pending(&dwork->work, true, &flags);
2988 } while (unlikely(ret == -EAGAIN));
2989
2990 if (unlikely(ret < 0))
2991 return false;
2992
2993 set_work_cpu_and_clear_pending(&dwork->work, work_cpu(&dwork->work));
2994 local_irq_restore(flags);
2995 return ret;
2996}
2997EXPORT_SYMBOL(cancel_delayed_work);
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008bool cancel_delayed_work_sync(struct delayed_work *dwork)
3009{
3010 return __cancel_work_timer(&dwork->work, true);
3011}
3012EXPORT_SYMBOL(cancel_delayed_work_sync);
3013
3014
3015
3016
3017
3018
3019
3020
3021bool schedule_work_on(int cpu, struct work_struct *work)
3022{
3023 return queue_work_on(cpu, system_wq, work);
3024}
3025EXPORT_SYMBOL(schedule_work_on);
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038bool schedule_work(struct work_struct *work)
3039{
3040 return queue_work(system_wq, work);
3041}
3042EXPORT_SYMBOL(schedule_work);
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053bool schedule_delayed_work_on(int cpu, struct delayed_work *dwork,
3054 unsigned long delay)
3055{
3056 return queue_delayed_work_on(cpu, system_wq, dwork, delay);
3057}
3058EXPORT_SYMBOL(schedule_delayed_work_on);
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068bool schedule_delayed_work(struct delayed_work *dwork, unsigned long delay)
3069{
3070 return queue_delayed_work(system_wq, dwork, delay);
3071}
3072EXPORT_SYMBOL(schedule_delayed_work);
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085int schedule_on_each_cpu(work_func_t func)
3086{
3087 int cpu;
3088 struct work_struct __percpu *works;
3089
3090 works = alloc_percpu(struct work_struct);
3091 if (!works)
3092 return -ENOMEM;
3093
3094 get_online_cpus();
3095
3096 for_each_online_cpu(cpu) {
3097 struct work_struct *work = per_cpu_ptr(works, cpu);
3098
3099 INIT_WORK(work, func);
3100 schedule_work_on(cpu, work);
3101 }
3102
3103 for_each_online_cpu(cpu)
3104 flush_work(per_cpu_ptr(works, cpu));
3105
3106 put_online_cpus();
3107 free_percpu(works);
3108 return 0;
3109}
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135void flush_scheduled_work(void)
3136{
3137 flush_workqueue(system_wq);
3138}
3139EXPORT_SYMBOL(flush_scheduled_work);
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153int execute_in_process_context(work_func_t fn, struct execute_work *ew)
3154{
3155 if (!in_interrupt()) {
3156 fn(&ew->work);
3157 return 0;
3158 }
3159
3160 INIT_WORK(&ew->work, fn);
3161 schedule_work(&ew->work);
3162
3163 return 1;
3164}
3165EXPORT_SYMBOL_GPL(execute_in_process_context);
3166
3167int keventd_up(void)
3168{
3169 return system_wq != NULL;
3170}
3171
3172static int alloc_cwqs(struct workqueue_struct *wq)
3173{
3174
3175
3176
3177
3178
3179 const size_t size = sizeof(struct cpu_workqueue_struct);
3180 const size_t align = max_t(size_t, 1 << WORK_STRUCT_FLAG_BITS,
3181 __alignof__(unsigned long long));
3182
3183 if (!(wq->flags & WQ_UNBOUND))
3184 wq->cpu_wq.pcpu = __alloc_percpu(size, align);
3185 else {
3186 void *ptr;
3187
3188
3189
3190
3191
3192
3193 ptr = kzalloc(size + align + sizeof(void *), GFP_KERNEL);
3194 if (ptr) {
3195 wq->cpu_wq.single = PTR_ALIGN(ptr, align);
3196 *(void **)(wq->cpu_wq.single + 1) = ptr;
3197 }
3198 }
3199
3200
3201 BUG_ON(!IS_ALIGNED(wq->cpu_wq.v, align));
3202 return wq->cpu_wq.v ? 0 : -ENOMEM;
3203}
3204
3205static void free_cwqs(struct workqueue_struct *wq)
3206{
3207 if (!(wq->flags & WQ_UNBOUND))
3208 free_percpu(wq->cpu_wq.pcpu);
3209 else if (wq->cpu_wq.single) {
3210
3211 kfree(*(void **)(wq->cpu_wq.single + 1));
3212 }
3213}
3214
3215static int wq_clamp_max_active(int max_active, unsigned int flags,
3216 const char *name)
3217{
3218 int lim = flags & WQ_UNBOUND ? WQ_UNBOUND_MAX_ACTIVE : WQ_MAX_ACTIVE;
3219
3220 if (max_active < 1 || max_active > lim)
3221 pr_warn("workqueue: max_active %d requested for %s is out of range, clamping between %d and %d\n",
3222 max_active, name, 1, lim);
3223
3224 return clamp_val(max_active, 1, lim);
3225}
3226
3227struct workqueue_struct *__alloc_workqueue_key(const char *fmt,
3228 unsigned int flags,
3229 int max_active,
3230 struct lock_class_key *key,
3231 const char *lock_name, ...)
3232{
3233 va_list args, args1;
3234 struct workqueue_struct *wq;
3235 unsigned int cpu;
3236 size_t namelen;
3237
3238
3239 va_start(args, lock_name);
3240 va_copy(args1, args);
3241 namelen = vsnprintf(NULL, 0, fmt, args) + 1;
3242
3243 wq = kzalloc(sizeof(*wq) + namelen, GFP_KERNEL);
3244 if (!wq)
3245 goto err;
3246
3247 vsnprintf(wq->name, namelen, fmt, args1);
3248 va_end(args);
3249 va_end(args1);
3250
3251
3252
3253
3254
3255 if (flags & WQ_MEM_RECLAIM)
3256 flags |= WQ_RESCUER;
3257
3258 max_active = max_active ?: WQ_DFL_ACTIVE;
3259 max_active = wq_clamp_max_active(max_active, flags, wq->name);
3260
3261
3262 wq->flags = flags;
3263 wq->saved_max_active = max_active;
3264 mutex_init(&wq->flush_mutex);
3265 atomic_set(&wq->nr_cwqs_to_flush, 0);
3266 INIT_LIST_HEAD(&wq->flusher_queue);
3267 INIT_LIST_HEAD(&wq->flusher_overflow);
3268
3269 lockdep_init_map(&wq->lockdep_map, lock_name, key, 0);
3270 INIT_LIST_HEAD(&wq->list);
3271
3272 if (alloc_cwqs(wq) < 0)
3273 goto err;
3274
3275 for_each_cwq_cpu(cpu, wq) {
3276 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
3277 struct global_cwq *gcwq = get_gcwq(cpu);
3278 int pool_idx = (bool)(flags & WQ_HIGHPRI);
3279
3280 BUG_ON((unsigned long)cwq & WORK_STRUCT_FLAG_MASK);
3281 cwq->pool = &gcwq->pools[pool_idx];
3282 cwq->wq = wq;
3283 cwq->flush_color = -1;
3284 cwq->max_active = max_active;
3285 INIT_LIST_HEAD(&cwq->delayed_works);
3286 }
3287
3288 if (flags & WQ_RESCUER) {
3289 struct worker *rescuer;
3290
3291 if (!alloc_mayday_mask(&wq->mayday_mask, GFP_KERNEL))
3292 goto err;
3293
3294 wq->rescuer = rescuer = alloc_worker();
3295 if (!rescuer)
3296 goto err;
3297
3298 rescuer->task = kthread_create(rescuer_thread, wq, "%s",
3299 wq->name);
3300 if (IS_ERR(rescuer->task))
3301 goto err;
3302
3303 rescuer->task->flags |= PF_THREAD_BOUND;
3304 wake_up_process(rescuer->task);
3305 }
3306
3307
3308
3309
3310
3311
3312 spin_lock(&workqueue_lock);
3313
3314 if (workqueue_freezing && wq->flags & WQ_FREEZABLE)
3315 for_each_cwq_cpu(cpu, wq)
3316 get_cwq(cpu, wq)->max_active = 0;
3317
3318 list_add(&wq->list, &workqueues);
3319
3320 spin_unlock(&workqueue_lock);
3321
3322 return wq;
3323err:
3324 if (wq) {
3325 free_cwqs(wq);
3326 free_mayday_mask(wq->mayday_mask);
3327 kfree(wq->rescuer);
3328 kfree(wq);
3329 }
3330 return NULL;
3331}
3332EXPORT_SYMBOL_GPL(__alloc_workqueue_key);
3333
3334
3335
3336
3337
3338
3339
3340void destroy_workqueue(struct workqueue_struct *wq)
3341{
3342 unsigned int cpu;
3343
3344
3345 drain_workqueue(wq);
3346
3347
3348
3349
3350
3351 spin_lock(&workqueue_lock);
3352 list_del(&wq->list);
3353 spin_unlock(&workqueue_lock);
3354
3355
3356 for_each_cwq_cpu(cpu, wq) {
3357 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
3358 int i;
3359
3360 for (i = 0; i < WORK_NR_COLORS; i++)
3361 BUG_ON(cwq->nr_in_flight[i]);
3362 BUG_ON(cwq->nr_active);
3363 BUG_ON(!list_empty(&cwq->delayed_works));
3364 }
3365
3366 if (wq->flags & WQ_RESCUER) {
3367 kthread_stop(wq->rescuer->task);
3368 free_mayday_mask(wq->mayday_mask);
3369 kfree(wq->rescuer);
3370 }
3371
3372 free_cwqs(wq);
3373 kfree(wq);
3374}
3375EXPORT_SYMBOL_GPL(destroy_workqueue);
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388static void cwq_set_max_active(struct cpu_workqueue_struct *cwq, int max_active)
3389{
3390 cwq->max_active = max_active;
3391
3392 while (!list_empty(&cwq->delayed_works) &&
3393 cwq->nr_active < cwq->max_active)
3394 cwq_activate_first_delayed(cwq);
3395}
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407void workqueue_set_max_active(struct workqueue_struct *wq, int max_active)
3408{
3409 unsigned int cpu;
3410
3411 max_active = wq_clamp_max_active(max_active, wq->flags, wq->name);
3412
3413 spin_lock(&workqueue_lock);
3414
3415 wq->saved_max_active = max_active;
3416
3417 for_each_cwq_cpu(cpu, wq) {
3418 struct global_cwq *gcwq = get_gcwq(cpu);
3419
3420 spin_lock_irq(&gcwq->lock);
3421
3422 if (!(wq->flags & WQ_FREEZABLE) ||
3423 !(gcwq->flags & GCWQ_FREEZING))
3424 cwq_set_max_active(get_cwq(gcwq->cpu, wq), max_active);
3425
3426 spin_unlock_irq(&gcwq->lock);
3427 }
3428
3429 spin_unlock(&workqueue_lock);
3430}
3431EXPORT_SYMBOL_GPL(workqueue_set_max_active);
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445bool workqueue_congested(unsigned int cpu, struct workqueue_struct *wq)
3446{
3447 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
3448
3449 return !list_empty(&cwq->delayed_works);
3450}
3451EXPORT_SYMBOL_GPL(workqueue_congested);
3452
3453
3454
3455
3456
3457
3458
3459
3460unsigned int work_cpu(struct work_struct *work)
3461{
3462 struct global_cwq *gcwq = get_work_gcwq(work);
3463
3464 return gcwq ? gcwq->cpu : WORK_CPU_NONE;
3465}
3466EXPORT_SYMBOL_GPL(work_cpu);
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481unsigned int work_busy(struct work_struct *work)
3482{
3483 struct global_cwq *gcwq = get_work_gcwq(work);
3484 unsigned long flags;
3485 unsigned int ret = 0;
3486
3487 if (!gcwq)
3488 return false;
3489
3490 spin_lock_irqsave(&gcwq->lock, flags);
3491
3492 if (work_pending(work))
3493 ret |= WORK_BUSY_PENDING;
3494 if (find_worker_executing_work(gcwq, work))
3495 ret |= WORK_BUSY_RUNNING;
3496
3497 spin_unlock_irqrestore(&gcwq->lock, flags);
3498
3499 return ret;
3500}
3501EXPORT_SYMBOL_GPL(work_busy);
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519static void gcwq_claim_assoc_and_lock(struct global_cwq *gcwq)
3520{
3521 struct worker_pool *pool;
3522
3523 for_each_worker_pool(pool, gcwq)
3524 mutex_lock_nested(&pool->assoc_mutex, pool - gcwq->pools);
3525 spin_lock_irq(&gcwq->lock);
3526}
3527
3528
3529static void gcwq_release_assoc_and_unlock(struct global_cwq *gcwq)
3530{
3531 struct worker_pool *pool;
3532
3533 spin_unlock_irq(&gcwq->lock);
3534 for_each_worker_pool(pool, gcwq)
3535 mutex_unlock(&pool->assoc_mutex);
3536}
3537
3538static void gcwq_unbind_fn(struct work_struct *work)
3539{
3540 struct global_cwq *gcwq = get_gcwq(smp_processor_id());
3541 struct worker_pool *pool;
3542 struct worker *worker;
3543 struct hlist_node *pos;
3544 int i;
3545
3546 BUG_ON(gcwq->cpu != smp_processor_id());
3547
3548 gcwq_claim_assoc_and_lock(gcwq);
3549
3550
3551
3552
3553
3554
3555
3556 for_each_worker_pool(pool, gcwq)
3557 list_for_each_entry(worker, &pool->idle_list, entry)
3558 worker->flags |= WORKER_UNBOUND;
3559
3560 for_each_busy_worker(worker, i, pos, gcwq)
3561 worker->flags |= WORKER_UNBOUND;
3562
3563 gcwq->flags |= GCWQ_DISASSOCIATED;
3564
3565 gcwq_release_assoc_and_unlock(gcwq);
3566
3567
3568
3569
3570
3571
3572 schedule();
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585 for_each_worker_pool(pool, gcwq)
3586 atomic_set(get_pool_nr_running(pool), 0);
3587}
3588
3589
3590
3591
3592
3593static int __cpuinit workqueue_cpu_up_callback(struct notifier_block *nfb,
3594 unsigned long action,
3595 void *hcpu)
3596{
3597 unsigned int cpu = (unsigned long)hcpu;
3598 struct global_cwq *gcwq = get_gcwq(cpu);
3599 struct worker_pool *pool;
3600
3601 switch (action & ~CPU_TASKS_FROZEN) {
3602 case CPU_UP_PREPARE:
3603 for_each_worker_pool(pool, gcwq) {
3604 struct worker *worker;
3605
3606 if (pool->nr_workers)
3607 continue;
3608
3609 worker = create_worker(pool);
3610 if (!worker)
3611 return NOTIFY_BAD;
3612
3613 spin_lock_irq(&gcwq->lock);
3614 start_worker(worker);
3615 spin_unlock_irq(&gcwq->lock);
3616 }
3617 break;
3618
3619 case CPU_DOWN_FAILED:
3620 case CPU_ONLINE:
3621 gcwq_claim_assoc_and_lock(gcwq);
3622 gcwq->flags &= ~GCWQ_DISASSOCIATED;
3623 rebind_workers(gcwq);
3624 gcwq_release_assoc_and_unlock(gcwq);
3625 break;
3626 }
3627 return NOTIFY_OK;
3628}
3629
3630
3631
3632
3633
3634static int __cpuinit workqueue_cpu_down_callback(struct notifier_block *nfb,
3635 unsigned long action,
3636 void *hcpu)
3637{
3638 unsigned int cpu = (unsigned long)hcpu;
3639 struct work_struct unbind_work;
3640
3641 switch (action & ~CPU_TASKS_FROZEN) {
3642 case CPU_DOWN_PREPARE:
3643
3644 INIT_WORK_ONSTACK(&unbind_work, gcwq_unbind_fn);
3645 queue_work_on(cpu, system_highpri_wq, &unbind_work);
3646 flush_work(&unbind_work);
3647 break;
3648 }
3649 return NOTIFY_OK;
3650}
3651
3652#ifdef CONFIG_SMP
3653
3654struct work_for_cpu {
3655 struct work_struct work;
3656 long (*fn)(void *);
3657 void *arg;
3658 long ret;
3659};
3660
3661static void work_for_cpu_fn(struct work_struct *work)
3662{
3663 struct work_for_cpu *wfc = container_of(work, struct work_for_cpu, work);
3664
3665 wfc->ret = wfc->fn(wfc->arg);
3666}
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678long work_on_cpu(unsigned int cpu, long (*fn)(void *), void *arg)
3679{
3680 struct work_for_cpu wfc = { .fn = fn, .arg = arg };
3681
3682 INIT_WORK_ONSTACK(&wfc.work, work_for_cpu_fn);
3683 schedule_work_on(cpu, &wfc.work);
3684 flush_work(&wfc.work);
3685 return wfc.ret;
3686}
3687EXPORT_SYMBOL_GPL(work_on_cpu);
3688#endif
3689
3690#ifdef CONFIG_FREEZER
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702void freeze_workqueues_begin(void)
3703{
3704 unsigned int cpu;
3705
3706 spin_lock(&workqueue_lock);
3707
3708 BUG_ON(workqueue_freezing);
3709 workqueue_freezing = true;
3710
3711 for_each_gcwq_cpu(cpu) {
3712 struct global_cwq *gcwq = get_gcwq(cpu);
3713 struct workqueue_struct *wq;
3714
3715 spin_lock_irq(&gcwq->lock);
3716
3717 BUG_ON(gcwq->flags & GCWQ_FREEZING);
3718 gcwq->flags |= GCWQ_FREEZING;
3719
3720 list_for_each_entry(wq, &workqueues, list) {
3721 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
3722
3723 if (cwq && wq->flags & WQ_FREEZABLE)
3724 cwq->max_active = 0;
3725 }
3726
3727 spin_unlock_irq(&gcwq->lock);
3728 }
3729
3730 spin_unlock(&workqueue_lock);
3731}
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746bool freeze_workqueues_busy(void)
3747{
3748 unsigned int cpu;
3749 bool busy = false;
3750
3751 spin_lock(&workqueue_lock);
3752
3753 BUG_ON(!workqueue_freezing);
3754
3755 for_each_gcwq_cpu(cpu) {
3756 struct workqueue_struct *wq;
3757
3758
3759
3760
3761 list_for_each_entry(wq, &workqueues, list) {
3762 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
3763
3764 if (!cwq || !(wq->flags & WQ_FREEZABLE))
3765 continue;
3766
3767 BUG_ON(cwq->nr_active < 0);
3768 if (cwq->nr_active) {
3769 busy = true;
3770 goto out_unlock;
3771 }
3772 }
3773 }
3774out_unlock:
3775 spin_unlock(&workqueue_lock);
3776 return busy;
3777}
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788void thaw_workqueues(void)
3789{
3790 unsigned int cpu;
3791
3792 spin_lock(&workqueue_lock);
3793
3794 if (!workqueue_freezing)
3795 goto out_unlock;
3796
3797 for_each_gcwq_cpu(cpu) {
3798 struct global_cwq *gcwq = get_gcwq(cpu);
3799 struct worker_pool *pool;
3800 struct workqueue_struct *wq;
3801
3802 spin_lock_irq(&gcwq->lock);
3803
3804 BUG_ON(!(gcwq->flags & GCWQ_FREEZING));
3805 gcwq->flags &= ~GCWQ_FREEZING;
3806
3807 list_for_each_entry(wq, &workqueues, list) {
3808 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
3809
3810 if (!cwq || !(wq->flags & WQ_FREEZABLE))
3811 continue;
3812
3813
3814 cwq_set_max_active(cwq, wq->saved_max_active);
3815 }
3816
3817 for_each_worker_pool(pool, gcwq)
3818 wake_up_worker(pool);
3819
3820 spin_unlock_irq(&gcwq->lock);
3821 }
3822
3823 workqueue_freezing = false;
3824out_unlock:
3825 spin_unlock(&workqueue_lock);
3826}
3827#endif
3828
3829static int __init init_workqueues(void)
3830{
3831 unsigned int cpu;
3832 int i;
3833
3834
3835 BUILD_BUG_ON((1LU << (BITS_PER_LONG - WORK_OFFQ_CPU_SHIFT)) <
3836 WORK_CPU_LAST);
3837
3838 cpu_notifier(workqueue_cpu_up_callback, CPU_PRI_WORKQUEUE_UP);
3839 hotcpu_notifier(workqueue_cpu_down_callback, CPU_PRI_WORKQUEUE_DOWN);
3840
3841
3842 for_each_gcwq_cpu(cpu) {
3843 struct global_cwq *gcwq = get_gcwq(cpu);
3844 struct worker_pool *pool;
3845
3846 spin_lock_init(&gcwq->lock);
3847 gcwq->cpu = cpu;
3848 gcwq->flags |= GCWQ_DISASSOCIATED;
3849
3850 for (i = 0; i < BUSY_WORKER_HASH_SIZE; i++)
3851 INIT_HLIST_HEAD(&gcwq->busy_hash[i]);
3852
3853 for_each_worker_pool(pool, gcwq) {
3854 pool->gcwq = gcwq;
3855 INIT_LIST_HEAD(&pool->worklist);
3856 INIT_LIST_HEAD(&pool->idle_list);
3857
3858 init_timer_deferrable(&pool->idle_timer);
3859 pool->idle_timer.function = idle_worker_timeout;
3860 pool->idle_timer.data = (unsigned long)pool;
3861
3862 setup_timer(&pool->mayday_timer, gcwq_mayday_timeout,
3863 (unsigned long)pool);
3864
3865 mutex_init(&pool->assoc_mutex);
3866 ida_init(&pool->worker_ida);
3867 }
3868 }
3869
3870
3871 for_each_online_gcwq_cpu(cpu) {
3872 struct global_cwq *gcwq = get_gcwq(cpu);
3873 struct worker_pool *pool;
3874
3875 if (cpu != WORK_CPU_UNBOUND)
3876 gcwq->flags &= ~GCWQ_DISASSOCIATED;
3877
3878 for_each_worker_pool(pool, gcwq) {
3879 struct worker *worker;
3880
3881 worker = create_worker(pool);
3882 BUG_ON(!worker);
3883 spin_lock_irq(&gcwq->lock);
3884 start_worker(worker);
3885 spin_unlock_irq(&gcwq->lock);
3886 }
3887 }
3888
3889 system_wq = alloc_workqueue("events", 0, 0);
3890 system_highpri_wq = alloc_workqueue("events_highpri", WQ_HIGHPRI, 0);
3891 system_long_wq = alloc_workqueue("events_long", 0, 0);
3892 system_unbound_wq = alloc_workqueue("events_unbound", WQ_UNBOUND,
3893 WQ_UNBOUND_MAX_ACTIVE);
3894 system_freezable_wq = alloc_workqueue("events_freezable",
3895 WQ_FREEZABLE, 0);
3896 BUG_ON(!system_wq || !system_highpri_wq || !system_long_wq ||
3897 !system_unbound_wq || !system_freezable_wq);
3898 return 0;
3899}
3900early_initcall(init_workqueues);
3901