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
27#include <linux/export.h>
28#include <linux/kernel.h>
29#include <linux/sched.h>
30#include <linux/init.h>
31#include <linux/signal.h>
32#include <linux/completion.h>
33#include <linux/workqueue.h>
34#include <linux/slab.h>
35#include <linux/cpu.h>
36#include <linux/notifier.h>
37#include <linux/kthread.h>
38#include <linux/hardirq.h>
39#include <linux/mempolicy.h>
40#include <linux/freezer.h>
41#include <linux/kallsyms.h>
42#include <linux/debug_locks.h>
43#include <linux/lockdep.h>
44#include <linux/idr.h>
45#include <linux/jhash.h>
46#include <linux/hashtable.h>
47#include <linux/rculist.h>
48#include <linux/nodemask.h>
49#include <linux/moduleparam.h>
50#include <linux/uaccess.h>
51
52#include "workqueue_internal.h"
53
54enum {
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 POOL_DISASSOCIATED = 1 << 2,
72
73
74 WORKER_DIE = 1 << 1,
75 WORKER_IDLE = 1 << 2,
76 WORKER_PREP = 1 << 3,
77 WORKER_CPU_INTENSIVE = 1 << 6,
78 WORKER_UNBOUND = 1 << 7,
79 WORKER_REBOUND = 1 << 8,
80
81 WORKER_NOT_RUNNING = WORKER_PREP | WORKER_CPU_INTENSIVE |
82 WORKER_UNBOUND | WORKER_REBOUND,
83
84 NR_STD_WORKER_POOLS = 2,
85
86 UNBOUND_POOL_HASH_ORDER = 6,
87 BUSY_WORKER_HASH_ORDER = 6,
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 = MIN_NICE,
103 HIGHPRI_NICE_LEVEL = MIN_NICE,
104
105 WQ_NAME_LEN = 24,
106};
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139struct worker_pool {
140 spinlock_t lock;
141 int cpu;
142 int node;
143 int id;
144 unsigned int flags;
145
146 struct list_head worklist;
147 int nr_workers;
148
149
150 int nr_idle;
151
152 struct list_head idle_list;
153 struct timer_list idle_timer;
154 struct timer_list mayday_timer;
155
156
157 DECLARE_HASHTABLE(busy_hash, BUSY_WORKER_HASH_ORDER);
158
159
160
161 struct mutex manager_arb;
162 struct mutex attach_mutex;
163 struct list_head workers;
164 struct completion *detach_completion;
165
166 struct ida worker_ida;
167
168 struct workqueue_attrs *attrs;
169 struct hlist_node hash_node;
170 int refcnt;
171
172
173
174
175
176
177 atomic_t nr_running ____cacheline_aligned_in_smp;
178
179
180
181
182
183 struct rcu_head rcu;
184} ____cacheline_aligned_in_smp;
185
186
187
188
189
190
191
192struct pool_workqueue {
193 struct worker_pool *pool;
194 struct workqueue_struct *wq;
195 int work_color;
196 int flush_color;
197 int refcnt;
198 int nr_in_flight[WORK_NR_COLORS];
199
200 int nr_active;
201 int max_active;
202 struct list_head delayed_works;
203 struct list_head pwqs_node;
204 struct list_head mayday_node;
205
206
207
208
209
210
211
212 struct work_struct unbound_release_work;
213 struct rcu_head rcu;
214} __aligned(1 << WORK_STRUCT_FLAG_BITS);
215
216
217
218
219struct wq_flusher {
220 struct list_head list;
221 int flush_color;
222 struct completion done;
223};
224
225struct wq_device;
226
227
228
229
230
231struct workqueue_struct {
232 struct list_head pwqs;
233 struct list_head list;
234
235 struct mutex mutex;
236 int work_color;
237 int flush_color;
238 atomic_t nr_pwqs_to_flush;
239 struct wq_flusher *first_flusher;
240 struct list_head flusher_queue;
241 struct list_head flusher_overflow;
242
243 struct list_head maydays;
244 struct worker *rescuer;
245
246 int nr_drainers;
247 int saved_max_active;
248
249 struct workqueue_attrs *unbound_attrs;
250 struct pool_workqueue *dfl_pwq;
251
252#ifdef CONFIG_SYSFS
253 struct wq_device *wq_dev;
254#endif
255#ifdef CONFIG_LOCKDEP
256 struct lockdep_map lockdep_map;
257#endif
258 char name[WQ_NAME_LEN];
259
260
261 unsigned int flags ____cacheline_aligned;
262 struct pool_workqueue __percpu *cpu_pwqs;
263 struct pool_workqueue __rcu *numa_pwq_tbl[];
264};
265
266static struct kmem_cache *pwq_cache;
267
268static int wq_numa_tbl_len;
269static cpumask_var_t *wq_numa_possible_cpumask;
270
271
272static bool wq_disable_numa;
273module_param_named(disable_numa, wq_disable_numa, bool, 0444);
274
275
276#ifdef CONFIG_WQ_POWER_EFFICIENT_DEFAULT
277static bool wq_power_efficient = true;
278#else
279static bool wq_power_efficient;
280#endif
281
282module_param_named(power_efficient, wq_power_efficient, bool, 0444);
283
284static bool wq_numa_enabled;
285
286
287static struct workqueue_attrs *wq_update_unbound_numa_attrs_buf;
288
289static DEFINE_MUTEX(wq_pool_mutex);
290static DEFINE_SPINLOCK(wq_mayday_lock);
291
292static LIST_HEAD(workqueues);
293static bool workqueue_freezing;
294
295
296static DEFINE_PER_CPU_SHARED_ALIGNED(struct worker_pool [NR_STD_WORKER_POOLS],
297 cpu_worker_pools);
298
299static DEFINE_IDR(worker_pool_idr);
300
301
302static DEFINE_HASHTABLE(unbound_pool_hash, UNBOUND_POOL_HASH_ORDER);
303
304
305static struct workqueue_attrs *unbound_std_wq_attrs[NR_STD_WORKER_POOLS];
306
307
308static struct workqueue_attrs *ordered_wq_attrs[NR_STD_WORKER_POOLS];
309
310struct workqueue_struct *system_wq __read_mostly;
311EXPORT_SYMBOL(system_wq);
312struct workqueue_struct *system_highpri_wq __read_mostly;
313EXPORT_SYMBOL_GPL(system_highpri_wq);
314struct workqueue_struct *system_long_wq __read_mostly;
315EXPORT_SYMBOL_GPL(system_long_wq);
316struct workqueue_struct *system_unbound_wq __read_mostly;
317EXPORT_SYMBOL_GPL(system_unbound_wq);
318struct workqueue_struct *system_freezable_wq __read_mostly;
319EXPORT_SYMBOL_GPL(system_freezable_wq);
320struct workqueue_struct *system_power_efficient_wq __read_mostly;
321EXPORT_SYMBOL_GPL(system_power_efficient_wq);
322struct workqueue_struct *system_freezable_power_efficient_wq __read_mostly;
323EXPORT_SYMBOL_GPL(system_freezable_power_efficient_wq);
324
325static int worker_thread(void *__worker);
326static void copy_workqueue_attrs(struct workqueue_attrs *to,
327 const struct workqueue_attrs *from);
328
329#define CREATE_TRACE_POINTS
330#include <trace/events/workqueue.h>
331
332#define assert_rcu_or_pool_mutex() \
333 rcu_lockdep_assert(rcu_read_lock_sched_held() || \
334 lockdep_is_held(&wq_pool_mutex), \
335 "sched RCU or wq_pool_mutex should be held")
336
337#define assert_rcu_or_wq_mutex(wq) \
338 rcu_lockdep_assert(rcu_read_lock_sched_held() || \
339 lockdep_is_held(&wq->mutex), \
340 "sched RCU or wq->mutex should be held")
341
342#define for_each_cpu_worker_pool(pool, cpu) \
343 for ((pool) = &per_cpu(cpu_worker_pools, cpu)[0]; \
344 (pool) < &per_cpu(cpu_worker_pools, cpu)[NR_STD_WORKER_POOLS]; \
345 (pool)++)
346
347
348
349
350
351
352
353
354
355
356
357
358
359#define for_each_pool(pool, pi) \
360 idr_for_each_entry(&worker_pool_idr, pool, pi) \
361 if (({ assert_rcu_or_pool_mutex(); false; })) { } \
362 else
363
364
365
366
367
368
369
370
371
372
373
374#define for_each_pool_worker(worker, pool) \
375 list_for_each_entry((worker), &(pool)->workers, node) \
376 if (({ lockdep_assert_held(&pool->attach_mutex); false; })) { } \
377 else
378
379
380
381
382
383
384
385
386
387
388
389
390
391#define for_each_pwq(pwq, wq) \
392 list_for_each_entry_rcu((pwq), &(wq)->pwqs, pwqs_node) \
393 if (({ assert_rcu_or_wq_mutex(wq); false; })) { } \
394 else
395
396#ifdef CONFIG_DEBUG_OBJECTS_WORK
397
398static struct debug_obj_descr work_debug_descr;
399
400static void *work_debug_hint(void *addr)
401{
402 return ((struct work_struct *) addr)->func;
403}
404
405
406
407
408
409static int work_fixup_init(void *addr, enum debug_obj_state state)
410{
411 struct work_struct *work = addr;
412
413 switch (state) {
414 case ODEBUG_STATE_ACTIVE:
415 cancel_work_sync(work);
416 debug_object_init(work, &work_debug_descr);
417 return 1;
418 default:
419 return 0;
420 }
421}
422
423
424
425
426
427
428static int work_fixup_activate(void *addr, enum debug_obj_state state)
429{
430 struct work_struct *work = addr;
431
432 switch (state) {
433
434 case ODEBUG_STATE_NOTAVAILABLE:
435
436
437
438
439
440 if (test_bit(WORK_STRUCT_STATIC_BIT, work_data_bits(work))) {
441 debug_object_init(work, &work_debug_descr);
442 debug_object_activate(work, &work_debug_descr);
443 return 0;
444 }
445 WARN_ON_ONCE(1);
446 return 0;
447
448 case ODEBUG_STATE_ACTIVE:
449 WARN_ON(1);
450
451 default:
452 return 0;
453 }
454}
455
456
457
458
459
460static int work_fixup_free(void *addr, enum debug_obj_state state)
461{
462 struct work_struct *work = addr;
463
464 switch (state) {
465 case ODEBUG_STATE_ACTIVE:
466 cancel_work_sync(work);
467 debug_object_free(work, &work_debug_descr);
468 return 1;
469 default:
470 return 0;
471 }
472}
473
474static struct debug_obj_descr work_debug_descr = {
475 .name = "work_struct",
476 .debug_hint = work_debug_hint,
477 .fixup_init = work_fixup_init,
478 .fixup_activate = work_fixup_activate,
479 .fixup_free = work_fixup_free,
480};
481
482static inline void debug_work_activate(struct work_struct *work)
483{
484 debug_object_activate(work, &work_debug_descr);
485}
486
487static inline void debug_work_deactivate(struct work_struct *work)
488{
489 debug_object_deactivate(work, &work_debug_descr);
490}
491
492void __init_work(struct work_struct *work, int onstack)
493{
494 if (onstack)
495 debug_object_init_on_stack(work, &work_debug_descr);
496 else
497 debug_object_init(work, &work_debug_descr);
498}
499EXPORT_SYMBOL_GPL(__init_work);
500
501void destroy_work_on_stack(struct work_struct *work)
502{
503 debug_object_free(work, &work_debug_descr);
504}
505EXPORT_SYMBOL_GPL(destroy_work_on_stack);
506
507void destroy_delayed_work_on_stack(struct delayed_work *work)
508{
509 destroy_timer_on_stack(&work->timer);
510 debug_object_free(&work->work, &work_debug_descr);
511}
512EXPORT_SYMBOL_GPL(destroy_delayed_work_on_stack);
513
514#else
515static inline void debug_work_activate(struct work_struct *work) { }
516static inline void debug_work_deactivate(struct work_struct *work) { }
517#endif
518
519
520
521
522
523
524
525
526static int worker_pool_assign_id(struct worker_pool *pool)
527{
528 int ret;
529
530 lockdep_assert_held(&wq_pool_mutex);
531
532 ret = idr_alloc(&worker_pool_idr, pool, 0, WORK_OFFQ_POOL_NONE,
533 GFP_KERNEL);
534 if (ret >= 0) {
535 pool->id = ret;
536 return 0;
537 }
538 return ret;
539}
540
541
542
543
544
545
546
547
548
549
550
551
552static struct pool_workqueue *unbound_pwq_by_node(struct workqueue_struct *wq,
553 int node)
554{
555 assert_rcu_or_wq_mutex(wq);
556 return rcu_dereference_raw(wq->numa_pwq_tbl[node]);
557}
558
559static unsigned int work_color_to_flags(int color)
560{
561 return color << WORK_STRUCT_COLOR_SHIFT;
562}
563
564static int get_work_color(struct work_struct *work)
565{
566 return (*work_data_bits(work) >> WORK_STRUCT_COLOR_SHIFT) &
567 ((1 << WORK_STRUCT_COLOR_BITS) - 1);
568}
569
570static int work_next_color(int color)
571{
572 return (color + 1) % WORK_NR_COLORS;
573}
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595static inline void set_work_data(struct work_struct *work, unsigned long data,
596 unsigned long flags)
597{
598 WARN_ON_ONCE(!work_pending(work));
599 atomic_long_set(&work->data, data | flags | work_static(work));
600}
601
602static void set_work_pwq(struct work_struct *work, struct pool_workqueue *pwq,
603 unsigned long extra_flags)
604{
605 set_work_data(work, (unsigned long)pwq,
606 WORK_STRUCT_PENDING | WORK_STRUCT_PWQ | extra_flags);
607}
608
609static void set_work_pool_and_keep_pending(struct work_struct *work,
610 int pool_id)
611{
612 set_work_data(work, (unsigned long)pool_id << WORK_OFFQ_POOL_SHIFT,
613 WORK_STRUCT_PENDING);
614}
615
616static void set_work_pool_and_clear_pending(struct work_struct *work,
617 int pool_id)
618{
619
620
621
622
623
624
625 smp_wmb();
626 set_work_data(work, (unsigned long)pool_id << WORK_OFFQ_POOL_SHIFT, 0);
627}
628
629static void clear_work_data(struct work_struct *work)
630{
631 smp_wmb();
632 set_work_data(work, WORK_STRUCT_NO_POOL, 0);
633}
634
635static struct pool_workqueue *get_work_pwq(struct work_struct *work)
636{
637 unsigned long data = atomic_long_read(&work->data);
638
639 if (data & WORK_STRUCT_PWQ)
640 return (void *)(data & WORK_STRUCT_WQ_DATA_MASK);
641 else
642 return NULL;
643}
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660static struct worker_pool *get_work_pool(struct work_struct *work)
661{
662 unsigned long data = atomic_long_read(&work->data);
663 int pool_id;
664
665 assert_rcu_or_pool_mutex();
666
667 if (data & WORK_STRUCT_PWQ)
668 return ((struct pool_workqueue *)
669 (data & WORK_STRUCT_WQ_DATA_MASK))->pool;
670
671 pool_id = data >> WORK_OFFQ_POOL_SHIFT;
672 if (pool_id == WORK_OFFQ_POOL_NONE)
673 return NULL;
674
675 return idr_find(&worker_pool_idr, pool_id);
676}
677
678
679
680
681
682
683
684
685static int get_work_pool_id(struct work_struct *work)
686{
687 unsigned long data = atomic_long_read(&work->data);
688
689 if (data & WORK_STRUCT_PWQ)
690 return ((struct pool_workqueue *)
691 (data & WORK_STRUCT_WQ_DATA_MASK))->pool->id;
692
693 return data >> WORK_OFFQ_POOL_SHIFT;
694}
695
696static void mark_work_canceling(struct work_struct *work)
697{
698 unsigned long pool_id = get_work_pool_id(work);
699
700 pool_id <<= WORK_OFFQ_POOL_SHIFT;
701 set_work_data(work, pool_id | WORK_OFFQ_CANCELING, WORK_STRUCT_PENDING);
702}
703
704static bool work_is_canceling(struct work_struct *work)
705{
706 unsigned long data = atomic_long_read(&work->data);
707
708 return !(data & WORK_STRUCT_PWQ) && (data & WORK_OFFQ_CANCELING);
709}
710
711
712
713
714
715
716
717static bool __need_more_worker(struct worker_pool *pool)
718{
719 return !atomic_read(&pool->nr_running);
720}
721
722
723
724
725
726
727
728
729
730static bool need_more_worker(struct worker_pool *pool)
731{
732 return !list_empty(&pool->worklist) && __need_more_worker(pool);
733}
734
735
736static bool may_start_working(struct worker_pool *pool)
737{
738 return pool->nr_idle;
739}
740
741
742static bool keep_working(struct worker_pool *pool)
743{
744 return !list_empty(&pool->worklist) &&
745 atomic_read(&pool->nr_running) <= 1;
746}
747
748
749static bool need_to_create_worker(struct worker_pool *pool)
750{
751 return need_more_worker(pool) && !may_start_working(pool);
752}
753
754
755static bool too_many_workers(struct worker_pool *pool)
756{
757 bool managing = mutex_is_locked(&pool->manager_arb);
758 int nr_idle = pool->nr_idle + managing;
759 int nr_busy = pool->nr_workers - nr_idle;
760
761
762
763
764
765 if (list_empty(&pool->idle_list))
766 return false;
767
768 return nr_idle > 2 && (nr_idle - 2) * MAX_IDLE_WORKERS_RATIO >= nr_busy;
769}
770
771
772
773
774
775
776static struct worker *first_idle_worker(struct worker_pool *pool)
777{
778 if (unlikely(list_empty(&pool->idle_list)))
779 return NULL;
780
781 return list_first_entry(&pool->idle_list, struct worker, entry);
782}
783
784
785
786
787
788
789
790
791
792
793static void wake_up_worker(struct worker_pool *pool)
794{
795 struct worker *worker = first_idle_worker(pool);
796
797 if (likely(worker))
798 wake_up_process(worker->task);
799}
800
801
802
803
804
805
806
807
808
809
810
811
812void wq_worker_waking_up(struct task_struct *task, int cpu)
813{
814 struct worker *worker = kthread_data(task);
815
816 if (!(worker->flags & WORKER_NOT_RUNNING)) {
817 WARN_ON_ONCE(worker->pool->cpu != cpu);
818 atomic_inc(&worker->pool->nr_running);
819 }
820}
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837struct task_struct *wq_worker_sleeping(struct task_struct *task, int cpu)
838{
839 struct worker *worker = kthread_data(task), *to_wakeup = NULL;
840 struct worker_pool *pool;
841
842
843
844
845
846
847 if (worker->flags & WORKER_NOT_RUNNING)
848 return NULL;
849
850 pool = worker->pool;
851
852
853 if (WARN_ON_ONCE(cpu != raw_smp_processor_id()))
854 return NULL;
855
856
857
858
859
860
861
862
863
864
865
866
867 if (atomic_dec_and_test(&pool->nr_running) &&
868 !list_empty(&pool->worklist))
869 to_wakeup = first_idle_worker(pool);
870 return to_wakeup ? to_wakeup->task : NULL;
871}
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886static inline void worker_set_flags(struct worker *worker, unsigned int flags,
887 bool wakeup)
888{
889 struct worker_pool *pool = worker->pool;
890
891 WARN_ON_ONCE(worker->task != current);
892
893
894
895
896
897
898 if ((flags & WORKER_NOT_RUNNING) &&
899 !(worker->flags & WORKER_NOT_RUNNING)) {
900 if (wakeup) {
901 if (atomic_dec_and_test(&pool->nr_running) &&
902 !list_empty(&pool->worklist))
903 wake_up_worker(pool);
904 } else
905 atomic_dec(&pool->nr_running);
906 }
907
908 worker->flags |= flags;
909}
910
911
912
913
914
915
916
917
918
919
920
921static inline void worker_clr_flags(struct worker *worker, unsigned int flags)
922{
923 struct worker_pool *pool = worker->pool;
924 unsigned int oflags = worker->flags;
925
926 WARN_ON_ONCE(worker->task != current);
927
928 worker->flags &= ~flags;
929
930
931
932
933
934
935 if ((flags & WORKER_NOT_RUNNING) && (oflags & WORKER_NOT_RUNNING))
936 if (!(worker->flags & WORKER_NOT_RUNNING))
937 atomic_inc(&pool->nr_running);
938}
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973static struct worker *find_worker_executing_work(struct worker_pool *pool,
974 struct work_struct *work)
975{
976 struct worker *worker;
977
978 hash_for_each_possible(pool->busy_hash, worker, hentry,
979 (unsigned long)work)
980 if (worker->current_work == work &&
981 worker->current_func == work->func)
982 return worker;
983
984 return NULL;
985}
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004static void move_linked_works(struct work_struct *work, struct list_head *head,
1005 struct work_struct **nextp)
1006{
1007 struct work_struct *n;
1008
1009
1010
1011
1012
1013 list_for_each_entry_safe_from(work, n, NULL, entry) {
1014 list_move_tail(&work->entry, head);
1015 if (!(*work_data_bits(work) & WORK_STRUCT_LINKED))
1016 break;
1017 }
1018
1019
1020
1021
1022
1023
1024 if (nextp)
1025 *nextp = n;
1026}
1027
1028
1029
1030
1031
1032
1033
1034
1035static void get_pwq(struct pool_workqueue *pwq)
1036{
1037 lockdep_assert_held(&pwq->pool->lock);
1038 WARN_ON_ONCE(pwq->refcnt <= 0);
1039 pwq->refcnt++;
1040}
1041
1042
1043
1044
1045
1046
1047
1048
1049static void put_pwq(struct pool_workqueue *pwq)
1050{
1051 lockdep_assert_held(&pwq->pool->lock);
1052 if (likely(--pwq->refcnt))
1053 return;
1054 if (WARN_ON_ONCE(!(pwq->wq->flags & WQ_UNBOUND)))
1055 return;
1056
1057
1058
1059
1060
1061
1062
1063
1064 schedule_work(&pwq->unbound_release_work);
1065}
1066
1067
1068
1069
1070
1071
1072
1073static void put_pwq_unlocked(struct pool_workqueue *pwq)
1074{
1075 if (pwq) {
1076
1077
1078
1079
1080 spin_lock_irq(&pwq->pool->lock);
1081 put_pwq(pwq);
1082 spin_unlock_irq(&pwq->pool->lock);
1083 }
1084}
1085
1086static void pwq_activate_delayed_work(struct work_struct *work)
1087{
1088 struct pool_workqueue *pwq = get_work_pwq(work);
1089
1090 trace_workqueue_activate_work(work);
1091 move_linked_works(work, &pwq->pool->worklist, NULL);
1092 __clear_bit(WORK_STRUCT_DELAYED_BIT, work_data_bits(work));
1093 pwq->nr_active++;
1094}
1095
1096static void pwq_activate_first_delayed(struct pool_workqueue *pwq)
1097{
1098 struct work_struct *work = list_first_entry(&pwq->delayed_works,
1099 struct work_struct, entry);
1100
1101 pwq_activate_delayed_work(work);
1102}
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115static void pwq_dec_nr_in_flight(struct pool_workqueue *pwq, int color)
1116{
1117
1118 if (color == WORK_NO_COLOR)
1119 goto out_put;
1120
1121 pwq->nr_in_flight[color]--;
1122
1123 pwq->nr_active--;
1124 if (!list_empty(&pwq->delayed_works)) {
1125
1126 if (pwq->nr_active < pwq->max_active)
1127 pwq_activate_first_delayed(pwq);
1128 }
1129
1130
1131 if (likely(pwq->flush_color != color))
1132 goto out_put;
1133
1134
1135 if (pwq->nr_in_flight[color])
1136 goto out_put;
1137
1138
1139 pwq->flush_color = -1;
1140
1141
1142
1143
1144
1145 if (atomic_dec_and_test(&pwq->wq->nr_pwqs_to_flush))
1146 complete(&pwq->wq->first_flusher->done);
1147out_put:
1148 put_pwq(pwq);
1149}
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178static int try_to_grab_pending(struct work_struct *work, bool is_dwork,
1179 unsigned long *flags)
1180{
1181 struct worker_pool *pool;
1182 struct pool_workqueue *pwq;
1183
1184 local_irq_save(*flags);
1185
1186
1187 if (is_dwork) {
1188 struct delayed_work *dwork = to_delayed_work(work);
1189
1190
1191
1192
1193
1194
1195 if (likely(del_timer(&dwork->timer)))
1196 return 1;
1197 }
1198
1199
1200 if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work)))
1201 return 0;
1202
1203
1204
1205
1206
1207 pool = get_work_pool(work);
1208 if (!pool)
1209 goto fail;
1210
1211 spin_lock(&pool->lock);
1212
1213
1214
1215
1216
1217
1218
1219
1220 pwq = get_work_pwq(work);
1221 if (pwq && pwq->pool == pool) {
1222 debug_work_deactivate(work);
1223
1224
1225
1226
1227
1228
1229
1230
1231 if (*work_data_bits(work) & WORK_STRUCT_DELAYED)
1232 pwq_activate_delayed_work(work);
1233
1234 list_del_init(&work->entry);
1235 pwq_dec_nr_in_flight(get_work_pwq(work), get_work_color(work));
1236
1237
1238 set_work_pool_and_keep_pending(work, pool->id);
1239
1240 spin_unlock(&pool->lock);
1241 return 1;
1242 }
1243 spin_unlock(&pool->lock);
1244fail:
1245 local_irq_restore(*flags);
1246 if (work_is_canceling(work))
1247 return -ENOENT;
1248 cpu_relax();
1249 return -EAGAIN;
1250}
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265static void insert_work(struct pool_workqueue *pwq, struct work_struct *work,
1266 struct list_head *head, unsigned int extra_flags)
1267{
1268 struct worker_pool *pool = pwq->pool;
1269
1270
1271 set_work_pwq(work, pwq, extra_flags);
1272 list_add_tail(&work->entry, head);
1273 get_pwq(pwq);
1274
1275
1276
1277
1278
1279
1280 smp_mb();
1281
1282 if (__need_more_worker(pool))
1283 wake_up_worker(pool);
1284}
1285
1286
1287
1288
1289
1290static bool is_chained_work(struct workqueue_struct *wq)
1291{
1292 struct worker *worker;
1293
1294 worker = current_wq_worker();
1295
1296
1297
1298
1299 return worker && worker->current_pwq->wq == wq;
1300}
1301
1302static void __queue_work(int cpu, struct workqueue_struct *wq,
1303 struct work_struct *work)
1304{
1305 struct pool_workqueue *pwq;
1306 struct worker_pool *last_pool;
1307 struct list_head *worklist;
1308 unsigned int work_flags;
1309 unsigned int req_cpu = cpu;
1310
1311
1312
1313
1314
1315
1316
1317 WARN_ON_ONCE(!irqs_disabled());
1318
1319 debug_work_activate(work);
1320
1321
1322 if (unlikely(wq->flags & __WQ_DRAINING) &&
1323 WARN_ON_ONCE(!is_chained_work(wq)))
1324 return;
1325retry:
1326 if (req_cpu == WORK_CPU_UNBOUND)
1327 cpu = raw_smp_processor_id();
1328
1329
1330 if (!(wq->flags & WQ_UNBOUND))
1331 pwq = per_cpu_ptr(wq->cpu_pwqs, cpu);
1332 else
1333 pwq = unbound_pwq_by_node(wq, cpu_to_node(cpu));
1334
1335
1336
1337
1338
1339
1340 last_pool = get_work_pool(work);
1341 if (last_pool && last_pool != pwq->pool) {
1342 struct worker *worker;
1343
1344 spin_lock(&last_pool->lock);
1345
1346 worker = find_worker_executing_work(last_pool, work);
1347
1348 if (worker && worker->current_pwq->wq == wq) {
1349 pwq = worker->current_pwq;
1350 } else {
1351
1352 spin_unlock(&last_pool->lock);
1353 spin_lock(&pwq->pool->lock);
1354 }
1355 } else {
1356 spin_lock(&pwq->pool->lock);
1357 }
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367 if (unlikely(!pwq->refcnt)) {
1368 if (wq->flags & WQ_UNBOUND) {
1369 spin_unlock(&pwq->pool->lock);
1370 cpu_relax();
1371 goto retry;
1372 }
1373
1374 WARN_ONCE(true, "workqueue: per-cpu pwq for %s on cpu%d has 0 refcnt",
1375 wq->name, cpu);
1376 }
1377
1378
1379 trace_workqueue_queue_work(req_cpu, pwq, work);
1380
1381 if (WARN_ON(!list_empty(&work->entry))) {
1382 spin_unlock(&pwq->pool->lock);
1383 return;
1384 }
1385
1386 pwq->nr_in_flight[pwq->work_color]++;
1387 work_flags = work_color_to_flags(pwq->work_color);
1388
1389 if (likely(pwq->nr_active < pwq->max_active)) {
1390 trace_workqueue_activate_work(work);
1391 pwq->nr_active++;
1392 worklist = &pwq->pool->worklist;
1393 } else {
1394 work_flags |= WORK_STRUCT_DELAYED;
1395 worklist = &pwq->delayed_works;
1396 }
1397
1398 insert_work(pwq, work, worklist, work_flags);
1399
1400 spin_unlock(&pwq->pool->lock);
1401}
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414bool queue_work_on(int cpu, struct workqueue_struct *wq,
1415 struct work_struct *work)
1416{
1417 bool ret = false;
1418 unsigned long flags;
1419
1420 local_irq_save(flags);
1421
1422 if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work))) {
1423 __queue_work(cpu, wq, work);
1424 ret = true;
1425 }
1426
1427 local_irq_restore(flags);
1428 return ret;
1429}
1430EXPORT_SYMBOL(queue_work_on);
1431
1432void delayed_work_timer_fn(unsigned long __data)
1433{
1434 struct delayed_work *dwork = (struct delayed_work *)__data;
1435
1436
1437 __queue_work(dwork->cpu, dwork->wq, &dwork->work);
1438}
1439EXPORT_SYMBOL(delayed_work_timer_fn);
1440
1441static void __queue_delayed_work(int cpu, struct workqueue_struct *wq,
1442 struct delayed_work *dwork, unsigned long delay)
1443{
1444 struct timer_list *timer = &dwork->timer;
1445 struct work_struct *work = &dwork->work;
1446
1447 WARN_ON_ONCE(timer->function != delayed_work_timer_fn ||
1448 timer->data != (unsigned long)dwork);
1449 WARN_ON_ONCE(timer_pending(timer));
1450 WARN_ON_ONCE(!list_empty(&work->entry));
1451
1452
1453
1454
1455
1456
1457
1458 if (!delay) {
1459 __queue_work(cpu, wq, &dwork->work);
1460 return;
1461 }
1462
1463 timer_stats_timer_set_start_info(&dwork->timer);
1464
1465 dwork->wq = wq;
1466 dwork->cpu = cpu;
1467 timer->expires = jiffies + delay;
1468
1469 if (unlikely(cpu != WORK_CPU_UNBOUND))
1470 add_timer_on(timer, cpu);
1471 else
1472 add_timer(timer);
1473}
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486bool queue_delayed_work_on(int cpu, struct workqueue_struct *wq,
1487 struct delayed_work *dwork, unsigned long delay)
1488{
1489 struct work_struct *work = &dwork->work;
1490 bool ret = false;
1491 unsigned long flags;
1492
1493
1494 local_irq_save(flags);
1495
1496 if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work))) {
1497 __queue_delayed_work(cpu, wq, dwork, delay);
1498 ret = true;
1499 }
1500
1501 local_irq_restore(flags);
1502 return ret;
1503}
1504EXPORT_SYMBOL(queue_delayed_work_on);
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524bool mod_delayed_work_on(int cpu, struct workqueue_struct *wq,
1525 struct delayed_work *dwork, unsigned long delay)
1526{
1527 unsigned long flags;
1528 int ret;
1529
1530 do {
1531 ret = try_to_grab_pending(&dwork->work, true, &flags);
1532 } while (unlikely(ret == -EAGAIN));
1533
1534 if (likely(ret >= 0)) {
1535 __queue_delayed_work(cpu, wq, dwork, delay);
1536 local_irq_restore(flags);
1537 }
1538
1539
1540 return ret;
1541}
1542EXPORT_SYMBOL_GPL(mod_delayed_work_on);
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554static void worker_enter_idle(struct worker *worker)
1555{
1556 struct worker_pool *pool = worker->pool;
1557
1558 if (WARN_ON_ONCE(worker->flags & WORKER_IDLE) ||
1559 WARN_ON_ONCE(!list_empty(&worker->entry) &&
1560 (worker->hentry.next || worker->hentry.pprev)))
1561 return;
1562
1563
1564 worker->flags |= WORKER_IDLE;
1565 pool->nr_idle++;
1566 worker->last_active = jiffies;
1567
1568
1569 list_add(&worker->entry, &pool->idle_list);
1570
1571 if (too_many_workers(pool) && !timer_pending(&pool->idle_timer))
1572 mod_timer(&pool->idle_timer, jiffies + IDLE_WORKER_TIMEOUT);
1573
1574
1575
1576
1577
1578
1579
1580 WARN_ON_ONCE(!(pool->flags & POOL_DISASSOCIATED) &&
1581 pool->nr_workers == pool->nr_idle &&
1582 atomic_read(&pool->nr_running));
1583}
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594static void worker_leave_idle(struct worker *worker)
1595{
1596 struct worker_pool *pool = worker->pool;
1597
1598 if (WARN_ON_ONCE(!(worker->flags & WORKER_IDLE)))
1599 return;
1600 worker_clr_flags(worker, WORKER_IDLE);
1601 pool->nr_idle--;
1602 list_del_init(&worker->entry);
1603}
1604
1605static struct worker *alloc_worker(void)
1606{
1607 struct worker *worker;
1608
1609 worker = kzalloc(sizeof(*worker), GFP_KERNEL);
1610 if (worker) {
1611 INIT_LIST_HEAD(&worker->entry);
1612 INIT_LIST_HEAD(&worker->scheduled);
1613 INIT_LIST_HEAD(&worker->node);
1614
1615 worker->flags = WORKER_PREP;
1616 }
1617 return worker;
1618}
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629static void worker_attach_to_pool(struct worker *worker,
1630 struct worker_pool *pool)
1631{
1632 mutex_lock(&pool->attach_mutex);
1633
1634
1635
1636
1637
1638 set_cpus_allowed_ptr(worker->task, pool->attrs->cpumask);
1639
1640
1641
1642
1643
1644
1645 if (pool->flags & POOL_DISASSOCIATED)
1646 worker->flags |= WORKER_UNBOUND;
1647
1648 list_add_tail(&worker->node, &pool->workers);
1649
1650 mutex_unlock(&pool->attach_mutex);
1651}
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662static void worker_detach_from_pool(struct worker *worker,
1663 struct worker_pool *pool)
1664{
1665 struct completion *detach_completion = NULL;
1666
1667 mutex_lock(&pool->attach_mutex);
1668 list_del(&worker->node);
1669 if (list_empty(&pool->workers))
1670 detach_completion = pool->detach_completion;
1671 mutex_unlock(&pool->attach_mutex);
1672
1673 if (detach_completion)
1674 complete(detach_completion);
1675}
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690static struct worker *create_worker(struct worker_pool *pool)
1691{
1692 struct worker *worker = NULL;
1693 int id = -1;
1694 char id_buf[16];
1695
1696
1697 id = ida_simple_get(&pool->worker_ida, 0, 0, GFP_KERNEL);
1698 if (id < 0)
1699 goto fail;
1700
1701 worker = alloc_worker();
1702 if (!worker)
1703 goto fail;
1704
1705 worker->pool = pool;
1706 worker->id = id;
1707
1708 if (pool->cpu >= 0)
1709 snprintf(id_buf, sizeof(id_buf), "%d:%d%s", pool->cpu, id,
1710 pool->attrs->nice < 0 ? "H" : "");
1711 else
1712 snprintf(id_buf, sizeof(id_buf), "u%d:%d", pool->id, id);
1713
1714 worker->task = kthread_create_on_node(worker_thread, worker, pool->node,
1715 "kworker/%s", id_buf);
1716 if (IS_ERR(worker->task))
1717 goto fail;
1718
1719 set_user_nice(worker->task, pool->attrs->nice);
1720
1721
1722 worker->task->flags |= PF_NO_SETAFFINITY;
1723
1724
1725 worker_attach_to_pool(worker, pool);
1726
1727 return worker;
1728
1729fail:
1730 if (id >= 0)
1731 ida_simple_remove(&pool->worker_ida, id);
1732 kfree(worker);
1733 return NULL;
1734}
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745static void start_worker(struct worker *worker)
1746{
1747 worker->pool->nr_workers++;
1748 worker_enter_idle(worker);
1749 wake_up_process(worker->task);
1750}
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760static int create_and_start_worker(struct worker_pool *pool)
1761{
1762 struct worker *worker;
1763
1764 worker = create_worker(pool);
1765 if (worker) {
1766 spin_lock_irq(&pool->lock);
1767 start_worker(worker);
1768 spin_unlock_irq(&pool->lock);
1769 }
1770
1771 return worker ? 0 : -ENOMEM;
1772}
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784static void destroy_worker(struct worker *worker)
1785{
1786 struct worker_pool *pool = worker->pool;
1787
1788 lockdep_assert_held(&pool->lock);
1789
1790
1791 if (WARN_ON(worker->current_work) ||
1792 WARN_ON(!list_empty(&worker->scheduled)) ||
1793 WARN_ON(!(worker->flags & WORKER_IDLE)))
1794 return;
1795
1796 pool->nr_workers--;
1797 pool->nr_idle--;
1798
1799 list_del_init(&worker->entry);
1800 worker->flags |= WORKER_DIE;
1801 wake_up_process(worker->task);
1802}
1803
1804static void idle_worker_timeout(unsigned long __pool)
1805{
1806 struct worker_pool *pool = (void *)__pool;
1807
1808 spin_lock_irq(&pool->lock);
1809
1810 while (too_many_workers(pool)) {
1811 struct worker *worker;
1812 unsigned long expires;
1813
1814
1815 worker = list_entry(pool->idle_list.prev, struct worker, entry);
1816 expires = worker->last_active + IDLE_WORKER_TIMEOUT;
1817
1818 if (time_before(jiffies, expires)) {
1819 mod_timer(&pool->idle_timer, expires);
1820 break;
1821 }
1822
1823 destroy_worker(worker);
1824 }
1825
1826 spin_unlock_irq(&pool->lock);
1827}
1828
1829static void send_mayday(struct work_struct *work)
1830{
1831 struct pool_workqueue *pwq = get_work_pwq(work);
1832 struct workqueue_struct *wq = pwq->wq;
1833
1834 lockdep_assert_held(&wq_mayday_lock);
1835
1836 if (!wq->rescuer)
1837 return;
1838
1839
1840 if (list_empty(&pwq->mayday_node)) {
1841
1842
1843
1844
1845
1846 get_pwq(pwq);
1847 list_add_tail(&pwq->mayday_node, &wq->maydays);
1848 wake_up_process(wq->rescuer->task);
1849 }
1850}
1851
1852static void pool_mayday_timeout(unsigned long __pool)
1853{
1854 struct worker_pool *pool = (void *)__pool;
1855 struct work_struct *work;
1856
1857 spin_lock_irq(&wq_mayday_lock);
1858 spin_lock(&pool->lock);
1859
1860 if (need_to_create_worker(pool)) {
1861
1862
1863
1864
1865
1866
1867 list_for_each_entry(work, &pool->worklist, entry)
1868 send_mayday(work);
1869 }
1870
1871 spin_unlock(&pool->lock);
1872 spin_unlock_irq(&wq_mayday_lock);
1873
1874 mod_timer(&pool->mayday_timer, jiffies + MAYDAY_INTERVAL);
1875}
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899static bool maybe_create_worker(struct worker_pool *pool)
1900__releases(&pool->lock)
1901__acquires(&pool->lock)
1902{
1903 if (!need_to_create_worker(pool))
1904 return false;
1905restart:
1906 spin_unlock_irq(&pool->lock);
1907
1908
1909 mod_timer(&pool->mayday_timer, jiffies + MAYDAY_INITIAL_TIMEOUT);
1910
1911 while (true) {
1912 struct worker *worker;
1913
1914 worker = create_worker(pool);
1915 if (worker) {
1916 del_timer_sync(&pool->mayday_timer);
1917 spin_lock_irq(&pool->lock);
1918 start_worker(worker);
1919 if (WARN_ON_ONCE(need_to_create_worker(pool)))
1920 goto restart;
1921 return true;
1922 }
1923
1924 if (!need_to_create_worker(pool))
1925 break;
1926
1927 __set_current_state(TASK_INTERRUPTIBLE);
1928 schedule_timeout(CREATE_COOLDOWN);
1929
1930 if (!need_to_create_worker(pool))
1931 break;
1932 }
1933
1934 del_timer_sync(&pool->mayday_timer);
1935 spin_lock_irq(&pool->lock);
1936 if (need_to_create_worker(pool))
1937 goto restart;
1938 return true;
1939}
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964static bool manage_workers(struct worker *worker)
1965{
1966 struct worker_pool *pool = worker->pool;
1967 bool ret = false;
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979 if (!mutex_trylock(&pool->manager_arb))
1980 return ret;
1981
1982 ret |= maybe_create_worker(pool);
1983
1984 mutex_unlock(&pool->manager_arb);
1985 return ret;
1986}
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002static void process_one_work(struct worker *worker, struct work_struct *work)
2003__releases(&pool->lock)
2004__acquires(&pool->lock)
2005{
2006 struct pool_workqueue *pwq = get_work_pwq(work);
2007 struct worker_pool *pool = worker->pool;
2008 bool cpu_intensive = pwq->wq->flags & WQ_CPU_INTENSIVE;
2009 int work_color;
2010 struct worker *collision;
2011#ifdef CONFIG_LOCKDEP
2012
2013
2014
2015
2016
2017
2018
2019 struct lockdep_map lockdep_map;
2020
2021 lockdep_copy_map(&lockdep_map, &work->lockdep_map);
2022#endif
2023
2024
2025
2026
2027
2028 WARN_ON_ONCE(!(worker->flags & WORKER_UNBOUND) &&
2029 !(pool->flags & POOL_DISASSOCIATED) &&
2030 raw_smp_processor_id() != pool->cpu);
2031
2032
2033
2034
2035
2036
2037
2038 collision = find_worker_executing_work(pool, work);
2039 if (unlikely(collision)) {
2040 move_linked_works(work, &collision->scheduled, NULL);
2041 return;
2042 }
2043
2044
2045 debug_work_deactivate(work);
2046 hash_add(pool->busy_hash, &worker->hentry, (unsigned long)work);
2047 worker->current_work = work;
2048 worker->current_func = work->func;
2049 worker->current_pwq = pwq;
2050 work_color = get_work_color(work);
2051
2052 list_del_init(&work->entry);
2053
2054
2055
2056
2057
2058 if (unlikely(cpu_intensive))
2059 worker_set_flags(worker, WORKER_CPU_INTENSIVE, true);
2060
2061
2062
2063
2064
2065 if ((worker->flags & WORKER_UNBOUND) && need_more_worker(pool))
2066 wake_up_worker(pool);
2067
2068
2069
2070
2071
2072
2073
2074 set_work_pool_and_clear_pending(work, pool->id);
2075
2076 spin_unlock_irq(&pool->lock);
2077
2078 lock_map_acquire_read(&pwq->wq->lockdep_map);
2079 lock_map_acquire(&lockdep_map);
2080 trace_workqueue_execute_start(work);
2081 worker->current_func(work);
2082
2083
2084
2085
2086 trace_workqueue_execute_end(work);
2087 lock_map_release(&lockdep_map);
2088 lock_map_release(&pwq->wq->lockdep_map);
2089
2090 if (unlikely(in_atomic() || lockdep_depth(current) > 0)) {
2091 pr_err("BUG: workqueue leaked lock or atomic: %s/0x%08x/%d\n"
2092 " last function: %pf\n",
2093 current->comm, preempt_count(), task_pid_nr(current),
2094 worker->current_func);
2095 debug_show_held_locks(current);
2096 dump_stack();
2097 }
2098
2099
2100
2101
2102
2103
2104
2105
2106 cond_resched();
2107
2108 spin_lock_irq(&pool->lock);
2109
2110
2111 if (unlikely(cpu_intensive))
2112 worker_clr_flags(worker, WORKER_CPU_INTENSIVE);
2113
2114
2115 hash_del(&worker->hentry);
2116 worker->current_work = NULL;
2117 worker->current_func = NULL;
2118 worker->current_pwq = NULL;
2119 worker->desc_valid = false;
2120 pwq_dec_nr_in_flight(pwq, work_color);
2121}
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135static void process_scheduled_works(struct worker *worker)
2136{
2137 while (!list_empty(&worker->scheduled)) {
2138 struct work_struct *work = list_first_entry(&worker->scheduled,
2139 struct work_struct, entry);
2140 process_one_work(worker, work);
2141 }
2142}
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156static int worker_thread(void *__worker)
2157{
2158 struct worker *worker = __worker;
2159 struct worker_pool *pool = worker->pool;
2160
2161
2162 worker->task->flags |= PF_WQ_WORKER;
2163woke_up:
2164 spin_lock_irq(&pool->lock);
2165
2166
2167 if (unlikely(worker->flags & WORKER_DIE)) {
2168 spin_unlock_irq(&pool->lock);
2169 WARN_ON_ONCE(!list_empty(&worker->entry));
2170 worker->task->flags &= ~PF_WQ_WORKER;
2171
2172 set_task_comm(worker->task, "kworker/dying");
2173 ida_simple_remove(&pool->worker_ida, worker->id);
2174 worker_detach_from_pool(worker, pool);
2175 kfree(worker);
2176 return 0;
2177 }
2178
2179 worker_leave_idle(worker);
2180recheck:
2181
2182 if (!need_more_worker(pool))
2183 goto sleep;
2184
2185
2186 if (unlikely(!may_start_working(pool)) && manage_workers(worker))
2187 goto recheck;
2188
2189
2190
2191
2192
2193
2194 WARN_ON_ONCE(!list_empty(&worker->scheduled));
2195
2196
2197
2198
2199
2200
2201
2202
2203 worker_clr_flags(worker, WORKER_PREP | WORKER_REBOUND);
2204
2205 do {
2206 struct work_struct *work =
2207 list_first_entry(&pool->worklist,
2208 struct work_struct, entry);
2209
2210 if (likely(!(*work_data_bits(work) & WORK_STRUCT_LINKED))) {
2211
2212 process_one_work(worker, work);
2213 if (unlikely(!list_empty(&worker->scheduled)))
2214 process_scheduled_works(worker);
2215 } else {
2216 move_linked_works(work, &worker->scheduled, NULL);
2217 process_scheduled_works(worker);
2218 }
2219 } while (keep_working(pool));
2220
2221 worker_set_flags(worker, WORKER_PREP, false);
2222sleep:
2223
2224
2225
2226
2227
2228
2229
2230 worker_enter_idle(worker);
2231 __set_current_state(TASK_INTERRUPTIBLE);
2232 spin_unlock_irq(&pool->lock);
2233 schedule();
2234 goto woke_up;
2235}
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258static int rescuer_thread(void *__rescuer)
2259{
2260 struct worker *rescuer = __rescuer;
2261 struct workqueue_struct *wq = rescuer->rescue_wq;
2262 struct list_head *scheduled = &rescuer->scheduled;
2263 bool should_stop;
2264
2265 set_user_nice(current, RESCUER_NICE_LEVEL);
2266
2267
2268
2269
2270
2271 rescuer->task->flags |= PF_WQ_WORKER;
2272repeat:
2273 set_current_state(TASK_INTERRUPTIBLE);
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283 should_stop = kthread_should_stop();
2284
2285
2286 spin_lock_irq(&wq_mayday_lock);
2287
2288 while (!list_empty(&wq->maydays)) {
2289 struct pool_workqueue *pwq = list_first_entry(&wq->maydays,
2290 struct pool_workqueue, mayday_node);
2291 struct worker_pool *pool = pwq->pool;
2292 struct work_struct *work, *n;
2293
2294 __set_current_state(TASK_RUNNING);
2295 list_del_init(&pwq->mayday_node);
2296
2297 spin_unlock_irq(&wq_mayday_lock);
2298
2299 worker_attach_to_pool(rescuer, pool);
2300
2301 spin_lock_irq(&pool->lock);
2302 rescuer->pool = pool;
2303
2304
2305
2306
2307
2308 WARN_ON_ONCE(!list_empty(&rescuer->scheduled));
2309 list_for_each_entry_safe(work, n, &pool->worklist, entry)
2310 if (get_work_pwq(work) == pwq)
2311 move_linked_works(work, scheduled, &n);
2312
2313 process_scheduled_works(rescuer);
2314 spin_unlock_irq(&pool->lock);
2315
2316 worker_detach_from_pool(rescuer, pool);
2317
2318 spin_lock_irq(&pool->lock);
2319
2320
2321
2322
2323
2324 put_pwq(pwq);
2325
2326
2327
2328
2329
2330
2331 if (keep_working(pool))
2332 wake_up_worker(pool);
2333
2334 rescuer->pool = NULL;
2335 spin_unlock(&pool->lock);
2336 spin_lock(&wq_mayday_lock);
2337 }
2338
2339 spin_unlock_irq(&wq_mayday_lock);
2340
2341 if (should_stop) {
2342 __set_current_state(TASK_RUNNING);
2343 rescuer->task->flags &= ~PF_WQ_WORKER;
2344 return 0;
2345 }
2346
2347
2348 WARN_ON_ONCE(!(rescuer->flags & WORKER_NOT_RUNNING));
2349 schedule();
2350 goto repeat;
2351}
2352
2353struct wq_barrier {
2354 struct work_struct work;
2355 struct completion done;
2356};
2357
2358static void wq_barrier_func(struct work_struct *work)
2359{
2360 struct wq_barrier *barr = container_of(work, struct wq_barrier, work);
2361 complete(&barr->done);
2362}
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388static void insert_wq_barrier(struct pool_workqueue *pwq,
2389 struct wq_barrier *barr,
2390 struct work_struct *target, struct worker *worker)
2391{
2392 struct list_head *head;
2393 unsigned int linked = 0;
2394
2395
2396
2397
2398
2399
2400
2401 INIT_WORK_ONSTACK(&barr->work, wq_barrier_func);
2402 __set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(&barr->work));
2403 init_completion(&barr->done);
2404
2405
2406
2407
2408
2409 if (worker)
2410 head = worker->scheduled.next;
2411 else {
2412 unsigned long *bits = work_data_bits(target);
2413
2414 head = target->entry.next;
2415
2416 linked = *bits & WORK_STRUCT_LINKED;
2417 __set_bit(WORK_STRUCT_LINKED_BIT, bits);
2418 }
2419
2420 debug_work_activate(&barr->work);
2421 insert_work(pwq, &barr->work, head,
2422 work_color_to_flags(WORK_NO_COLOR) | linked);
2423}
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456static bool flush_workqueue_prep_pwqs(struct workqueue_struct *wq,
2457 int flush_color, int work_color)
2458{
2459 bool wait = false;
2460 struct pool_workqueue *pwq;
2461
2462 if (flush_color >= 0) {
2463 WARN_ON_ONCE(atomic_read(&wq->nr_pwqs_to_flush));
2464 atomic_set(&wq->nr_pwqs_to_flush, 1);
2465 }
2466
2467 for_each_pwq(pwq, wq) {
2468 struct worker_pool *pool = pwq->pool;
2469
2470 spin_lock_irq(&pool->lock);
2471
2472 if (flush_color >= 0) {
2473 WARN_ON_ONCE(pwq->flush_color != -1);
2474
2475 if (pwq->nr_in_flight[flush_color]) {
2476 pwq->flush_color = flush_color;
2477 atomic_inc(&wq->nr_pwqs_to_flush);
2478 wait = true;
2479 }
2480 }
2481
2482 if (work_color >= 0) {
2483 WARN_ON_ONCE(work_color != work_next_color(pwq->work_color));
2484 pwq->work_color = work_color;
2485 }
2486
2487 spin_unlock_irq(&pool->lock);
2488 }
2489
2490 if (flush_color >= 0 && atomic_dec_and_test(&wq->nr_pwqs_to_flush))
2491 complete(&wq->first_flusher->done);
2492
2493 return wait;
2494}
2495
2496
2497
2498
2499
2500
2501
2502
2503void flush_workqueue(struct workqueue_struct *wq)
2504{
2505 struct wq_flusher this_flusher = {
2506 .list = LIST_HEAD_INIT(this_flusher.list),
2507 .flush_color = -1,
2508 .done = COMPLETION_INITIALIZER_ONSTACK(this_flusher.done),
2509 };
2510 int next_color;
2511
2512 lock_map_acquire(&wq->lockdep_map);
2513 lock_map_release(&wq->lockdep_map);
2514
2515 mutex_lock(&wq->mutex);
2516
2517
2518
2519
2520 next_color = work_next_color(wq->work_color);
2521
2522 if (next_color != wq->flush_color) {
2523
2524
2525
2526
2527
2528 WARN_ON_ONCE(!list_empty(&wq->flusher_overflow));
2529 this_flusher.flush_color = wq->work_color;
2530 wq->work_color = next_color;
2531
2532 if (!wq->first_flusher) {
2533
2534 WARN_ON_ONCE(wq->flush_color != this_flusher.flush_color);
2535
2536 wq->first_flusher = &this_flusher;
2537
2538 if (!flush_workqueue_prep_pwqs(wq, wq->flush_color,
2539 wq->work_color)) {
2540
2541 wq->flush_color = next_color;
2542 wq->first_flusher = NULL;
2543 goto out_unlock;
2544 }
2545 } else {
2546
2547 WARN_ON_ONCE(wq->flush_color == this_flusher.flush_color);
2548 list_add_tail(&this_flusher.list, &wq->flusher_queue);
2549 flush_workqueue_prep_pwqs(wq, -1, wq->work_color);
2550 }
2551 } else {
2552
2553
2554
2555
2556
2557 list_add_tail(&this_flusher.list, &wq->flusher_overflow);
2558 }
2559
2560 mutex_unlock(&wq->mutex);
2561
2562 wait_for_completion(&this_flusher.done);
2563
2564
2565
2566
2567
2568
2569
2570 if (wq->first_flusher != &this_flusher)
2571 return;
2572
2573 mutex_lock(&wq->mutex);
2574
2575
2576 if (wq->first_flusher != &this_flusher)
2577 goto out_unlock;
2578
2579 wq->first_flusher = NULL;
2580
2581 WARN_ON_ONCE(!list_empty(&this_flusher.list));
2582 WARN_ON_ONCE(wq->flush_color != this_flusher.flush_color);
2583
2584 while (true) {
2585 struct wq_flusher *next, *tmp;
2586
2587
2588 list_for_each_entry_safe(next, tmp, &wq->flusher_queue, list) {
2589 if (next->flush_color != wq->flush_color)
2590 break;
2591 list_del_init(&next->list);
2592 complete(&next->done);
2593 }
2594
2595 WARN_ON_ONCE(!list_empty(&wq->flusher_overflow) &&
2596 wq->flush_color != work_next_color(wq->work_color));
2597
2598
2599 wq->flush_color = work_next_color(wq->flush_color);
2600
2601
2602 if (!list_empty(&wq->flusher_overflow)) {
2603
2604
2605
2606
2607
2608
2609 list_for_each_entry(tmp, &wq->flusher_overflow, list)
2610 tmp->flush_color = wq->work_color;
2611
2612 wq->work_color = work_next_color(wq->work_color);
2613
2614 list_splice_tail_init(&wq->flusher_overflow,
2615 &wq->flusher_queue);
2616 flush_workqueue_prep_pwqs(wq, -1, wq->work_color);
2617 }
2618
2619 if (list_empty(&wq->flusher_queue)) {
2620 WARN_ON_ONCE(wq->flush_color != wq->work_color);
2621 break;
2622 }
2623
2624
2625
2626
2627
2628 WARN_ON_ONCE(wq->flush_color == wq->work_color);
2629 WARN_ON_ONCE(wq->flush_color != next->flush_color);
2630
2631 list_del_init(&next->list);
2632 wq->first_flusher = next;
2633
2634 if (flush_workqueue_prep_pwqs(wq, wq->flush_color, -1))
2635 break;
2636
2637
2638
2639
2640
2641 wq->first_flusher = NULL;
2642 }
2643
2644out_unlock:
2645 mutex_unlock(&wq->mutex);
2646}
2647EXPORT_SYMBOL_GPL(flush_workqueue);
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660void drain_workqueue(struct workqueue_struct *wq)
2661{
2662 unsigned int flush_cnt = 0;
2663 struct pool_workqueue *pwq;
2664
2665
2666
2667
2668
2669
2670 mutex_lock(&wq->mutex);
2671 if (!wq->nr_drainers++)
2672 wq->flags |= __WQ_DRAINING;
2673 mutex_unlock(&wq->mutex);
2674reflush:
2675 flush_workqueue(wq);
2676
2677 mutex_lock(&wq->mutex);
2678
2679 for_each_pwq(pwq, wq) {
2680 bool drained;
2681
2682 spin_lock_irq(&pwq->pool->lock);
2683 drained = !pwq->nr_active && list_empty(&pwq->delayed_works);
2684 spin_unlock_irq(&pwq->pool->lock);
2685
2686 if (drained)
2687 continue;
2688
2689 if (++flush_cnt == 10 ||
2690 (flush_cnt % 100 == 0 && flush_cnt <= 1000))
2691 pr_warn("workqueue %s: drain_workqueue() isn't complete after %u tries\n",
2692 wq->name, flush_cnt);
2693
2694 mutex_unlock(&wq->mutex);
2695 goto reflush;
2696 }
2697
2698 if (!--wq->nr_drainers)
2699 wq->flags &= ~__WQ_DRAINING;
2700 mutex_unlock(&wq->mutex);
2701}
2702EXPORT_SYMBOL_GPL(drain_workqueue);
2703
2704static bool start_flush_work(struct work_struct *work, struct wq_barrier *barr)
2705{
2706 struct worker *worker = NULL;
2707 struct worker_pool *pool;
2708 struct pool_workqueue *pwq;
2709
2710 might_sleep();
2711
2712 local_irq_disable();
2713 pool = get_work_pool(work);
2714 if (!pool) {
2715 local_irq_enable();
2716 return false;
2717 }
2718
2719 spin_lock(&pool->lock);
2720
2721 pwq = get_work_pwq(work);
2722 if (pwq) {
2723 if (unlikely(pwq->pool != pool))
2724 goto already_gone;
2725 } else {
2726 worker = find_worker_executing_work(pool, work);
2727 if (!worker)
2728 goto already_gone;
2729 pwq = worker->current_pwq;
2730 }
2731
2732 insert_wq_barrier(pwq, barr, work, worker);
2733 spin_unlock_irq(&pool->lock);
2734
2735
2736
2737
2738
2739
2740
2741 if (pwq->wq->saved_max_active == 1 || pwq->wq->rescuer)
2742 lock_map_acquire(&pwq->wq->lockdep_map);
2743 else
2744 lock_map_acquire_read(&pwq->wq->lockdep_map);
2745 lock_map_release(&pwq->wq->lockdep_map);
2746
2747 return true;
2748already_gone:
2749 spin_unlock_irq(&pool->lock);
2750 return false;
2751}
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764bool flush_work(struct work_struct *work)
2765{
2766 struct wq_barrier barr;
2767
2768 lock_map_acquire(&work->lockdep_map);
2769 lock_map_release(&work->lockdep_map);
2770
2771 if (start_flush_work(work, &barr)) {
2772 wait_for_completion(&barr.done);
2773 destroy_work_on_stack(&barr.work);
2774 return true;
2775 } else {
2776 return false;
2777 }
2778}
2779EXPORT_SYMBOL_GPL(flush_work);
2780
2781static bool __cancel_work_timer(struct work_struct *work, bool is_dwork)
2782{
2783 unsigned long flags;
2784 int ret;
2785
2786 do {
2787 ret = try_to_grab_pending(work, is_dwork, &flags);
2788
2789
2790
2791
2792 if (unlikely(ret == -ENOENT))
2793 flush_work(work);
2794 } while (unlikely(ret < 0));
2795
2796
2797 mark_work_canceling(work);
2798 local_irq_restore(flags);
2799
2800 flush_work(work);
2801 clear_work_data(work);
2802 return ret;
2803}
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823bool cancel_work_sync(struct work_struct *work)
2824{
2825 return __cancel_work_timer(work, false);
2826}
2827EXPORT_SYMBOL_GPL(cancel_work_sync);
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841bool flush_delayed_work(struct delayed_work *dwork)
2842{
2843 local_irq_disable();
2844 if (del_timer_sync(&dwork->timer))
2845 __queue_work(dwork->cpu, dwork->wq, &dwork->work);
2846 local_irq_enable();
2847 return flush_work(&dwork->work);
2848}
2849EXPORT_SYMBOL(flush_delayed_work);
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867bool cancel_delayed_work(struct delayed_work *dwork)
2868{
2869 unsigned long flags;
2870 int ret;
2871
2872 do {
2873 ret = try_to_grab_pending(&dwork->work, true, &flags);
2874 } while (unlikely(ret == -EAGAIN));
2875
2876 if (unlikely(ret < 0))
2877 return false;
2878
2879 set_work_pool_and_clear_pending(&dwork->work,
2880 get_work_pool_id(&dwork->work));
2881 local_irq_restore(flags);
2882 return ret;
2883}
2884EXPORT_SYMBOL(cancel_delayed_work);
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895bool cancel_delayed_work_sync(struct delayed_work *dwork)
2896{
2897 return __cancel_work_timer(&dwork->work, true);
2898}
2899EXPORT_SYMBOL(cancel_delayed_work_sync);
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912int schedule_on_each_cpu(work_func_t func)
2913{
2914 int cpu;
2915 struct work_struct __percpu *works;
2916
2917 works = alloc_percpu(struct work_struct);
2918 if (!works)
2919 return -ENOMEM;
2920
2921 get_online_cpus();
2922
2923 for_each_online_cpu(cpu) {
2924 struct work_struct *work = per_cpu_ptr(works, cpu);
2925
2926 INIT_WORK(work, func);
2927 schedule_work_on(cpu, work);
2928 }
2929
2930 for_each_online_cpu(cpu)
2931 flush_work(per_cpu_ptr(works, cpu));
2932
2933 put_online_cpus();
2934 free_percpu(works);
2935 return 0;
2936}
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962void flush_scheduled_work(void)
2963{
2964 flush_workqueue(system_wq);
2965}
2966EXPORT_SYMBOL(flush_scheduled_work);
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980int execute_in_process_context(work_func_t fn, struct execute_work *ew)
2981{
2982 if (!in_interrupt()) {
2983 fn(&ew->work);
2984 return 0;
2985 }
2986
2987 INIT_WORK(&ew->work, fn);
2988 schedule_work(&ew->work);
2989
2990 return 1;
2991}
2992EXPORT_SYMBOL_GPL(execute_in_process_context);
2993
2994#ifdef CONFIG_SYSFS
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009struct wq_device {
3010 struct workqueue_struct *wq;
3011 struct device dev;
3012};
3013
3014static struct workqueue_struct *dev_to_wq(struct device *dev)
3015{
3016 struct wq_device *wq_dev = container_of(dev, struct wq_device, dev);
3017
3018 return wq_dev->wq;
3019}
3020
3021static ssize_t per_cpu_show(struct device *dev, struct device_attribute *attr,
3022 char *buf)
3023{
3024 struct workqueue_struct *wq = dev_to_wq(dev);
3025
3026 return scnprintf(buf, PAGE_SIZE, "%d\n", (bool)!(wq->flags & WQ_UNBOUND));
3027}
3028static DEVICE_ATTR_RO(per_cpu);
3029
3030static ssize_t max_active_show(struct device *dev,
3031 struct device_attribute *attr, char *buf)
3032{
3033 struct workqueue_struct *wq = dev_to_wq(dev);
3034
3035 return scnprintf(buf, PAGE_SIZE, "%d\n", wq->saved_max_active);
3036}
3037
3038static ssize_t max_active_store(struct device *dev,
3039 struct device_attribute *attr, const char *buf,
3040 size_t count)
3041{
3042 struct workqueue_struct *wq = dev_to_wq(dev);
3043 int val;
3044
3045 if (sscanf(buf, "%d", &val) != 1 || val <= 0)
3046 return -EINVAL;
3047
3048 workqueue_set_max_active(wq, val);
3049 return count;
3050}
3051static DEVICE_ATTR_RW(max_active);
3052
3053static struct attribute *wq_sysfs_attrs[] = {
3054 &dev_attr_per_cpu.attr,
3055 &dev_attr_max_active.attr,
3056 NULL,
3057};
3058ATTRIBUTE_GROUPS(wq_sysfs);
3059
3060static ssize_t wq_pool_ids_show(struct device *dev,
3061 struct device_attribute *attr, char *buf)
3062{
3063 struct workqueue_struct *wq = dev_to_wq(dev);
3064 const char *delim = "";
3065 int node, written = 0;
3066
3067 rcu_read_lock_sched();
3068 for_each_node(node) {
3069 written += scnprintf(buf + written, PAGE_SIZE - written,
3070 "%s%d:%d", delim, node,
3071 unbound_pwq_by_node(wq, node)->pool->id);
3072 delim = " ";
3073 }
3074 written += scnprintf(buf + written, PAGE_SIZE - written, "\n");
3075 rcu_read_unlock_sched();
3076
3077 return written;
3078}
3079
3080static ssize_t wq_nice_show(struct device *dev, struct device_attribute *attr,
3081 char *buf)
3082{
3083 struct workqueue_struct *wq = dev_to_wq(dev);
3084 int written;
3085
3086 mutex_lock(&wq->mutex);
3087 written = scnprintf(buf, PAGE_SIZE, "%d\n", wq->unbound_attrs->nice);
3088 mutex_unlock(&wq->mutex);
3089
3090 return written;
3091}
3092
3093
3094static struct workqueue_attrs *wq_sysfs_prep_attrs(struct workqueue_struct *wq)
3095{
3096 struct workqueue_attrs *attrs;
3097
3098 attrs = alloc_workqueue_attrs(GFP_KERNEL);
3099 if (!attrs)
3100 return NULL;
3101
3102 mutex_lock(&wq->mutex);
3103 copy_workqueue_attrs(attrs, wq->unbound_attrs);
3104 mutex_unlock(&wq->mutex);
3105 return attrs;
3106}
3107
3108static ssize_t wq_nice_store(struct device *dev, struct device_attribute *attr,
3109 const char *buf, size_t count)
3110{
3111 struct workqueue_struct *wq = dev_to_wq(dev);
3112 struct workqueue_attrs *attrs;
3113 int ret;
3114
3115 attrs = wq_sysfs_prep_attrs(wq);
3116 if (!attrs)
3117 return -ENOMEM;
3118
3119 if (sscanf(buf, "%d", &attrs->nice) == 1 &&
3120 attrs->nice >= MIN_NICE && attrs->nice <= MAX_NICE)
3121 ret = apply_workqueue_attrs(wq, attrs);
3122 else
3123 ret = -EINVAL;
3124
3125 free_workqueue_attrs(attrs);
3126 return ret ?: count;
3127}
3128
3129static ssize_t wq_cpumask_show(struct device *dev,
3130 struct device_attribute *attr, char *buf)
3131{
3132 struct workqueue_struct *wq = dev_to_wq(dev);
3133 int written;
3134
3135 mutex_lock(&wq->mutex);
3136 written = cpumask_scnprintf(buf, PAGE_SIZE, wq->unbound_attrs->cpumask);
3137 mutex_unlock(&wq->mutex);
3138
3139 written += scnprintf(buf + written, PAGE_SIZE - written, "\n");
3140 return written;
3141}
3142
3143static ssize_t wq_cpumask_store(struct device *dev,
3144 struct device_attribute *attr,
3145 const char *buf, size_t count)
3146{
3147 struct workqueue_struct *wq = dev_to_wq(dev);
3148 struct workqueue_attrs *attrs;
3149 int ret;
3150
3151 attrs = wq_sysfs_prep_attrs(wq);
3152 if (!attrs)
3153 return -ENOMEM;
3154
3155 ret = cpumask_parse(buf, attrs->cpumask);
3156 if (!ret)
3157 ret = apply_workqueue_attrs(wq, attrs);
3158
3159 free_workqueue_attrs(attrs);
3160 return ret ?: count;
3161}
3162
3163static ssize_t wq_numa_show(struct device *dev, struct device_attribute *attr,
3164 char *buf)
3165{
3166 struct workqueue_struct *wq = dev_to_wq(dev);
3167 int written;
3168
3169 mutex_lock(&wq->mutex);
3170 written = scnprintf(buf, PAGE_SIZE, "%d\n",
3171 !wq->unbound_attrs->no_numa);
3172 mutex_unlock(&wq->mutex);
3173
3174 return written;
3175}
3176
3177static ssize_t wq_numa_store(struct device *dev, struct device_attribute *attr,
3178 const char *buf, size_t count)
3179{
3180 struct workqueue_struct *wq = dev_to_wq(dev);
3181 struct workqueue_attrs *attrs;
3182 int v, ret;
3183
3184 attrs = wq_sysfs_prep_attrs(wq);
3185 if (!attrs)
3186 return -ENOMEM;
3187
3188 ret = -EINVAL;
3189 if (sscanf(buf, "%d", &v) == 1) {
3190 attrs->no_numa = !v;
3191 ret = apply_workqueue_attrs(wq, attrs);
3192 }
3193
3194 free_workqueue_attrs(attrs);
3195 return ret ?: count;
3196}
3197
3198static struct device_attribute wq_sysfs_unbound_attrs[] = {
3199 __ATTR(pool_ids, 0444, wq_pool_ids_show, NULL),
3200 __ATTR(nice, 0644, wq_nice_show, wq_nice_store),
3201 __ATTR(cpumask, 0644, wq_cpumask_show, wq_cpumask_store),
3202 __ATTR(numa, 0644, wq_numa_show, wq_numa_store),
3203 __ATTR_NULL,
3204};
3205
3206static struct bus_type wq_subsys = {
3207 .name = "workqueue",
3208 .dev_groups = wq_sysfs_groups,
3209};
3210
3211static int __init wq_sysfs_init(void)
3212{
3213 return subsys_virtual_register(&wq_subsys, NULL);
3214}
3215core_initcall(wq_sysfs_init);
3216
3217static void wq_device_release(struct device *dev)
3218{
3219 struct wq_device *wq_dev = container_of(dev, struct wq_device, dev);
3220
3221 kfree(wq_dev);
3222}
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239int workqueue_sysfs_register(struct workqueue_struct *wq)
3240{
3241 struct wq_device *wq_dev;
3242 int ret;
3243
3244
3245
3246
3247
3248
3249 if (WARN_ON(wq->flags & __WQ_ORDERED))
3250 return -EINVAL;
3251
3252 wq->wq_dev = wq_dev = kzalloc(sizeof(*wq_dev), GFP_KERNEL);
3253 if (!wq_dev)
3254 return -ENOMEM;
3255
3256 wq_dev->wq = wq;
3257 wq_dev->dev.bus = &wq_subsys;
3258 wq_dev->dev.init_name = wq->name;
3259 wq_dev->dev.release = wq_device_release;
3260
3261
3262
3263
3264
3265 dev_set_uevent_suppress(&wq_dev->dev, true);
3266
3267 ret = device_register(&wq_dev->dev);
3268 if (ret) {
3269 kfree(wq_dev);
3270 wq->wq_dev = NULL;
3271 return ret;
3272 }
3273
3274 if (wq->flags & WQ_UNBOUND) {
3275 struct device_attribute *attr;
3276
3277 for (attr = wq_sysfs_unbound_attrs; attr->attr.name; attr++) {
3278 ret = device_create_file(&wq_dev->dev, attr);
3279 if (ret) {
3280 device_unregister(&wq_dev->dev);
3281 wq->wq_dev = NULL;
3282 return ret;
3283 }
3284 }
3285 }
3286
3287 dev_set_uevent_suppress(&wq_dev->dev, false);
3288 kobject_uevent(&wq_dev->dev.kobj, KOBJ_ADD);
3289 return 0;
3290}
3291
3292
3293
3294
3295
3296
3297
3298static void workqueue_sysfs_unregister(struct workqueue_struct *wq)
3299{
3300 struct wq_device *wq_dev = wq->wq_dev;
3301
3302 if (!wq->wq_dev)
3303 return;
3304
3305 wq->wq_dev = NULL;
3306 device_unregister(&wq_dev->dev);
3307}
3308#else
3309static void workqueue_sysfs_unregister(struct workqueue_struct *wq) { }
3310#endif
3311
3312
3313
3314
3315
3316
3317
3318void free_workqueue_attrs(struct workqueue_attrs *attrs)
3319{
3320 if (attrs) {
3321 free_cpumask_var(attrs->cpumask);
3322 kfree(attrs);
3323 }
3324}
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335struct workqueue_attrs *alloc_workqueue_attrs(gfp_t gfp_mask)
3336{
3337 struct workqueue_attrs *attrs;
3338
3339 attrs = kzalloc(sizeof(*attrs), gfp_mask);
3340 if (!attrs)
3341 goto fail;
3342 if (!alloc_cpumask_var(&attrs->cpumask, gfp_mask))
3343 goto fail;
3344
3345 cpumask_copy(attrs->cpumask, cpu_possible_mask);
3346 return attrs;
3347fail:
3348 free_workqueue_attrs(attrs);
3349 return NULL;
3350}
3351
3352static void copy_workqueue_attrs(struct workqueue_attrs *to,
3353 const struct workqueue_attrs *from)
3354{
3355 to->nice = from->nice;
3356 cpumask_copy(to->cpumask, from->cpumask);
3357
3358
3359
3360
3361
3362 to->no_numa = from->no_numa;
3363}
3364
3365
3366static u32 wqattrs_hash(const struct workqueue_attrs *attrs)
3367{
3368 u32 hash = 0;
3369
3370 hash = jhash_1word(attrs->nice, hash);
3371 hash = jhash(cpumask_bits(attrs->cpumask),
3372 BITS_TO_LONGS(nr_cpumask_bits) * sizeof(long), hash);
3373 return hash;
3374}
3375
3376
3377static bool wqattrs_equal(const struct workqueue_attrs *a,
3378 const struct workqueue_attrs *b)
3379{
3380 if (a->nice != b->nice)
3381 return false;
3382 if (!cpumask_equal(a->cpumask, b->cpumask))
3383 return false;
3384 return true;
3385}
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397static int init_worker_pool(struct worker_pool *pool)
3398{
3399 spin_lock_init(&pool->lock);
3400 pool->id = -1;
3401 pool->cpu = -1;
3402 pool->node = NUMA_NO_NODE;
3403 pool->flags |= POOL_DISASSOCIATED;
3404 INIT_LIST_HEAD(&pool->worklist);
3405 INIT_LIST_HEAD(&pool->idle_list);
3406 hash_init(pool->busy_hash);
3407
3408 init_timer_deferrable(&pool->idle_timer);
3409 pool->idle_timer.function = idle_worker_timeout;
3410 pool->idle_timer.data = (unsigned long)pool;
3411
3412 setup_timer(&pool->mayday_timer, pool_mayday_timeout,
3413 (unsigned long)pool);
3414
3415 mutex_init(&pool->manager_arb);
3416 mutex_init(&pool->attach_mutex);
3417 INIT_LIST_HEAD(&pool->workers);
3418
3419 ida_init(&pool->worker_ida);
3420 INIT_HLIST_NODE(&pool->hash_node);
3421 pool->refcnt = 1;
3422
3423
3424 pool->attrs = alloc_workqueue_attrs(GFP_KERNEL);
3425 if (!pool->attrs)
3426 return -ENOMEM;
3427 return 0;
3428}
3429
3430static void rcu_free_pool(struct rcu_head *rcu)
3431{
3432 struct worker_pool *pool = container_of(rcu, struct worker_pool, rcu);
3433
3434 ida_destroy(&pool->worker_ida);
3435 free_workqueue_attrs(pool->attrs);
3436 kfree(pool);
3437}
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450static void put_unbound_pool(struct worker_pool *pool)
3451{
3452 DECLARE_COMPLETION_ONSTACK(detach_completion);
3453 struct worker *worker;
3454
3455 lockdep_assert_held(&wq_pool_mutex);
3456
3457 if (--pool->refcnt)
3458 return;
3459
3460
3461 if (WARN_ON(!(pool->flags & POOL_DISASSOCIATED)) ||
3462 WARN_ON(!list_empty(&pool->worklist)))
3463 return;
3464
3465
3466 if (pool->id >= 0)
3467 idr_remove(&worker_pool_idr, pool->id);
3468 hash_del(&pool->hash_node);
3469
3470
3471
3472
3473
3474
3475 mutex_lock(&pool->manager_arb);
3476
3477 spin_lock_irq(&pool->lock);
3478 while ((worker = first_idle_worker(pool)))
3479 destroy_worker(worker);
3480 WARN_ON(pool->nr_workers || pool->nr_idle);
3481 spin_unlock_irq(&pool->lock);
3482
3483 mutex_lock(&pool->attach_mutex);
3484 if (!list_empty(&pool->workers))
3485 pool->detach_completion = &detach_completion;
3486 mutex_unlock(&pool->attach_mutex);
3487
3488 if (pool->detach_completion)
3489 wait_for_completion(pool->detach_completion);
3490
3491 mutex_unlock(&pool->manager_arb);
3492
3493
3494 del_timer_sync(&pool->idle_timer);
3495 del_timer_sync(&pool->mayday_timer);
3496
3497
3498 call_rcu_sched(&pool->rcu, rcu_free_pool);
3499}
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515static struct worker_pool *get_unbound_pool(const struct workqueue_attrs *attrs)
3516{
3517 u32 hash = wqattrs_hash(attrs);
3518 struct worker_pool *pool;
3519 int node;
3520
3521 lockdep_assert_held(&wq_pool_mutex);
3522
3523
3524 hash_for_each_possible(unbound_pool_hash, pool, hash_node, hash) {
3525 if (wqattrs_equal(pool->attrs, attrs)) {
3526 pool->refcnt++;
3527 goto out_unlock;
3528 }
3529 }
3530
3531
3532 pool = kzalloc(sizeof(*pool), GFP_KERNEL);
3533 if (!pool || init_worker_pool(pool) < 0)
3534 goto fail;
3535
3536 lockdep_set_subclass(&pool->lock, 1);
3537 copy_workqueue_attrs(pool->attrs, attrs);
3538
3539
3540
3541
3542
3543 pool->attrs->no_numa = false;
3544
3545
3546 if (wq_numa_enabled) {
3547 for_each_node(node) {
3548 if (cpumask_subset(pool->attrs->cpumask,
3549 wq_numa_possible_cpumask[node])) {
3550 pool->node = node;
3551 break;
3552 }
3553 }
3554 }
3555
3556 if (worker_pool_assign_id(pool) < 0)
3557 goto fail;
3558
3559
3560 if (create_and_start_worker(pool) < 0)
3561 goto fail;
3562
3563
3564 hash_add(unbound_pool_hash, &pool->hash_node, hash);
3565out_unlock:
3566 return pool;
3567fail:
3568 if (pool)
3569 put_unbound_pool(pool);
3570 return NULL;
3571}
3572
3573static void rcu_free_pwq(struct rcu_head *rcu)
3574{
3575 kmem_cache_free(pwq_cache,
3576 container_of(rcu, struct pool_workqueue, rcu));
3577}
3578
3579
3580
3581
3582
3583static void pwq_unbound_release_workfn(struct work_struct *work)
3584{
3585 struct pool_workqueue *pwq = container_of(work, struct pool_workqueue,
3586 unbound_release_work);
3587 struct workqueue_struct *wq = pwq->wq;
3588 struct worker_pool *pool = pwq->pool;
3589 bool is_last;
3590
3591 if (WARN_ON_ONCE(!(wq->flags & WQ_UNBOUND)))
3592 return;
3593
3594
3595
3596
3597
3598
3599 mutex_lock(&wq->mutex);
3600 list_del_rcu(&pwq->pwqs_node);
3601 is_last = list_empty(&wq->pwqs);
3602 mutex_unlock(&wq->mutex);
3603
3604 mutex_lock(&wq_pool_mutex);
3605 put_unbound_pool(pool);
3606 mutex_unlock(&wq_pool_mutex);
3607
3608 call_rcu_sched(&pwq->rcu, rcu_free_pwq);
3609
3610
3611
3612
3613
3614 if (is_last) {
3615 free_workqueue_attrs(wq->unbound_attrs);
3616 kfree(wq);
3617 }
3618}
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628static void pwq_adjust_max_active(struct pool_workqueue *pwq)
3629{
3630 struct workqueue_struct *wq = pwq->wq;
3631 bool freezable = wq->flags & WQ_FREEZABLE;
3632
3633
3634 lockdep_assert_held(&wq->mutex);
3635
3636
3637 if (!freezable && pwq->max_active == wq->saved_max_active)
3638 return;
3639
3640 spin_lock_irq(&pwq->pool->lock);
3641
3642
3643
3644
3645
3646
3647 if (!freezable || !workqueue_freezing) {
3648 pwq->max_active = wq->saved_max_active;
3649
3650 while (!list_empty(&pwq->delayed_works) &&
3651 pwq->nr_active < pwq->max_active)
3652 pwq_activate_first_delayed(pwq);
3653
3654
3655
3656
3657
3658 wake_up_worker(pwq->pool);
3659 } else {
3660 pwq->max_active = 0;
3661 }
3662
3663 spin_unlock_irq(&pwq->pool->lock);
3664}
3665
3666
3667static void init_pwq(struct pool_workqueue *pwq, struct workqueue_struct *wq,
3668 struct worker_pool *pool)
3669{
3670 BUG_ON((unsigned long)pwq & WORK_STRUCT_FLAG_MASK);
3671
3672 memset(pwq, 0, sizeof(*pwq));
3673
3674 pwq->pool = pool;
3675 pwq->wq = wq;
3676 pwq->flush_color = -1;
3677 pwq->refcnt = 1;
3678 INIT_LIST_HEAD(&pwq->delayed_works);
3679 INIT_LIST_HEAD(&pwq->pwqs_node);
3680 INIT_LIST_HEAD(&pwq->mayday_node);
3681 INIT_WORK(&pwq->unbound_release_work, pwq_unbound_release_workfn);
3682}
3683
3684
3685static void link_pwq(struct pool_workqueue *pwq)
3686{
3687 struct workqueue_struct *wq = pwq->wq;
3688
3689 lockdep_assert_held(&wq->mutex);
3690
3691
3692 if (!list_empty(&pwq->pwqs_node))
3693 return;
3694
3695
3696
3697
3698
3699 pwq->work_color = wq->work_color;
3700
3701
3702 pwq_adjust_max_active(pwq);
3703
3704
3705 list_add_rcu(&pwq->pwqs_node, &wq->pwqs);
3706}
3707
3708
3709static struct pool_workqueue *alloc_unbound_pwq(struct workqueue_struct *wq,
3710 const struct workqueue_attrs *attrs)
3711{
3712 struct worker_pool *pool;
3713 struct pool_workqueue *pwq;
3714
3715 lockdep_assert_held(&wq_pool_mutex);
3716
3717 pool = get_unbound_pool(attrs);
3718 if (!pool)
3719 return NULL;
3720
3721 pwq = kmem_cache_alloc_node(pwq_cache, GFP_KERNEL, pool->node);
3722 if (!pwq) {
3723 put_unbound_pool(pool);
3724 return NULL;
3725 }
3726
3727 init_pwq(pwq, wq, pool);
3728 return pwq;
3729}
3730
3731
3732static void free_unbound_pwq(struct pool_workqueue *pwq)
3733{
3734 lockdep_assert_held(&wq_pool_mutex);
3735
3736 if (pwq) {
3737 put_unbound_pool(pwq->pool);
3738 kmem_cache_free(pwq_cache, pwq);
3739 }
3740}
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764static bool wq_calc_node_cpumask(const struct workqueue_attrs *attrs, int node,
3765 int cpu_going_down, cpumask_t *cpumask)
3766{
3767 if (!wq_numa_enabled || attrs->no_numa)
3768 goto use_dfl;
3769
3770
3771 cpumask_and(cpumask, cpumask_of_node(node), attrs->cpumask);
3772 if (cpu_going_down >= 0)
3773 cpumask_clear_cpu(cpu_going_down, cpumask);
3774
3775 if (cpumask_empty(cpumask))
3776 goto use_dfl;
3777
3778
3779 cpumask_and(cpumask, attrs->cpumask, wq_numa_possible_cpumask[node]);
3780 return !cpumask_equal(cpumask, attrs->cpumask);
3781
3782use_dfl:
3783 cpumask_copy(cpumask, attrs->cpumask);
3784 return false;
3785}
3786
3787
3788static struct pool_workqueue *numa_pwq_tbl_install(struct workqueue_struct *wq,
3789 int node,
3790 struct pool_workqueue *pwq)
3791{
3792 struct pool_workqueue *old_pwq;
3793
3794 lockdep_assert_held(&wq->mutex);
3795
3796
3797 link_pwq(pwq);
3798
3799 old_pwq = rcu_access_pointer(wq->numa_pwq_tbl[node]);
3800 rcu_assign_pointer(wq->numa_pwq_tbl[node], pwq);
3801 return old_pwq;
3802}
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820int apply_workqueue_attrs(struct workqueue_struct *wq,
3821 const struct workqueue_attrs *attrs)
3822{
3823 struct workqueue_attrs *new_attrs, *tmp_attrs;
3824 struct pool_workqueue **pwq_tbl, *dfl_pwq;
3825 int node, ret;
3826
3827
3828 if (WARN_ON(!(wq->flags & WQ_UNBOUND)))
3829 return -EINVAL;
3830
3831
3832 if (WARN_ON((wq->flags & __WQ_ORDERED) && !list_empty(&wq->pwqs)))
3833 return -EINVAL;
3834
3835 pwq_tbl = kzalloc(wq_numa_tbl_len * sizeof(pwq_tbl[0]), GFP_KERNEL);
3836 new_attrs = alloc_workqueue_attrs(GFP_KERNEL);
3837 tmp_attrs = alloc_workqueue_attrs(GFP_KERNEL);
3838 if (!pwq_tbl || !new_attrs || !tmp_attrs)
3839 goto enomem;
3840
3841
3842 copy_workqueue_attrs(new_attrs, attrs);
3843 cpumask_and(new_attrs->cpumask, new_attrs->cpumask, cpu_possible_mask);
3844
3845
3846
3847
3848
3849
3850 copy_workqueue_attrs(tmp_attrs, new_attrs);
3851
3852
3853
3854
3855
3856
3857 get_online_cpus();
3858
3859 mutex_lock(&wq_pool_mutex);
3860
3861
3862
3863
3864
3865
3866 dfl_pwq = alloc_unbound_pwq(wq, new_attrs);
3867 if (!dfl_pwq)
3868 goto enomem_pwq;
3869
3870 for_each_node(node) {
3871 if (wq_calc_node_cpumask(attrs, node, -1, tmp_attrs->cpumask)) {
3872 pwq_tbl[node] = alloc_unbound_pwq(wq, tmp_attrs);
3873 if (!pwq_tbl[node])
3874 goto enomem_pwq;
3875 } else {
3876 dfl_pwq->refcnt++;
3877 pwq_tbl[node] = dfl_pwq;
3878 }
3879 }
3880
3881 mutex_unlock(&wq_pool_mutex);
3882
3883
3884 mutex_lock(&wq->mutex);
3885
3886 copy_workqueue_attrs(wq->unbound_attrs, new_attrs);
3887
3888
3889 for_each_node(node)
3890 pwq_tbl[node] = numa_pwq_tbl_install(wq, node, pwq_tbl[node]);
3891
3892
3893 link_pwq(dfl_pwq);
3894 swap(wq->dfl_pwq, dfl_pwq);
3895
3896 mutex_unlock(&wq->mutex);
3897
3898
3899 for_each_node(node)
3900 put_pwq_unlocked(pwq_tbl[node]);
3901 put_pwq_unlocked(dfl_pwq);
3902
3903 put_online_cpus();
3904 ret = 0;
3905
3906out_free:
3907 free_workqueue_attrs(tmp_attrs);
3908 free_workqueue_attrs(new_attrs);
3909 kfree(pwq_tbl);
3910 return ret;
3911
3912enomem_pwq:
3913 free_unbound_pwq(dfl_pwq);
3914 for_each_node(node)
3915 if (pwq_tbl && pwq_tbl[node] != dfl_pwq)
3916 free_unbound_pwq(pwq_tbl[node]);
3917 mutex_unlock(&wq_pool_mutex);
3918 put_online_cpus();
3919enomem:
3920 ret = -ENOMEM;
3921 goto out_free;
3922}
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946static void wq_update_unbound_numa(struct workqueue_struct *wq, int cpu,
3947 bool online)
3948{
3949 int node = cpu_to_node(cpu);
3950 int cpu_off = online ? -1 : cpu;
3951 struct pool_workqueue *old_pwq = NULL, *pwq;
3952 struct workqueue_attrs *target_attrs;
3953 cpumask_t *cpumask;
3954
3955 lockdep_assert_held(&wq_pool_mutex);
3956
3957 if (!wq_numa_enabled || !(wq->flags & WQ_UNBOUND))
3958 return;
3959
3960
3961
3962
3963
3964
3965 target_attrs = wq_update_unbound_numa_attrs_buf;
3966 cpumask = target_attrs->cpumask;
3967
3968 mutex_lock(&wq->mutex);
3969 if (wq->unbound_attrs->no_numa)
3970 goto out_unlock;
3971
3972 copy_workqueue_attrs(target_attrs, wq->unbound_attrs);
3973 pwq = unbound_pwq_by_node(wq, node);
3974
3975
3976
3977
3978
3979
3980
3981 if (wq_calc_node_cpumask(wq->unbound_attrs, node, cpu_off, cpumask)) {
3982 if (cpumask_equal(cpumask, pwq->pool->attrs->cpumask))
3983 goto out_unlock;
3984 } else {
3985 goto use_dfl_pwq;
3986 }
3987
3988 mutex_unlock(&wq->mutex);
3989
3990
3991 pwq = alloc_unbound_pwq(wq, target_attrs);
3992 if (!pwq) {
3993 pr_warn("workqueue: allocation failed while updating NUMA affinity of \"%s\"\n",
3994 wq->name);
3995 mutex_lock(&wq->mutex);
3996 goto use_dfl_pwq;
3997 }
3998
3999
4000
4001
4002
4003
4004
4005 mutex_lock(&wq->mutex);
4006 old_pwq = numa_pwq_tbl_install(wq, node, pwq);
4007 goto out_unlock;
4008
4009use_dfl_pwq:
4010 spin_lock_irq(&wq->dfl_pwq->pool->lock);
4011 get_pwq(wq->dfl_pwq);
4012 spin_unlock_irq(&wq->dfl_pwq->pool->lock);
4013 old_pwq = numa_pwq_tbl_install(wq, node, wq->dfl_pwq);
4014out_unlock:
4015 mutex_unlock(&wq->mutex);
4016 put_pwq_unlocked(old_pwq);
4017}
4018
4019static int alloc_and_link_pwqs(struct workqueue_struct *wq)
4020{
4021 bool highpri = wq->flags & WQ_HIGHPRI;
4022 int cpu, ret;
4023
4024 if (!(wq->flags & WQ_UNBOUND)) {
4025 wq->cpu_pwqs = alloc_percpu(struct pool_workqueue);
4026 if (!wq->cpu_pwqs)
4027 return -ENOMEM;
4028
4029 for_each_possible_cpu(cpu) {
4030 struct pool_workqueue *pwq =
4031 per_cpu_ptr(wq->cpu_pwqs, cpu);
4032 struct worker_pool *cpu_pools =
4033 per_cpu(cpu_worker_pools, cpu);
4034
4035 init_pwq(pwq, wq, &cpu_pools[highpri]);
4036
4037 mutex_lock(&wq->mutex);
4038 link_pwq(pwq);
4039 mutex_unlock(&wq->mutex);
4040 }
4041 return 0;
4042 } else if (wq->flags & __WQ_ORDERED) {
4043 ret = apply_workqueue_attrs(wq, ordered_wq_attrs[highpri]);
4044
4045 WARN(!ret && (wq->pwqs.next != &wq->dfl_pwq->pwqs_node ||
4046 wq->pwqs.prev != &wq->dfl_pwq->pwqs_node),
4047 "ordering guarantee broken for workqueue %s\n", wq->name);
4048 return ret;
4049 } else {
4050 return apply_workqueue_attrs(wq, unbound_std_wq_attrs[highpri]);
4051 }
4052}
4053
4054static int wq_clamp_max_active(int max_active, unsigned int flags,
4055 const char *name)
4056{
4057 int lim = flags & WQ_UNBOUND ? WQ_UNBOUND_MAX_ACTIVE : WQ_MAX_ACTIVE;
4058
4059 if (max_active < 1 || max_active > lim)
4060 pr_warn("workqueue: max_active %d requested for %s is out of range, clamping between %d and %d\n",
4061 max_active, name, 1, lim);
4062
4063 return clamp_val(max_active, 1, lim);
4064}
4065
4066struct workqueue_struct *__alloc_workqueue_key(const char *fmt,
4067 unsigned int flags,
4068 int max_active,
4069 struct lock_class_key *key,
4070 const char *lock_name, ...)
4071{
4072 size_t tbl_size = 0;
4073 va_list args;
4074 struct workqueue_struct *wq;
4075 struct pool_workqueue *pwq;
4076
4077
4078 if ((flags & WQ_POWER_EFFICIENT) && wq_power_efficient)
4079 flags |= WQ_UNBOUND;
4080
4081
4082 if (flags & WQ_UNBOUND)
4083 tbl_size = wq_numa_tbl_len * sizeof(wq->numa_pwq_tbl[0]);
4084
4085 wq = kzalloc(sizeof(*wq) + tbl_size, GFP_KERNEL);
4086 if (!wq)
4087 return NULL;
4088
4089 if (flags & WQ_UNBOUND) {
4090 wq->unbound_attrs = alloc_workqueue_attrs(GFP_KERNEL);
4091 if (!wq->unbound_attrs)
4092 goto err_free_wq;
4093 }
4094
4095 va_start(args, lock_name);
4096 vsnprintf(wq->name, sizeof(wq->name), fmt, args);
4097 va_end(args);
4098
4099 max_active = max_active ?: WQ_DFL_ACTIVE;
4100 max_active = wq_clamp_max_active(max_active, flags, wq->name);
4101
4102
4103 wq->flags = flags;
4104 wq->saved_max_active = max_active;
4105 mutex_init(&wq->mutex);
4106 atomic_set(&wq->nr_pwqs_to_flush, 0);
4107 INIT_LIST_HEAD(&wq->pwqs);
4108 INIT_LIST_HEAD(&wq->flusher_queue);
4109 INIT_LIST_HEAD(&wq->flusher_overflow);
4110 INIT_LIST_HEAD(&wq->maydays);
4111
4112 lockdep_init_map(&wq->lockdep_map, lock_name, key, 0);
4113 INIT_LIST_HEAD(&wq->list);
4114
4115 if (alloc_and_link_pwqs(wq) < 0)
4116 goto err_free_wq;
4117
4118
4119
4120
4121
4122 if (flags & WQ_MEM_RECLAIM) {
4123 struct worker *rescuer;
4124
4125 rescuer = alloc_worker();
4126 if (!rescuer)
4127 goto err_destroy;
4128
4129 rescuer->rescue_wq = wq;
4130 rescuer->task = kthread_create(rescuer_thread, rescuer, "%s",
4131 wq->name);
4132 if (IS_ERR(rescuer->task)) {
4133 kfree(rescuer);
4134 goto err_destroy;
4135 }
4136
4137 wq->rescuer = rescuer;
4138 rescuer->task->flags |= PF_NO_SETAFFINITY;
4139 wake_up_process(rescuer->task);
4140 }
4141
4142 if ((wq->flags & WQ_SYSFS) && workqueue_sysfs_register(wq))
4143 goto err_destroy;
4144
4145
4146
4147
4148
4149
4150 mutex_lock(&wq_pool_mutex);
4151
4152 mutex_lock(&wq->mutex);
4153 for_each_pwq(pwq, wq)
4154 pwq_adjust_max_active(pwq);
4155 mutex_unlock(&wq->mutex);
4156
4157 list_add(&wq->list, &workqueues);
4158
4159 mutex_unlock(&wq_pool_mutex);
4160
4161 return wq;
4162
4163err_free_wq:
4164 free_workqueue_attrs(wq->unbound_attrs);
4165 kfree(wq);
4166 return NULL;
4167err_destroy:
4168 destroy_workqueue(wq);
4169 return NULL;
4170}
4171EXPORT_SYMBOL_GPL(__alloc_workqueue_key);
4172
4173
4174
4175
4176
4177
4178
4179void destroy_workqueue(struct workqueue_struct *wq)
4180{
4181 struct pool_workqueue *pwq;
4182 int node;
4183
4184
4185 drain_workqueue(wq);
4186
4187
4188 mutex_lock(&wq->mutex);
4189 for_each_pwq(pwq, wq) {
4190 int i;
4191
4192 for (i = 0; i < WORK_NR_COLORS; i++) {
4193 if (WARN_ON(pwq->nr_in_flight[i])) {
4194 mutex_unlock(&wq->mutex);
4195 return;
4196 }
4197 }
4198
4199 if (WARN_ON((pwq != wq->dfl_pwq) && (pwq->refcnt > 1)) ||
4200 WARN_ON(pwq->nr_active) ||
4201 WARN_ON(!list_empty(&pwq->delayed_works))) {
4202 mutex_unlock(&wq->mutex);
4203 return;
4204 }
4205 }
4206 mutex_unlock(&wq->mutex);
4207
4208
4209
4210
4211
4212 mutex_lock(&wq_pool_mutex);
4213 list_del_init(&wq->list);
4214 mutex_unlock(&wq_pool_mutex);
4215
4216 workqueue_sysfs_unregister(wq);
4217
4218 if (wq->rescuer) {
4219 kthread_stop(wq->rescuer->task);
4220 kfree(wq->rescuer);
4221 wq->rescuer = NULL;
4222 }
4223
4224 if (!(wq->flags & WQ_UNBOUND)) {
4225
4226
4227
4228
4229 free_percpu(wq->cpu_pwqs);
4230 kfree(wq);
4231 } else {
4232
4233
4234
4235
4236
4237 for_each_node(node) {
4238 pwq = rcu_access_pointer(wq->numa_pwq_tbl[node]);
4239 RCU_INIT_POINTER(wq->numa_pwq_tbl[node], NULL);
4240 put_pwq_unlocked(pwq);
4241 }
4242
4243
4244
4245
4246
4247 pwq = wq->dfl_pwq;
4248 wq->dfl_pwq = NULL;
4249 put_pwq_unlocked(pwq);
4250 }
4251}
4252EXPORT_SYMBOL_GPL(destroy_workqueue);
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264void workqueue_set_max_active(struct workqueue_struct *wq, int max_active)
4265{
4266 struct pool_workqueue *pwq;
4267
4268
4269 if (WARN_ON(wq->flags & __WQ_ORDERED))
4270 return;
4271
4272 max_active = wq_clamp_max_active(max_active, wq->flags, wq->name);
4273
4274 mutex_lock(&wq->mutex);
4275
4276 wq->saved_max_active = max_active;
4277
4278 for_each_pwq(pwq, wq)
4279 pwq_adjust_max_active(pwq);
4280
4281 mutex_unlock(&wq->mutex);
4282}
4283EXPORT_SYMBOL_GPL(workqueue_set_max_active);
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293bool current_is_workqueue_rescuer(void)
4294{
4295 struct worker *worker = current_wq_worker();
4296
4297 return worker && worker->rescue_wq;
4298}
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318bool workqueue_congested(int cpu, struct workqueue_struct *wq)
4319{
4320 struct pool_workqueue *pwq;
4321 bool ret;
4322
4323 rcu_read_lock_sched();
4324
4325 if (cpu == WORK_CPU_UNBOUND)
4326 cpu = smp_processor_id();
4327
4328 if (!(wq->flags & WQ_UNBOUND))
4329 pwq = per_cpu_ptr(wq->cpu_pwqs, cpu);
4330 else
4331 pwq = unbound_pwq_by_node(wq, cpu_to_node(cpu));
4332
4333 ret = !list_empty(&pwq->delayed_works);
4334 rcu_read_unlock_sched();
4335
4336 return ret;
4337}
4338EXPORT_SYMBOL_GPL(workqueue_congested);
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351unsigned int work_busy(struct work_struct *work)
4352{
4353 struct worker_pool *pool;
4354 unsigned long flags;
4355 unsigned int ret = 0;
4356
4357 if (work_pending(work))
4358 ret |= WORK_BUSY_PENDING;
4359
4360 local_irq_save(flags);
4361 pool = get_work_pool(work);
4362 if (pool) {
4363 spin_lock(&pool->lock);
4364 if (find_worker_executing_work(pool, work))
4365 ret |= WORK_BUSY_RUNNING;
4366 spin_unlock(&pool->lock);
4367 }
4368 local_irq_restore(flags);
4369
4370 return ret;
4371}
4372EXPORT_SYMBOL_GPL(work_busy);
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384void set_worker_desc(const char *fmt, ...)
4385{
4386 struct worker *worker = current_wq_worker();
4387 va_list args;
4388
4389 if (worker) {
4390 va_start(args, fmt);
4391 vsnprintf(worker->desc, sizeof(worker->desc), fmt, args);
4392 va_end(args);
4393 worker->desc_valid = true;
4394 }
4395}
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410void print_worker_info(const char *log_lvl, struct task_struct *task)
4411{
4412 work_func_t *fn = NULL;
4413 char name[WQ_NAME_LEN] = { };
4414 char desc[WORKER_DESC_LEN] = { };
4415 struct pool_workqueue *pwq = NULL;
4416 struct workqueue_struct *wq = NULL;
4417 bool desc_valid = false;
4418 struct worker *worker;
4419
4420 if (!(task->flags & PF_WQ_WORKER))
4421 return;
4422
4423
4424
4425
4426
4427 worker = probe_kthread_data(task);
4428
4429
4430
4431
4432
4433 probe_kernel_read(&fn, &worker->current_func, sizeof(fn));
4434 probe_kernel_read(&pwq, &worker->current_pwq, sizeof(pwq));
4435 probe_kernel_read(&wq, &pwq->wq, sizeof(wq));
4436 probe_kernel_read(name, wq->name, sizeof(name) - 1);
4437
4438
4439 probe_kernel_read(&desc_valid, &worker->desc_valid, sizeof(desc_valid));
4440 if (desc_valid)
4441 probe_kernel_read(desc, worker->desc, sizeof(desc) - 1);
4442
4443 if (fn || name[0] || desc[0]) {
4444 printk("%sWorkqueue: %s %pf", log_lvl, name, fn);
4445 if (desc[0])
4446 pr_cont(" (%s)", desc);
4447 pr_cont("\n");
4448 }
4449}
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466static void wq_unbind_fn(struct work_struct *work)
4467{
4468 int cpu = smp_processor_id();
4469 struct worker_pool *pool;
4470 struct worker *worker;
4471
4472 for_each_cpu_worker_pool(pool, cpu) {
4473 WARN_ON_ONCE(cpu != smp_processor_id());
4474
4475 mutex_lock(&pool->attach_mutex);
4476 spin_lock_irq(&pool->lock);
4477
4478
4479
4480
4481
4482
4483
4484
4485 for_each_pool_worker(worker, pool)
4486 worker->flags |= WORKER_UNBOUND;
4487
4488 pool->flags |= POOL_DISASSOCIATED;
4489
4490 spin_unlock_irq(&pool->lock);
4491 mutex_unlock(&pool->attach_mutex);
4492
4493
4494
4495
4496
4497
4498
4499 schedule();
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509 atomic_set(&pool->nr_running, 0);
4510
4511
4512
4513
4514
4515
4516 spin_lock_irq(&pool->lock);
4517 wake_up_worker(pool);
4518 spin_unlock_irq(&pool->lock);
4519 }
4520}
4521
4522
4523
4524
4525
4526
4527
4528static void rebind_workers(struct worker_pool *pool)
4529{
4530 struct worker *worker;
4531
4532 lockdep_assert_held(&pool->attach_mutex);
4533
4534
4535
4536
4537
4538
4539
4540
4541 for_each_pool_worker(worker, pool)
4542 WARN_ON_ONCE(set_cpus_allowed_ptr(worker->task,
4543 pool->attrs->cpumask) < 0);
4544
4545 spin_lock_irq(&pool->lock);
4546
4547 for_each_pool_worker(worker, pool) {
4548 unsigned int worker_flags = worker->flags;
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558 if (worker_flags & WORKER_IDLE)
4559 wake_up_process(worker->task);
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576 WARN_ON_ONCE(!(worker_flags & WORKER_UNBOUND));
4577 worker_flags |= WORKER_REBOUND;
4578 worker_flags &= ~WORKER_UNBOUND;
4579 ACCESS_ONCE(worker->flags) = worker_flags;
4580 }
4581
4582 spin_unlock_irq(&pool->lock);
4583}
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595static void restore_unbound_workers_cpumask(struct worker_pool *pool, int cpu)
4596{
4597 static cpumask_t cpumask;
4598 struct worker *worker;
4599
4600 lockdep_assert_held(&pool->attach_mutex);
4601
4602
4603 if (!cpumask_test_cpu(cpu, pool->attrs->cpumask))
4604 return;
4605
4606
4607 cpumask_and(&cpumask, pool->attrs->cpumask, cpu_online_mask);
4608 if (cpumask_weight(&cpumask) != 1)
4609 return;
4610
4611
4612 for_each_pool_worker(worker, pool)
4613 WARN_ON_ONCE(set_cpus_allowed_ptr(worker->task,
4614 pool->attrs->cpumask) < 0);
4615}
4616
4617
4618
4619
4620
4621static int workqueue_cpu_up_callback(struct notifier_block *nfb,
4622 unsigned long action,
4623 void *hcpu)
4624{
4625 int cpu = (unsigned long)hcpu;
4626 struct worker_pool *pool;
4627 struct workqueue_struct *wq;
4628 int pi;
4629
4630 switch (action & ~CPU_TASKS_FROZEN) {
4631 case CPU_UP_PREPARE:
4632 for_each_cpu_worker_pool(pool, cpu) {
4633 if (pool->nr_workers)
4634 continue;
4635 if (create_and_start_worker(pool) < 0)
4636 return NOTIFY_BAD;
4637 }
4638 break;
4639
4640 case CPU_DOWN_FAILED:
4641 case CPU_ONLINE:
4642 mutex_lock(&wq_pool_mutex);
4643
4644 for_each_pool(pool, pi) {
4645 mutex_lock(&pool->attach_mutex);
4646
4647 if (pool->cpu == cpu) {
4648 spin_lock_irq(&pool->lock);
4649 pool->flags &= ~POOL_DISASSOCIATED;
4650 spin_unlock_irq(&pool->lock);
4651
4652 rebind_workers(pool);
4653 } else if (pool->cpu < 0) {
4654 restore_unbound_workers_cpumask(pool, cpu);
4655 }
4656
4657 mutex_unlock(&pool->attach_mutex);
4658 }
4659
4660
4661 list_for_each_entry(wq, &workqueues, list)
4662 wq_update_unbound_numa(wq, cpu, true);
4663
4664 mutex_unlock(&wq_pool_mutex);
4665 break;
4666 }
4667 return NOTIFY_OK;
4668}
4669
4670
4671
4672
4673
4674static int workqueue_cpu_down_callback(struct notifier_block *nfb,
4675 unsigned long action,
4676 void *hcpu)
4677{
4678 int cpu = (unsigned long)hcpu;
4679 struct work_struct unbind_work;
4680 struct workqueue_struct *wq;
4681
4682 switch (action & ~CPU_TASKS_FROZEN) {
4683 case CPU_DOWN_PREPARE:
4684
4685 INIT_WORK_ONSTACK(&unbind_work, wq_unbind_fn);
4686 queue_work_on(cpu, system_highpri_wq, &unbind_work);
4687
4688
4689 mutex_lock(&wq_pool_mutex);
4690 list_for_each_entry(wq, &workqueues, list)
4691 wq_update_unbound_numa(wq, cpu, false);
4692 mutex_unlock(&wq_pool_mutex);
4693
4694
4695 flush_work(&unbind_work);
4696 destroy_work_on_stack(&unbind_work);
4697 break;
4698 }
4699 return NOTIFY_OK;
4700}
4701
4702#ifdef CONFIG_SMP
4703
4704struct work_for_cpu {
4705 struct work_struct work;
4706 long (*fn)(void *);
4707 void *arg;
4708 long ret;
4709};
4710
4711static void work_for_cpu_fn(struct work_struct *work)
4712{
4713 struct work_for_cpu *wfc = container_of(work, struct work_for_cpu, work);
4714
4715 wfc->ret = wfc->fn(wfc->arg);
4716}
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729long work_on_cpu(int cpu, long (*fn)(void *), void *arg)
4730{
4731 struct work_for_cpu wfc = { .fn = fn, .arg = arg };
4732
4733 INIT_WORK_ONSTACK(&wfc.work, work_for_cpu_fn);
4734 schedule_work_on(cpu, &wfc.work);
4735 flush_work(&wfc.work);
4736 destroy_work_on_stack(&wfc.work);
4737 return wfc.ret;
4738}
4739EXPORT_SYMBOL_GPL(work_on_cpu);
4740#endif
4741
4742#ifdef CONFIG_FREEZER
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754void freeze_workqueues_begin(void)
4755{
4756 struct workqueue_struct *wq;
4757 struct pool_workqueue *pwq;
4758
4759 mutex_lock(&wq_pool_mutex);
4760
4761 WARN_ON_ONCE(workqueue_freezing);
4762 workqueue_freezing = true;
4763
4764 list_for_each_entry(wq, &workqueues, list) {
4765 mutex_lock(&wq->mutex);
4766 for_each_pwq(pwq, wq)
4767 pwq_adjust_max_active(pwq);
4768 mutex_unlock(&wq->mutex);
4769 }
4770
4771 mutex_unlock(&wq_pool_mutex);
4772}
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787bool freeze_workqueues_busy(void)
4788{
4789 bool busy = false;
4790 struct workqueue_struct *wq;
4791 struct pool_workqueue *pwq;
4792
4793 mutex_lock(&wq_pool_mutex);
4794
4795 WARN_ON_ONCE(!workqueue_freezing);
4796
4797 list_for_each_entry(wq, &workqueues, list) {
4798 if (!(wq->flags & WQ_FREEZABLE))
4799 continue;
4800
4801
4802
4803
4804 rcu_read_lock_sched();
4805 for_each_pwq(pwq, wq) {
4806 WARN_ON_ONCE(pwq->nr_active < 0);
4807 if (pwq->nr_active) {
4808 busy = true;
4809 rcu_read_unlock_sched();
4810 goto out_unlock;
4811 }
4812 }
4813 rcu_read_unlock_sched();
4814 }
4815out_unlock:
4816 mutex_unlock(&wq_pool_mutex);
4817 return busy;
4818}
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829void thaw_workqueues(void)
4830{
4831 struct workqueue_struct *wq;
4832 struct pool_workqueue *pwq;
4833
4834 mutex_lock(&wq_pool_mutex);
4835
4836 if (!workqueue_freezing)
4837 goto out_unlock;
4838
4839 workqueue_freezing = false;
4840
4841
4842 list_for_each_entry(wq, &workqueues, list) {
4843 mutex_lock(&wq->mutex);
4844 for_each_pwq(pwq, wq)
4845 pwq_adjust_max_active(pwq);
4846 mutex_unlock(&wq->mutex);
4847 }
4848
4849out_unlock:
4850 mutex_unlock(&wq_pool_mutex);
4851}
4852#endif
4853
4854static void __init wq_numa_init(void)
4855{
4856 cpumask_var_t *tbl;
4857 int node, cpu;
4858
4859
4860 for_each_node(node)
4861 wq_numa_tbl_len = max(wq_numa_tbl_len, node + 1);
4862
4863 if (num_possible_nodes() <= 1)
4864 return;
4865
4866 if (wq_disable_numa) {
4867 pr_info("workqueue: NUMA affinity support disabled\n");
4868 return;
4869 }
4870
4871 wq_update_unbound_numa_attrs_buf = alloc_workqueue_attrs(GFP_KERNEL);
4872 BUG_ON(!wq_update_unbound_numa_attrs_buf);
4873
4874
4875
4876
4877
4878
4879 tbl = kzalloc(wq_numa_tbl_len * sizeof(tbl[0]), GFP_KERNEL);
4880 BUG_ON(!tbl);
4881
4882 for_each_node(node)
4883 BUG_ON(!zalloc_cpumask_var_node(&tbl[node], GFP_KERNEL,
4884 node_online(node) ? node : NUMA_NO_NODE));
4885
4886 for_each_possible_cpu(cpu) {
4887 node = cpu_to_node(cpu);
4888 if (WARN_ON(node == NUMA_NO_NODE)) {
4889 pr_warn("workqueue: NUMA node mapping not available for cpu%d, disabling NUMA support\n", cpu);
4890
4891 return;
4892 }
4893 cpumask_set_cpu(cpu, tbl[node]);
4894 }
4895
4896 wq_numa_possible_cpumask = tbl;
4897 wq_numa_enabled = true;
4898}
4899
4900static int __init init_workqueues(void)
4901{
4902 int std_nice[NR_STD_WORKER_POOLS] = { 0, HIGHPRI_NICE_LEVEL };
4903 int i, cpu;
4904
4905 WARN_ON(__alignof__(struct pool_workqueue) < __alignof__(long long));
4906
4907 pwq_cache = KMEM_CACHE(pool_workqueue, SLAB_PANIC);
4908
4909 cpu_notifier(workqueue_cpu_up_callback, CPU_PRI_WORKQUEUE_UP);
4910 hotcpu_notifier(workqueue_cpu_down_callback, CPU_PRI_WORKQUEUE_DOWN);
4911
4912 wq_numa_init();
4913
4914
4915 for_each_possible_cpu(cpu) {
4916 struct worker_pool *pool;
4917
4918 i = 0;
4919 for_each_cpu_worker_pool(pool, cpu) {
4920 BUG_ON(init_worker_pool(pool));
4921 pool->cpu = cpu;
4922 cpumask_copy(pool->attrs->cpumask, cpumask_of(cpu));
4923 pool->attrs->nice = std_nice[i++];
4924 pool->node = cpu_to_node(cpu);
4925
4926
4927 mutex_lock(&wq_pool_mutex);
4928 BUG_ON(worker_pool_assign_id(pool));
4929 mutex_unlock(&wq_pool_mutex);
4930 }
4931 }
4932
4933
4934 for_each_online_cpu(cpu) {
4935 struct worker_pool *pool;
4936
4937 for_each_cpu_worker_pool(pool, cpu) {
4938 pool->flags &= ~POOL_DISASSOCIATED;
4939 BUG_ON(create_and_start_worker(pool) < 0);
4940 }
4941 }
4942
4943
4944 for (i = 0; i < NR_STD_WORKER_POOLS; i++) {
4945 struct workqueue_attrs *attrs;
4946
4947 BUG_ON(!(attrs = alloc_workqueue_attrs(GFP_KERNEL)));
4948 attrs->nice = std_nice[i];
4949 unbound_std_wq_attrs[i] = attrs;
4950
4951
4952
4953
4954
4955
4956 BUG_ON(!(attrs = alloc_workqueue_attrs(GFP_KERNEL)));
4957 attrs->nice = std_nice[i];
4958 attrs->no_numa = true;
4959 ordered_wq_attrs[i] = attrs;
4960 }
4961
4962 system_wq = alloc_workqueue("events", 0, 0);
4963 system_highpri_wq = alloc_workqueue("events_highpri", WQ_HIGHPRI, 0);
4964 system_long_wq = alloc_workqueue("events_long", 0, 0);
4965 system_unbound_wq = alloc_workqueue("events_unbound", WQ_UNBOUND,
4966 WQ_UNBOUND_MAX_ACTIVE);
4967 system_freezable_wq = alloc_workqueue("events_freezable",
4968 WQ_FREEZABLE, 0);
4969 system_power_efficient_wq = alloc_workqueue("events_power_efficient",
4970 WQ_POWER_EFFICIENT, 0);
4971 system_freezable_power_efficient_wq = alloc_workqueue("events_freezable_power_efficient",
4972 WQ_FREEZABLE | WQ_POWER_EFFICIENT,
4973 0);
4974 BUG_ON(!system_wq || !system_highpri_wq || !system_long_wq ||
4975 !system_unbound_wq || !system_freezable_wq ||
4976 !system_power_efficient_wq ||
4977 !system_freezable_power_efficient_wq);
4978 return 0;
4979}
4980early_initcall(init_workqueues);
4981