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