]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blobdiff - kernel/workqueue.c
Merge tag 'perf-urgent-2020-04-12' of git://git.kernel.org/pub/scm/linux/kernel/git...
[mirror_ubuntu-hirsute-kernel.git] / kernel / workqueue.c
index 4e01c448b4b48fed8e1f53cbc9970422d796db53..3816a18c251e11b7ecd7e2ce25c7a2ab2f4a121b 100644 (file)
@@ -2834,7 +2834,7 @@ void flush_workqueue(struct workqueue_struct *wq)
         * First flushers are responsible for cascading flushes and
         * handling overflow.  Non-first flushers can simply return.
         */
-       if (wq->first_flusher != &this_flusher)
+       if (READ_ONCE(wq->first_flusher) != &this_flusher)
                return;
 
        mutex_lock(&wq->mutex);
@@ -2843,7 +2843,7 @@ void flush_workqueue(struct workqueue_struct *wq)
        if (wq->first_flusher != &this_flusher)
                goto out_unlock;
 
-       wq->first_flusher = NULL;
+       WRITE_ONCE(wq->first_flusher, NULL);
 
        WARN_ON_ONCE(!list_empty(&this_flusher.list));
        WARN_ON_ONCE(wq->flush_color != this_flusher.flush_color);
@@ -5898,7 +5898,7 @@ static void __init wq_numa_init(void)
  * items.  Actual work item execution starts only after kthreads can be
  * created and scheduled right before early initcalls.
  */
-int __init workqueue_init_early(void)
+void __init workqueue_init_early(void)
 {
        int std_nice[NR_STD_WORKER_POOLS] = { 0, HIGHPRI_NICE_LEVEL };
        int hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ;
@@ -5965,8 +5965,6 @@ int __init workqueue_init_early(void)
               !system_unbound_wq || !system_freezable_wq ||
               !system_power_efficient_wq ||
               !system_freezable_power_efficient_wq);
-
-       return 0;
 }
 
 /**
@@ -5978,7 +5976,7 @@ int __init workqueue_init_early(void)
  * are no kworkers executing the work items yet.  Populate the worker pools
  * with the initial workers and enable future kworker creations.
  */
-int __init workqueue_init(void)
+void __init workqueue_init(void)
 {
        struct workqueue_struct *wq;
        struct worker_pool *pool;
@@ -6025,6 +6023,4 @@ int __init workqueue_init(void)
 
        wq_online = true;
        wq_watchdog_init();
-
-       return 0;
 }