• Linus Torvalds's avatar
    Merge branch 'for-3.9' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq · 67cb104b
    Linus Torvalds authored
    Pull workqueue changes from Tejun Heo:
     "A lot of reorganization is going on mostly to prepare for worker pools
      with custom attributes so that workqueue can replace custom pool
      implementations in places including writeback and btrfs and make CPU
      assignment in crypto more flexible.
    
      workqueue evolved from purely per-cpu design and implementation, so
      there are a lot of assumptions regarding being bound to CPUs and even
      unbound workqueues are implemented as an extension of the model -
      workqueues running on the special unbound CPU.  Bulk of changes this
      round are about promoting worker_pools as the top level abstraction
      replacing global_cwq (global cpu workqueue).  At this point, I'm
      fairly confident about getting custom worker pools working pretty soon
      and ready for the next merge window.
    
      Lai's patches are replacing the convoluted mb() dancing workqueue has
      been doing with much simpler mechanism which only depends on
      assignment atomicity of long.  For details, please read the commit
      message of 0b3dae68 ("workqueue: simplify is-work-item-queued-here
      test").  While the change ends up adding one pointer to struct
      delayed_work, the inflation in percentage is less than five percent
      and it decouples delayed_work logic a lot more cleaner from usual work
      handling, removes the unusual memory barrier dancing, and allows for
      further simplification, so I think the trade-off is acceptable.
    
      There will be two more workqueue related pull requests and there are
      some shared commits among them.  I'll write further pull requests
      assuming this pull request is pulled first."
    
    * 'for-3.9' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (37 commits)
      workqueue: un-GPL function delayed_work_timer_fn()
      workqueue: rename cpu_workqueue to pool_workqueue
      workqueue: reimplement is_chained_work() using current_wq_worker()
      workqueue: fix is_chained_work() regression
      workqueue: pick cwq instead of pool in __queue_work()
      workqueue: make get_work_pool_id() cheaper
      workqueue: move nr_running into worker_pool
      workqueue: cosmetic update in try_to_grab_pending()
      workqueue: simplify is-work-item-queued-here test
      workqueue: make work->data point to pool after try_to_grab_pending()
      workqueue: add delayed_work->wq to simplify reentrancy handling
      workqueue: make work_busy() test WORK_STRUCT_PENDING first
      workqueue: replace WORK_CPU_NONE/LAST with WORK_CPU_END
      workqueue: post global_cwq removal cleanups
      workqueue: rename nr_running variables
      workqueue: remove global_cwq
      workqueue: remove worker_pool->gcwq
      workqueue: replace for_each_worker_pool() with for_each_std_worker_pool()
      workqueue: make freezing/thawing per-pool
      workqueue: make hotplug processing per-pool
      ...
    67cb104b
async.c 11.2 KB