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