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