From 5d322cdf20fc4327ad628d9698298a113f809de8 Mon Sep 17 00:00:00 2001 From: Salvatore Bonaccorso Date: Thu, 16 Apr 2020 23:44:04 +0200 Subject: [PATCH] [rt] Refresh "workqueue: rework" for context changes in 4.19.114 --- debian/changelog | 1 + debian/patches-rt/0289-workqueue-rework.patch | 294 ++++++++---------- 2 files changed, 128 insertions(+), 167 deletions(-) diff --git a/debian/changelog b/debian/changelog index ab4e0b569..a36894e00 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1628,6 +1628,7 @@ linux (4.19.115-1) UNRELEASED; urgency=medium on RT" for context changes in 4.19.114 * [rt] Refresh "genirq: Handle missing work_struct in irq_set_affinity_notifier()" for context changes in 4.19.114 + * [rt] Refresh "workqueue: rework" for context changes in 4.19.114 [ Ben Hutchings ] * [x86] Drop "Add a SysRq option to lift kernel lockdown" (Closes: #947021) diff --git a/debian/patches-rt/0289-workqueue-rework.patch b/debian/patches-rt/0289-workqueue-rework.patch index 0e61481b7..335125303 100644 --- a/debian/patches-rt/0289-workqueue-rework.patch +++ b/debian/patches-rt/0289-workqueue-rework.patch @@ -36,11 +36,9 @@ Signed-off-by: Steven Rostedt (VMware) 18 files changed, 166 insertions(+), 320 deletions(-) delete mode 100644 include/linux/kthread-cgroup.h -diff --git a/block/blk-core.c b/block/blk-core.c -index 7d709465876e..752c9e754509 100644 --- a/block/blk-core.c +++ b/block/blk-core.c -@@ -973,7 +973,7 @@ void blk_queue_exit(struct request_queue *q) +@@ -973,7 +973,7 @@ percpu_ref_put(&q->q_usage_counter); } @@ -49,7 +47,7 @@ index 7d709465876e..752c9e754509 100644 { struct request_queue *q = container_of(work, struct request_queue, mq_pcpu_wake); -@@ -987,7 +987,7 @@ static void blk_queue_usage_counter_release(struct percpu_ref *ref) +@@ -987,7 +987,7 @@ container_of(ref, struct request_queue, q_usage_counter); if (wq_has_sleeper(&q->mq_freeze_wq)) @@ -58,7 +56,7 @@ index 7d709465876e..752c9e754509 100644 } static void blk_rq_timed_out_timer(struct timer_list *t) -@@ -1084,7 +1084,7 @@ struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id, +@@ -1084,7 +1084,7 @@ queue_flag_set_unlocked(QUEUE_FLAG_BYPASS, q); init_waitqueue_head(&q->mq_freeze_wq); @@ -67,8 +65,6 @@ index 7d709465876e..752c9e754509 100644 /* * Init percpu_ref in atomic mode so that it's faster to shutdown. -diff --git a/drivers/block/loop.c b/drivers/block/loop.c -index 351ea22ffb56..9cd231a27328 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -70,7 +70,7 @@ @@ -80,8 +76,6 @@ index 351ea22ffb56..9cd231a27328 100644 #include #include #include -diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c -index 63b10236eb05..185bbdce62b1 100644 --- a/drivers/spi/spi-rockchip.c +++ b/drivers/spi/spi-rockchip.c @@ -22,7 +22,6 @@ @@ -92,8 +86,6 @@ index 63b10236eb05..185bbdce62b1 100644 #define DRIVER_NAME "rockchip-spi" -diff --git a/drivers/thermal/x86_pkg_temp_thermal.c b/drivers/thermal/x86_pkg_temp_thermal.c -index 82f21fd4afb0..1ef937d799e4 100644 --- a/drivers/thermal/x86_pkg_temp_thermal.c +++ b/drivers/thermal/x86_pkg_temp_thermal.c @@ -29,7 +29,6 @@ @@ -104,7 +96,7 @@ index 82f21fd4afb0..1ef937d799e4 100644 #include #include -@@ -330,7 +329,7 @@ static void pkg_thermal_schedule_work(int cpu, struct delayed_work *work) +@@ -330,7 +329,7 @@ schedule_delayed_work_on(cpu, work, ms); } @@ -113,7 +105,7 @@ index 82f21fd4afb0..1ef937d799e4 100644 { int cpu = smp_processor_id(); struct pkg_device *pkgdev; -@@ -349,32 +348,8 @@ static void pkg_thermal_notify_work(struct kthread_work *work) +@@ -349,32 +348,8 @@ } spin_unlock_irqrestore(&pkg_temp_lock, flags); @@ -146,7 +138,7 @@ index 82f21fd4afb0..1ef937d799e4 100644 static int pkg_temp_thermal_device_add(unsigned int cpu) { -@@ -573,7 +548,6 @@ static void __exit pkg_temp_thermal_exit(void) +@@ -573,7 +548,6 @@ platform_thermal_package_rate_control = NULL; cpuhp_remove_state(pkg_thermal_hp_state); @@ -154,11 +146,9 @@ index 82f21fd4afb0..1ef937d799e4 100644 debugfs_remove_recursive(debugfs); kfree(packages); } -diff --git a/fs/aio.c b/fs/aio.c -index a92119e05869..37e75bb0c406 100644 --- a/fs/aio.c +++ b/fs/aio.c -@@ -121,7 +121,7 @@ struct kioctx { +@@ -121,7 +121,7 @@ long nr_pages; struct rcu_work free_rwork; /* see free_ioctx() */ @@ -167,7 +157,7 @@ index a92119e05869..37e75bb0c406 100644 /* * signals when all in-flight requests are done -@@ -607,9 +607,9 @@ static void free_ioctx_reqs(struct percpu_ref *ref) +@@ -607,9 +607,9 @@ * and ctx->users has dropped to 0, so we know no more kiocbs can be submitted - * now it's safe to cancel any that need to be. */ @@ -179,7 +169,7 @@ index a92119e05869..37e75bb0c406 100644 struct aio_kiocb *req; spin_lock_irq(&ctx->ctx_lock); -@@ -631,8 +631,8 @@ static void free_ioctx_users(struct percpu_ref *ref) +@@ -631,8 +631,8 @@ { struct kioctx *ctx = container_of(ref, struct kioctx, users); @@ -190,8 +180,6 @@ index a92119e05869..37e75bb0c406 100644 } static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm) -diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h -index 0473efda4c65..da587e60fe86 100644 --- a/include/linux/blk-cgroup.h +++ b/include/linux/blk-cgroup.h @@ -14,7 +14,7 @@ @@ -203,11 +191,9 @@ index 0473efda4c65..da587e60fe86 100644 #include #include #include -diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h -index 981103415cd8..6a0bfa0a2c52 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h -@@ -656,7 +656,7 @@ struct request_queue { +@@ -656,7 +656,7 @@ #endif struct rcu_head rcu_head; wait_queue_head_t mq_freeze_wq; @@ -216,8 +202,6 @@ index 981103415cd8..6a0bfa0a2c52 100644 struct percpu_ref q_usage_counter; struct list_head all_q_node; -diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h -index a9321f6429f2..97d9ba26915e 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -13,7 +13,6 @@ @@ -228,7 +212,7 @@ index a9321f6429f2..97d9ba26915e 100644 #include #include -@@ -239,11 +238,7 @@ extern void resume_device_irqs(void); +@@ -239,11 +238,7 @@ struct irq_affinity_notify { unsigned int irq; struct kref kref; @@ -240,9 +224,6 @@ index a9321f6429f2..97d9ba26915e 100644 void (*notify)(struct irq_affinity_notify *, const cpumask_t *mask); void (*release)(struct kref *ref); }; -diff --git a/include/linux/kthread-cgroup.h b/include/linux/kthread-cgroup.h -deleted file mode 100644 -index 53d34bca9d72..000000000000 --- a/include/linux/kthread-cgroup.h +++ /dev/null @@ -1,17 +0,0 @@ @@ -263,8 +244,6 @@ index 53d34bca9d72..000000000000 -} -#endif -#endif -diff --git a/include/linux/kthread.h b/include/linux/kthread.h -index 7cf56eb54103..6b8c064f0cbc 100644 --- a/include/linux/kthread.h +++ b/include/linux/kthread.h @@ -4,6 +4,7 @@ @@ -275,7 +254,7 @@ index 7cf56eb54103..6b8c064f0cbc 100644 __printf(4, 5) struct task_struct *kthread_create_on_node(int (*threadfn)(void *data), -@@ -197,12 +198,14 @@ bool kthread_cancel_delayed_work_sync(struct kthread_delayed_work *work); +@@ -197,12 +198,14 @@ void kthread_destroy_worker(struct kthread_worker *worker); @@ -296,11 +275,9 @@ index 7cf56eb54103..6b8c064f0cbc 100644 - +#endif #endif /* _LINUX_KTHREAD_H */ -diff --git a/include/linux/swait.h b/include/linux/swait.h -index f426a0661aa0..21ae66cd41d3 100644 --- a/include/linux/swait.h +++ b/include/linux/swait.h -@@ -299,4 +299,18 @@ do { \ +@@ -299,4 +299,18 @@ __ret; \ }) @@ -319,11 +296,9 @@ index f426a0661aa0..21ae66cd41d3 100644 + } while (0) + #endif /* _LINUX_SWAIT_H */ -diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h -index 60d673e15632..546aa73fba6a 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h -@@ -455,10 +455,6 @@ __alloc_workqueue_key(const char *fmt, unsigned int flags, int max_active, +@@ -455,10 +455,6 @@ extern void destroy_workqueue(struct workqueue_struct *wq); @@ -334,11 +309,9 @@ index 60d673e15632..546aa73fba6a 100644 int workqueue_set_unbound_cpumask(cpumask_var_t cpumask); extern bool queue_work_on(int cpu, struct workqueue_struct *wq, -diff --git a/init/main.c b/init/main.c -index e514dd93de76..6e02188386a7 100644 --- a/init/main.c +++ b/init/main.c -@@ -1129,7 +1129,6 @@ static noinline void __init kernel_init_freeable(void) +@@ -1129,7 +1129,6 @@ smp_prepare_cpus(setup_max_cpus); workqueue_init(); @@ -346,24 +319,22 @@ index e514dd93de76..6e02188386a7 100644 init_mm_internals(); -diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c -index 290cd520dba1..82b3728685ca 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c -@@ -285,12 +285,7 @@ int irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask, +@@ -285,12 +285,7 @@ if (desc->affinity_notify) { kref_get(&desc->affinity_notify->kref); - -#ifdef CONFIG_PREEMPT_RT_BASE -- kthread_schedule_work(&desc->affinity_notify->work); +- if (!kthread_schedule_work(&desc->affinity_notify->work)) { -#else - schedule_work(&desc->affinity_notify->work); + if (!schedule_work(&desc->affinity_notify->work)) { -#endif - } - irqd_set(data, IRQD_AFFINITY_SET); - -@@ -328,8 +323,10 @@ int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m) + /* Work was already scheduled, drop our extra ref */ + kref_put(&desc->affinity_notify->kref, + desc->affinity_notify->release); +@@ -332,8 +327,10 @@ } EXPORT_SYMBOL_GPL(irq_set_affinity_hint); @@ -375,7 +346,7 @@ index 290cd520dba1..82b3728685ca 100644 struct irq_desc *desc = irq_to_desc(notify->irq); cpumask_var_t cpumask; unsigned long flags; -@@ -351,25 +348,6 @@ static void _irq_affinity_notify(struct irq_affinity_notify *notify) +@@ -355,25 +352,6 @@ kref_put(¬ify->kref, notify->release); } @@ -401,7 +372,7 @@ index 290cd520dba1..82b3728685ca 100644 /** * irq_set_affinity_notifier - control notification of IRQ affinity changes * @irq: Interrupt for which to enable/disable notification -@@ -398,11 +376,7 @@ irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify) +@@ -402,11 +380,7 @@ if (notify) { notify->irq = irq; kref_init(¬ify->kref); @@ -413,20 +384,18 @@ index 290cd520dba1..82b3728685ca 100644 } raw_spin_lock_irqsave(&desc->lock, flags); -@@ -411,11 +385,7 @@ irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify) +@@ -415,11 +389,7 @@ raw_spin_unlock_irqrestore(&desc->lock, flags); if (old_notify) { -#ifdef CONFIG_PREEMPT_RT_BASE -- kthread_cancel_work_sync(¬ify->work); +- if (kthread_cancel_work_sync(¬ify->work)) { -#else - cancel_work_sync(&old_notify->work); + if (cancel_work_sync(&old_notify->work)) { -#endif - kref_put(&old_notify->kref, old_notify->release); - } - -diff --git a/kernel/kthread.c b/kernel/kthread.c -index 9db017761a1f..5641b55783a6 100644 + /* Pending work had a ref, put that one too */ + kref_put(&old_notify->kref, old_notify->release); + } --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -20,7 +20,6 @@ @@ -437,7 +406,7 @@ index 9db017761a1f..5641b55783a6 100644 #include static DEFINE_SPINLOCK(kthread_create_lock); -@@ -1181,19 +1180,6 @@ void kthread_destroy_worker(struct kthread_worker *worker) +@@ -1181,19 +1180,6 @@ } EXPORT_SYMBOL(kthread_destroy_worker); @@ -457,11 +426,9 @@ index 9db017761a1f..5641b55783a6 100644 #ifdef CONFIG_BLK_CGROUP /** * kthread_associate_blkcg - associate blkcg to current kthread -diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index 678c2c4de4f5..a1c0123e7636 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -3607,6 +3607,7 @@ static inline void sched_submit_work(struct task_struct *tsk) +@@ -3607,6 +3607,7 @@ { if (!tsk->state) return; @@ -469,11 +436,9 @@ index 678c2c4de4f5..a1c0123e7636 100644 /* * If a worker went to sleep, notify and ask workqueue whether * it wants to wake up a task to maintain concurrency. -diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c -index ed5d8d51ca91..94d97eae0a46 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c -@@ -730,29 +730,6 @@ static void hrtimer_switch_to_hres(void) +@@ -730,29 +730,6 @@ retrigger_next_event(NULL); } @@ -503,7 +468,7 @@ index ed5d8d51ca91..94d97eae0a46 100644 static void clock_was_set_work(struct work_struct *work) { clock_was_set(); -@@ -768,7 +745,6 @@ void clock_was_set_delayed(void) +@@ -768,7 +745,6 @@ { schedule_work(&hrtimer_work); } @@ -511,8 +476,6 @@ index ed5d8d51ca91..94d97eae0a46 100644 #else -diff --git a/kernel/workqueue.c b/kernel/workqueue.c -index 714d0cfe4d56..75f59299dd06 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -49,8 +49,6 @@ @@ -524,7 +487,7 @@ index 714d0cfe4d56..75f59299dd06 100644 #include "workqueue_internal.h" -@@ -125,11 +123,6 @@ enum { +@@ -125,11 +123,6 @@ * cpu or grabbing pool->lock is enough for read access. If * POOL_DISASSOCIATED is set, it's identical to L. * @@ -536,7 +499,7 @@ index 714d0cfe4d56..75f59299dd06 100644 * A: wq_pool_attach_mutex protected. * * PL: wq_pool_mutex protected. -@@ -151,7 +144,7 @@ enum { +@@ -151,7 +144,7 @@ /* struct worker is defined in workqueue_internal.h */ struct worker_pool { @@ -545,7 +508,7 @@ index 714d0cfe4d56..75f59299dd06 100644 int cpu; /* I: the associated cpu */ int node; /* I: the associated node ID */ int id; /* I: pool ID */ -@@ -304,8 +297,8 @@ static struct workqueue_attrs *wq_update_unbound_numa_attrs_buf; +@@ -304,8 +297,8 @@ static DEFINE_MUTEX(wq_pool_mutex); /* protects pools and workqueues list */ static DEFINE_MUTEX(wq_pool_attach_mutex); /* protects worker attach/detach */ @@ -556,7 +519,7 @@ index 714d0cfe4d56..75f59299dd06 100644 static LIST_HEAD(workqueues); /* PR: list of all workqueues */ static bool workqueue_freezing; /* PL: have wqs started freezing? */ -@@ -357,8 +350,6 @@ EXPORT_SYMBOL_GPL(system_power_efficient_wq); +@@ -357,8 +350,6 @@ struct workqueue_struct *system_freezable_power_efficient_wq __read_mostly; EXPORT_SYMBOL_GPL(system_freezable_power_efficient_wq); @@ -565,7 +528,7 @@ index 714d0cfe4d56..75f59299dd06 100644 static int worker_thread(void *__worker); static void workqueue_sysfs_unregister(struct workqueue_struct *wq); -@@ -435,31 +426,6 @@ static void workqueue_sysfs_unregister(struct workqueue_struct *wq); +@@ -435,31 +426,6 @@ if (({ assert_rcu_or_wq_mutex(wq); false; })) { } \ else @@ -597,7 +560,7 @@ index 714d0cfe4d56..75f59299dd06 100644 #ifdef CONFIG_DEBUG_OBJECTS_WORK static struct debug_obj_descr work_debug_descr; -@@ -862,20 +828,14 @@ static struct worker *first_idle_worker(struct worker_pool *pool) +@@ -862,20 +828,14 @@ * Wake up the first idle worker of @pool. * * CONTEXT: @@ -620,7 +583,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } /** -@@ -904,7 +864,7 @@ void wq_worker_running(struct task_struct *task) +@@ -904,7 +864,7 @@ */ void wq_worker_sleeping(struct task_struct *task) { @@ -629,7 +592,7 @@ index 714d0cfe4d56..75f59299dd06 100644 struct worker_pool *pool; /* -@@ -921,18 +881,26 @@ void wq_worker_sleeping(struct task_struct *task) +@@ -921,18 +881,26 @@ return; worker->sleeping = 1; @@ -659,7 +622,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } /** -@@ -943,7 +911,7 @@ void wq_worker_sleeping(struct task_struct *task) +@@ -943,7 +911,7 @@ * Set @flags in @worker->flags and adjust nr_running accordingly. * * CONTEXT: @@ -668,7 +631,7 @@ index 714d0cfe4d56..75f59299dd06 100644 */ static inline void worker_set_flags(struct worker *worker, unsigned int flags) { -@@ -968,7 +936,7 @@ static inline void worker_set_flags(struct worker *worker, unsigned int flags) +@@ -968,7 +936,7 @@ * Clear @flags in @worker->flags and adjust nr_running accordingly. * * CONTEXT: @@ -677,7 +640,7 @@ index 714d0cfe4d56..75f59299dd06 100644 */ static inline void worker_clr_flags(struct worker *worker, unsigned int flags) { -@@ -1016,7 +984,7 @@ static inline void worker_clr_flags(struct worker *worker, unsigned int flags) +@@ -1016,7 +984,7 @@ * actually occurs, it should be easy to locate the culprit work function. * * CONTEXT: @@ -686,7 +649,7 @@ index 714d0cfe4d56..75f59299dd06 100644 * * Return: * Pointer to worker which is executing @work if found, %NULL -@@ -1051,7 +1019,7 @@ static struct worker *find_worker_executing_work(struct worker_pool *pool, +@@ -1051,7 +1019,7 @@ * nested inside outer list_for_each_entry_safe(). * * CONTEXT: @@ -695,7 +658,7 @@ index 714d0cfe4d56..75f59299dd06 100644 */ static void move_linked_works(struct work_struct *work, struct list_head *head, struct work_struct **nextp) -@@ -1129,11 +1097,9 @@ static void put_pwq_unlocked(struct pool_workqueue *pwq) +@@ -1129,11 +1097,9 @@ * As both pwqs and pools are RCU protected, the * following lock operations are safe. */ @@ -709,7 +672,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } } -@@ -1166,7 +1132,7 @@ static void pwq_activate_first_delayed(struct pool_workqueue *pwq) +@@ -1166,7 +1132,7 @@ * decrement nr_in_flight of its pwq and handle workqueue flushing. * * CONTEXT: @@ -718,7 +681,7 @@ index 714d0cfe4d56..75f59299dd06 100644 */ static void pwq_dec_nr_in_flight(struct pool_workqueue *pwq, int color) { -@@ -1237,7 +1203,7 @@ static int try_to_grab_pending(struct work_struct *work, bool is_dwork, +@@ -1237,7 +1203,7 @@ struct worker_pool *pool; struct pool_workqueue *pwq; @@ -727,7 +690,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* try to steal the timer if it exists */ if (is_dwork) { -@@ -1265,7 +1231,7 @@ static int try_to_grab_pending(struct work_struct *work, bool is_dwork, +@@ -1265,7 +1231,7 @@ if (!pool) goto fail; @@ -736,7 +699,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* * work->data is guaranteed to point to pwq only while the work * item is queued on pwq->wq, and both updating work->data to point -@@ -1294,17 +1260,17 @@ static int try_to_grab_pending(struct work_struct *work, bool is_dwork, +@@ -1294,17 +1260,17 @@ /* work->data points to pwq iff queued, point to pool */ set_work_pool_and_keep_pending(work, pool->id); @@ -758,7 +721,7 @@ index 714d0cfe4d56..75f59299dd06 100644 return -EAGAIN; } -@@ -1319,7 +1285,7 @@ static int try_to_grab_pending(struct work_struct *work, bool is_dwork, +@@ -1319,7 +1285,7 @@ * work_struct flags. * * CONTEXT: @@ -767,7 +730,7 @@ index 714d0cfe4d56..75f59299dd06 100644 */ static void insert_work(struct pool_workqueue *pwq, struct work_struct *work, struct list_head *head, unsigned int extra_flags) -@@ -1406,13 +1372,7 @@ static void __queue_work(int cpu, struct workqueue_struct *wq, +@@ -1406,13 +1372,7 @@ * queued or lose PENDING. Grabbing PENDING and queueing should * happen with IRQ disabled. */ @@ -781,7 +744,7 @@ index 714d0cfe4d56..75f59299dd06 100644 debug_work_activate(work); -@@ -1440,7 +1400,7 @@ static void __queue_work(int cpu, struct workqueue_struct *wq, +@@ -1442,7 +1402,7 @@ if (last_pool && last_pool != pwq->pool) { struct worker *worker; @@ -790,7 +753,7 @@ index 714d0cfe4d56..75f59299dd06 100644 worker = find_worker_executing_work(last_pool, work); -@@ -1448,11 +1408,11 @@ static void __queue_work(int cpu, struct workqueue_struct *wq, +@@ -1450,11 +1410,11 @@ pwq = worker->current_pwq; } else { /* meh... not running there, queue here */ @@ -805,7 +768,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } /* -@@ -1465,7 +1425,7 @@ static void __queue_work(int cpu, struct workqueue_struct *wq, +@@ -1467,7 +1427,7 @@ */ if (unlikely(!pwq->refcnt)) { if (wq->flags & WQ_UNBOUND) { @@ -814,7 +777,7 @@ index 714d0cfe4d56..75f59299dd06 100644 cpu_relax(); goto retry; } -@@ -1497,7 +1457,7 @@ static void __queue_work(int cpu, struct workqueue_struct *wq, +@@ -1499,7 +1459,7 @@ insert_work(pwq, work, worklist, work_flags); out: @@ -823,7 +786,7 @@ index 714d0cfe4d56..75f59299dd06 100644 rcu_read_unlock(); } -@@ -1518,14 +1478,14 @@ bool queue_work_on(int cpu, struct workqueue_struct *wq, +@@ -1520,14 +1480,14 @@ bool ret = false; unsigned long flags; @@ -840,7 +803,7 @@ index 714d0cfe4d56..75f59299dd06 100644 return ret; } EXPORT_SYMBOL(queue_work_on); -@@ -1533,12 +1493,11 @@ EXPORT_SYMBOL(queue_work_on); +@@ -1535,12 +1495,11 @@ void delayed_work_timer_fn(struct timer_list *t) { struct delayed_work *dwork = from_timer(dwork, t, timer); @@ -856,7 +819,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } EXPORT_SYMBOL(delayed_work_timer_fn); -@@ -1593,14 +1552,14 @@ bool queue_delayed_work_on(int cpu, struct workqueue_struct *wq, +@@ -1595,14 +1554,14 @@ unsigned long flags; /* read the comment in __queue_work() */ @@ -873,7 +836,7 @@ index 714d0cfe4d56..75f59299dd06 100644 return ret; } EXPORT_SYMBOL(queue_delayed_work_on); -@@ -1635,7 +1594,7 @@ bool mod_delayed_work_on(int cpu, struct workqueue_struct *wq, +@@ -1637,7 +1596,7 @@ if (likely(ret >= 0)) { __queue_delayed_work(cpu, wq, dwork, delay); @@ -882,7 +845,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } /* -ENOENT from try_to_grab_pending() becomes %true */ -@@ -1646,12 +1605,11 @@ EXPORT_SYMBOL_GPL(mod_delayed_work_on); +@@ -1648,12 +1607,11 @@ static void rcu_work_rcufn(struct rcu_head *rcu) { struct rcu_work *rwork = container_of(rcu, struct rcu_work, rcu); @@ -897,7 +860,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } /** -@@ -1686,7 +1644,7 @@ EXPORT_SYMBOL(queue_rcu_work); +@@ -1688,7 +1646,7 @@ * necessary. * * LOCKING: @@ -906,7 +869,7 @@ index 714d0cfe4d56..75f59299dd06 100644 */ static void worker_enter_idle(struct worker *worker) { -@@ -1703,9 +1661,7 @@ static void worker_enter_idle(struct worker *worker) +@@ -1705,9 +1663,7 @@ worker->last_active = jiffies; /* idle_list is LIFO */ @@ -916,7 +879,7 @@ index 714d0cfe4d56..75f59299dd06 100644 if (too_many_workers(pool) && !timer_pending(&pool->idle_timer)) mod_timer(&pool->idle_timer, jiffies + IDLE_WORKER_TIMEOUT); -@@ -1728,7 +1684,7 @@ static void worker_enter_idle(struct worker *worker) +@@ -1730,7 +1686,7 @@ * @worker is leaving idle state. Update stats. * * LOCKING: @@ -925,7 +888,7 @@ index 714d0cfe4d56..75f59299dd06 100644 */ static void worker_leave_idle(struct worker *worker) { -@@ -1738,9 +1694,7 @@ static void worker_leave_idle(struct worker *worker) +@@ -1740,9 +1696,7 @@ return; worker_clr_flags(worker, WORKER_IDLE); pool->nr_idle--; @@ -935,7 +898,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } static struct worker *alloc_worker(int node) -@@ -1868,11 +1822,11 @@ static struct worker *create_worker(struct worker_pool *pool) +@@ -1870,11 +1824,11 @@ worker_attach_to_pool(worker, pool); /* start the newly created worker */ @@ -949,7 +912,7 @@ index 714d0cfe4d56..75f59299dd06 100644 return worker; -@@ -1891,7 +1845,7 @@ static struct worker *create_worker(struct worker_pool *pool) +@@ -1893,7 +1847,7 @@ * be idle. * * CONTEXT: @@ -958,7 +921,7 @@ index 714d0cfe4d56..75f59299dd06 100644 */ static void destroy_worker(struct worker *worker) { -@@ -1908,9 +1862,7 @@ static void destroy_worker(struct worker *worker) +@@ -1910,9 +1864,7 @@ pool->nr_workers--; pool->nr_idle--; @@ -968,7 +931,7 @@ index 714d0cfe4d56..75f59299dd06 100644 worker->flags |= WORKER_DIE; wake_up_process(worker->task); } -@@ -1919,7 +1871,7 @@ static void idle_worker_timeout(struct timer_list *t) +@@ -1921,7 +1873,7 @@ { struct worker_pool *pool = from_timer(pool, t, idle_timer); @@ -977,7 +940,7 @@ index 714d0cfe4d56..75f59299dd06 100644 while (too_many_workers(pool)) { struct worker *worker; -@@ -1937,7 +1889,7 @@ static void idle_worker_timeout(struct timer_list *t) +@@ -1939,7 +1891,7 @@ destroy_worker(worker); } @@ -986,7 +949,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } static void send_mayday(struct work_struct *work) -@@ -1968,8 +1920,8 @@ static void pool_mayday_timeout(struct timer_list *t) +@@ -1970,8 +1922,8 @@ struct worker_pool *pool = from_timer(pool, t, mayday_timer); struct work_struct *work; @@ -997,7 +960,7 @@ index 714d0cfe4d56..75f59299dd06 100644 if (need_to_create_worker(pool)) { /* -@@ -1982,8 +1934,8 @@ static void pool_mayday_timeout(struct timer_list *t) +@@ -1984,8 +1936,8 @@ send_mayday(work); } @@ -1008,7 +971,7 @@ index 714d0cfe4d56..75f59299dd06 100644 mod_timer(&pool->mayday_timer, jiffies + MAYDAY_INTERVAL); } -@@ -2002,7 +1954,7 @@ static void pool_mayday_timeout(struct timer_list *t) +@@ -2004,7 +1956,7 @@ * may_start_working() %true. * * LOCKING: @@ -1017,7 +980,7 @@ index 714d0cfe4d56..75f59299dd06 100644 * multiple times. Does GFP_KERNEL allocations. Called only from * manager. */ -@@ -2011,7 +1963,7 @@ __releases(&pool->lock) +@@ -2013,7 +1965,7 @@ __acquires(&pool->lock) { restart: @@ -1026,7 +989,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* if we don't make progress in MAYDAY_INITIAL_TIMEOUT, call for help */ mod_timer(&pool->mayday_timer, jiffies + MAYDAY_INITIAL_TIMEOUT); -@@ -2027,7 +1979,7 @@ __acquires(&pool->lock) +@@ -2029,7 +1981,7 @@ } del_timer_sync(&pool->mayday_timer); @@ -1035,7 +998,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* * This is necessary even after a new worker was just successfully * created as @pool->lock was dropped and the new worker might have -@@ -2050,7 +2002,7 @@ __acquires(&pool->lock) +@@ -2052,7 +2004,7 @@ * and may_start_working() is true. * * CONTEXT: @@ -1044,7 +1007,7 @@ index 714d0cfe4d56..75f59299dd06 100644 * multiple times. Does GFP_KERNEL allocations. * * Return: -@@ -2073,7 +2025,7 @@ static bool manage_workers(struct worker *worker) +@@ -2075,7 +2027,7 @@ pool->manager = NULL; pool->flags &= ~POOL_MANAGER_ACTIVE; @@ -1053,7 +1016,7 @@ index 714d0cfe4d56..75f59299dd06 100644 return true; } -@@ -2089,7 +2041,7 @@ static bool manage_workers(struct worker *worker) +@@ -2091,7 +2043,7 @@ * call this function to process a work. * * CONTEXT: @@ -1062,7 +1025,7 @@ index 714d0cfe4d56..75f59299dd06 100644 */ static void process_one_work(struct worker *worker, struct work_struct *work) __releases(&pool->lock) -@@ -2171,7 +2123,7 @@ __acquires(&pool->lock) +@@ -2173,7 +2125,7 @@ */ set_work_pool_and_clear_pending(work, pool->id); @@ -1071,7 +1034,7 @@ index 714d0cfe4d56..75f59299dd06 100644 lock_map_acquire(&pwq->wq->lockdep_map); lock_map_acquire(&lockdep_map); -@@ -2226,7 +2178,7 @@ __acquires(&pool->lock) +@@ -2228,7 +2180,7 @@ */ cond_resched(); @@ -1080,7 +1043,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* clear cpu intensive status */ if (unlikely(cpu_intensive)) -@@ -2249,7 +2201,7 @@ __acquires(&pool->lock) +@@ -2251,7 +2203,7 @@ * fetches a work from the top and executes it. * * CONTEXT: @@ -1089,7 +1052,7 @@ index 714d0cfe4d56..75f59299dd06 100644 * multiple times. */ static void process_scheduled_works(struct worker *worker) -@@ -2291,11 +2243,11 @@ static int worker_thread(void *__worker) +@@ -2293,11 +2245,11 @@ /* tell the scheduler that this is a workqueue worker */ set_pf_worker(true); woke_up: @@ -1103,7 +1066,7 @@ index 714d0cfe4d56..75f59299dd06 100644 WARN_ON_ONCE(!list_empty(&worker->entry)); set_pf_worker(false); -@@ -2361,7 +2313,7 @@ static int worker_thread(void *__worker) +@@ -2363,7 +2315,7 @@ */ worker_enter_idle(worker); __set_current_state(TASK_IDLE); @@ -1112,7 +1075,7 @@ index 714d0cfe4d56..75f59299dd06 100644 schedule(); goto woke_up; } -@@ -2415,7 +2367,7 @@ static int rescuer_thread(void *__rescuer) +@@ -2417,7 +2369,7 @@ should_stop = kthread_should_stop(); /* see whether any pwq is asking for help */ @@ -1121,7 +1084,7 @@ index 714d0cfe4d56..75f59299dd06 100644 while (!list_empty(&wq->maydays)) { struct pool_workqueue *pwq = list_first_entry(&wq->maydays, -@@ -2427,11 +2379,11 @@ static int rescuer_thread(void *__rescuer) +@@ -2429,11 +2381,11 @@ __set_current_state(TASK_RUNNING); list_del_init(&pwq->mayday_node); @@ -1135,7 +1098,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* * Slurp in all works issued via this workqueue and -@@ -2460,7 +2412,7 @@ static int rescuer_thread(void *__rescuer) +@@ -2462,7 +2414,7 @@ * incur MAYDAY_INTERVAL delay inbetween. */ if (need_to_create_worker(pool)) { @@ -1144,7 +1107,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* * Queue iff we aren't racing destruction * and somebody else hasn't queued it already. -@@ -2469,7 +2421,7 @@ static int rescuer_thread(void *__rescuer) +@@ -2471,7 +2423,7 @@ get_pwq(pwq); list_add_tail(&pwq->mayday_node, &wq->maydays); } @@ -1153,7 +1116,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } } -@@ -2487,14 +2439,14 @@ static int rescuer_thread(void *__rescuer) +@@ -2489,14 +2441,14 @@ if (need_more_worker(pool)) wake_up_worker(pool); @@ -1171,7 +1134,7 @@ index 714d0cfe4d56..75f59299dd06 100644 if (should_stop) { __set_current_state(TASK_RUNNING); -@@ -2574,7 +2526,7 @@ static void wq_barrier_func(struct work_struct *work) +@@ -2576,7 +2528,7 @@ * underneath us, so we can't reliably determine pwq from @target. * * CONTEXT: @@ -1180,7 +1143,7 @@ index 714d0cfe4d56..75f59299dd06 100644 */ static void insert_wq_barrier(struct pool_workqueue *pwq, struct wq_barrier *barr, -@@ -2661,7 +2613,7 @@ static bool flush_workqueue_prep_pwqs(struct workqueue_struct *wq, +@@ -2663,7 +2615,7 @@ for_each_pwq(pwq, wq) { struct worker_pool *pool = pwq->pool; @@ -1189,7 +1152,7 @@ index 714d0cfe4d56..75f59299dd06 100644 if (flush_color >= 0) { WARN_ON_ONCE(pwq->flush_color != -1); -@@ -2678,7 +2630,7 @@ static bool flush_workqueue_prep_pwqs(struct workqueue_struct *wq, +@@ -2680,7 +2632,7 @@ pwq->work_color = work_color; } @@ -1198,7 +1161,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } if (flush_color >= 0 && atomic_dec_and_test(&wq->nr_pwqs_to_flush)) -@@ -2878,9 +2830,9 @@ void drain_workqueue(struct workqueue_struct *wq) +@@ -2880,9 +2832,9 @@ for_each_pwq(pwq, wq) { bool drained; @@ -1210,7 +1173,7 @@ index 714d0cfe4d56..75f59299dd06 100644 if (drained) continue; -@@ -2916,7 +2868,7 @@ static bool start_flush_work(struct work_struct *work, struct wq_barrier *barr, +@@ -2918,7 +2870,7 @@ return false; } @@ -1219,7 +1182,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* see the comment in try_to_grab_pending() with the same code */ pwq = get_work_pwq(work); if (pwq) { -@@ -2932,7 +2884,7 @@ static bool start_flush_work(struct work_struct *work, struct wq_barrier *barr, +@@ -2934,7 +2886,7 @@ check_flush_dependency(pwq->wq, work); insert_wq_barrier(pwq, barr, work, worker); @@ -1228,7 +1191,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* * Force a lock recursion deadlock when using flush_work() inside a -@@ -2951,7 +2903,7 @@ static bool start_flush_work(struct work_struct *work, struct wq_barrier *barr, +@@ -2953,7 +2905,7 @@ rcu_read_unlock(); return true; already_gone: @@ -1237,7 +1200,7 @@ index 714d0cfe4d56..75f59299dd06 100644 rcu_read_unlock(); return false; } -@@ -3052,7 +3004,7 @@ static bool __cancel_work_timer(struct work_struct *work, bool is_dwork) +@@ -3054,7 +3006,7 @@ /* tell other tasks trying to grab @work to back off */ mark_work_canceling(work); @@ -1246,7 +1209,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* * This allows canceling during early boot. We know that @work -@@ -3113,10 +3065,10 @@ EXPORT_SYMBOL_GPL(cancel_work_sync); +@@ -3115,10 +3067,10 @@ */ bool flush_delayed_work(struct delayed_work *dwork) { @@ -1259,7 +1222,7 @@ index 714d0cfe4d56..75f59299dd06 100644 return flush_work(&dwork->work); } EXPORT_SYMBOL(flush_delayed_work); -@@ -3154,7 +3106,7 @@ static bool __cancel_work(struct work_struct *work, bool is_dwork) +@@ -3156,7 +3108,7 @@ return false; set_work_pool_and_clear_pending(work, get_work_pool_id(work)); @@ -1268,7 +1231,7 @@ index 714d0cfe4d56..75f59299dd06 100644 return ret; } -@@ -3264,7 +3216,7 @@ EXPORT_SYMBOL_GPL(execute_in_process_context); +@@ -3266,7 +3218,7 @@ * * Undo alloc_workqueue_attrs(). */ @@ -1277,7 +1240,7 @@ index 714d0cfe4d56..75f59299dd06 100644 { if (attrs) { free_cpumask_var(attrs->cpumask); -@@ -3274,21 +3226,20 @@ void free_workqueue_attrs(struct workqueue_attrs *attrs) +@@ -3276,21 +3228,20 @@ /** * alloc_workqueue_attrs - allocate a workqueue_attrs @@ -1302,7 +1265,7 @@ index 714d0cfe4d56..75f59299dd06 100644 goto fail; cpumask_copy(attrs->cpumask, cpu_possible_mask); -@@ -3345,7 +3296,7 @@ static bool wqattrs_equal(const struct workqueue_attrs *a, +@@ -3347,7 +3298,7 @@ */ static int init_worker_pool(struct worker_pool *pool) { @@ -1311,7 +1274,7 @@ index 714d0cfe4d56..75f59299dd06 100644 pool->id = -1; pool->cpu = -1; pool->node = NUMA_NO_NODE; -@@ -3366,7 +3317,7 @@ static int init_worker_pool(struct worker_pool *pool) +@@ -3368,7 +3319,7 @@ pool->refcnt = 1; /* shouldn't fail above this point */ @@ -1320,7 +1283,7 @@ index 714d0cfe4d56..75f59299dd06 100644 if (!pool->attrs) return -ENOMEM; return 0; -@@ -3431,15 +3382,15 @@ static void put_unbound_pool(struct worker_pool *pool) +@@ -3433,15 +3384,15 @@ * @pool's workers from blocking on attach_mutex. We're the last * manager and @pool gets freed with the flag set. */ @@ -1339,7 +1302,7 @@ index 714d0cfe4d56..75f59299dd06 100644 mutex_lock(&wq_pool_attach_mutex); if (!list_empty(&pool->workers)) -@@ -3593,7 +3544,7 @@ static void pwq_adjust_max_active(struct pool_workqueue *pwq) +@@ -3595,7 +3546,7 @@ return; /* this function can be called during early boot w/ irq disabled */ @@ -1348,7 +1311,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* * During [un]freezing, the caller is responsible for ensuring that -@@ -3616,7 +3567,7 @@ static void pwq_adjust_max_active(struct pool_workqueue *pwq) +@@ -3618,7 +3569,7 @@ pwq->max_active = 0; } @@ -1357,7 +1320,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } /* initialize newly alloced @pwq which is associated with @wq and @pool */ -@@ -3789,8 +3740,8 @@ apply_wqattrs_prepare(struct workqueue_struct *wq, +@@ -3791,8 +3742,8 @@ ctx = kzalloc(struct_size(ctx, pwq_tbl, nr_node_ids), GFP_KERNEL); @@ -1368,7 +1331,7 @@ index 714d0cfe4d56..75f59299dd06 100644 if (!ctx || !new_attrs || !tmp_attrs) goto out_free; -@@ -3926,7 +3877,7 @@ static int apply_workqueue_attrs_locked(struct workqueue_struct *wq, +@@ -3928,7 +3879,7 @@ * * Return: 0 on success and -errno on failure. */ @@ -1377,7 +1340,7 @@ index 714d0cfe4d56..75f59299dd06 100644 const struct workqueue_attrs *attrs) { int ret; -@@ -3937,7 +3888,6 @@ int apply_workqueue_attrs(struct workqueue_struct *wq, +@@ -3939,7 +3890,6 @@ return ret; } @@ -1385,7 +1348,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /** * wq_update_unbound_numa - update NUMA affinity of a wq for CPU hot[un]plug -@@ -4015,9 +3965,9 @@ static void wq_update_unbound_numa(struct workqueue_struct *wq, int cpu, +@@ -4017,9 +3967,9 @@ use_dfl_pwq: mutex_lock(&wq->mutex); @@ -1397,7 +1360,7 @@ index 714d0cfe4d56..75f59299dd06 100644 old_pwq = numa_pwq_tbl_install(wq, node, wq->dfl_pwq); out_unlock: mutex_unlock(&wq->mutex); -@@ -4136,7 +4086,7 @@ struct workqueue_struct *__alloc_workqueue_key(const char *fmt, +@@ -4138,7 +4088,7 @@ return NULL; if (flags & WQ_UNBOUND) { @@ -1406,7 +1369,7 @@ index 714d0cfe4d56..75f59299dd06 100644 if (!wq->unbound_attrs) goto err_free_wq; } -@@ -4223,9 +4173,9 @@ void destroy_workqueue(struct workqueue_struct *wq) +@@ -4225,9 +4175,9 @@ struct worker *rescuer = wq->rescuer; /* this prevents new queueing */ @@ -1418,7 +1381,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* rescuer will empty maydays list before exiting */ kthread_stop(rescuer->task); -@@ -4420,10 +4370,10 @@ unsigned int work_busy(struct work_struct *work) +@@ -4422,10 +4372,10 @@ rcu_read_lock(); pool = get_work_pool(work); if (pool) { @@ -1431,7 +1394,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } rcu_read_unlock(); -@@ -4630,10 +4580,10 @@ void show_workqueue_state(void) +@@ -4632,10 +4582,10 @@ pr_info("workqueue %s: flags=0x%x\n", wq->name, wq->flags); for_each_pwq(pwq, wq) { @@ -1444,7 +1407,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* * We could be printing a lot from atomic context, e.g. * sysrq-t -> show_workqueue_state(). Avoid triggering -@@ -4647,7 +4597,7 @@ void show_workqueue_state(void) +@@ -4649,7 +4599,7 @@ struct worker *worker; bool first = true; @@ -1453,7 +1416,7 @@ index 714d0cfe4d56..75f59299dd06 100644 if (pool->nr_workers == pool->nr_idle) goto next_pool; -@@ -4666,7 +4616,7 @@ void show_workqueue_state(void) +@@ -4668,7 +4618,7 @@ } pr_cont("\n"); next_pool: @@ -1462,7 +1425,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* * We could be printing a lot from atomic context, e.g. * sysrq-t -> show_workqueue_state(). Avoid triggering -@@ -4696,7 +4646,7 @@ void wq_worker_comm(char *buf, size_t size, struct task_struct *task) +@@ -4698,7 +4648,7 @@ struct worker_pool *pool = worker->pool; if (pool) { @@ -1471,7 +1434,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* * ->desc tracks information (wq name or * set_worker_desc()) for the latest execution. If -@@ -4710,7 +4660,7 @@ void wq_worker_comm(char *buf, size_t size, struct task_struct *task) +@@ -4712,7 +4662,7 @@ scnprintf(buf + off, size - off, "-%s", worker->desc); } @@ -1480,7 +1443,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } } -@@ -4741,7 +4691,7 @@ static void unbind_workers(int cpu) +@@ -4743,7 +4693,7 @@ for_each_cpu_worker_pool(pool, cpu) { mutex_lock(&wq_pool_attach_mutex); @@ -1489,7 +1452,7 @@ index 714d0cfe4d56..75f59299dd06 100644 /* * We've blocked all attach/detach operations. Make all workers -@@ -4755,7 +4705,7 @@ static void unbind_workers(int cpu) +@@ -4757,7 +4707,7 @@ pool->flags |= POOL_DISASSOCIATED; @@ -1498,7 +1461,7 @@ index 714d0cfe4d56..75f59299dd06 100644 mutex_unlock(&wq_pool_attach_mutex); /* -@@ -4781,9 +4731,9 @@ static void unbind_workers(int cpu) +@@ -4783,9 +4733,9 @@ * worker blocking could lead to lengthy stalls. Kick off * unbound chain execution of currently pending work items. */ @@ -1510,7 +1473,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } } -@@ -4810,7 +4760,7 @@ static void rebind_workers(struct worker_pool *pool) +@@ -4812,7 +4762,7 @@ WARN_ON_ONCE(set_cpus_allowed_ptr(worker->task, pool->attrs->cpumask) < 0); @@ -1519,7 +1482,7 @@ index 714d0cfe4d56..75f59299dd06 100644 pool->flags &= ~POOL_DISASSOCIATED; -@@ -4849,7 +4799,7 @@ static void rebind_workers(struct worker_pool *pool) +@@ -4851,7 +4801,7 @@ WRITE_ONCE(worker->flags, worker_flags); } @@ -1528,7 +1491,7 @@ index 714d0cfe4d56..75f59299dd06 100644 } /** -@@ -5301,7 +5251,7 @@ static struct workqueue_attrs *wq_sysfs_prep_attrs(struct workqueue_struct *wq) +@@ -5303,7 +5253,7 @@ lockdep_assert_held(&wq_pool_mutex); @@ -1537,7 +1500,7 @@ index 714d0cfe4d56..75f59299dd06 100644 if (!attrs) return NULL; -@@ -5723,7 +5673,7 @@ static void __init wq_numa_init(void) +@@ -5725,7 +5675,7 @@ return; } @@ -1546,7 +1509,7 @@ index 714d0cfe4d56..75f59299dd06 100644 BUG_ON(!wq_update_unbound_numa_attrs_buf); /* -@@ -5798,7 +5748,7 @@ int __init workqueue_init_early(void) +@@ -5800,7 +5750,7 @@ for (i = 0; i < NR_STD_WORKER_POOLS; i++) { struct workqueue_attrs *attrs; @@ -1555,7 +1518,7 @@ index 714d0cfe4d56..75f59299dd06 100644 attrs->nice = std_nice[i]; unbound_std_wq_attrs[i] = attrs; -@@ -5807,7 +5757,7 @@ int __init workqueue_init_early(void) +@@ -5809,7 +5759,7 @@ * guaranteed by max_active which is enforced by pwqs. * Turn off NUMA so that dfl_pwq is used for all nodes. */ @@ -1564,6 +1527,3 @@ index 714d0cfe4d56..75f59299dd06 100644 attrs->nice = std_nice[i]; attrs->no_numa = true; ordered_wq_attrs[i] = attrs; --- -2.25.1 -