)]}'
{
  "log": [
    {
      "commit": "7f490b21c8edbd5f47320015c05c3086909d51a4",
      "tree": "36eb43eead2da446c7d4c1f5564585d75eaef071",
      "parents": [
        "157ecab851fd1f788fd6d3c7d76dc30dbc6278aa"
      ],
      "author": {
        "name": "shumash",
        "email": "shumashgeely@gmail.com",
        "time": "Tue Oct 06 09:49:52 2015 -0600"
      },
      "committer": {
        "name": "William Bellavance",
        "email": "flintman@flintmancomputers.com",
        "time": "Wed Feb 10 19:57:40 2016 -0500"
      },
      "message": "workqueues: add missing header file\n"
    },
    {
      "commit": "157ecab851fd1f788fd6d3c7d76dc30dbc6278aa",
      "tree": "c4d04c04ddc8195e8ddd1e3a596f65f81e95b41f",
      "parents": [
        "b2f60dfc8a5f68d24936f9cead661b8f7856567d"
      ],
      "author": {
        "name": "shumash",
        "email": "shumashgeely@gmail.com",
        "time": "Sat Jul 18 09:12:19 2015 -0600"
      },
      "committer": {
        "name": "William Bellavance",
        "email": "flintman@flintmancomputers.com",
        "time": "Wed Feb 10 19:57:39 2016 -0500"
      },
      "message": "workqueue: Add system wide power_efficient workqueues\n\nThis patch adds system wide workqueues aligned towards power saving. This is\ndone by allocating them with WQ_UNBOUND flag if \u0027wq_power_efficient\u0027 is set to\n\u0027true\u0027.\n\ntj: updated comments a bit.\n\nSigned-off-by: Viresh Kumar \u003cviresh.kumar@linaro.org\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n(cherry picked from commit 0668106ca3865ba945e155097fb042bf66d364d3)\nSigned-off-by: Mark Brown \u003cbroonie@linaro.org\u003e\n\nChange-Id: Id0614a3d7f96937fa0c396d2197e3580b8b8de80\n"
    },
    {
      "commit": "b2f60dfc8a5f68d24936f9cead661b8f7856567d",
      "tree": "501db0eaab2dfcbeac9fbe38b3ce03ad86660c29",
      "parents": [
        "e1210196448b3a6c20d21944e3016627b14acdb7"
      ],
      "author": {
        "name": "shumash",
        "email": "shumashgeely@gmail.com",
        "time": "Sat Jul 18 09:03:08 2015 -0600"
      },
      "committer": {
        "name": "William Bellavance",
        "email": "flintman@flintmancomputers.com",
        "time": "Wed Feb 10 19:57:38 2016 -0500"
      },
      "message": "workqueues: Introduce new flag WQ_POWER_EFFICIENT for power oriented workqueues\n\nWorkqueues can be performance or power-oriented. Currently, most workqueues are\nbound to the CPU they were created on. This gives good performance (due to cache\neffects) at the cost of potentially waking up otherwise idle cores (Idle from\nscheduler\u0027s perspective. Which may or may not be physically idle) just to\nprocess some work. To save power, we can allow the work to be rescheduled on a\ncore that is already awake.\n\nWorkqueues created with the WQ_UNBOUND flag will allow some power savings.\nHowever, we don\u0027t change the default behaviour of the system.  To enable\npower-saving behaviour, a new config option CONFIG_WQ_POWER_EFFICIENT needs to\nbe turned on. This option can also be overridden by the\nworkqueue.power_efficient boot parameter.\n\ntj: Updated config description and comments.  Renamed\n    CONFIG_WQ_POWER_EFFICIENT to CONFIG_WQ_POWER_EFFICIENT_DEFAULT.\n\nSigned-off-by: Viresh Kumar \u003cviresh.kumar@linaro.org\u003e\nReviewed-by: Amit Kucheria \u003camit.kucheria@linaro.org\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n(cherry picked from commit cee22a15052faa817e3ec8985a28154d3fabc7aa)\nSigned-off-by: Mark Brown \u003cbroonie@linaro.org\u003e\n\nChange-Id: I5c2f656aaa266deba2dd0887dace9928540910ae\n"
    },
    {
      "commit": "1097d78180e1a2916c2bcdb15cb90ba131af9cd8",
      "tree": "5910f8fc0dcb85c71011ccccee18895769699390",
      "parents": [
        "3ded4adc97887ddde3c1855f29f062e015d19425",
        "7fd7a446b1c2b96252e4389746e5419eae04faef"
      ],
      "author": {
        "name": "Paul",
        "email": "javelinanddart@gmail.com",
        "time": "Sun Jan 11 17:15:40 2015 -0800"
      },
      "committer": {
        "name": "Ethan Chen",
        "email": "intervigil@gmail.com",
        "time": "Sun Jan 11 17:20:45 2015 -0800"
      },
      "message": "Merge tag \u0027v3.4.105\u0027 into cm-12.0\n\nThis is the 3.4.105 stable release\n\nConflicts:\n\tarch/arm/mm/proc-v7.S\n\tdrivers/bluetooth/hci_ldisc.c\n\tdrivers/media/dvb/dvb-core/dmxdev.c\n\tdrivers/usb/core/driver.c\n\tdrivers/usb/dwc3/core.c\n\tdrivers/usb/host/xhci-hub.c\n\tdrivers/usb/host/xhci.c\n\tdrivers/usb/serial/qcserial.c\n\tdrivers/usb/serial/usb_wwan.c\n\tkernel/events/core.c\n\tkernel/time/tick-sched.ck\n\tkernel/futex.c\n\tmm/memory_hotplug.c\n\tmm/vmscan.c\n\tnet/bluetooth/hci_conn.c\n\tnet/bluetooth/hci_event.c\n\tnet/bluetooth/l2cap_core.c\n\tnet/ipv4/ping.c\n\tnet/wireless/nl80211.c\n\tsound/soc/soc-core.c\n\nChange-Id: Id09da84afb427ba1a32ff26e74f2bb86458d4a2e\n"
    },
    {
      "commit": "00cef7a5e0766f0f4bedc9da1c80fbe992cf68ef",
      "tree": "cf6eee93fbfe7eb5bfbc934f26391c69aa454f5c",
      "parents": [
        "aa34e62c2f0d4a105606971a1eb666f22338993b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Aug 28 17:33:37 2013 -0400"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Apr 14 06:44:16 2014 -0700"
      },
      "message": "workqueue: cond_resched() after processing each work item\n\ncommit b22ce2785d97423846206cceec4efee0c4afd980 upstream.\n\nIf !PREEMPT, a kworker running work items back to back can hog CPU.\nThis becomes dangerous when a self-requeueing work item which is\nwaiting for something to happen races against stop_machine.  Such\nself-requeueing work item would requeue itself indefinitely hogging\nthe kworker and CPU it\u0027s running on while stop_machine would wait for\nthat CPU to enter stop_machine while preventing anything else from\nhappening on all other CPUs.  The two would deadlock.\n\nJamie Liu reports that this deadlock scenario exists around\nscsi_requeue_run_queue() and libata port multiplier support, where one\nport may exclude command processing from other ports.  With the right\ntiming, scsi_requeue_run_queue() can end up requeueing itself trying\nto execute an IO which is asked to be retried while another device has\nan exclusive access, which in turn can\u0027t make forward progress due to\nstop_machine.\n\nFix it by invoking cond_resched() after executing each work item.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Jamie Liu \u003cjamieliu@google.com\u003e\nReferences: http://thread.gmane.org/gmane.linux.kernel/1552567\n[bwh: Backported to 3.2: adjust context]\nSigned-off-by: Ben Hutchings \u003cben@decadent.org.uk\u003e\nCc: Qiang Huang \u003ch.huangqiang@huawei.com\u003e\nCc: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Jianguo Wu \u003cwujianguo@huawei.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "23f0913c2b3816b11f32dcf774758b3f63b81f60",
      "tree": "60ca6fbcf16e2e18dfbe6235ab5764f232c2b88c",
      "parents": [
        "8d36299431351e5c3a893d9c1eae7579ebc57ad5"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Sat Feb 15 22:02:28 2014 +0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Tue Mar 11 16:10:02 2014 -0700"
      },
      "message": "workqueue: ensure @task is valid across kthread_stop()\n\ncommit 5bdfff96c69a4d5ab9c49e60abf9e070ecd2acbb upstream.\n\nWhen a kworker should die, the kworkre is notified through WORKER_DIE\nflag instead of kthread_should_stop().  This, IIRC, is primarily to\nkeep the test synchronized inside worker_pool lock.  WORKER_DIE is\nfirst set while holding pool-\u003elock, the lock is dropped and\nkthread_stop() is called.\n\nUnfortunately, this means that there\u0027s a slight chance that the target\nkworker may see WORKER_DIE before kthread_stop() finishes and exits\nand frees the target task before or during kthread_stop().\n\nFix it by pinning the target task before setting WORKER_DIE and\nputting it after kthread_stop() is done.\n\ntj: Improved patch description and comment.  Moved pinning above\n    WORKER_DIE for better signify what it\u0027s protecting.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "1bee7b9b43a3b5530c62523d582aef7c3f7028ca",
      "tree": "65467bc85c4f505afd64c09d4044c1645c1ecc56",
      "parents": [
        "3bb998ff6cbde07fdd25d039487195c29b17def1"
      ],
      "author": {
        "name": "Syed Rameez Mustafa",
        "email": "rameezmustafa@codeaurora.org",
        "time": "Mon Jul 15 11:52:09 2013 -0700"
      },
      "committer": {
        "name": "Ethan Chen",
        "email": "intervigil@gmail.com",
        "time": "Fri Jan 17 22:12:13 2014 -0800"
      },
      "message": "kernel/lib: add additional debug capabilites for data corruption\n\nData corruptions in the kernel often end up in system crashes that\nare easier to debug closer to the time of detection. Specifically,\nif we do not panic immediately after lock or list corruptions have been\ndetected, the problem context is lost in the ensuing system mayhem.\nAdd support for allowing system crash immediately after such corruptions\nare detected. The CONFIG option controls the enabling/disabling of the\nfeature.\n\nChange-Id: I9b2eb62da506a13007acff63e85e9515145909ff\nSigned-off-by: Syed Rameez Mustafa \u003crameezmustafa@codeaurora.org\u003e\n"
    },
    {
      "commit": "dcb32ee6fa05937ee15b27c1634e39d0d6e67f99",
      "tree": "6919fdc41c1d364819d5e8604a627d98611fad29",
      "parents": [
        "9c6bae09e913ec5d15e1ef0f0bc64c011f895d0e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 13 22:16:45 2012 -0700"
      },
      "committer": {
        "name": "Ethan Chen",
        "email": "intervigil@gmail.com",
        "time": "Fri Jan 17 22:12:11 2014 -0800"
      },
      "message": "workqueue: reimplement WQ_HIGHPRI using a separate worker_pool\n\nWQ_HIGHPRI was implemented by queueing highpri work items at the head\nof the global worklist.  Other than queueing at the head, they weren\u0027t\nhandled differently; unfortunately, this could lead to execution\nlatency of a few seconds on heavily loaded systems.\n\nNow that workqueue code has been updated to deal with multiple\nworker_pools per global_cwq, this patch reimplements WQ_HIGHPRI using\na separate worker_pool.  NR_WORKER_POOLS is bumped to two and\ngcwq-\u003epools[0] is used for normal pri work items and -\u003epools[1] for\nhighpri.  Highpri workers get -20 nice level and has \u0027H\u0027 suffix in\ntheir names.  Note that this change increases the number of kworkers\nper cpu.\n\nPOOL_HIGHPRI_PENDING, pool_determine_ins_pos() and highpri chain\nwakeup code in process_one_work() are no longer used and removed.\n\nThis allows proper prioritization of highpri work items and removes\nhigh execution latency of highpri work items.\n\nv2: nr_running indexing bug in get_pool_nr_running() fixed.\n\nv3: Refreshed for the get_pool_nr_running() update in the previous\n    patch.\n\nChange-Id: Id843c0a425f51f84083786fbf413d999d35771b7\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Josh Hunt \u003cjoshhunt00@gmail.com\u003e\nLKML-Reference: \u003cCAKA\u003dqzaHqwZ8eqpLNFjxnO2fX-tgAOjmpvxgBFjv6dJeQaOW1w@mail.gmail.com\u003e\nCc: Tony Luck \u003ctony.luck@intel.com\u003e\nCc: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nGit-commit: 3270476a6c0ce322354df8679652f060d66526dc\nGit-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git\nSigned-off-by: Matt Wagantall \u003cmattw@codeaurora.org\u003e\n"
    },
    {
      "commit": "9c6bae09e913ec5d15e1ef0f0bc64c011f895d0e",
      "tree": "7f46631ab0472c13c331190e791c43d1d9576a48",
      "parents": [
        "22ad56496adf6bec8473159240cad7fb3bc8751b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 13 22:16:44 2012 -0700"
      },
      "committer": {
        "name": "Ethan Chen",
        "email": "intervigil@gmail.com",
        "time": "Fri Jan 17 22:12:11 2014 -0800"
      },
      "message": "workqueue: introduce NR_WORKER_POOLS and for_each_worker_pool()\n\nIntroduce NR_WORKER_POOLS and for_each_worker_pool() and convert code\npaths which need to manipulate all pools in a gcwq to use them.\nNR_WORKER_POOLS is currently one and for_each_worker_pool() iterates\nover only @gcwq-\u003epool.\n\nNote that nr_running is per-pool property and converted to an array\nwith NR_WORKER_POOLS elements and renamed to pool_nr_running.  Note\nthat get_pool_nr_running() currently assumes 0 index.  The next patch\nwill make use of non-zero index.\n\nThe changes in this patch are mechanical and don\u0027t caues any\nfunctional difference.  This is to prepare for multiple pools per\ngcwq.\n\nv2: nr_running indexing bug in get_pool_nr_running() fixed.\n\nv3: Pointer to array is stupid.  Don\u0027t use it in get_pool_nr_running()\n    as suggested by Linus.\n\nChange-Id: I46e9488601d764d25e4a6c707de129ab68f7064c\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Tony Luck \u003ctony.luck@intel.com\u003e\nCc: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nGit-commit: 4ce62e9e30cacc26885cab133ad1de358dd79f21\nGit-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git\nSigned-off-by: Matt Wagantall \u003cmattw@codeaurora.org\u003e\n"
    },
    {
      "commit": "22ad56496adf6bec8473159240cad7fb3bc8751b",
      "tree": "c9fe10b00d91b2c02cd44a6f0d0d2a3e6f1fdd6c",
      "parents": [
        "7ef6a9347bd084b60cee5bdb09922a3c7261ff6e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jul 12 14:46:37 2012 -0700"
      },
      "committer": {
        "name": "Ethan Chen",
        "email": "intervigil@gmail.com",
        "time": "Fri Jan 17 22:12:10 2014 -0800"
      },
      "message": "workqueue: separate out worker_pool flags\n\nGCWQ_MANAGE_WORKERS, GCWQ_MANAGING_WORKERS and GCWQ_HIGHPRI_PENDING\nare per-pool properties.  Add worker_pool-\u003eflags and make the above\nthree flags per-pool flags.\n\nThe changes in this patch are mechanical and don\u0027t caues any\nfunctional difference.  This is to prepare for multiple pools per\ngcwq.\n\nChange-Id: I1824fd1c509d8ac6b0619536621a22b15b316256\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGit-commit: 11ebea50dbc1ade5994b2c838a096078d4c02399\nGit-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git\nSigned-off-by: Matt Wagantall \u003cmattw@codeaurora.org\u003e\n"
    },
    {
      "commit": "7ef6a9347bd084b60cee5bdb09922a3c7261ff6e",
      "tree": "47cb608faa43cf2551ade5447a199e6d7ab3f02a",
      "parents": [
        "5865888f1a4adc6a5937a5a2c4de57b353825c9f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jul 12 14:46:37 2012 -0700"
      },
      "committer": {
        "name": "Ethan Chen",
        "email": "intervigil@gmail.com",
        "time": "Fri Jan 17 22:12:10 2014 -0800"
      },
      "message": "workqueue: use @pool instead of @gcwq or @cpu where applicable\n\nModify all functions which deal with per-pool properties to pass\naround @pool instead of @gcwq or @cpu.\n\nThe changes in this patch are mechanical and don\u0027t caues any\nfunctional difference.  This is to prepare for multiple pools per\ngcwq.\n\nChange-Id: I4be6727e1cce6f9aa2a0057b96bdc725c84f1ea8\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGit-commit: 63d95a9150ee3bbd4117fcd609dee40313b454d9\nGit-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git\nSigned-off-by: Matt Wagantall \u003cmattw@codeaurora.org\u003e\n"
    },
    {
      "commit": "5865888f1a4adc6a5937a5a2c4de57b353825c9f",
      "tree": "06f9f0a7fd7edd04e6b7c47495740815645a203d",
      "parents": [
        "b7b5c68565878a95eb08514f8140df16cf82882e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jul 12 14:46:37 2012 -0700"
      },
      "committer": {
        "name": "Ethan Chen",
        "email": "intervigil@gmail.com",
        "time": "Fri Jan 17 22:12:10 2014 -0800"
      },
      "message": "workqueue: factor out worker_pool from global_cwq\n\nMove worklist and all worker management fields from global_cwq into\nthe new struct worker_pool.  worker_pool points back to the containing\ngcwq.  worker and cpu_workqueue_struct are updated to point to\nworker_pool instead of gcwq too.\n\nThis change is mechanical and doesn\u0027t introduce any functional\ndifference other than rearranging of fields and an added level of\nindirection in some places.  This is to prepare for multiple pools per\ngcwq.\n\nv2: Comment typo fixes as suggested by Namhyung.\n\nChange-Id: Iefae84798c2af580f425b92ed79117935d99f21f\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Namhyung Kim \u003cnamhyung@kernel.org\u003e\nGit-commit: bd7bdd43dcb81bb08240b9401b36a104f77dc135\nGit-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git\nSigned-off-by: Matt Wagantall \u003cmattw@codeaurora.org\u003e\n"
    },
    {
      "commit": "b7b5c68565878a95eb08514f8140df16cf82882e",
      "tree": "8a4e3cd6fdf0661f733db7bed3af8bfa097c0bfe",
      "parents": [
        "94135a76a05de11cd29fbd805a22cf3f029161ce"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jul 12 14:46:37 2012 -0700"
      },
      "committer": {
        "name": "Ethan Chen",
        "email": "intervigil@gmail.com",
        "time": "Fri Jan 17 22:12:10 2014 -0800"
      },
      "message": "workqueue: don\u0027t use WQ_HIGHPRI for unbound workqueues\n\nUnbound wqs aren\u0027t concurrency-managed and try to execute work items\nas soon as possible.  This is currently achieved by implicitly setting\n%WQ_HIGHPRI on all unbound workqueues; however, WQ_HIGHPRI\nimplementation is about to be restructured and this usage won\u0027t be\nvalid anymore.\n\nAdd an explicit chain-wakeup path for unbound workqueues in\nprocess_one_work() instead of piggy backing on %WQ_HIGHPRI.\n\nChange-Id: Iecd17a9935ee28f856d8b726bb4c296762922bed\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGit-commit: 974271c485a4d8bb801decc616748f90aafb07ec\nGit-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git\nSigned-off-by: Matt Wagantall \u003cmattw@codeaurora.org\u003e\n"
    },
    {
      "commit": "58634ac42e736eea0e8b93cec610174879d36d58",
      "tree": "4179bdb042aa497dd2fb3c7d0cddc88e244e5237",
      "parents": [
        "fda73056f62d84376a3d29926708b4a08155da31",
        "a995dd1c29426a074364170359a026f68e8426db"
      ],
      "author": {
        "name": "Ethan Chen",
        "email": "intervigil@gmail.com",
        "time": "Tue Jan 14 21:51:43 2014 -0800"
      },
      "committer": {
        "name": "Ethan Chen",
        "email": "intervigil@gmail.com",
        "time": "Tue Jan 14 21:51:43 2014 -0800"
      },
      "message": "Merge remote-tracking branch \u0027codeaurora/kk_2.7_rb1.21\u0027 into cm-11.0\n\nConflicts:\n\tdrivers/media/video/msm/msm_vfe32.h\n\tdrivers/media/video/msm/vfe/msm_vfe32.c\n\tnet/wireless/reg.c\n\nChange-Id: I073c609cfa1c461249bf728b28249bcaa1eaa211\n"
    },
    {
      "commit": "b6e586c693a1b50e9f3b2bfcea1070b502d4d7e4",
      "tree": "55797b7357fdafefa8e2b32f213af60d076080fb",
      "parents": [
        "73c2fba8ec3e03d331b331604e6e376cd5a6a07b"
      ],
      "author": {
        "name": "Srinivasarao P",
        "email": "spathi@codeaurora.org",
        "time": "Wed Sep 18 14:33:45 2013 +0530"
      },
      "committer": {
        "name": "Srinivasarao P",
        "email": "spathi@codeaurora.org",
        "time": "Wed Dec 11 15:57:25 2013 +0530"
      },
      "message": "workqueue: Added null check and warning\n\nIf work item is already in queue get_work_cwq() will return null.\nso null check is added to avoid crash in delayed_work_timer_on()\n\nCRs-Fixed: 586162\n\nChange-Id: I5c885142fd72781cea90d6c9b3456ecc7f0778b6\nSigned-off-by: Srinivasarao P \u003cspathi@codeaurora.org\u003e\n"
    },
    {
      "commit": "55e3e1f419f0c387a2b971cc181b8dea1b099d1d",
      "tree": "79470f040f2886669d9fb0ecce2882e875fb976f",
      "parents": [
        "31eafff4382b0f20edce1afea8e2d288c6c7187c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Dec 18 10:35:02 2012 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Thu Aug 29 09:50:12 2013 -0700"
      },
      "message": "workqueue: consider work function when searching for busy work items\n\ncommit a2c1c57be8d9fd5b716113c8991d3d702eeacf77 upstream.\n\nTo avoid executing the same work item concurrenlty, workqueue hashes\ncurrently busy workers according to their current work items and looks\nup the the table when it wants to execute a new work item.  If there\nalready is a worker which is executing the new work item, the new item\nis queued to the found worker so that it gets executed only after the\ncurrent execution finishes.\n\nUnfortunately, a work item may be freed while being executed and thus\nrecycled for different purposes.  If it gets recycled for a different\nwork item and queued while the previous execution is still in\nprogress, workqueue may make the new work item wait for the old one\nalthough the two aren\u0027t really related in any way.\n\nIn extreme cases, this false dependency may lead to deadlock although\nit\u0027s extremely unlikely given that there aren\u0027t too many self-freeing\nwork item users and they usually don\u0027t wait for other work items.\n\nTo alleviate the problem, record the current work function in each\nbusy worker and match it together with the work item address in\nfind_worker_executing_work().  While this isn\u0027t complete, it ensures\nthat unrelated work items don\u0027t interact with each other and in the\nvery unlikely case where a twisted wq user triggers it, it\u0027s always\nonto itself making the culprit easy to spot.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Andrey Isakov \u003candy51@gmx.ru\u003e\nBugzilla: https://bugzilla.kernel.org/show_bug.cgi?id\u003d51701\n[lizf: Backported to 3.4:\n - Adjust context\n - Incorporate earlier logging cleanup in process_one_work() from\n   044c782ce3a9 (\u0027workqueue: fix checkpatch issues\u0027)]\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "31eafff4382b0f20edce1afea8e2d288c6c7187c",
      "tree": "77cbad322913848d13ecd4d0a3707fe86fd255c7",
      "parents": [
        "67db9db0bfd9448feb8e69224dfbb83e5834082b"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Tue Sep 18 10:40:00 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Thu Aug 29 09:50:11 2013 -0700"
      },
      "message": "workqueue: fix possible stall on try_to_grab_pending() of a delayed work item\n\ncommit 3aa62497594430ea522050b75c033f71f2c60ee6 upstream.\n\nCurrently, when try_to_grab_pending() grabs a delayed work item, it\nleaves its linked work items alone on the delayed_works.  The linked\nwork items are always NO_COLOR and will cause future\ncwq_activate_first_delayed() increase cwq-\u003enr_active incorrectly, and\nmay cause the whole cwq to stall.  For example,\n\nstate: cwq-\u003emax_active \u003d 1, cwq-\u003enr_active \u003d 1\n       one work in cwq-\u003epool, many in cwq-\u003edelayed_works.\n\nstep1: try_to_grab_pending() removes a work item from delayed_works\n       but leaves its NO_COLOR linked work items on it.\n\nstep2: Later on, cwq_activate_first_delayed() activates the linked\n       work item increasing -\u003enr_active.\n\nstep3: cwq-\u003enr_active \u003d 1, but all activated work items of the cwq are\n       NO_COLOR.  When they finish, cwq-\u003enr_active will not be\n       decreased due to NO_COLOR, and no further work items will be\n       activated from cwq-\u003edelayed_works. the cwq stalls.\n\nFix it by ensuring the target work item is activated before stealing\nPENDING in try_to_grab_pending().  This ensures that all the linked\nwork items are activated without incorrectly bumping cwq-\u003enr_active.\n\ntj: Updated comment and description.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n[lizf: backported to 3.4: adjust context]\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "4afca924c03e95345be979bfb7abbfa85963fada",
      "tree": "75874997200733af14b43737abd0fd19b0b84ada",
      "parents": [
        "a11bf0aa146b60e917dc30348e301d6a7d13dcbd"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Dec 04 07:40:39 2012 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Dec 17 10:37:43 2012 -0800"
      },
      "message": "workqueue: convert BUG_ON()s in __queue_delayed_work() to WARN_ON_ONCE()s\n\ncommit fc4b514f2727f74a4587c31db87e0e93465518c3 upstream.\n\n8852aac25e (\"workqueue: mod_delayed_work_on() shouldn\u0027t queue timer on\n0 delay\") unexpectedly uncovered a very nasty abuse of delayed_work in\nmegaraid - it allocated work_struct, casted it to delayed_work and\nthen pass that into queue_delayed_work().\n\nPreviously, this was okay because 0 @delay short-circuited to\nqueue_work() before doing anything with delayed_work.  8852aac25e\nmoved 0 @delay test into __queue_delayed_work() after sanity check on\ndelayed_work making megaraid trigger BUG_ON().\n\nAlthough megaraid is already fixed by c1d390d8e6 (\"megaraid: fix\nBUG_ON() from incorrect use of delayed work\"), this patch converts\nBUG_ON()s in __queue_delayed_work() to WARN_ON_ONCE()s so that such\nabusers, if there are more, trigger warning but don\u0027t crash the\nmachine.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Xiaotian Feng \u003cxtfeng@gmail.com\u003e\nSigned-off-by: Shuah Khan \u003cshuah.khan@hp.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "dbdd7f0c98e8ee0d49da5e8b462ad2ba07d0f358",
      "tree": "cda3dbb59914171ff1aee49b7df3c9e6b154ef6e",
      "parents": [
        "1b9dd61a10bed126661645cbf2623965fbbdefb3"
      ],
      "author": {
        "name": "Mike Galbraith",
        "email": "mgalbraith@suse.de",
        "time": "Wed Nov 28 07:17:18 2012 +0100"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Dec 10 10:59:39 2012 -0800"
      },
      "message": "workqueue: exit rescuer_thread() as TASK_RUNNING\n\ncommit 412d32e6c98527078779e5b515823b2810e40324 upstream.\n\nA rescue thread exiting TASK_INTERRUPTIBLE can lead to a task scheduling\noff, never to be seen again.  In the case where this occurred, an exiting\nthread hit reiserfs homebrew conditional resched while holding a mutex,\nbringing the box to its knees.\n\nPID: 18105  TASK: ffff8807fd412180  CPU: 5   COMMAND: \"kdmflush\"\n #0 [ffff8808157e7670] schedule at ffffffff8143f489\n #1 [ffff8808157e77b8] reiserfs_get_block at ffffffffa038ab2d [reiserfs]\n #2 [ffff8808157e79a8] __block_write_begin at ffffffff8117fb14\n #3 [ffff8808157e7a98] reiserfs_write_begin at ffffffffa0388695 [reiserfs]\n #4 [ffff8808157e7ad8] generic_perform_write at ffffffff810ee9e2\n #5 [ffff8808157e7b58] generic_file_buffered_write at ffffffff810eeb41\n #6 [ffff8808157e7ba8] __generic_file_aio_write at ffffffff810f1a3a\n #7 [ffff8808157e7c58] generic_file_aio_write at ffffffff810f1c88\n #8 [ffff8808157e7cc8] do_sync_write at ffffffff8114f850\n #9 [ffff8808157e7dd8] do_acct_process at ffffffff810a268f\n    [exception RIP: kernel_thread_helper]\n    RIP: ffffffff8144a5c0  RSP: ffff8808157e7f58  RFLAGS: 00000202\n    RAX: 0000000000000000  RBX: 0000000000000000  RCX: 0000000000000000\n    RDX: 0000000000000000  RSI: ffffffff8107af60  RDI: ffff8803ee491d18\n    RBP: 0000000000000000   R8: 0000000000000000   R9: 0000000000000000\n    R10: 0000000000000000  R11: 0000000000000000  R12: 0000000000000000\n    R13: 0000000000000000  R14: 0000000000000000  R15: 0000000000000000\n    ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018\n\nSigned-off-by: Mike Galbraith \u003cmgalbraith@suse.de\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "82bf5d3ca80ecb4bc7b6c5ccfe64620eda7621c9",
      "tree": "f830ccc41791dd8c580bf21a6c4beb554d66e253",
      "parents": [
        "4b641d849b80a02382a821220074f21c510520d3"
      ],
      "author": {
        "name": "Devin Kim",
        "email": "dojip.kim@lge.com",
        "time": "Mon Oct 29 15:17:31 2012 -0700"
      },
      "committer": {
        "name": "Android Partner Code Review",
        "email": "android-gerrit-partner@google.com",
        "time": "Wed Nov 07 18:38:03 2012 -0800"
      },
      "message": "workqueue: skip nr_running sanity check in worker_enter_idle() if trustee is active\n\nworker_enter_idle() has WARN_ON_ONCE() which triggers if nr_running\nisn\u0027t zero when every worker is idle.  This can trigger spuriously\nwhile a cpu is going down due to the way trustee sets %WORKER_ROGUE\nand zaps nr_running.\n\nIt first sets %WORKER_ROGUE on all workers without updating\nnr_running, releases gcwq-\u003elock, schedules, regrabs gcwq-\u003elock and\nthen zaps nr_running.  If the last running worker enters idle\ninbetween, it would see stale nr_running which hasn\u0027t been zapped yet\nand trigger the WARN_ON_ONCE().\n\nFix it by performing the sanity check iff the trustee is idle.\n\nChange-Id: I78c6300647a9e14a5f5f27fee0679d9072481188\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "66307aef43a3a51cccf03f4ca8063cfce1bd4ac1",
      "tree": "397533702bad69ca0d9e9530879895f188653eb1",
      "parents": [
        "24a0c2063c805e9cf1f3f418bb7f444b5b3f0e4e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Aug 03 10:30:45 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Sat Oct 13 05:38:39 2012 +0900"
      },
      "message": "workqueue: add missing smp_wmb() in process_one_work()\n\ncommit 959d1af8cffc8fd38ed53e8be1cf4ab8782f9c00 upstream.\n\nWORK_STRUCT_PENDING is used to claim ownership of a work item and\nprocess_one_work() releases it before starting execution.  When\nsomeone else grabs PENDING, all pre-release updates to the work item\nshould be visible and all updates made by the new owner should happen\nafterwards.\n\nGrabbing PENDING uses test_and_set_bit() and thus has a full barrier;\nhowever, clearing doesn\u0027t have a matching wmb.  Given the preceding\nspin_unlock and use of clear_bit, I don\u0027t believe this can be a\nproblem on an actual machine and there hasn\u0027t been any related report\nbut it still is theretically possible for clear_pending to permeate\nupwards and happen before work-\u003eentry update.\n\nAdd an explicit smp_wmb() before work_clear_pending().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "6adebb0e1d4820435e0c6739b0de20a196cc20d5",
      "tree": "2e572784e0ddf58832e1cc9aba859e365834f5a5",
      "parents": [
        "956b165f9e89e37aff44d615321d1e3166589701"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Sun Sep 02 00:28:19 2012 +0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Tue Oct 02 10:30:33 2012 -0700"
      },
      "message": "workqueue: UNBOUND -\u003e REBIND morphing in rebind_workers() should be atomic\n\ncommit 96e65306b81351b656835c15931d1d237b252f27 upstream.\n\nThe compiler may compile the following code into TWO write/modify\ninstructions.\n\n\tworker-\u003eflags \u0026\u003d ~WORKER_UNBOUND;\n\tworker-\u003eflags |\u003d WORKER_REBIND;\n\nso the other CPU may temporarily see worker-\u003eflags which doesn\u0027t have\neither WORKER_UNBOUND or WORKER_REBIND set and perform local wakeup\nprematurely.\n\nFix it by using single explicit assignment via ACCESS_ONCE().\n\nBecause idle workers have another WORKER_NOT_RUNNING flag, this bug\ndoesn\u0027t exist for them; however, update it to use the same pattern for\nconsistency.\n\ntj: Applied the change to idle workers too and updated comments and\n    patch description a bit.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "fc7da7e1c4356e4ffc7c30423325b7f0da3311b2",
      "tree": "137b99d2912421d1181bcf616e5d83f87901960a",
      "parents": [
        "2ff0cd9f615bae1de9d812de92eff6426aad26c9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Sep 18 12:48:43 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Tue Oct 02 10:29:50 2012 -0700"
      },
      "message": "workqueue: reimplement work_on_cpu() using system_wq\n\ncommit ed48ece27cd3d5ee0354c32bbaec0f3e1d4715c3 upstream.\n\nThe existing work_on_cpu() implementation is hugely inefficient.  It\ncreates a new kthread, execute that single function and then let the\nkthread die on each invocation.\n\nNow that system_wq can handle concurrent executions, there\u0027s no\nadvantage of doing this.  Reimplement work_on_cpu() using system_wq\nwhich makes it simpler and way more efficient.\n\nstable: While this isn\u0027t a fix in itself, it\u0027s needed to fix a\n        workqueue related bug in cpufreq/powernow-k8.  AFAICS, this\n        shouldn\u0027t break other existing users.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Bjorn Helgaas \u003cbhelgaas@google.com\u003e\nCc: Len Brown \u003clenb@kernel.org\u003e\nCc: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "d3b42543cf269243ccf2add49008db879ff7f146",
      "tree": "db596959747095c3c76fa57fd8420a33a2974615",
      "parents": [
        "c7815406caf7efdd805e893caef4a63e61b7645e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jul 17 12:39:26 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Thu Aug 09 08:31:37 2012 -0700"
      },
      "message": "workqueue: perform cpu down operations from low priority cpu_notifier()\n\ncommit 6575820221f7a4dd6eadecf7bf83cdd154335eda upstream.\n\nCurrently, all workqueue cpu hotplug operations run off\nCPU_PRI_WORKQUEUE which is higher than normal notifiers.  This is to\nensure that workqueue is up and running while bringing up a CPU before\nother notifiers try to use workqueue on the CPU.\n\nPer-cpu workqueues are supposed to remain working and bound to the CPU\nfor normal CPU_DOWN_PREPARE notifiers.  This holds mostly true even\nwith workqueue offlining running with higher priority because\nworkqueue CPU_DOWN_PREPARE only creates a bound trustee thread which\nruns the per-cpu workqueue without concurrency management without\nexplicitly detaching the existing workers.\n\nHowever, if the trustee needs to create new workers, it creates\nunbound workers which may wander off to other CPUs while\nCPU_DOWN_PREPARE notifiers are in progress.  Furthermore, if the CPU\ndown is cancelled, the per-CPU workqueue may end up with workers which\naren\u0027t bound to the CPU.\n\nWhile reliably reproducible with a convoluted artificial test-case\ninvolving scheduling and flushing CPU burning work items from CPU down\nnotifiers, this isn\u0027t very likely to happen in the wild, and, even\nwhen it happens, the effects are likely to be hidden by the following\nsuccessful CPU down.\n\nFix it by using different priorities for up and down notifiers - high\npriority for up operations and low priority for down operations.\n\nWorkqueue cpu hotplug operations will soon go through further cleanup.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "24312d34c95702e51240f58c073db30630170fbf",
      "tree": "9f3849204b3211e270397ac75f52b57bebca2892",
      "parents": [
        "9ed2cb7819e7df0e0fe0cce574c64e57b4806fe1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon May 14 15:04:50 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Jun 01 15:18:19 2012 +0800"
      },
      "message": "workqueue: skip nr_running sanity check in worker_enter_idle() if trustee is active\n\ncommit 544ecf310f0e7f51fa057ac2a295fc1b3b35a9d3 upstream.\n\nworker_enter_idle() has WARN_ON_ONCE() which triggers if nr_running\nisn\u0027t zero when every worker is idle.  This can trigger spuriously\nwhile a cpu is going down due to the way trustee sets %WORKER_ROGUE\nand zaps nr_running.\n\nIt first sets %WORKER_ROGUE on all workers without updating\nnr_running, releases gcwq-\u003elock, schedules, regrabs gcwq-\u003elock and\nthen zaps nr_running.  If the last running worker enters idle\ninbetween, it would see stale nr_running which hasn\u0027t been zapped yet\nand trigger the WARN_ON_ONCE().\n\nFix it by performing the sanity check iff the trustee is idle.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "e45836fafe157df137a837093037f741ad8f4c90",
      "tree": "cba5fdef1fd2e70f3610c78dbcb56ebd1be67654",
      "parents": [
        "0d9cabdccedb79ee5f27b77ff51f29a9e7d23275",
        "e06ffa1ede4146cbc261d90f5dff3d63fe2e9d7a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 20 18:13:22 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 20 18:13:22 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\nPull workqueue changes from Tejun Heo:\n \"This contains only one commit which cleans up UP allocation path a\n  bit.\"\n\n* \u0027for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:\n  workqueue: use percpu allocator for cwq on UP\n"
    },
    {
      "commit": "e06ffa1ede4146cbc261d90f5dff3d63fe2e9d7a",
      "tree": "3d8a7bccc95926aeb08c1b03e1ea8cffe722d38c",
      "parents": [
        "fde7d9049e55ab85a390be7f415d74c9f62dd0f9"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Fri Mar 09 18:03:20 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 12 09:21:17 2012 -0700"
      },
      "message": "workqueue: use percpu allocator for cwq on UP\n\nI notice that the commit bbddff makes percpu allocator can work on UP,\nSo we don\u0027t need the magic way for UP.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "62d3c5439c534b0e6c653fc63e6d8c67be3a57b1",
      "tree": "d335d0e449ef2d61d52921e3f210cdd403bb025a",
      "parents": [
        "cecd353a02fb1405c8a72a324b26b5acf97e7411"
      ],
      "author": {
        "name": "Alan Stern",
        "email": "stern@rowland.harvard.edu",
        "time": "Fri Mar 02 10:51:00 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Mar 02 10:51:00 2012 +0100"
      },
      "message": "Block: use a freezable workqueue for disk-event polling\n\nThis patch (as1519) fixes a bug in the block layer\u0027s disk-events\npolling.  The polling is done by a work routine queued on the\nsystem_nrt_wq workqueue.  Since that workqueue isn\u0027t freezable, the\npolling continues even in the middle of a system sleep transition.\n\nObviously, polling a suspended drive for media changes and such isn\u0027t\na good thing to do; in the case of USB mass-storage devices it can\nlead to real problems requiring device resets and even re-enumeration.\n\nThe patch fixes things by creating a new system-wide, non-reentrant,\nfreezable workqueue and using it for disk-events polling.\n\nSigned-off-by: Alan Stern \u003cstern@rowland.harvard.edu\u003e\nCC: \u003cstable@kernel.org\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b196be89cdc14a88cc637cdad845a75c5886c82d",
      "tree": "195816e6ab82362969409b3317d223421502224a",
      "parents": [
        "0499680a42141d86417a8fbaa8c8db806bea1201"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 10 15:11:35 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:54 2012 -0800"
      },
      "message": "workqueue: make alloc_workqueue() take printf fmt and args for name\n\nalloc_workqueue() currently expects the passed in @name pointer to remain\naccessible.  This is inconvenient and a bit silly given that the whole wq\nis being dynamically allocated.  This patch updates alloc_workqueue() and\nfriends to take printf format string instead of opaque string and matching\nvarargs at the end.  The name is allocated together with the wq and\nformatted.\n\nalloc_ordered_workqueue() is converted to a macro to unify varargs\nhandling with alloc_workqueue(), and, while at it, add comment to\nalloc_workqueue().\n\nNone of the current in-kernel users pass in string with \u0027%\u0027 as constant\nname and this change shouldn\u0027t cause any problem.\n\n[akpm@linux-foundation.org: use __printf]\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSuggested-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9984de1a5a8a96275fcab818f7419af5a3c86e71",
      "tree": "1935d411752707a1621c5caf64f75dfe105beb3a",
      "parents": [
        "7c77509c542927ee2a3c8812fad84957e51bf67d"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon May 23 14:51:41 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 09:20:12 2011 -0400"
      },
      "message": "kernel: Map most files to use export.h instead of module.h\n\nThe changed files were only including linux/module.h for the\nEXPORT_SYMBOL infrastructure, and nothing else.  Revector them\nonto the isolated export header for faster compile times.\n\nNothing to see here but a whole lot of instances of:\n\n  -#include \u003clinux/module.h\u003e\n  +#include \u003clinux/export.h\u003e\n\nThis commit is only changing the kernel dir; next targets\nwill probably be mm, fs, the arch dirs, etc.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "fa2563e41c3d6d6e8af437643981ed28ae0cb56d",
      "tree": "7d0dbcc4214a3bceb4d1dd9251df88752c1313b5",
      "parents": [
        "df4e33ad249b7480d6ba5dd11fc1dac5cfaffce1"
      ],
      "author": {
        "name": "Thomas Tuttle",
        "email": "ttuttle@chromium.org",
        "time": "Wed Sep 14 16:22:28 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Sep 14 18:09:38 2011 -0700"
      },
      "message": "workqueue: lock cwq access in drain_workqueue\n\nTake cwq-\u003egcwq-\u003elock to avoid racing between drain_workqueue checking to\nmake sure the workqueues are empty and cwq_dec_nr_in_flight decrementing\nand then incrementing nr_active when it activates a delayed work.\n\nWe discovered this when a corner case in one of our drivers resulted in\nus trying to destroy a workqueue in which the remaining work would\nalways requeue itself again in the same workqueue.  We would hit this\nrace condition and trip the BUG_ON on workqueue.c:3080.\n\nSigned-off-by: Thomas Tuttle \u003cttuttle@chromium.org\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5a791ea4fa4495f7136679cb5366f6544148e613",
      "tree": "dc27644add7d5f1165db19c28c25ae842e5f96b2",
      "parents": [
        "8209f53d79444747782a28520187abaf689761f2",
        "9c5a2ba70251ecaab18c7a83e38b3c620223476c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 15:07:15 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 15:07:15 2011 -0700"
      },
      "message": "Merge branch \u0027for-3.1\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\n* \u0027for-3.1\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:\n  workqueue: separate out drain_workqueue() from destroy_workqueue()\n  workqueue: remove cancel_rearming_delayed_work[queue]()\n"
    },
    {
      "commit": "5129df03d0c44b2d5a5f9d7d52f3b079706b9a8f",
      "tree": "799e309a7db032cb7abe9f0fa910c2989c3fdab5",
      "parents": [
        "4d429480352c63db2228489f0db9fd381cdc3c9c",
        "6988f20fe04e9ef3aea488cb8ab57fbeb78e12f0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 24 11:53:42 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 24 11:53:42 2011 -0700"
      },
      "message": "Merge branch \u0027for-2.6.40\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu\n\n* \u0027for-2.6.40\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu:\n  percpu: Unify input section names\n  percpu: Avoid extra NOP in percpu_cmpxchg16b_double\n  percpu: Cast away printk format warning\n  percpu: Always align percpu output section to PAGE_SIZE\n\nFix up fairly trivial conflict in arch/x86/include/asm/percpu.h as per Tejun\n"
    },
    {
      "commit": "9c5a2ba70251ecaab18c7a83e38b3c620223476c",
      "tree": "ece2c035b761af1332ea027f32443a6d05b16bc9",
      "parents": [
        "2543a87108d2af7d48a43b3d6685c2b1ea279e36"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Apr 05 18:01:44 2011 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 20 13:54:46 2011 +0200"
      },
      "message": "workqueue: separate out drain_workqueue() from destroy_workqueue()\n\nThere are users which want to drain workqueues without destroying it.\nSeparate out drain functionality from destroy_workqueue() into\ndrain_workqueue() and make it accessible to workqueue users.\n\nTo guarantee forward-progress, only chain queueing is allowed while\ndrain is in progress.  If a new work item which isn\u0027t chained from the\nrunning or pending work items is queued while draining is in progress,\nWARN_ON_ONCE() is triggered.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: James Bottomley \u003cJames.Bottomley@hansenpartnership.com\u003e\n"
    },
    {
      "commit": "5035b20fa5cd146b66f5f89619c20a4177fb736d",
      "tree": "cd62bba3a3c36164d0faaac1b3c922be0eca11f1",
      "parents": [
        "e2de9e0862778f4aba103027ce575efbddb8117f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 29 18:08:37 2011 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 29 18:08:37 2011 +0200"
      },
      "message": "workqueue: fix deadlock in worker_maybe_bind_and_lock()\n\nIf a rescuer and stop_machine() bringing down a CPU race with each\nother, they may deadlock on non-preemptive kernel.  The CPU won\u0027t\naccept a new task, so the rescuer can\u0027t migrate to the target CPU,\nwhile stop_machine() can\u0027t proceed because the rescuer is holding one\nof the CPU retrying migration.  GCWQ_DISASSOCIATED is never cleared\nand worker_maybe_bind_and_lock() retries indefinitely.\n\nThis problem can be reproduced semi reliably while the system is\nentering suspend.\n\n http://thread.gmane.org/gmane.linux.kernel/1122051\n\nA lot of kudos to Thilo-Alexander for reporting this tricky issue and\npainstaking testing.\n\nstable: This affects all kernels with cmwq, so all kernels since and\n        including v2.6.36 need this fix.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Thilo-Alexander Ginkel \u003cthilo@ginkel.com\u003e\nTested-by: Thilo-Alexander Ginkel \u003cthilo@ginkel.com\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "0415b00d175e0d8945e6785aad21b5f157976ce0",
      "tree": "cf6f9286a47a22bf57766a3f17eaf4190bc9c242",
      "parents": [
        "6c5103890057b1bb781b26b7aae38d33e4c517d8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Mar 24 18:50:09 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Mar 24 18:50:09 2011 +0100"
      },
      "message": "percpu: Always align percpu output section to PAGE_SIZE\n\nPercpu allocator honors alignment request upto PAGE_SIZE and both the\npercpu addresses in the percpu address space and the translated kernel\naddresses should be aligned accordingly.  The calculation of the\nformer depends on the alignment of percpu output section in the kernel\nimage.\n\nThe linker script macros PERCPU_VADDR() and PERCPU() are used to\ndefine this output section and the latter takes @align parameter.\nSeveral architectures are using @align smaller than PAGE_SIZE breaking\npercpu memory alignment.\n\nThis patch removes @align parameter from PERCPU(), renames it to\nPERCPU_SECTION() and makes it always align to PAGE_SIZE.  While at it,\nadd PCPU_SETUP_BUG_ON() checks such that alignment problems are\nreliably detected and remove percpu alignment comment recently added\nin workqueue.c as the condition would trigger BUG way before reaching\nthere.\n\nFor um, this patch raises the alignment of percpu area.  As the area\nis in .init, there shouldn\u0027t be any noticeable difference.\n\nThis problem was discovered by David Howells while debugging boot\nfailure on mn10300.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Mike Frysinger \u003cvapier@gentoo.org\u003e\nCc: uclinux-dist-devel@blackfin.uclinux.org\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Jeff Dike \u003cjdike@addtoit.com\u003e\nCc: user-mode-linux-devel@lists.sourceforge.net\n"
    },
    {
      "commit": "94dcf29a11b3d20a28790598d701f98484a969da",
      "tree": "21c65f6634dcde739bb85cbc019ee273f1427f90",
      "parents": [
        "207205a2ba2655652fe46a60b49838af6c16a919"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Tue Mar 22 16:30:45 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:01 2011 -0700"
      },
      "message": "kthread: use kthread_create_on_node()\n\nksoftirqd, kworker, migration, and pktgend kthreads can be created with\nkthread_create_on_node(), to get proper NUMA affinities for their stack and\ntask_struct.\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nAcked-by: David S. Miller \u003cdavem@davemloft.net\u003e\nReviewed-by: Andi Kleen \u003cak@linux.intel.com\u003e\nAcked-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Tony Luck \u003ctony.luck@intel.com\u003e\nCc: Fenghua Yu \u003cfenghua.yu@intel.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bd2895eeade5f11f3e5906283c630bbdb4b57454",
      "tree": "4d98f4fcd80c7d062afce28823d08aee53e66f82",
      "parents": [
        "016aa2ed1cc9cf704cf76d8df07751b6daa9750f",
        "24d51add7438f9696a7205927bf9de3c5c787a58"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 08:20:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 08:20:19 2011 -0700"
      },
      "message": "Merge branch \u0027for-2.6.39\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\n* \u0027for-2.6.39\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:\n  workqueue: fix build failure introduced by s/freezeable/freezable/\n  workqueue: add system_freezeable_wq\n  rds/ib: use system_wq instead of rds_ib_fmr_wq\n  net/9p: replace p9_poll_task with a work\n  net/9p: use system_wq instead of p9_mux_wq\n  xfs: convert to alloc_workqueue()\n  reiserfs: make commit_wq use the default concurrency level\n  ocfs2: use system_wq instead of ocfs2_quota_wq\n  ext4: convert to alloc_workqueue()\n  scsi/scsi_tgt_lib: scsi_tgtd isn\u0027t used in memory reclaim path\n  scsi/be2iscsi,qla2xxx: convert to alloc_workqueue()\n  misc/iwmc3200top: use system_wq instead of dedicated workqueues\n  i2o: use alloc_workqueue() instead of create_workqueue()\n  acpi: kacpi*_wq don\u0027t need WQ_MEM_RECLAIM\n  fs/aio: aio_wq isn\u0027t used in memory reclaim path\n  input/tps6507x-ts: use system_wq instead of dedicated workqueue\n  cpufreq: use system_wq instead of dedicated workqueues\n  wireless/ipw2x00: use system_wq instead of dedicated workqueues\n  arm/omap: use system_wq in mailbox\n  workqueue: use WQ_MEM_RECLAIM instead of WQ_RESCUER\n"
    },
    {
      "commit": "997772884036e6e121de39322179989154437d9f",
      "tree": "618ef63c45e16892ea26a99cafef6b0442e8eca1",
      "parents": [
        "a5abba989deceb731047425812d268daf7536575"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Mon Mar 07 09:58:33 2011 +0100"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue Mar 08 16:10:38 2011 +0100"
      },
      "message": "debugobjects: Add hint for better object identification\n\nIn complex subsystems like mac80211 structures can contain several\ntimers and work structs, so identifying a specific instance from the\ncall trace and object type output of debugobjects can be hard.\n\nAllow the subsystems which support debugobjects to provide a hint\nfunction. This function returns a pointer to a kernel address\n(preferrably the objects callback function) which is printed along\nwith the debugobjects type.\n\nAdd hint methods for timer_list, work_struct and hrtimer.\n\n[ tglx: Massaged changelog, made it compile ]\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nLKML-Reference: \u003c20110307085809.GA9334@redhat.com\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "24d51add7438f9696a7205927bf9de3c5c787a58",
      "tree": "133c4470edc09e70de6bc5b7910d43745801f469",
      "parents": [
        "43d133c18b44e7d82d82ef0dcc2bddd55d5dfe81"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 21 09:52:50 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 21 10:07:23 2011 +0100"
      },
      "message": "workqueue: fix build failure introduced by s/freezeable/freezable/\n\nwq:fixes-2.6.38 does s/WQ_FREEZEABLE/WQ_FREEZABLE and wq:for-2.6.39\nadds new usage of the flag.  The combination of the two creates a\nbuild failure after merge.  Fix it by renaming all freezeables to\nfreezables.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\n"
    },
    {
      "commit": "43d133c18b44e7d82d82ef0dcc2bddd55d5dfe81",
      "tree": "8de75c837b55874cc8a81a29bdedbc62668d4481",
      "parents": [
        "4149efb22da66e326fc48baf80d628834509f7f0",
        "6f576d57f1fa0d6026b495d8746d56d949989161"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 21 09:43:56 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 21 09:43:56 2011 +0100"
      },
      "message": "Merge branch \u0027master\u0027 into for-2.6.39\n"
    },
    {
      "commit": "3233cdbd9fa347a6d6897a94cc6ed0302ae83c4f",
      "tree": "053948a81cb40a37d3afbd0f6ca8f3a106523c73",
      "parents": [
        "58a69cb47ec6991bf006a3e5d202e8571b0327a4"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 16 18:10:19 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 16 18:10:19 2011 +0100"
      },
      "message": "workqueue: make sure MAYDAY_INITIAL_TIMEOUT is at least 2 jiffies long\n\nMAYDAY_INITIAL_TIMEOUT is defined as HZ / 100 and depending on\nconfiguration may end up 0 or 1.  Even when it\u0027s 1, depending on when\nthe mayday timer is added in the current jiffy interval, it may expire\nway before a jiffy has passed.\n\nMake sure MAYDAY_INITIAL_TIMEOUT is at least two to guarantee that at\nleast a full jiffy has passed before calling rescuers.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Ray Jui \u003crjui@broadcom.com\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "58a69cb47ec6991bf006a3e5d202e8571b0327a4",
      "tree": "56abdf817649c352f70bff3263f9351ed6c42062",
      "parents": [
        "7576958a9d5a4a677ad7dd40901cdbb6c1110c98"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 16 09:25:31 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 16 17:48:59 2011 +0100"
      },
      "message": "workqueue, freezer: unify spelling of \u0027freeze\u0027 + \u0027able\u0027 to \u0027freezable\u0027\n\nThere are two spellings in use for \u0027freeze\u0027 + \u0027able\u0027 - \u0027freezable\u0027 and\n\u0027freezeable\u0027.  The former is the more prominent one.  The latter is\nmostly used by workqueue and in a few other odd places.  Unify the\nspelling to \u0027freezable\u0027.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Alan Stern \u003cstern@rowland.harvard.edu\u003e\nAcked-by: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nAcked-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nAcked-by: Dmitry Torokhov \u003cdtor@mail.ru\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: Alex Dubov \u003coakad@yahoo.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\n"
    },
    {
      "commit": "7576958a9d5a4a677ad7dd40901cdbb6c1110c98",
      "tree": "db0b180feebf3a4ca6cd3155764cfc61a6d7f3cf",
      "parents": [
        "795abaf1e4e188c4171e3cd3dbb11a9fcacaf505"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 14 14:04:46 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 14 14:04:46 2011 +0100"
      },
      "message": "workqueue: wake up a worker when a rescuer is leaving a gcwq\n\nAfter executing the matching works, a rescuer leaves the gcwq whether\nthere are more pending works or not.  This may decrease the\nconcurrency level to zero and stall execution until a new work item is\nqueued on the gcwq.\n\nMake rescuer wake up a regular worker when it leaves a gcwq if there\nare more works to execute, so that execution isn\u0027t stalled.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Ray Jui \u003crjui@broadcom.com\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "4149efb22da66e326fc48baf80d628834509f7f0",
      "tree": "f55c97e3678eaff010a36b97bcde0e9d2294ccb4",
      "parents": [
        "c534a107e8fe446202b0fab102abc015c56c0317"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 08 10:39:03 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 09 09:37:49 2011 +0100"
      },
      "message": "workqueue: add system_freezeable_wq\n\nAdd system wide freezeable workqueue.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Dmitry Torokhov \u003cdmitry.torokhov@gmail.com\u003e\nCc: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\n"
    },
    {
      "commit": "42c025f3de9042d9c9abd9a6f6205d1a0f4bcadf",
      "tree": "67c618a227059548e2be915560aa113f590e6d5e",
      "parents": [
        "e159489baa717dbae70f9903770a6a4990865887"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 11 15:58:49 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 11 16:03:14 2011 +0100"
      },
      "message": "workqueue: note the nested NOT_RUNNING test in worker_clr_flags() isn\u0027t a noop\n\nThe nested NOT_RUNNING test in worker_clr_flags() is slightly\nmisleading in that if NOT_RUNNING were a single flag the nested test\nwould be always %true and thus noop.  Add a comment noting that the\ntest isn\u0027t a noop.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e159489baa717dbae70f9903770a6a4990865887",
      "tree": "6e2ae803ff6ebed558ebbe03bf3ae5bda1dd6ebc",
      "parents": [
        "0c21e3aaf6ae85bee804a325aa29c325209180fd"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Jan 09 23:32:15 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 11 15:33:01 2011 +0100"
      },
      "message": "workqueue: relax lockdep annotation on flush_work()\n\nCurrently, the lockdep annotation in flush_work() requires exclusive\naccess on the workqueue the target work is queued on and triggers\nwarning if a work is trying to flush another work on the same\nworkqueue; however, this is no longer true as workqueues can now\nexecute multiple works concurrently.\n\nThis patch adds lock_map_acquire_read() and make process_one_work()\nhold read access to the workqueue while executing a work and\nstart_flush_work() check for write access if concurrnecy level is one\nor the workqueue has a rescuer (as only one execution resource - the\nrescuer - is guaranteed to be available under memory pressure), and\nread access if higher.\n\nThis better represents what\u0027s going on and removes spurious lockdep\nwarnings which are triggered by fake dependency chain created through\nflush_work().\n\n* Peter pointed out that flushing another work from a WQ_MEM_RECLAIM\n  wq breaks forward progress guarantee under memory pressure.\n  Condition check accordingly updated.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nTested-by: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "c8efcc2589464ac70255bb83e10cad61c7c6d295",
      "tree": "a7f9c975831344ba78d3a2f9d252749d0479ca2b",
      "parents": [
        "ed41390fa57a21d06e6e3a3c4bc238bab8957fbb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 20 19:32:04 2010 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 20 19:32:04 2010 +0100"
      },
      "message": "workqueue: allow chained queueing during destruction\n\nCurrently, destroy_workqueue() makes the workqueue deny all new\nqueueing by setting WQ_DYING and flushes the workqueue once before\nproceeding with destruction; however, there are cases where work items\nqueue more related work items.  Currently, such users need to\nexplicitly flush the workqueue multiple times depending on the\npossible depth of such chained queueing.\n\nThis patch updates the queueing path such that a work item can queue\nfurther work items on the same workqueue even when WQ_DYING is set.\nThe flush on destruction is automatically retried until the workqueue\nis empty.  This guarantees that the workqueue is empty on destruction\nwhile allowing chained queueing.\n\nThe flush retry logic whines if it takes too many retries to drain the\nworkqueue.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\n"
    },
    {
      "commit": "2d64672ed38721b7a3815009d79bfb90a1f34a17",
      "tree": "91a52918b036a07bf8008eeae6e7dccf967fa4e0",
      "parents": [
        "3e6cd7a4b6a04cf354a18c9d2e7ecec8fa1772fb"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Dec 03 23:12:33 2010 -0500"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Dec 14 15:05:54 2010 +0100"
      },
      "message": "workqueue: It is likely that WORKER_NOT_RUNNING is true\n\nRunning the annotate branch profiler on three boxes, including my\nmain box that runs firefox, evolution, xchat, and is part of the distcc farm,\nshowed this with the likelys in the workqueue code:\n\n correct incorrect  %        Function                  File              Line\n ------- ---------  -        --------                  ----              ----\n      96   996253  99 wq_worker_sleeping             workqueue.c          703\n      96   996247  99 wq_worker_waking_up            workqueue.c          677\n\nThe likely()s in this case were assuming that WORKER_NOT_RUNNING will\nmost likely be false. But this is not the case. The reason is\n(and shown by adding trace_printks and testing it) that most of the time\nWORKER_PREP is set.\n\nIn worker_thread() we have:\n\n\tworker_clr_flags(worker, WORKER_PREP);\n\n\t[ do work stuff ]\n\n\tworker_set_flags(worker, WORKER_PREP, false);\n\n(that \u0027false\u0027 means not to wake up an idle worker)\n\nThe wq_worker_sleeping() is called from schedule when a worker thread\nis putting itself to sleep. Which happens most of the time outside\nof that [ do work stuff ].\n\nThe wq_worker_waking_up is called by the wakeup worker code, which\nis also callod outside that [ do work stuff ].\n\nThus, the likely and unlikely used by those two functions are actually\nbackwards.\n\nRemove the annotation and let gcc figure it out.\n\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "e5cba24e3f018d4beb6acd101a82483c98f91ce7",
      "tree": "687339b9d285c7d19d5c521cae9a30bd9b389631",
      "parents": [
        "698fd6a2c3ca05ec796072defb5c415289a86cdc"
      ],
      "author": {
        "name": "Hitoshi Mitake",
        "email": "mitake@dcl.info.waseda.ac.jp",
        "time": "Fri Nov 26 12:06:44 2010 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 26 12:06:44 2010 +0100"
      },
      "message": "workqueue: check the allocation of system_unbound_wq\n\nI found a trivial bug on initialization of workqueue.\nCurrent init_workqueues doesn\u0027t check the result of\nallocation of system_unbound_wq, this should be checked\nlike other queues.\n\nSigned-off-by: Hitoshi Mitake \u003cmitake@dcl.info.waseda.ac.jp\u003e\nCc: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "ca1cab37d91cbe8a8333732540d43cabb54cfa85",
      "tree": "ea936dc8e5eb80b02fdf1d970bcb6f2e836051b9",
      "parents": [
        "99dc829256bb8cfcb1f58b7f118893fdbf608e60"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Oct 26 14:22:34 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:14 2010 -0700"
      },
      "message": "workqueues: s/ON_STACK/ONSTACK/\n\nSilly though it is, completions and wait_queue_heads use foo_ONSTACK\n(COMPLETION_INITIALIZER_ONSTACK, DECLARE_COMPLETION_ONSTACK,\n__WAIT_QUEUE_HEAD_INIT_ONSTACK and DECLARE_WAIT_QUEUE_HEAD_ONSTACK) so I\nguess workqueues should do the same thing.\n\ns/INIT_WORK_ON_STACK/INIT_WORK_ONSTACK/\ns/INIT_DELAYED_WORK_ON_STACK/INIT_DELAYED_WORK_ONSTACK/\n\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5260562754c0aa4b95eebb1f851eaccce7286365",
      "tree": "5702b9da6869d2769e4e88472b2c39b643187174",
      "parents": [
        "74eb94b218d087798a52c0b4f1379b635287a4b8"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Mon Oct 25 23:41:11 2010 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 25 16:24:06 2010 -0700"
      },
      "message": "MN10300: Fix the PERCPU() alignment to allow for workqueues\n\nIn the MN10300 arch, we occasionally see an assertion being tripped in\nalloc_cwqs() at the following line:\n\n        /* just in case, make sure it\u0027s actually aligned */\n  ---\u003e  BUG_ON(!IS_ALIGNED(wq-\u003ecpu_wq.v, align));\n        return wq-\u003ecpu_wq.v ? 0 : -ENOMEM;\n\nThe values are:\n\n        wa-\u003ecpu_wq.v \u003d\u003e 0x902776e0\n        align \u003d\u003e 0x100\n\nand align is calculated by the following:\n\n        const size_t align \u003d max_t(size_t, 1 \u003c\u003c WORK_STRUCT_FLAG_BITS,\n                                   __alignof__(unsigned long long));\n\nThis is because the pointer in question (wq-\u003ecpu_wq.v) loses some of its\nlower bits to control flags, and so the object it points to must be\nsufficiently aligned to avoid the need to use those bits for pointing to\nthings.\n\nCurrently, 4 control bits and 4 colour bits are used in normal\ncircumstances, plus a debugging bit if debugging is set.  This requires\nthe cpu_workqueue_struct struct to be at least 256 bytes aligned (or 512\nbytes aligned with debugging).\n\nPERCPU() alignment on MN13000, however, is only 32 bytes as set in\nvmlinux.lds.S.  So we set this to PAGE_SIZE (4096) to match most other\narches and stick a comment in alloc_cwqs() for anyone else who triggers\nthe assertion.\n\nReported-by: Akira Takeuchi \u003ctakeuchi.akr@jp.panasonic.com\u003e\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Mark Salter \u003cmsalter@redhat.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "daaae6b010ac0f60c9c35e481589966f9f1fcc22",
      "tree": "94f4f463d898af0ad1926b8d21c15db94a0a411a",
      "parents": [
        "31ddd871fc3db73e2024cb3eb3ee5051edf5a80f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 19 11:28:15 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 19 11:28:15 2010 +0200"
      },
      "message": "workqueue: remove in_workqueue_context()\n\nCommit a25909a4 (lockdep: Add an in_workqueue_context() lockdep-based\ntest function) added in_workqueue_context() but there hasn\u0027t been any\nin-kernel user and the lockdep annotation in workqueue is scheduled to\nchange.  Remove the unused function.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "31ddd871fc3db73e2024cb3eb3ee5051edf5a80f",
      "tree": "3a2d578ec9ebefecca5e4cad196023bbe1a7d0f2",
      "parents": [
        "10ccd84695c2a03075bad2f4fc728575fe9051f8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 19 11:14:49 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 19 11:14:49 2010 +0200"
      },
      "message": "workqueue: Clarify that schedule_on_each_cpu is synchronous\n\nThe documentation for schedule_on_each_cpu() states that it calls a\nfunction on each online CPU from keventd.  This can easily be\ninterpreted as an asyncronous call because the description does not\nmention that flush_work is called.  Clarify that it is synchronous.\n\ntj: rephrased a bit\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "6370a6ad3b53df90b4700977f7718118a2cd524a",
      "tree": "2d1f45a19e66329813ce133b18f920d8c450b0c0",
      "parents": [
        "30310045dd20a286cf3800f063f79b468e132fb1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Oct 11 15:12:27 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Oct 11 15:20:26 2010 +0200"
      },
      "message": "workqueue: add and use WQ_MEM_RECLAIM flag\n\nAdd WQ_MEM_RECLAIM flag which currently maps to WQ_RESCUER, mark\nWQ_RESCUER as internal and replace all external WQ_RESCUER usages to\nWQ_MEM_RECLAIM.\n\nThis makes the API users express the intent of the workqueue instead\nof indicating the internal mechanism used to guarantee forward\nprogress.  This is also to make it cleaner to add more semantics to\nWQ_MEM_RECLAIM.  For example, if deemed necessary, memory reclaim\nworkqueues can be made highpri.\n\nThis patch doesn\u0027t introduce any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Jeff Garzik \u003cjgarzik@pobox.com\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\n"
    },
    {
      "commit": "30310045dd20a286cf3800f063f79b468e132fb1",
      "tree": "535dd3273332f18b245afd6a4142fcc49ada8e61",
      "parents": [
        "cdadf0097cdca06c497ffaeb5982e028c6e4ed38"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Oct 11 11:51:57 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Oct 11 12:09:30 2010 +0200"
      },
      "message": "workqueue: fix HIGHPRI handling in keep_working()\n\nThe policy function keep_working() didn\u0027t check GCWQ_HIGHPRI_PENDING\nand could return %false with highpri work pending.  This could lead to\nlate execution of a highpri work which was delayed due to @max_active\nthrottling if other works are actively consuming CPU cycles.\n\nFor example, the following could happen.\n\n1. Work W0 which burns CPU cycles.\n\n2. Two works W1 and W2 are queued to a highpri wq w/ @max_active of 1.\n\n3. W1 starts executing and W2 is put to delayed queue.  W0 and W1 are\n   both runnable.\n\n4. W1 finishes which puts W2 to pending queue but keep_working()\n   incorrectly returns %false and the worker goes to sleep.\n\n5. W0 finishes and W2 starts execution.\n\nWith this patch applied, W2 starts execution as soon as W1 finishes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "cdadf0097cdca06c497ffaeb5982e028c6e4ed38",
      "tree": "e02400ea54981e9621a30d3a2ce013e14f657e2e",
      "parents": [
        "97bd234701b2b39a0e749c1fe0e44f1d14c94292"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 05 10:49:55 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 05 10:49:55 2010 +0200"
      },
      "message": "workqueue: add queue_work and activate_work trace points\n\nThese two tracepoints allow tracking when and how a work is queued and\nactivated.  This patch is based on Frederic\u0027s patch to add queue_work\ntrace point.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\n"
    },
    {
      "commit": "97bd234701b2b39a0e749c1fe0e44f1d14c94292",
      "tree": "fffbd48576c507f8a2e186ad0ebbf777aadf8bf0",
      "parents": [
        "09383498c5d35262e643bfdbae84826177a3c624"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 05 10:41:14 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Oct 05 10:41:14 2010 +0200"
      },
      "message": "workqueue: prepare for more tracepoints\n\nDefine workqueue_work event class and use it for workqueue_execute_end\ntrace point.  Also, move trace/events/workqueue.h include downwards\nsuch that all struct definitions are visible to it.  This is to\nprepare for more tracepoints and doesn\u0027t cause any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\n"
    },
    {
      "commit": "09383498c5d35262e643bfdbae84826177a3c624",
      "tree": "ec75ee767bff28cabbd1d1b82cfc3457147dda33",
      "parents": [
        "baf59022c37d43f202e62d5130e4bac5e825b426"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Sep 16 10:48:29 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Sep 19 17:51:05 2010 +0200"
      },
      "message": "workqueue: implement flush[_delayed]_work_sync()\n\nImplement flush[_delayed]_work_sync().  These are flush functions\nwhich also make sure no CPU is still executing the target work from\nearlier queueing instances.  These are similar to\ncancel[_delayed]_work_sync() except that the target work item is\nflushed instead of cancelled.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "baf59022c37d43f202e62d5130e4bac5e825b426",
      "tree": "43eea7aac112b2ee07b195e00bce4b14465d1183",
      "parents": [
        "401a8d048eadfbe1b1c1bf53d3b614fcc894c61a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Sep 16 10:42:16 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Sep 19 17:51:05 2010 +0200"
      },
      "message": "workqueue: factor out start_flush_work()\n\nFactor out start_flush_work() from flush_work().  start_flush_work()\nhas @wait_executing argument which controls whether the barrier is\nqueued only if the work is pending or also if executing.  As\nflush_work() needs to wait for execution too, it uses %true.\n\nThis commit doesn\u0027t cause any behavior difference.  start_flush_work()\nwill be used to implement flush_work_sync().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "401a8d048eadfbe1b1c1bf53d3b614fcc894c61a",
      "tree": "7e1761149643e395a33619deb67ec99d8949a7a4",
      "parents": [
        "81dcaf6516d8bbd75b894862c8ae7bba04380cfe"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Sep 16 10:36:00 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Sep 19 17:51:05 2010 +0200"
      },
      "message": "workqueue: cleanup flush/cancel functions\n\nMake the following cleanup changes.\n\n* Relocate flush/cancel function prototypes and definitions.\n\n* Relocate wait_on_cpu_work() and wait_on_work() before\n  try_to_grab_pending().  These will be used to implement\n  flush_work_sync().\n\n* Make all flush/cancel functions return bool instead of int.\n\n* Update wait_on_cpu_work() and wait_on_work() to return %true if they\n  actually waited.\n\n* Add / update comments.\n\nThis patch doesn\u0027t cause any functional changes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "c54fce6eff197d9c57c97afbf6c9722ce434fc8f",
      "tree": "c40c9bf65638399b13c47688f20e761cdd0fa89c",
      "parents": [
        "84e1d836ef0759a152578a961894824bde89596f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 10 16:51:36 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Sep 13 10:26:52 2010 +0200"
      },
      "message": "workqueue: add documentation\n\nUpdate copyright notice and add Documentation/workqueue.txt.\n\nRandy Dunlap, Dave Chinner: misc fixes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-By: Florian Mickler \u003cflorian@mickler.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\n"
    },
    {
      "commit": "cd4d4fc4137502f88ee871fc015a934dc28535e3",
      "tree": "09dfa0627996ca80d0fcc936b6fbd5080ee6e9d7",
      "parents": [
        "608307e6de2631e37f55f106a7cbbc560cb12751",
        "9c37547ab62f88aac3e1e3c2065b611f811de9b5"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 07 14:08:17 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 07 14:08:17 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:\n  workqueue: use zalloc_cpumask_var() for gcwq-\u003emayday_mask\n  workqueue: fix GCWQ_DISASSOCIATED initialization\n  workqueue: Add a workqueue chapter to the tracepoint docbook\n  workqueue: fix cwq-\u003enr_active underflow\n  workqueue: improve destroy_workqueue() debuggability\n  workqueue: mark lock acquisition on worker_maybe_bind_and_lock()\n  workqueue: annotate lock context change\n  workqueue: free rescuer on destroy_workqueue\n"
    },
    {
      "commit": "9c37547ab62f88aac3e1e3c2065b611f811de9b5",
      "tree": "2a9c3655e25c93b4c3ce49c575d5d908045ebdd4",
      "parents": [
        "477a3c33d1efa0342a74bd02da2e049191993e2c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Aug 31 11:18:34 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Aug 31 11:18:34 2010 +0200"
      },
      "message": "workqueue: use zalloc_cpumask_var() for gcwq-\u003emayday_mask\n\nalloc_mayday_mask() was using alloc_cpumask_var() making\ngcwq-\u003emayday_mask contain garbage after initialization on\nCONFIG_CPUMASK_OFFSTACK\u003dy configurations.  This combined with the\npreviously fixed GCWQ_DISASSOCIATED initialization bug could make\nrescuers fall into infinite loop trying to bind to an offline cpu.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: CAI Qian \u003ccaiqian@redhat.com\u003e\n"
    },
    {
      "commit": "477a3c33d1efa0342a74bd02da2e049191993e2c",
      "tree": "03d4ae1338f47016fbad6ff131007e009959b4a8",
      "parents": [
        "7c38875a0d0a9b90eee66be79e36995c86acc70c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Aug 31 10:54:35 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Aug 31 10:54:35 2010 +0200"
      },
      "message": "workqueue: fix GCWQ_DISASSOCIATED initialization\n\ninit_workqueues() incorrectly marks workqueues for all possible CPUs\nassociated.  Combined with mayday_mask initialization bug, this can\nmake rescuers keep trying to bind to an offline gcwq indefinitely.\nFix init_workqueues() such that only online CPUs have their gcwqs have\nGCWQ_DISASSOCIATED cleared.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: CAI Qian \u003ccaiqian@redhat.com\u003e\n"
    },
    {
      "commit": "8a2e8e5dec7e29c56a46ba176c664ab6a3d04118",
      "tree": "57da96451bead4986dfcd82aadf47ba2c05745ac",
      "parents": [
        "e41e704bc4f49057fc68b643108366e6e6781aa3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Aug 25 10:33:56 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Aug 25 10:33:56 2010 +0200"
      },
      "message": "workqueue: fix cwq-\u003enr_active underflow\n\ncwq-\u003enr_active is used to keep track of how many work items are active\nfor the cpu workqueue, where \u0027active\u0027 is defined as either pending on\nglobal worklist or executing.  This is used to implement the\nmax_active limit and workqueue freezing.  If a work item is queued\nafter nr_active has already reached max_active, the work item doesn\u0027t\nincrement nr_active and is put on the delayed queue and gets activated\nlater as previous active work items retire.\n\ntry_to_grab_pending() which is used in the cancellation path\nunconditionally decremented nr_active whether the work item being\ncancelled is currently active or delayed, so cancelling a delayed work\nitem makes nr_active underflow.  This breaks max_active enforcement\nand triggers BUG_ON() in destroy_workqueue() later on.\n\nThis patch fixes this bug by adding a flag WORK_STRUCT_DELAYED, which\nis set while a work item in on the delayed list and making\ntry_to_grab_pending() decrement nr_active iff the work item is\ncurrently active.\n\nThe addition of the flag enlarges cwq alignment to 256 bytes which is\ngetting a bit too large.  It\u0027s scheduled to be reduced back to 128\nbytes by merging WORK_STRUCT_PENDING and WORK_STRUCT_CWQ in the next\ndevel cycle.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\n"
    },
    {
      "commit": "e41e704bc4f49057fc68b643108366e6e6781aa3",
      "tree": "8cc85208970ba0c9adf533903243e28c506f23ae",
      "parents": [
        "972fa1c5316d18c8297123e08e9b6930ca34f888"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Aug 24 14:22:47 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Aug 24 18:01:32 2010 +0200"
      },
      "message": "workqueue: improve destroy_workqueue() debuggability\n\nNow that the worklist is global, having works pending after wq\ndestruction can easily lead to oops and destroy_workqueue() have\nseveral BUG_ON()s to catch these cases.  Unfortunately, BUG_ON()\ndoesn\u0027t tell much about how the work became pending after the final\nflush_workqueue().\n\nThis patch adds WQ_DYING which is set before the final flush begins.\nIf a work is requested to be queued on a dying workqueue,\nWARN_ON_ONCE() is triggered and the request is ignored.  This clearly\nindicates which caller is trying to queue a work on a dying workqueue\nand keeps the system working in most cases.\n\nLocking rule comment is updated such that the \u0027I\u0027 rule includes\nmodifying the field from destruction path.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "972fa1c5316d18c8297123e08e9b6930ca34f888",
      "tree": "b96c34cb7ac493a80d959db6b361d2e87e854e06",
      "parents": [
        "06bd6ebffae36d3b105677598c48e8bd0a10b205"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Sun Aug 22 23:19:43 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 23 11:37:49 2010 +0200"
      },
      "message": "workqueue: mark lock acquisition on worker_maybe_bind_and_lock()\n\nworker_maybe_bind_and_lock() actually grabs gcwq-\u003elock but was missing proper\nannotation. Add it. So this patch will remove following sparse warnings:\n\n kernel/workqueue.c:1214:13: warning: context imbalance in \u0027worker_maybe_bind_and_lock\u0027 - wrong count at exit\n arch/x86/include/asm/irqflags.h:44:9: warning: context imbalance in \u0027worker_rebind_fn\u0027 - unexpected unlock\n kernel/workqueue.c:1991:17: warning: context imbalance in \u0027rescuer_thread\u0027 - unexpected unlock\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "06bd6ebffae36d3b105677598c48e8bd0a10b205",
      "tree": "d75a38a50378a3365bf57383297e0fe0372e916a",
      "parents": [
        "8d9df9f0844ed87541453a3ef91bfc9f487053b7"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Sun Aug 22 23:19:42 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 23 11:37:49 2010 +0200"
      },
      "message": "workqueue: annotate lock context change\n\nSome of internal functions called within gcwq-\u003elock context releases and\nregrabs the lock but were missing proper annotations. Add it.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "e36c886a0f9d624377977fa6cae309cfd7f362fa",
      "tree": "f75e7c3e50a48c671ed4dff33103f601a2204af9",
      "parents": [
        "69b26c7ad00fd5b6129400725e2ffb95134a0e1b"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Sat Aug 21 13:07:26 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 21 13:19:37 2010 -0700"
      },
      "message": "workqueue: Add basic tracepoints to track workqueue execution\n\nWith the introduction of the new unified work queue thread pools,\nwe lost one feature: It\u0027s no longer possible to know which worker\nis causing the CPU to wake out of idle. The result is that PowerTOP\nnow reports a lot of \"kworker/a:b\" instead of more readable results.\n\nThis patch adds a pair of tracepoints to the new workqueue code,\nsimilar in style to the timer/hrtimer tracepoints.\n\nWith this pair of tracepoints, the next PowerTOP can correctly\nreport which work item caused the wakeup (and how long it took):\n\nInterrupt (43)            i915      time   3.51ms    wakeups 141\nWork      ieee80211_iface_work      time   0.81ms    wakeups  29\nWork              do_dbs_timer      time   0.55ms    wakeups  24\nProcess                   Xorg      time  21.36ms    wakeups   4\nTimer    sched_rt_period_timer      time   0.01ms    wakeups   1\n\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8d9df9f0844ed87541453a3ef91bfc9f487053b7",
      "tree": "b9779092c34a47de0cb268f4a631bc1e0024a01a",
      "parents": [
        "da5cabf80e2433131bf0ed8993abc0f7ea618c73"
      ],
      "author": {
        "name": "Xiaotian Feng",
        "email": "dfeng@redhat.com",
        "time": "Mon Aug 16 09:54:28 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 16 09:55:01 2010 +0200"
      },
      "message": "workqueue: free rescuer on destroy_workqueue\n\nwq-\u003erescuer is not freed when wq is destroyed, leads a memory leak\nthen. This patch also remove a redundant line.\n\nSigned-off-by: Xiaotian Feng \u003cdfeng@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "f6500947a9cbb81cfa07ff344f16955d9c6ebe61",
      "tree": "6544ae45f39370fd35cb44076dc4628bd852bc19",
      "parents": [
        "38f51568005873a241a8ae6bf28c9ddd3f6a11ed"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 09 11:50:34 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 09 11:50:34 2010 +0200"
      },
      "message": "workqueue: workqueue_cpu_callback() should be cpu_notifier instead of hotcpu_notifier\n\nCommit 6ee0578b (workqueue: mark init_workqueues as early_initcall)\nmade workqueue SMP initialization depend on workqueue_cpu_callback(),\nwhich however was registered as hotcpu_notifier() and didn\u0027t get\ncalled if CONFIG_HOTPLUG_CPU is not set.  This made gcwqs on non-boot\nCPUs not create their initial workers leading to boot failures.  Fix\nit by making it a cpu_notifier.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-and-bisected-by: walt \u003cw41ter@gmail.com\u003e\nTested-by: Markus Trippelsdorf \u003cmarkus@trippelsdorf.de\u003e\n"
    },
    {
      "commit": "38f51568005873a241a8ae6bf28c9ddd3f6a11ed",
      "tree": "88adaff7c44514bf3bc2610473d4b7fc266178c6",
      "parents": [
        "2d53056973079e6c2ffc0d7ae3afbdd3d4f18ae3"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Sun Aug 08 14:24:09 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Aug 08 14:24:09 2010 +0200"
      },
      "message": "workqueue: add missing __percpu markup in kernel/workqueue.c\n\nworks in schecule_on_each_cpu() is a percpu pointer but was missing\n__percpu markup.  Add it.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "3b7433b8a8a83c87972065b1852b7dcae691e464",
      "tree": "93fa2c003f8baef5ab0733b53bac77961ed5240c",
      "parents": [
        "4a386c3e177ca2fbc70c9283d0b46537844763a0",
        "6ee0578b4daaea01c96b172c6aacca43fd9807a6"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 07 12:42:58 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 07 12:42:58 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (55 commits)\n  workqueue: mark init_workqueues() as early_initcall()\n  workqueue: explain for_each_*cwq_cpu() iterators\n  fscache: fix build on !CONFIG_SYSCTL\n  slow-work: kill it\n  gfs2: use workqueue instead of slow-work\n  drm: use workqueue instead of slow-work\n  cifs: use workqueue instead of slow-work\n  fscache: drop references to slow-work\n  fscache: convert operation to use workqueue instead of slow-work\n  fscache: convert object to use workqueue instead of slow-work\n  workqueue: fix how cpu number is stored in work-\u003edata\n  workqueue: fix mayday_mask handling on UP\n  workqueue: fix build problem on !CONFIG_SMP\n  workqueue: fix locking in retry path of maybe_create_worker()\n  async: use workqueue for worker pool\n  workqueue: remove WQ_SINGLE_CPU and use WQ_UNBOUND instead\n  workqueue: implement unbound workqueue\n  workqueue: prepare for WQ_UNBOUND implementation\n  libata: take advantage of cmwq and remove concurrency limitations\n  workqueue: fix worker management invocation without pending works\n  ...\n\nFixed up conflicts in fs/cifs/* as per Tejun. Other trivial conflicts in\ninclude/linux/workqueue.h, kernel/trace/Kconfig and kernel/workqueue.c\n"
    },
    {
      "commit": "6ee0578b4daaea01c96b172c6aacca43fd9807a6",
      "tree": "bb82bb4e2a95704477da6c527b23af59c8c2a041",
      "parents": [
        "098849516dd522a343e659740c8f1394a5b7fa69"
      ],
      "author": {
        "name": "Suresh Siddha",
        "email": "suresh.b.siddha@intel.com",
        "time": "Fri Jul 30 14:57:37 2010 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Aug 01 13:05:29 2010 +0200"
      },
      "message": "workqueue: mark init_workqueues() as early_initcall()\n\nMark init_workqueues() as early_initcall() and thus it will be initialized\nbefore smp bringup. init_workqueues() registers for the hotcpu notifier\nand thus it should cope with the processors that are brought online after\nthe workqueues are initialized.\n\nx86 smp bringup code uses workqueues and uses a workaround for the\ncold boot process (as the workqueues are initialized post smp_init()).\nMarking init_workqueues() as early_initcall() will pave the way for\ncleaning up this code.\n\nSigned-off-by: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n"
    },
    {
      "commit": "098849516dd522a343e659740c8f1394a5b7fa69",
      "tree": "46e902aabf3734c68173e959735ee75760b9f911",
      "parents": [
        "40f2b6ffe525e975203c1621d4d4abaa7689b674"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Aug 01 11:50:12 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Aug 01 11:50:12 2010 +0200"
      },
      "message": "workqueue: explain for_each_*cwq_cpu() iterators\n\nfor_each_*cwq_cpu() are similar to regular CPU iterators except that\nit also considers the pseudo CPU number used for unbound workqueues.\nExplain them.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e120153ddf8620fd0a194d301e9c5a8b28483bb5",
      "tree": "953ef1a61ca29d0486a6c8c3bb72dd8bbc080419",
      "parents": [
        "f2e005aaff4878a8ea93d5fb033a21389b72579a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jul 22 14:14:25 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jul 22 22:39:22 2010 +0200"
      },
      "message": "workqueue: fix how cpu number is stored in work-\u003edata\n\nOnce a work starts execution, its data contains the cpu number it was\non instead of pointing to cwq.  This is added by commit 7a22ad75\n(workqueue: carry cpu number in work data once execution starts) to\nreliably determine the work was last on even if the workqueue itself\nwas destroyed inbetween.\n\nWhether data points to a cwq or contains a cpu number was\ndistinguished by comparing the value against PAGE_OFFSET.  The\nassumption was that a cpu number should be below PAGE_OFFSET while a\npointer to cwq should be above it.  However, on architectures which\nuse separate address spaces for user and kernel spaces, this doesn\u0027t\nhold as PAGE_OFFSET is zero.\n\nFix it by using an explicit flag, WORK_STRUCT_CWQ, to mark what the\ndata field contains.  If the flag is set, it\u0027s pointing to a cwq;\notherwise, it contains a cpu number.\n\nReported on s390 and microblaze during linux-next testing.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Sachin Sant \u003csachinp@in.ibm.com\u003e\nReported-by: Michal Simek \u003cmichal.simek@petalogix.com\u003e\nReported-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nTested-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nTested-by: Michal Simek \u003cmonstr@monstr.eu\u003e\n"
    },
    {
      "commit": "f2e005aaff4878a8ea93d5fb033a21389b72579a",
      "tree": "13929e2e6010d10ec84dfd43e2cd063002daecca",
      "parents": [
        "931ac77ef65d2d90ee1def63d2041402ec7c53ab"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jul 20 15:59:09 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jul 20 15:59:09 2010 +0200"
      },
      "message": "workqueue: fix mayday_mask handling on UP\n\nAll cpumasks are assumed to have cpu 0 permanently set on UP, so it\ncan\u0027t be used to signify whether there\u0027s something to be done for the\nCPU.  workqueue was using cpumask to track which CPU requested rescuer\nassistance and this led rescuer thread to think there always are\npending mayday requests on UP, which resulted in infinite busy loops.\n\nThis patch fixes the problem by introducing mayday_mask_t and\nassociated helpers which wrap cpumask on SMP and emulates its behavior\nusing bitops and unsigned long on UP.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "931ac77ef65d2d90ee1def63d2041402ec7c53ab",
      "tree": "370153ff6e85c9e8e0d00f1811d214dbcba6b00a",
      "parents": [
        "9f9c23644b07e7a51f6f39064e61c150be712932"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jul 20 11:07:48 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jul 20 11:15:14 2010 +0200"
      },
      "message": "workqueue: fix build problem on !CONFIG_SMP\n\nCommit f3421797 (workqueue: implement unbound workqueue) incorrectly\ntested CONFIG_SMP as part of a C expression in alloc/free_cwqs().  As\nCONFIG_SMP is not defined in UP, this breaks build.  Fix it by using\n\nFound during linux-next build test.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\n"
    },
    {
      "commit": "9f9c23644b07e7a51f6f39064e61c150be712932",
      "tree": "831849ae8bfd602b3333e8ea8e3beb2cf0dee348",
      "parents": [
        "083b804c4d3e1e3d0eace56bdbc0f674946d2847"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jul 14 11:31:20 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jul 14 11:31:20 2010 +0200"
      },
      "message": "workqueue: fix locking in retry path of maybe_create_worker()\n\nmaybe_create_worker() mismanaged locking when worker creation fails\nand it has to retry.  Fix locking and simplify lock manipulation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Yong Zhang \u003cyong.zhang@windriver.com\u003e\n"
    },
    {
      "commit": "c7fc77f78f16d138ca997ce096a62f46e2e9420a",
      "tree": "0478e5dde66f6ff86d4baa0fe541748e1a6f1ed2",
      "parents": [
        "f34217977d717385a3e9fd7018ac39fade3964c0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 11:00:08 2010 +0200"
      },
      "message": "workqueue: remove WQ_SINGLE_CPU and use WQ_UNBOUND instead\n\nWQ_SINGLE_CPU combined with @max_active of 1 is used to achieve full\nordering among works queued to a workqueue.  The same can be achieved\nusing WQ_UNBOUND as unbound workqueues always use the gcwq for\nWORK_CPU_UNBOUND.  As @max_active is always one and benefits from cpu\nlocality isn\u0027t accessible anyway, serving them with unbound workqueues\nshould be fine.\n\nDrop WQ_SINGLE_CPU support and use WQ_UNBOUND instead.  Note that most\nsingle thread workqueue users will be converted to use multithread or\nnon-reentrant instead and only the ones which require strict ordering\nwill keep using WQ_UNBOUND + @max_active of 1.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "f34217977d717385a3e9fd7018ac39fade3964c0",
      "tree": "7e05645e911eea15b33a368b91ac82ae12884e6d",
      "parents": [
        "bdbc5dd7de5d07d6c9d3536e598956165a031d4c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 11:00:02 2010 +0200"
      },
      "message": "workqueue: implement unbound workqueue\n\nThis patch implements unbound workqueue which can be specified with\nWQ_UNBOUND flag on creation.  An unbound workqueue has the following\nproperties.\n\n* It uses a dedicated gcwq with a pseudo CPU number WORK_CPU_UNBOUND.\n  This gcwq is always online and disassociated.\n\n* Workers are not bound to any CPU and not concurrency managed.  Works\n  are dispatched to workers as soon as possible and the only applied\n  limitation is @max_active.  IOW, all unbound workqeueues are\n  implicitly high priority.\n\nUnbound workqueues can be used as simple execution context provider.\nContexts unbound to any cpu are served as soon as possible.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\n"
    },
    {
      "commit": "bdbc5dd7de5d07d6c9d3536e598956165a031d4c",
      "tree": "1f0f263126c2fc2e07a032df1e9ad3fecb534c9a",
      "parents": [
        "ad72cf9885c536e3adae03f8337557ac9dd1e4bb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:59:57 2010 +0200"
      },
      "message": "workqueue: prepare for WQ_UNBOUND implementation\n\nIn preparation of WQ_UNBOUND addition, make the following changes.\n\n* Add WORK_CPU_* constants for pseudo cpu id numbers used (currently\n  only WORK_CPU_NONE) and use them instead of NR_CPUS.  This is to\n  allow another pseudo cpu id for unbound cpu.\n\n* Reorder WQ_* flags.\n\n* Make workqueue_struct-\u003ecpu_wq a union which contains a percpu\n  pointer, regular pointer and an unsigned long value and use\n  kzalloc/kfree() in UP allocation path.  This will be used to\n  implement unbound workqueues which will use only one cwq on SMPs.\n\n* Move alloc_cwqs() allocation after initialization of wq fields, so\n  that alloc_cwqs() has access to wq-\u003eflags.\n\n* Trivial relocation of wq local variables in freeze functions.\n\nThese changes don\u0027t cause any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d313dd85ad846bc768d58e9ceb28588f917f4c9a",
      "tree": "b61b92f270b9fedc577e8196d605c93d695052d4",
      "parents": [
        "a1e453d2799760ecf2e09ecd45b80edbe7ff540e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "message": "workqueue: fix worker management invocation without pending works\n\nWhen there\u0027s no pending work to do, worker_thread() goes back to sleep\nafter waking up without checking whether worker management is\nnecessary.  This means that idle worker exit requests can be ignored\nif the gcwq stays empty.\n\nFix it by making worker_thread() always check whether worker\nmanagement is necessary before going to sleep.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "a1e453d2799760ecf2e09ecd45b80edbe7ff540e",
      "tree": "d2f9383f2703c762051a8379872244b1a4ebda2e",
      "parents": [
        "4ce48b37bfedc2bc11e61eae76784887e88b922c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "message": "workqueue: fix incorrect cpu number BUG_ON() in get_work_gcwq()\n\nget_work_gcwq() was incorrectly triggering BUG_ON() if cpu number is\nequal to or higher than num_possible_cpus() instead of nr_cpu_ids.\nFix it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "4ce48b37bfedc2bc11e61eae76784887e88b922c",
      "tree": "0829ba93c3bb5f586bacd11c3f21711b3de04da2",
      "parents": [
        "cb444766996395d4370bcc17ec895dd4e13ceb72"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "message": "workqueue: fix race condition in flush_workqueue()\n\nWhen one flusher is cascading to the next flusher, it first sets\nwq-\u003efirst_flusher to the next one and sets up the next flush cycle.\nIf there\u0027s nothing to do for the next cycle, it clears\nwq-\u003eflush_flusher and proceeds to the one after that.\n\nIf the woken up flusher checks wq-\u003efirst_flusher before it gets\ncleared, it will incorrectly assume the role of the first flusher,\nwhich triggers BUG_ON() sanity check.\n\nFix it by checking wq-\u003efirst_flusher again after grabbing the mutex.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "cb444766996395d4370bcc17ec895dd4e13ceb72",
      "tree": "e682bd69dafadae8b27861888ec0802107d5a93a",
      "parents": [
        "fb0e7beb5c1b6fb4da786ba709d7138373d5fb22"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:50 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:50 2010 +0200"
      },
      "message": "workqueue: use worker_set/clr_flags() only from worker itself\n\nworker_set/clr_flags() assume that if none of NOT_RUNNING flags is set\nthe worker must be contributing to nr_running which is only true if\nthe worker is actually running.\n\nAs when called from self, it is guaranteed that the worker is running,\nthose functions can be safely used from the worker itself and they\naren\u0027t necessary from other places anyway.  Make the following changes\nto fix the bug.\n\n* Make worker_set/clr_flags() whine if not called from self.\n\n* Convert all places which called those functions from other tasks to\n  manipulate flags directly.\n\n* Make trustee_thread() directly clear nr_running after setting\n  WORKER_ROGUE on all workers.  This is the only place where\n  nr_running manipulation is necessary outside of workers themselves.\n\n* While at it, add sanity check for nr_running in worker_enter_idle().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "fb0e7beb5c1b6fb4da786ba709d7138373d5fb22",
      "tree": "e222b2238ed691ced6eaeb47733f7e4c2b9a3c37",
      "parents": [
        "649027d73a6309ac34dc2886362e662bd73456dc"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:15 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:15 2010 +0200"
      },
      "message": "workqueue: implement cpu intensive workqueue\n\nThis patch implements cpu intensive workqueue which can be specified\nwith WQ_CPU_INTENSIVE flag on creation.  Works queued to a cpu\nintensive workqueue don\u0027t participate in concurrency management.  IOW,\nit doesn\u0027t contribute to gcwq-\u003enr_running and thus doesn\u0027t delay\nexcution of other works.\n\nNote that although cpu intensive works won\u0027t delay other works, they\ncan be delayed by other works.  Combine with WQ_HIGHPRI to avoid being\ndelayed by other works too.\n\nAs the name suggests this is useful when using workqueue for cpu\nintensive works.  Workers executing cpu intensive works are not\nconsidered for workqueue concurrency management and left for the\nscheduler to manage.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n"
    },
    {
      "commit": "649027d73a6309ac34dc2886362e662bd73456dc",
      "tree": "4faf07773683ff5ec2b120d9070dbbb590199057",
      "parents": [
        "dcd989cb73ab0f7b722d64ab6516f101d9f43f88"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "message": "workqueue: implement high priority workqueue\n\nThis patch implements high priority workqueue which can be specified\nwith WQ_HIGHPRI flag on creation.  A high priority workqueue has the\nfollowing properties.\n\n* A work queued to it is queued at the head of the worklist of the\n  respective gcwq after other highpri works, while normal works are\n  always appended at the end.\n\n* As long as there are highpri works on gcwq-\u003eworklist,\n  [__]need_more_worker() remains %true and process_one_work() wakes up\n  another worker before it start executing a work.\n\nThe above two properties guarantee that works queued to high priority\nworkqueues are dispatched to workers and start execution as soon as\npossible regardless of the state of other works.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dcd989cb73ab0f7b722d64ab6516f101d9f43f88",
      "tree": "8c2f14e708367cb67dd9d29f2da0f7e5f454cf31",
      "parents": [
        "d320c03830b17af64e4547075003b1eeb274bc6c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "message": "workqueue: implement several utility APIs\n\nImplement the following utility APIs.\n\n workqueue_set_max_active()\t: adjust max_active of a wq\n workqueue_congested()\t\t: test whether a wq is contested\n work_cpu()\t\t\t: determine the last / current cpu of a work\n work_busy()\t\t\t: query whether a work is busy\n\n* Anton Blanchard fixed missing ret initialization in work_busy().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Anton Blanchard \u003canton@samba.org\u003e\n"
    },
    {
      "commit": "d320c03830b17af64e4547075003b1eeb274bc6c",
      "tree": "9917a69dc2efa6f37c54097c4651408faf4b343b",
      "parents": [
        "b71ab8c2025caef8db719aa41af0ed735dc543cd"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "message": "workqueue: s/__create_workqueue()/alloc_workqueue()/, and add system workqueues\n\nThis patch makes changes to make new workqueue features available to\nits users.\n\n* Now that workqueue is more featureful, there should be a public\n  workqueue creation function which takes paramters to control them.\n  Rename __create_workqueue() to alloc_workqueue() and make 0\n  max_active mean WQ_DFL_ACTIVE.  In the long run, all\n  create_workqueue_*() will be converted over to alloc_workqueue().\n\n* To further unify access interface, rename keventd_wq to system_wq\n  and export it.\n\n* Add system_long_wq and system_nrt_wq.  The former is to host long\n  running works separately (so that flush_scheduled_work() dosen\u0027t\n  take so long) and the latter guarantees any queued work item is\n  never executed in parallel by multiple CPUs.  These will be used by\n  future patches to update workqueue users.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "b71ab8c2025caef8db719aa41af0ed735dc543cd",
      "tree": "8cc2c6164acf5fe82e8d8d05924590cb80fe088d",
      "parents": [
        "e22bee782b3b00bd4534ae9b1c5fb2e8e6573c5c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "message": "workqueue: increase max_active of keventd and kill current_is_keventd()\n\nDefine WQ_MAX_ACTIVE and create keventd with max_active set to half of\nit which means that keventd now can process upto WQ_MAX_ACTIVE / 2 - 1\nworks concurrently.  Unless some combination can result in dependency\nloop longer than max_active, deadlock won\u0027t happen and thus it\u0027s\nunnecessary to check whether current_is_keventd() before trying to\nschedule a work.  Kill current_is_keventd().\n\n(Lockdep annotations are broken.  We need lock_map_acquire_read_norecurse())\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Tony Luck \u003ctony.luck@intel.com\u003e\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "e22bee782b3b00bd4534ae9b1c5fb2e8e6573c5c",
      "tree": "9854d22294699d9ec27e28f70c05f479e5640abd",
      "parents": [
        "d302f0178223802a1e496ba90c66193b7721c9c1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "message": "workqueue: implement concurrency managed dynamic worker pool\n\nInstead of creating a worker for each cwq and putting it into the\nshared pool, manage per-cpu workers dynamically.\n\nWorks aren\u0027t supposed to be cpu cycle hogs and maintaining just enough\nconcurrency to prevent work processing from stalling due to lack of\nprocessing context is optimal.  gcwq keeps the number of concurrent\nactive workers to minimum but no less.  As long as there\u0027s one or more\nrunning workers on the cpu, no new worker is scheduled so that works\ncan be processed in batch as much as possible but when the last\nrunning worker blocks, gcwq immediately schedules new worker so that\nthe cpu doesn\u0027t sit idle while there are works to be processed.\n\ngcwq always keeps at least single idle worker around.  When a new\nworker is necessary and the worker is the last idle one, the worker\nassumes the role of \"manager\" and manages the worker pool -\nie. creates another worker.  Forward-progress is guaranteed by having\ndedicated rescue workers for workqueues which may be necessary while\ncreating a new worker.  When the manager is having problem creating a\nnew worker, mayday timer activates and rescue workers are summoned to\nthe cpu and execute works which might be necessary to create new\nworkers.\n\nTrustee is expanded to serve the role of manager while a CPU is being\ntaken down and stays down.  As no new works are supposed to be queued\non a dead cpu, it just needs to drain all the existing ones.  Trustee\ncontinues to try to create new workers and summon rescuers as long as\nthere are pending works.  If the CPU is brought back up while the\ntrustee is still trying to drain the gcwq from the previous offlining,\nthe trustee will kill all idles ones and tell workers which are still\nbusy to rebind to the cpu, and pass control over to gcwq which assumes\nthe manager role as necessary.\n\nConcurrency managed worker pool reduces the number of workers\ndrastically.  Only workers which are necessary to keep the processing\ngoing are created and kept.  Also, it reduces cache footprint by\navoiding unnecessarily switching contexts between different workers.\n\nPlease note that this patch does not increase max_active of any\nworkqueue.  All workqueues can still only process one work per cpu.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d302f0178223802a1e496ba90c66193b7721c9c1",
      "tree": "d9282d8a6a69b6b5b1db9fbe97301f6338af8752",
      "parents": [
        "7e11629d0efec829cbf62366143ba1081944a70e"
      ],
      "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: implement worker_{set|clr}_flags()\n\nImplement worker_{set|clr}_flags() to manipulate worker flags.  These\nare currently simple wrappers but logics to track the current worker\nstate and the current level of concurrency will be added.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "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"
    },
    {
      "commit": "18aa9effad4adb2c1efe123af4eb24fec9f59b30",
      "tree": "76975b37ae0ef1ebf460aaab68359ed7a12fe37a",
      "parents": [
        "7a22ad757ec75186ad43a5b4670fa7423ee8f480"
      ],
      "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: implement WQ_NON_REENTRANT\n\nWith gcwq managing all the workers and work-\u003edata pointing to the last\ngcwq it was on, non-reentrance can be easily implemented by checking\nwhether the work is still running on the previous gcwq on queueing.\nImplement it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "7a22ad757ec75186ad43a5b4670fa7423ee8f480",
      "tree": "698807765421a46dcb5e2daa609336a61d1cdea5",
      "parents": [
        "8cca0eea3964b72b14e8c3f88e3a40bef7b9113e"
      ],
      "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: carry cpu number in work data once execution starts\n\nTo implement non-reentrant workqueue, the last gcwq a work was\nexecuted on must be reliably obtainable as long as the work structure\nis valid even if the previous workqueue has been destroyed.\n\nTo achieve this, work-\u003edata will be overloaded to carry the last cpu\nnumber once execution starts so that the previous gcwq can be located\nreliably.  This means that cwq can\u0027t be obtained from work after\nexecution starts but only gcwq.\n\nImplement set_work_{cwq|cpu}(), get_work_[g]cwq() and\nclear_work_data() to set work data to the cpu number when starting\nexecution, access the overloaded work data and clear it after\ncancellation.\n\nqueue_delayed_work_on() is updated to preserve the last cpu while\nin-flight in timer and other callers which depended on getting cwq\nfrom work after execution starts are converted to depend on gcwq\ninstead.\n\n* Anton Blanchard fixed compile error on powerpc due to missing\n  linux/threads.h include.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Anton Blanchard \u003canton@samba.org\u003e\n"
    },
    {
      "commit": "8cca0eea3964b72b14e8c3f88e3a40bef7b9113e",
      "tree": "49a8e4496ad0ffa99386f6566bc9ffc0c0cc39b2",
      "parents": [
        "502ca9d819792e7d79b6e002afe9094c641fe410"
      ],
      "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: add find_worker_executing_work() and track current_cwq\n\nNow that all the workers are tracked by gcwq, we can find which worker\nis executing a work from gcwq.  Implement find_worker_executing_work()\nand make worker track its current_cwq so that we can find things the\nother way around.  This will be used to implement non-reentrant wqs.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "502ca9d819792e7d79b6e002afe9094c641fe410",
      "tree": "5f06a8845643f1007ce9807636cde4057f8761a9",
      "parents": [
        "db7bccf45cb87522096b8f43144e31ca605a9f24"
      ],
      "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: make single thread workqueue shared worker pool friendly\n\nReimplement st (single thread) workqueue so that it\u0027s friendly to\nshared worker pool.  It was originally implemented by confining st\nworkqueues to use cwq of a fixed cpu and always having a worker for\nthe cpu.  This implementation isn\u0027t very friendly to shared worker\npool and suboptimal in that it ends up crossing cpu boundaries often.\n\nReimplement st workqueue using dynamic single cpu binding and\ncwq-\u003elimit.  WQ_SINGLE_THREAD is replaced with WQ_SINGLE_CPU.  In a\nsingle cpu workqueue, at most single cwq is bound to the wq at any\ngiven time.  Arbitration is done using atomic accesses to\nwq-\u003esingle_cpu when queueing a work.  Once bound, the binding stays\ntill the workqueue is drained.\n\nNote that the binding is never broken while a workqueue is frozen.\nThis is because idle cwqs may have works waiting in delayed_works\nqueue while frozen.  On thaw, the cwq is restarted if there are any\ndelayed works or unbound otherwise.\n\nWhen combined with max_active limit of 1, single cpu workqueue has\nexactly the same execution properties as the original single thread\nworkqueue while allowing sharing of per-cpu workers.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "db7bccf45cb87522096b8f43144e31ca605a9f24",
      "tree": "d16cc764243fb6feaa4c9dea5398e139c8012124",
      "parents": [
        "c8e55f360210c1bc49bea5d62bc3939b7ee13483"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "message": "workqueue: reimplement CPU hotplugging support using trustee\n\nReimplement CPU hotplugging support using trustee thread.  On CPU\ndown, a trustee thread is created and each step of CPU down is\nexecuted by the trustee and workqueue_cpu_callback() simply drives and\nwaits for trustee state transitions.\n\nCPU down operation no longer waits for works to be drained but trustee\nsticks around till all pending works have been completed.  If CPU is\nbrought back up while works are still draining,\nworkqueue_cpu_callback() tells trustee to step down and tell workers\nto rebind to the cpu.\n\nAs it\u0027s difficult to tell whether cwqs are empty if it\u0027s freezing or\nfrozen, trustee doesn\u0027t consider draining to be complete while a gcwq\nis freezing or frozen (tracked by new GCWQ_FREEZING flag).  Also,\nworkers which get unbound from their cpu are marked with WORKER_ROGUE.\n\nTrustee based implementation doesn\u0027t bring any new feature at this\npoint but it will be used to manage worker pool when dynamic shared\nworker pool is implemented.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    }
  ],
  "next": "c8e55f360210c1bc49bea5d62bc3939b7ee13483"
}
