)]}'
{
  "commit": "7e11629d0efec829cbf62366143ba1081944a70e",
  "tree": "946f6383f420fafc89550ad2f7efbdfee441ccbb",
  "parents": [
    "18aa9effad4adb2c1efe123af4eb24fec9f59b30"
  ],
  "author": {
    "name": "Tejun Heo",
    "email": "tj@kernel.org",
    "time": "Tue Jun 29 10:07:13 2010 +0200"
  },
  "committer": {
    "name": "Tejun Heo",
    "email": "tj@kernel.org",
    "time": "Tue Jun 29 10:07:13 2010 +0200"
  },
  "message": "workqueue: use shared worklist and pool all workers per cpu\n\nUse gcwq-\u003eworklist instead of cwq-\u003eworklist and break the strict\nassociation between a cwq and its worker.  All works queued on a cpu\nare queued on gcwq-\u003eworklist and processed by any available worker on\nthe gcwq.\n\nAs there no longer is strict association between a cwq and its worker,\nwhether a work is executing can now only be determined by calling\n[__]find_worker_executing_work().\n\nAfter this change, the only association between a cwq and its worker\nis that a cwq puts a worker into shared worker pool on creation and\nkills it on destruction.  As all workqueues are still limited to\nmax_active of one, this means that there are always at least as many\nworkers as active works and thus there\u0027s no danger for deadlock.\n\nThe break of strong association between cwqs and workers requires\nsomewhat clumsy changes to current_is_keventd() and\ndestroy_workqueue().  Dynamic worker pool management will remove both\nclumsy changes.  current_is_keventd() won\u0027t be necessary at all as the\nonly reason it exists is to avoid queueing a work from a work which\nwill be allowed just fine.  The clumsy part of destroy_workqueue() is\nadded because a worker can only be destroyed while idle and there\u0027s no\nguarantee a worker is idle when its wq is going down.  With dynamic\npool management, workers are not associated with workqueues at all and\nonly idle ones will be submitted to destroy_workqueue() so the code\nwon\u0027t be necessary anymore.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bce1074bdec1e826071a38662e43c4d8d74c10bc",
      "old_mode": 33188,
      "old_path": "kernel/workqueue.c",
      "new_id": "e697d6c72daacfd1f0e7ecca67f5d5640a52966d",
      "new_mode": 33188,
      "new_path": "kernel/workqueue.c"
    }
  ]
}
