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 __set_current_state(TASK_RUNNING);
2271 return 0;
2272 }
2273
2274
2275
2276
2277
2278 for_each_mayday_cpu(cpu, wq->mayday_mask) {
2279 unsigned int tcpu = is_unbound ? WORK_CPU_UNBOUND : cpu;
2280 struct cpu_workqueue_struct *cwq = get_cwq(tcpu, wq);
2281 struct worker_pool *pool = cwq->pool;
2282 struct global_cwq *gcwq = pool->gcwq;
2283 struct work_struct *work, *n;
2284
2285 __set_current_state(TASK_RUNNING);
2286 mayday_clear_cpu(cpu, wq->mayday_mask);
2287
2288
2289 rescuer->pool = pool;
2290 worker_maybe_bind_and_lock(rescuer);
2291
2292
2293
2294
2295
2296 BUG_ON(!list_empty(&rescuer->scheduled));
2297 list_for_each_entry_safe(work, n, &pool->worklist, entry)
2298 if (get_work_cwq(work) == cwq)
2299 move_linked_works(work, scheduled, &n);
2300
2301 process_scheduled_works(rescuer);
2302
2303
2304
2305
2306
2307
2308 if (keep_working(pool))
2309 wake_up_worker(pool);
2310
2311 spin_unlock_irq(&gcwq->lock);
2312 }
2313
2314 schedule();
2315 goto repeat;
2316}
2317
2318struct wq_barrier {
2319 struct work_struct work;
2320 struct completion done;
2321};
2322
2323static void wq_barrier_func(struct work_struct *work)
2324{
2325 struct wq_barrier *barr = container_of(work, struct wq_barrier, work);
2326 complete(&barr->done);
2327}
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353static void insert_wq_barrier(struct cpu_workqueue_struct *cwq,
2354 struct wq_barrier *barr,
2355 struct work_struct *target, struct worker *worker)
2356{
2357 struct list_head *head;
2358 unsigned int linked = 0;
2359
2360
2361
2362
2363
2364
2365
2366 INIT_WORK_ONSTACK(&barr->work, wq_barrier_func);
2367 __set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(&barr->work));
2368 init_completion(&barr->done);
2369
2370
2371
2372
2373
2374 if (worker)
2375 head = worker->scheduled.next;
2376 else {
2377 unsigned long *bits = work_data_bits(target);
2378
2379 head = target->entry.next;
2380
2381 linked = *bits & WORK_STRUCT_LINKED;
2382 __set_bit(WORK_STRUCT_LINKED_BIT, bits);
2383 }
2384
2385 debug_work_activate(&barr->work);
2386 insert_work(cwq, &barr->work, head,
2387 work_color_to_flags(WORK_NO_COLOR) | linked);
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
2419
2420
2421static bool flush_workqueue_prep_cwqs(struct workqueue_struct *wq,
2422 int flush_color, int work_color)
2423{
2424 bool wait = false;
2425 unsigned int cpu;
2426
2427 if (flush_color >= 0) {
2428 BUG_ON(atomic_read(&wq->nr_cwqs_to_flush));
2429 atomic_set(&wq->nr_cwqs_to_flush, 1);
2430 }
2431
2432 for_each_cwq_cpu(cpu, wq) {
2433 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
2434 struct global_cwq *gcwq = cwq->pool->gcwq;
2435
2436 spin_lock_irq(&gcwq->lock);
2437
2438 if (flush_color >= 0) {
2439 BUG_ON(cwq->flush_color != -1);
2440
2441 if (cwq->nr_in_flight[flush_color]) {
2442 cwq->flush_color = flush_color;
2443 atomic_inc(&wq->nr_cwqs_to_flush);
2444 wait = true;
2445 }
2446 }
2447
2448 if (work_color >= 0) {
2449 BUG_ON(work_color != work_next_color(cwq->work_color));
2450 cwq->work_color = work_color;
2451 }
2452
2453 spin_unlock_irq(&gcwq->lock);
2454 }
2455
2456 if (flush_color >= 0 && atomic_dec_and_test(&wq->nr_cwqs_to_flush))
2457 complete(&wq->first_flusher->done);
2458
2459 return wait;
2460}
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472void flush_workqueue(struct workqueue_struct *wq)
2473{
2474 struct wq_flusher this_flusher = {
2475 .list = LIST_HEAD_INIT(this_flusher.list),
2476 .flush_color = -1,
2477 .done = COMPLETION_INITIALIZER_ONSTACK(this_flusher.done),
2478 };
2479 int next_color;
2480
2481 lock_map_acquire(&wq->lockdep_map);
2482 lock_map_release(&wq->lockdep_map);
2483
2484 mutex_lock(&wq->flush_mutex);
2485
2486
2487
2488
2489 next_color = work_next_color(wq->work_color);
2490
2491 if (next_color != wq->flush_color) {
2492
2493
2494
2495
2496
2497 BUG_ON(!list_empty(&wq->flusher_overflow));
2498 this_flusher.flush_color = wq->work_color;
2499 wq->work_color = next_color;
2500
2501 if (!wq->first_flusher) {
2502
2503 BUG_ON(wq->flush_color != this_flusher.flush_color);
2504
2505 wq->first_flusher = &this_flusher;
2506
2507 if (!flush_workqueue_prep_cwqs(wq, wq->flush_color,
2508 wq->work_color)) {
2509
2510 wq->flush_color = next_color;
2511 wq->first_flusher = NULL;
2512 goto out_unlock;
2513 }
2514 } else {
2515
2516 BUG_ON(wq->flush_color == this_flusher.flush_color);
2517 list_add_tail(&this_flusher.list, &wq->flusher_queue);
2518 flush_workqueue_prep_cwqs(wq, -1, wq->work_color);
2519 }
2520 } else {
2521
2522
2523
2524
2525
2526 list_add_tail(&this_flusher.list, &wq->flusher_overflow);
2527 }
2528
2529 mutex_unlock(&wq->flush_mutex);
2530
2531 wait_for_completion(&this_flusher.done);
2532
2533
2534
2535
2536
2537
2538
2539 if (wq->first_flusher != &this_flusher)
2540 return;
2541
2542 mutex_lock(&wq->flush_mutex);
2543
2544
2545 if (wq->first_flusher != &this_flusher)
2546 goto out_unlock;
2547
2548 wq->first_flusher = NULL;
2549
2550 BUG_ON(!list_empty(&this_flusher.list));
2551 BUG_ON(wq->flush_color != this_flusher.flush_color);
2552
2553 while (true) {
2554 struct wq_flusher *next, *tmp;
2555
2556
2557 list_for_each_entry_safe(next, tmp, &wq->flusher_queue, list) {
2558 if (next->flush_color != wq->flush_color)
2559 break;
2560 list_del_init(&next->list);
2561 complete(&next->done);
2562 }
2563
2564 BUG_ON(!list_empty(&wq->flusher_overflow) &&
2565 wq->flush_color != work_next_color(wq->work_color));
2566
2567
2568 wq->flush_color = work_next_color(wq->flush_color);
2569
2570
2571 if (!list_empty(&wq->flusher_overflow)) {
2572
2573
2574
2575
2576
2577
2578 list_for_each_entry(tmp, &wq->flusher_overflow, list)
2579 tmp->flush_color = wq->work_color;
2580
2581 wq->work_color = work_next_color(wq->work_color);
2582
2583 list_splice_tail_init(&wq->flusher_overflow,
2584 &wq->flusher_queue);
2585 flush_workqueue_prep_cwqs(wq, -1, wq->work_color);
2586 }
2587
2588 if (list_empty(&wq->flusher_queue)) {
2589 BUG_ON(wq->flush_color != wq->work_color);
2590 break;
2591 }
2592
2593
2594
2595
2596
2597 BUG_ON(wq->flush_color == wq->work_color);
2598 BUG_ON(wq->flush_color != next->flush_color);
2599
2600 list_del_init(&next->list);
2601 wq->first_flusher = next;
2602
2603 if (flush_workqueue_prep_cwqs(wq, wq->flush_color, -1))
2604 break;
2605
2606
2607
2608
2609
2610 wq->first_flusher = NULL;
2611 }
2612
2613out_unlock:
2614 mutex_unlock(&wq->flush_mutex);
2615}
2616EXPORT_SYMBOL_GPL(flush_workqueue);
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629void drain_workqueue(struct workqueue_struct *wq)
2630{
2631 unsigned int flush_cnt = 0;
2632 unsigned int cpu;
2633
2634
2635
2636
2637
2638
2639 spin_lock(&workqueue_lock);
2640 if (!wq->nr_drainers++)
2641 wq->flags |= WQ_DRAINING;
2642 spin_unlock(&workqueue_lock);
2643reflush:
2644 flush_workqueue(wq);
2645
2646 for_each_cwq_cpu(cpu, wq) {
2647 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
2648 bool drained;
2649
2650 spin_lock_irq(&cwq->pool->gcwq->lock);
2651 drained = !cwq->nr_active && list_empty(&cwq->delayed_works);
2652 spin_unlock_irq(&cwq->pool->gcwq->lock);
2653
2654 if (drained)
2655 continue;
2656
2657 if (++flush_cnt == 10 ||
2658 (flush_cnt % 100 == 0 && flush_cnt <= 1000))
2659 pr_warning("workqueue %s: flush on destruction isn't complete after %u tries\n",
2660 wq->name, flush_cnt);
2661 goto reflush;
2662 }
2663
2664 spin_lock(&workqueue_lock);
2665 if (!--wq->nr_drainers)
2666 wq->flags &= ~WQ_DRAINING;
2667 spin_unlock(&workqueue_lock);
2668}
2669EXPORT_SYMBOL_GPL(drain_workqueue);
2670
2671static bool start_flush_work(struct work_struct *work, struct wq_barrier *barr,
2672 bool wait_executing)
2673{
2674 struct worker *worker = NULL;
2675 struct global_cwq *gcwq;
2676 struct cpu_workqueue_struct *cwq;
2677
2678 might_sleep();
2679 gcwq = get_work_gcwq(work);
2680 if (!gcwq)
2681 return false;
2682
2683 spin_lock_irq(&gcwq->lock);
2684 if (!list_empty(&work->entry)) {
2685
2686
2687
2688
2689
2690 smp_rmb();
2691 cwq = get_work_cwq(work);
2692 if (unlikely(!cwq || gcwq != cwq->pool->gcwq))
2693 goto already_gone;
2694 } else if (wait_executing) {
2695 worker = find_worker_executing_work(gcwq, work);
2696 if (!worker)
2697 goto already_gone;
2698 cwq = worker->current_cwq;
2699 } else
2700 goto already_gone;
2701
2702 insert_wq_barrier(cwq, barr, work, worker);
2703 spin_unlock_irq(&gcwq->lock);
2704
2705
2706
2707
2708
2709
2710
2711 if (cwq->wq->saved_max_active == 1 || cwq->wq->flags & WQ_RESCUER)
2712 lock_map_acquire(&cwq->wq->lockdep_map);
2713 else
2714 lock_map_acquire_read(&cwq->wq->lockdep_map);
2715 lock_map_release(&cwq->wq->lockdep_map);
2716
2717 return true;
2718already_gone:
2719 spin_unlock_irq(&gcwq->lock);
2720 return false;
2721}
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741bool flush_work(struct work_struct *work)
2742{
2743 struct wq_barrier barr;
2744
2745 lock_map_acquire(&work->lockdep_map);
2746 lock_map_release(&work->lockdep_map);
2747
2748 if (start_flush_work(work, &barr, true)) {
2749 wait_for_completion(&barr.done);
2750 destroy_work_on_stack(&barr.work);
2751 return true;
2752 } else
2753 return false;
2754}
2755EXPORT_SYMBOL_GPL(flush_work);
2756
2757static bool wait_on_cpu_work(struct global_cwq *gcwq, struct work_struct *work)
2758{
2759 struct wq_barrier barr;
2760 struct worker *worker;
2761
2762 spin_lock_irq(&gcwq->lock);
2763
2764 worker = find_worker_executing_work(gcwq, work);
2765 if (unlikely(worker))
2766 insert_wq_barrier(worker->current_cwq, &barr, work, worker);
2767
2768 spin_unlock_irq(&gcwq->lock);
2769
2770 if (unlikely(worker)) {
2771 wait_for_completion(&barr.done);
2772 destroy_work_on_stack(&barr.work);
2773 return true;
2774 } else
2775 return false;
2776}
2777
2778static bool wait_on_work(struct work_struct *work)
2779{
2780 bool ret = false;
2781 int cpu;
2782
2783 might_sleep();
2784
2785 lock_map_acquire(&work->lockdep_map);
2786 lock_map_release(&work->lockdep_map);
2787
2788 for_each_gcwq_cpu(cpu)
2789 ret |= wait_on_cpu_work(get_gcwq(cpu), work);
2790 return ret;
2791}
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807bool flush_work_sync(struct work_struct *work)
2808{
2809 struct wq_barrier barr;
2810 bool pending, waited;
2811
2812
2813 pending = start_flush_work(work, &barr, false);
2814
2815
2816 waited = wait_on_work(work);
2817
2818
2819 if (pending) {
2820 wait_for_completion(&barr.done);
2821 destroy_work_on_stack(&barr.work);
2822 }
2823
2824 return pending || waited;
2825}
2826EXPORT_SYMBOL_GPL(flush_work_sync);
2827
2828
2829
2830
2831
2832static int try_to_grab_pending(struct work_struct *work)
2833{
2834 struct global_cwq *gcwq;
2835 int ret = -1;
2836
2837 if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work)))
2838 return 0;
2839
2840
2841
2842
2843
2844 gcwq = get_work_gcwq(work);
2845 if (!gcwq)
2846 return ret;
2847
2848 spin_lock_irq(&gcwq->lock);
2849 if (!list_empty(&work->entry)) {
2850
2851
2852
2853
2854
2855 smp_rmb();
2856 if (gcwq == get_work_gcwq(work)) {
2857 debug_work_deactivate(work);
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867 if (*work_data_bits(work) & WORK_STRUCT_DELAYED)
2868 cwq_activate_delayed_work(work);
2869
2870 list_del_init(&work->entry);
2871 cwq_dec_nr_in_flight(get_work_cwq(work),
2872 get_work_color(work),
2873 *work_data_bits(work) & WORK_STRUCT_DELAYED);
2874 ret = 1;
2875 }
2876 }
2877 spin_unlock_irq(&gcwq->lock);
2878
2879 return ret;
2880}
2881
2882static bool __cancel_work_timer(struct work_struct *work,
2883 struct timer_list* timer)
2884{
2885 int ret;
2886
2887 do {
2888 ret = (timer && likely(del_timer(timer)));
2889 if (!ret)
2890 ret = try_to_grab_pending(work);
2891 wait_on_work(work);
2892 } while (unlikely(ret < 0));
2893
2894 clear_work_data(work);
2895 return ret;
2896}
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916bool cancel_work_sync(struct work_struct *work)
2917{
2918 return __cancel_work_timer(work, NULL);
2919}
2920EXPORT_SYMBOL_GPL(cancel_work_sync);
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934bool flush_delayed_work(struct delayed_work *dwork)
2935{
2936 if (del_timer_sync(&dwork->timer))
2937 __queue_work(raw_smp_processor_id(),
2938 get_work_cwq(&dwork->work)->wq, &dwork->work);
2939 return flush_work(&dwork->work);
2940}
2941EXPORT_SYMBOL(flush_delayed_work);
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955bool flush_delayed_work_sync(struct delayed_work *dwork)
2956{
2957 if (del_timer_sync(&dwork->timer))
2958 __queue_work(raw_smp_processor_id(),
2959 get_work_cwq(&dwork->work)->wq, &dwork->work);
2960 return flush_work_sync(&dwork->work);
2961}
2962EXPORT_SYMBOL(flush_delayed_work_sync);
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973bool cancel_delayed_work_sync(struct delayed_work *dwork)
2974{
2975 return __cancel_work_timer(&dwork->work, &dwork->timer);
2976}
2977EXPORT_SYMBOL(cancel_delayed_work_sync);
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990int schedule_work(struct work_struct *work)
2991{
2992 return queue_work(system_wq, work);
2993}
2994EXPORT_SYMBOL(schedule_work);
2995
2996
2997
2998
2999
3000
3001
3002
3003int schedule_work_on(int cpu, struct work_struct *work)
3004{
3005 return queue_work_on(cpu, system_wq, work);
3006}
3007EXPORT_SYMBOL(schedule_work_on);
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017int schedule_delayed_work(struct delayed_work *dwork,
3018 unsigned long delay)
3019{
3020 return queue_delayed_work(system_wq, dwork, delay);
3021}
3022EXPORT_SYMBOL(schedule_delayed_work);
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033int schedule_delayed_work_on(int cpu,
3034 struct delayed_work *dwork, unsigned long delay)
3035{
3036 return queue_delayed_work_on(cpu, system_wq, dwork, delay);
3037}
3038EXPORT_SYMBOL(schedule_delayed_work_on);
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051int schedule_on_each_cpu(work_func_t func)
3052{
3053 int cpu;
3054 struct work_struct __percpu *works;
3055
3056 works = alloc_percpu(struct work_struct);
3057 if (!works)
3058 return -ENOMEM;
3059
3060 get_online_cpus();
3061
3062 for_each_online_cpu(cpu) {
3063 struct work_struct *work = per_cpu_ptr(works, cpu);
3064
3065 INIT_WORK(work, func);
3066 schedule_work_on(cpu, work);
3067 }
3068
3069 for_each_online_cpu(cpu)
3070 flush_work(per_cpu_ptr(works, cpu));
3071
3072 put_online_cpus();
3073 free_percpu(works);
3074 return 0;
3075}
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101void flush_scheduled_work(void)
3102{
3103 flush_workqueue(system_wq);
3104}
3105EXPORT_SYMBOL(flush_scheduled_work);
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119int execute_in_process_context(work_func_t fn, struct execute_work *ew)
3120{
3121 if (!in_interrupt()) {
3122 fn(&ew->work);
3123 return 0;
3124 }
3125
3126 INIT_WORK(&ew->work, fn);
3127 schedule_work(&ew->work);
3128
3129 return 1;
3130}
3131EXPORT_SYMBOL_GPL(execute_in_process_context);
3132
3133int keventd_up(void)
3134{
3135 return system_wq != NULL;
3136}
3137
3138static int alloc_cwqs(struct workqueue_struct *wq)
3139{
3140
3141
3142
3143
3144
3145 const size_t size = sizeof(struct cpu_workqueue_struct);
3146 const size_t align = max_t(size_t, 1 << WORK_STRUCT_FLAG_BITS,
3147 __alignof__(unsigned long long));
3148
3149 if (!(wq->flags & WQ_UNBOUND))
3150 wq->cpu_wq.pcpu = __alloc_percpu(size, align);
3151 else {
3152 void *ptr;
3153
3154
3155
3156
3157
3158
3159 ptr = kzalloc(size + align + sizeof(void *), GFP_KERNEL);
3160 if (ptr) {
3161 wq->cpu_wq.single = PTR_ALIGN(ptr, align);
3162 *(void **)(wq->cpu_wq.single + 1) = ptr;
3163 }
3164 }
3165
3166
3167 BUG_ON(!IS_ALIGNED(wq->cpu_wq.v, align));
3168 return wq->cpu_wq.v ? 0 : -ENOMEM;
3169}
3170
3171static void free_cwqs(struct workqueue_struct *wq)
3172{
3173 if (!(wq->flags & WQ_UNBOUND))
3174 free_percpu(wq->cpu_wq.pcpu);
3175 else if (wq->cpu_wq.single) {
3176
3177 kfree(*(void **)(wq->cpu_wq.single + 1));
3178 }
3179}
3180
3181static int wq_clamp_max_active(int max_active, unsigned int flags,
3182 const char *name)
3183{
3184 int lim = flags & WQ_UNBOUND ? WQ_UNBOUND_MAX_ACTIVE : WQ_MAX_ACTIVE;
3185
3186 if (max_active < 1 || max_active > lim)
3187 printk(KERN_WARNING "workqueue: max_active %d requested for %s "
3188 "is out of range, clamping between %d and %d\n",
3189 max_active, name, 1, lim);
3190
3191 return clamp_val(max_active, 1, lim);
3192}
3193
3194struct workqueue_struct *__alloc_workqueue_key(const char *fmt,
3195 unsigned int flags,
3196 int max_active,
3197 struct lock_class_key *key,
3198 const char *lock_name, ...)
3199{
3200 va_list args, args1;
3201 struct workqueue_struct *wq;
3202 unsigned int cpu;
3203 size_t namelen;
3204
3205
3206 va_start(args, lock_name);
3207 va_copy(args1, args);
3208 namelen = vsnprintf(NULL, 0, fmt, args) + 1;
3209
3210 wq = kzalloc(sizeof(*wq) + namelen, GFP_KERNEL);
3211 if (!wq)
3212 goto err;
3213
3214 vsnprintf(wq->name, namelen, fmt, args1);
3215 va_end(args);
3216 va_end(args1);
3217
3218
3219
3220
3221
3222 if (flags & WQ_MEM_RECLAIM)
3223 flags |= WQ_RESCUER;
3224
3225 max_active = max_active ?: WQ_DFL_ACTIVE;
3226 max_active = wq_clamp_max_active(max_active, flags, wq->name);
3227
3228
3229 wq->flags = flags;
3230 wq->saved_max_active = max_active;
3231 mutex_init(&wq->flush_mutex);
3232 atomic_set(&wq->nr_cwqs_to_flush, 0);
3233 INIT_LIST_HEAD(&wq->flusher_queue);
3234 INIT_LIST_HEAD(&wq->flusher_overflow);
3235
3236 lockdep_init_map(&wq->lockdep_map, lock_name, key, 0);
3237 INIT_LIST_HEAD(&wq->list);
3238
3239 if (alloc_cwqs(wq) < 0)
3240 goto err;
3241
3242 for_each_cwq_cpu(cpu, wq) {
3243 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
3244 struct global_cwq *gcwq = get_gcwq(cpu);
3245 int pool_idx = (bool)(flags & WQ_HIGHPRI);
3246
3247 BUG_ON((unsigned long)cwq & WORK_STRUCT_FLAG_MASK);
3248 cwq->pool = &gcwq->pools[pool_idx];
3249 cwq->wq = wq;
3250 cwq->flush_color = -1;
3251 cwq->max_active = max_active;
3252 INIT_LIST_HEAD(&cwq->delayed_works);
3253 }
3254
3255 if (flags & WQ_RESCUER) {
3256 struct worker *rescuer;
3257
3258 if (!alloc_mayday_mask(&wq->mayday_mask, GFP_KERNEL))
3259 goto err;
3260
3261 wq->rescuer = rescuer = alloc_worker();
3262 if (!rescuer)
3263 goto err;
3264
3265 rescuer->task = kthread_create(rescuer_thread, wq, "%s",
3266 wq->name);
3267 if (IS_ERR(rescuer->task))
3268 goto err;
3269
3270 rescuer->task->flags |= PF_THREAD_BOUND;
3271 wake_up_process(rescuer->task);
3272 }
3273
3274
3275
3276
3277
3278
3279 spin_lock(&workqueue_lock);
3280
3281 if (workqueue_freezing && wq->flags & WQ_FREEZABLE)
3282 for_each_cwq_cpu(cpu, wq)
3283 get_cwq(cpu, wq)->max_active = 0;
3284
3285 list_add(&wq->list, &workqueues);
3286
3287 spin_unlock(&workqueue_lock);
3288
3289 return wq;
3290err:
3291 if (wq) {
3292 free_cwqs(wq);
3293 free_mayday_mask(wq->mayday_mask);
3294 kfree(wq->rescuer);
3295 kfree(wq);
3296 }
3297 return NULL;
3298}
3299EXPORT_SYMBOL_GPL(__alloc_workqueue_key);
3300
3301
3302
3303
3304
3305
3306
3307void destroy_workqueue(struct workqueue_struct *wq)
3308{
3309 unsigned int cpu;
3310
3311
3312 drain_workqueue(wq);
3313
3314
3315
3316
3317
3318 spin_lock(&workqueue_lock);
3319 list_del(&wq->list);
3320 spin_unlock(&workqueue_lock);
3321
3322
3323 for_each_cwq_cpu(cpu, wq) {
3324 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
3325 int i;
3326
3327 for (i = 0; i < WORK_NR_COLORS; i++)
3328 BUG_ON(cwq->nr_in_flight[i]);
3329 BUG_ON(cwq->nr_active);
3330 BUG_ON(!list_empty(&cwq->delayed_works));
3331 }
3332
3333 if (wq->flags & WQ_RESCUER) {
3334 kthread_stop(wq->rescuer->task);
3335 free_mayday_mask(wq->mayday_mask);
3336 kfree(wq->rescuer);
3337 }
3338
3339 free_cwqs(wq);
3340 kfree(wq);
3341}
3342EXPORT_SYMBOL_GPL(destroy_workqueue);
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354void workqueue_set_max_active(struct workqueue_struct *wq, int max_active)
3355{
3356 unsigned int cpu;
3357
3358 max_active = wq_clamp_max_active(max_active, wq->flags, wq->name);
3359
3360 spin_lock(&workqueue_lock);
3361
3362 wq->saved_max_active = max_active;
3363
3364 for_each_cwq_cpu(cpu, wq) {
3365 struct global_cwq *gcwq = get_gcwq(cpu);
3366
3367 spin_lock_irq(&gcwq->lock);
3368
3369 if (!(wq->flags & WQ_FREEZABLE) ||
3370 !(gcwq->flags & GCWQ_FREEZING))
3371 get_cwq(gcwq->cpu, wq)->max_active = max_active;
3372
3373 spin_unlock_irq(&gcwq->lock);
3374 }
3375
3376 spin_unlock(&workqueue_lock);
3377}
3378EXPORT_SYMBOL_GPL(workqueue_set_max_active);
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392bool workqueue_congested(unsigned int cpu, struct workqueue_struct *wq)
3393{
3394 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
3395
3396 return !list_empty(&cwq->delayed_works);
3397}
3398EXPORT_SYMBOL_GPL(workqueue_congested);
3399
3400
3401
3402
3403
3404
3405
3406
3407unsigned int work_cpu(struct work_struct *work)
3408{
3409 struct global_cwq *gcwq = get_work_gcwq(work);
3410
3411 return gcwq ? gcwq->cpu : WORK_CPU_NONE;
3412}
3413EXPORT_SYMBOL_GPL(work_cpu);
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428unsigned int work_busy(struct work_struct *work)
3429{
3430 struct global_cwq *gcwq = get_work_gcwq(work);
3431 unsigned long flags;
3432 unsigned int ret = 0;
3433
3434 if (!gcwq)
3435 return false;
3436
3437 spin_lock_irqsave(&gcwq->lock, flags);
3438
3439 if (work_pending(work))
3440 ret |= WORK_BUSY_PENDING;
3441 if (find_worker_executing_work(gcwq, work))
3442 ret |= WORK_BUSY_RUNNING;
3443
3444 spin_unlock_irqrestore(&gcwq->lock, flags);
3445
3446 return ret;
3447}
3448EXPORT_SYMBOL_GPL(work_busy);
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466static void gcwq_claim_management_and_lock(struct global_cwq *gcwq)
3467{
3468 struct worker_pool *pool;
3469
3470 for_each_worker_pool(pool, gcwq)
3471 mutex_lock_nested(&pool->manager_mutex, pool - gcwq->pools);
3472 spin_lock_irq(&gcwq->lock);
3473}
3474
3475
3476static void gcwq_release_management_and_unlock(struct global_cwq *gcwq)
3477{
3478 struct worker_pool *pool;
3479
3480 spin_unlock_irq(&gcwq->lock);
3481 for_each_worker_pool(pool, gcwq)
3482 mutex_unlock(&pool->manager_mutex);
3483}
3484
3485static void gcwq_unbind_fn(struct work_struct *work)
3486{
3487 struct global_cwq *gcwq = get_gcwq(smp_processor_id());
3488 struct worker_pool *pool;
3489 struct worker *worker;
3490 struct hlist_node *pos;
3491 int i;
3492
3493 BUG_ON(gcwq->cpu != smp_processor_id());
3494
3495 gcwq_claim_management_and_lock(gcwq);
3496
3497
3498
3499
3500
3501
3502
3503 for_each_worker_pool(pool, gcwq)
3504 list_for_each_entry(worker, &pool->idle_list, entry)
3505 worker->flags |= WORKER_UNBOUND;
3506
3507 for_each_busy_worker(worker, i, pos, gcwq)
3508 worker->flags |= WORKER_UNBOUND;
3509
3510 gcwq->flags |= GCWQ_DISASSOCIATED;
3511
3512 gcwq_release_management_and_unlock(gcwq);
3513
3514
3515
3516
3517
3518
3519 schedule();
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532 for_each_worker_pool(pool, gcwq)
3533 atomic_set(get_pool_nr_running(pool), 0);
3534}
3535
3536
3537
3538
3539
3540static int __devinit workqueue_cpu_up_callback(struct notifier_block *nfb,
3541 unsigned long action,
3542 void *hcpu)
3543{
3544 unsigned int cpu = (unsigned long)hcpu;
3545 struct global_cwq *gcwq = get_gcwq(cpu);
3546 struct worker_pool *pool;
3547
3548 switch (action & ~CPU_TASKS_FROZEN) {
3549 case CPU_UP_PREPARE:
3550 for_each_worker_pool(pool, gcwq) {
3551 struct worker *worker;
3552
3553 if (pool->nr_workers)
3554 continue;
3555
3556 worker = create_worker(pool);
3557 if (!worker)
3558 return NOTIFY_BAD;
3559
3560 spin_lock_irq(&gcwq->lock);
3561 start_worker(worker);
3562 spin_unlock_irq(&gcwq->lock);
3563 }
3564 break;
3565
3566 case CPU_DOWN_FAILED:
3567 case CPU_ONLINE:
3568 gcwq_claim_management_and_lock(gcwq);
3569 gcwq->flags &= ~GCWQ_DISASSOCIATED;
3570 rebind_workers(gcwq);
3571 gcwq_release_management_and_unlock(gcwq);
3572 break;
3573 }
3574 return NOTIFY_OK;
3575}
3576
3577
3578
3579
3580
3581static int __devinit workqueue_cpu_down_callback(struct notifier_block *nfb,
3582 unsigned long action,
3583 void *hcpu)
3584{
3585 unsigned int cpu = (unsigned long)hcpu;
3586 struct work_struct unbind_work;
3587
3588 switch (action & ~CPU_TASKS_FROZEN) {
3589 case CPU_DOWN_PREPARE:
3590
3591 INIT_WORK_ONSTACK(&unbind_work, gcwq_unbind_fn);
3592 schedule_work_on(cpu, &unbind_work);
3593 flush_work(&unbind_work);
3594 break;
3595 }
3596 return NOTIFY_OK;
3597}
3598
3599#ifdef CONFIG_SMP
3600
3601struct work_for_cpu {
3602 struct work_struct work;
3603 long (*fn)(void *);
3604 void *arg;
3605 long ret;
3606};
3607
3608static void work_for_cpu_fn(struct work_struct *work)
3609{
3610 struct work_for_cpu *wfc = container_of(work, struct work_for_cpu, work);
3611
3612 wfc->ret = wfc->fn(wfc->arg);
3613}
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625long work_on_cpu(unsigned int cpu, long (*fn)(void *), void *arg)
3626{
3627 struct work_for_cpu wfc = { .fn = fn, .arg = arg };
3628
3629 INIT_WORK_ONSTACK(&wfc.work, work_for_cpu_fn);
3630 schedule_work_on(cpu, &wfc.work);
3631 flush_work(&wfc.work);
3632 return wfc.ret;
3633}
3634EXPORT_SYMBOL_GPL(work_on_cpu);
3635#endif
3636
3637#ifdef CONFIG_FREEZER
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649void freeze_workqueues_begin(void)
3650{
3651 unsigned int cpu;
3652
3653 spin_lock(&workqueue_lock);
3654
3655 BUG_ON(workqueue_freezing);
3656 workqueue_freezing = true;
3657
3658 for_each_gcwq_cpu(cpu) {
3659 struct global_cwq *gcwq = get_gcwq(cpu);
3660 struct workqueue_struct *wq;
3661
3662 spin_lock_irq(&gcwq->lock);
3663
3664 BUG_ON(gcwq->flags & GCWQ_FREEZING);
3665 gcwq->flags |= GCWQ_FREEZING;
3666
3667 list_for_each_entry(wq, &workqueues, list) {
3668 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
3669
3670 if (cwq && wq->flags & WQ_FREEZABLE)
3671 cwq->max_active = 0;
3672 }
3673
3674 spin_unlock_irq(&gcwq->lock);
3675 }
3676
3677 spin_unlock(&workqueue_lock);
3678}
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693bool freeze_workqueues_busy(void)
3694{
3695 unsigned int cpu;
3696 bool busy = false;
3697
3698 spin_lock(&workqueue_lock);
3699
3700 BUG_ON(!workqueue_freezing);
3701
3702 for_each_gcwq_cpu(cpu) {
3703 struct workqueue_struct *wq;
3704
3705
3706
3707
3708 list_for_each_entry(wq, &workqueues, list) {
3709 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
3710
3711 if (!cwq || !(wq->flags & WQ_FREEZABLE))
3712 continue;
3713
3714 BUG_ON(cwq->nr_active < 0);
3715 if (cwq->nr_active) {
3716 busy = true;
3717 goto out_unlock;
3718 }
3719 }
3720 }
3721out_unlock:
3722 spin_unlock(&workqueue_lock);
3723 return busy;
3724}
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735void thaw_workqueues(void)
3736{
3737 unsigned int cpu;
3738
3739 spin_lock(&workqueue_lock);
3740
3741 if (!workqueue_freezing)
3742 goto out_unlock;
3743
3744 for_each_gcwq_cpu(cpu) {
3745 struct global_cwq *gcwq = get_gcwq(cpu);
3746 struct worker_pool *pool;
3747 struct workqueue_struct *wq;
3748
3749 spin_lock_irq(&gcwq->lock);
3750
3751 BUG_ON(!(gcwq->flags & GCWQ_FREEZING));
3752 gcwq->flags &= ~GCWQ_FREEZING;
3753
3754 list_for_each_entry(wq, &workqueues, list) {
3755 struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
3756
3757 if (!cwq || !(wq->flags & WQ_FREEZABLE))
3758 continue;
3759
3760
3761 cwq->max_active = wq->saved_max_active;
3762
3763 while (!list_empty(&cwq->delayed_works) &&
3764 cwq->nr_active < cwq->max_active)
3765 cwq_activate_first_delayed(cwq);
3766 }
3767
3768 for_each_worker_pool(pool, gcwq)
3769 wake_up_worker(pool);
3770
3771 spin_unlock_irq(&gcwq->lock);
3772 }
3773
3774 workqueue_freezing = false;
3775out_unlock:
3776 spin_unlock(&workqueue_lock);
3777}
3778#endif
3779
3780static int __init init_workqueues(void)
3781{
3782 unsigned int cpu;
3783 int i;
3784
3785 cpu_notifier(workqueue_cpu_up_callback, CPU_PRI_WORKQUEUE_UP);
3786 cpu_notifier(workqueue_cpu_down_callback, CPU_PRI_WORKQUEUE_DOWN);
3787
3788
3789 for_each_gcwq_cpu(cpu) {
3790 struct global_cwq *gcwq = get_gcwq(cpu);
3791 struct worker_pool *pool;
3792
3793 spin_lock_init(&gcwq->lock);
3794 gcwq->cpu = cpu;
3795 gcwq->flags |= GCWQ_DISASSOCIATED;
3796
3797 for (i = 0; i < BUSY_WORKER_HASH_SIZE; i++)
3798 INIT_HLIST_HEAD(&gcwq->busy_hash[i]);
3799
3800 for_each_worker_pool(pool, gcwq) {
3801 pool->gcwq = gcwq;
3802 INIT_LIST_HEAD(&pool->worklist);
3803 INIT_LIST_HEAD(&pool->idle_list);
3804
3805 init_timer_deferrable(&pool->idle_timer);
3806 pool->idle_timer.function = idle_worker_timeout;
3807 pool->idle_timer.data = (unsigned long)pool;
3808
3809 setup_timer(&pool->mayday_timer, gcwq_mayday_timeout,
3810 (unsigned long)pool);
3811
3812 mutex_init(&pool->manager_mutex);
3813 ida_init(&pool->worker_ida);
3814 }
3815
3816 init_waitqueue_head(&gcwq->rebind_hold);
3817 }
3818
3819
3820 for_each_online_gcwq_cpu(cpu) {
3821 struct global_cwq *gcwq = get_gcwq(cpu);
3822 struct worker_pool *pool;
3823
3824 if (cpu != WORK_CPU_UNBOUND)
3825 gcwq->flags &= ~GCWQ_DISASSOCIATED;
3826
3827 for_each_worker_pool(pool, gcwq) {
3828 struct worker *worker;
3829
3830 worker = create_worker(pool);
3831 BUG_ON(!worker);
3832 spin_lock_irq(&gcwq->lock);
3833 start_worker(worker);
3834 spin_unlock_irq(&gcwq->lock);
3835 }
3836 }
3837
3838 system_wq = alloc_workqueue("events", 0, 0);
3839 system_long_wq = alloc_workqueue("events_long", 0, 0);
3840 system_nrt_wq = alloc_workqueue("events_nrt", WQ_NON_REENTRANT, 0);
3841 system_unbound_wq = alloc_workqueue("events_unbound", WQ_UNBOUND,
3842 WQ_UNBOUND_MAX_ACTIVE);
3843 system_freezable_wq = alloc_workqueue("events_freezable",
3844 WQ_FREEZABLE, 0);
3845 system_nrt_freezable_wq = alloc_workqueue("events_nrt_freezable",
3846 WQ_NON_REENTRANT | WQ_FREEZABLE, 0);
3847 BUG_ON(!system_wq || !system_long_wq || !system_nrt_wq ||
3848 !system_unbound_wq || !system_freezable_wq ||
3849 !system_nrt_freezable_wq);
3850 return 0;
3851}
3852early_initcall(init_workqueues);
3853