)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "c8e55f360210c1bc49bea5d62bc3939b7ee13483",
      "tree": "c2e88d5576e5f65c036ba60c52f9518901f2a2f0",
      "parents": [
        "8b03ae3cde59af9facab7c831b4141515d5dbcc8"
      ],
      "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: implement worker states\n\nImplement worker states.  After created, a worker is STARTED.  While a\nworker isn\u0027t processing a work, it\u0027s IDLE and chained on\ngcwq-\u003eidle_list.  While processing a work, a worker is BUSY and\nchained on gcwq-\u003ebusy_hash.  Also, gcwq now counts the number of all\nworkers and idle ones.\n\nworker_thread() is restructured to reflect state transitions.\ncwq-\u003emore_work is removed and waking up a worker makes it check for\nevents.  A worker is killed by setting DIE flag while it\u0027s IDLE and\nwaking it up.\n\nThis gives gcwq better visibility of what\u0027s going on and allows it to\nfind out whether a work is executing quickly which is necessary to\nhave multiple workers processing the same cwq.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "8b03ae3cde59af9facab7c831b4141515d5dbcc8",
      "tree": "900829ac17fa941e9819208489081e4de1218ac4",
      "parents": [
        "a0a1a5fd4fb15ec61117c759fe9f5c16c53d9e9c"
      ],
      "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: introduce global cwq and unify cwq locks\n\nThere is one gcwq (global cwq) per each cpu and all cwqs on an cpu\npoint to it.  A gcwq contains a lock to be used by all cwqs on the cpu\nand an ida to give IDs to workers belonging to the cpu.\n\nThis patch introduces gcwq, moves worker_ida into gcwq and make all\ncwqs on the same cpu use the cpu\u0027s gcwq-\u003elock instead of separate\nlocks.  gcwq-\u003eida is now protected by gcwq-\u003elock too.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "a0a1a5fd4fb15ec61117c759fe9f5c16c53d9e9c",
      "tree": "6df8eddcaeff6cde892c8cae6bdfa7653805e144",
      "parents": [
        "1e19ffc63dbbaea7a7d1c63d99c38d3e5a4c7edf"
      ],
      "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 workqueue freeze using max_active\n\nCurrently, workqueue freezing is implemented by marking the worker\nfreezeable and calling try_to_freeze() from dispatch loop.\nReimplement it using cwq-\u003elimit so that the workqueue is frozen\ninstead of the worker.\n\n* workqueue_struct-\u003esaved_max_active is added which stores the\n  specified max_active on initialization.\n\n* On freeze, all cwq-\u003emax_active\u0027s are quenched to zero.  Freezing is\n  complete when nr_active on all cwqs reach zero.\n\n* On thaw, all cwq-\u003emax_active\u0027s are restored to wq-\u003esaved_max_active\n  and the worklist is repopulated.\n\nThis new implementation allows having single shared pool of workers\nper cpu.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "1e19ffc63dbbaea7a7d1c63d99c38d3e5a4c7edf",
      "tree": "357690d6017682a4a21824f7d3f34a83406a136d",
      "parents": [
        "affee4b294a0fc97d67c8a77dc080c4dd262a79e"
      ],
      "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: implement per-cwq active work limit\n\nAdd cwq-\u003enr_active, cwq-\u003emax_active and cwq-\u003edelayed_work.  nr_active\ncounts the number of active works per cwq.  A work is active if it\u0027s\nflushable (colored) and is on cwq\u0027s worklist.  If nr_active reaches\nmax_active, new works are queued on cwq-\u003edelayed_work and activated\nlater as works on the cwq complete and decrement nr_active.\n\ncwq-\u003emax_active can be specified via the new @max_active parameter to\n__create_workqueue() and is set to 1 for all workqueues for now.  As\neach cwq has only single worker now, this double queueing doesn\u0027t\ncause any behavior difference visible to its users.\n\nThis will be used to reimplement freeze/thaw and implement shared\nworker pool.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "affee4b294a0fc97d67c8a77dc080c4dd262a79e",
      "tree": "5b3fd79640ad7940e0abbed193a192d3919f259d",
      "parents": [
        "c34056a3fdde777c079cc8a70785c2602f2586cb"
      ],
      "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 work flushing using linked works\n\nA work is linked to the next one by having WORK_STRUCT_LINKED bit set\nand these links can be chained.  When a linked work is dispatched to a\nworker, all linked works are dispatched to the worker\u0027s newly added\n-\u003escheduled queue and processed back-to-back.\n\nCurrently, as there\u0027s only single worker per cwq, having linked works\ndoesn\u0027t make any visible behavior difference.  This change is to\nprepare for multiple shared workers per cpu.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "c34056a3fdde777c079cc8a70785c2602f2586cb",
      "tree": "583cc13af000d1c085b1f951f8975eee78cea54c",
      "parents": [
        "73f53c4aa732eced5fcb1844d3d452c30905f20f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "message": "workqueue: introduce worker\n\nSeparate out worker thread related information to struct worker from\nstruct cpu_workqueue_struct and implement helper functions to deal\nwith the new struct worker.  The only change which is visible outside\nis that now workqueue worker are all named \"kworker/CPUID:WORKERID\"\nwhere WORKERID is allocated from per-cpu ida.\n\nThis is in preparation of concurrency managed workqueue where shared\nmultiple workers would be available per cpu.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "73f53c4aa732eced5fcb1844d3d452c30905f20f",
      "tree": "6185ebab8337d33de9ca9c3d19fc5217bc4ee6bc",
      "parents": [
        "0f900049cbe2767d47c2a62b54f0e822e1d66840"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "message": "workqueue: reimplement workqueue flushing using color coded works\n\nReimplement workqueue flushing using color coded works.  wq has the\ncurrent work color which is painted on the works being issued via\ncwqs.  Flushing a workqueue is achieved by advancing the current work\ncolors of cwqs and waiting for all the works which have any of the\nprevious colors to drain.\n\nCurrently there are 16 possible colors, one is reserved for no color\nand 15 colors are useable allowing 14 concurrent flushes.  When color\nspace gets full, flush attempts are batched up and processed together\nwhen color frees up, so even with many concurrent flushers, the new\nimplementation won\u0027t build up huge queue of flushers which has to be\nprocessed one after another.\n\nOnly works which are queued via __queue_work() are colored.  Works\nwhich are directly put on queue using insert_work() use NO_COLOR and\ndon\u0027t participate in workqueue flushing.  Currently only works used\nfor work-specific flush fall in this category.\n\nThis new implementation leaves only cleanup_workqueue_thread() as the\nuser of flush_cpu_workqueue().  Just make its users use\nflush_workqueue() and kthread_stop() directly and kill\ncleanup_workqueue_thread().  As workqueue flushing doesn\u0027t use barrier\nrequest anymore, the comment describing the complex synchronization\naround it in cleanup_workqueue_thread() is removed together with the\nfunction.\n\nThis new implementation is to allow having and sharing multiple\nworkers per cpu.\n\nPlease note that one more bit is reserved for a future work flag by\nthis patch.  This is to avoid shifting bits and updating comments\nlater.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "0f900049cbe2767d47c2a62b54f0e822e1d66840",
      "tree": "b7d2ce3e00ef49c038d0641a860b98b4c24fb203",
      "parents": [
        "1537663f5763892cacf1409ac0efef1b4f332d1e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "message": "workqueue: update cwq alignement\n\nwork-\u003edata field is used for two purposes.  It points to cwq it\u0027s\nqueued on and the lower bits are used for flags.  Currently, two bits\nare reserved which is always safe as 4 byte alignment is guaranteed on\nevery architecture.  However, future changes will need more flag bits.\n\nOn SMP, the percpu allocator is capable of honoring larger alignment\n(there are other users which depend on it) and larger alignment works\njust fine.  On UP, percpu allocator is a thin wrapper around\nkzalloc/kfree() and don\u0027t honor alignment request.\n\nThis patch introduces WORK_STRUCT_FLAG_BITS and implements\nalloc/free_cwqs() which guarantees max(1 \u003c\u003c WORK_STRUCT_FLAG_BITS,\n__alignof__(unsigned long long) alignment both on SMP and UP.  On SMP,\nsimply wrapping percpu allocator is enough.  On UP, extra space is\nallocated so that cwq can be aligned and the original pointer can be\nstored after it which is used in the free path.\n\n* Alignment problem on UP is reported by Michal Simek.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nReported-by: Michal Simek \u003cmichal.simek@petalogix.com\u003e\n"
    },
    {
      "commit": "1537663f5763892cacf1409ac0efef1b4f332d1e",
      "tree": "b2fe110d52315438c71b16f14d8a1b043b91deb4",
      "parents": [
        "64166699752006f1a23a9cf7c96ae36654ccfc2c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "message": "workqueue: kill cpu_populated_map\n\nWorker management is about to be overhauled.  Simplify things by\nremoving cpu_populated_map, creating workers for all possible cpus and\nmaking single threaded workqueues behave more like multi threaded\nones.\n\nAfter this patch, all cwqs are always initialized, all workqueues are\nlinked on the workqueues list and workers for all possibles cpus\nalways exist.  This also makes CPU hotplug support simpler - checking\n-\u003ecpus_allowed before processing works in worker_thread() and flushing\ncwqs on CPU_POST_DEAD are enough.\n\nWhile at it, make get_cwq() always return the cwq for the specified\ncpu, add target_cwq() for cases where single thread distinction is\nnecessary and drop all direct usage of per_cpu_ptr() on wq-\u003ecpu_wq.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "64166699752006f1a23a9cf7c96ae36654ccfc2c",
      "tree": "ef4d825be9526409102bff79ca8bb1dd60aa2443",
      "parents": [
        "a62428c0ae54a39e411251e836c3fe3dc11a5f5f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "message": "workqueue: temporarily remove workqueue tracing\n\nStrip tracing code from workqueue and remove workqueue tracing.  This\nis temporary measure till concurrency managed workqueue is complete.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\n"
    },
    {
      "commit": "a62428c0ae54a39e411251e836c3fe3dc11a5f5f",
      "tree": "364b1f65ac8c54d852a7863eebdf2a8d8dbde6f9",
      "parents": [
        "22df02bb3fab24af97bff4c69cc6fd8529fc66fe"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "message": "workqueue: separate out process_one_work()\n\nSeparate out process_one_work() out of run_workqueue().  This patch\ndoesn\u0027t cause any behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "22df02bb3fab24af97bff4c69cc6fd8529fc66fe",
      "tree": "125b00589e5abe4dc941a1dba467cd50563ad195",
      "parents": [
        "97e37d7b9e65a6ac939f796f91081135b7a08acc"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "message": "workqueue: define masks for work flags and conditionalize STATIC flags\n\nWork flags are about to see more traditional mask handling.  Define\nWORK_STRUCT_*_BIT as the bit position constant and redefine\nWORK_STRUCT_* as bit masks.  Also, make WORK_STRUCT_STATIC_* flags\nconditional\n\nWhile at it, re-define these constants as enums and use\nWORK_STRUCT_STATIC instead of hard-coding 2 in\nWORK_DATA_STATIC_INIT().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "97e37d7b9e65a6ac939f796f91081135b7a08acc",
      "tree": "1125644ee13ecf0825688502aa4a7495008cc88e",
      "parents": [
        "4690c4ab56c71919893ca25252f2dd65b58188c7"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "message": "workqueue: merge feature parameters into flags\n\nCurrently, __create_workqueue_key() takes @singlethread and\n@freezeable paramters and store them separately in workqueue_struct.\nMerge them into a single flags parameter and field and use\nWQ_FREEZEABLE and WQ_SINGLE_THREAD.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "4690c4ab56c71919893ca25252f2dd65b58188c7",
      "tree": "dcdb5b7dd2104db2dc8babe66064dd6f5022247f",
      "parents": [
        "c790bce0481857412c964c5e9d46d56e41c4b051"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "message": "workqueue: misc/cosmetic updates\n\nMake the following updates in preparation of concurrency managed\nworkqueue.  None of these changes causes any visible behavior\ndifference.\n\n* Add comments and adjust indentations to data structures and several\n  functions.\n\n* Rename wq_per_cpu() to get_cwq() and swap the position of two\n  parameters for consistency.  Convert a direct per_cpu_ptr() access\n  to wq-\u003ecpu_wq to get_cwq().\n\n* Add work_static() and Update set_wq_data() such that it sets the\n  flags part to WORK_STRUCT_PENDING | WORK_STRUCT_STATIC if static |\n  @extra_flags.\n\n* Move santiy check on work-\u003eentry emptiness from queue_work_on() to\n  __queue_work() which all queueing paths share.\n\n* Make __queue_work() take @cpu and @wq instead of @cwq.\n\n* Restructure flush_work() and __create_workqueue_key() to make them\n  easier to modify.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "c790bce0481857412c964c5e9d46d56e41c4b051",
      "tree": "82e87167b78bbf3456a53d057b1b741c250a0b76",
      "parents": [
        "8fec62b2d9d0c80b594d0d85678bfdf57a70df1b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:09 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:09 2010 +0200"
      },
      "message": "workqueue: kill RT workqueue\n\nWith stop_machine() converted to use cpu_stop, RT workqueue doesn\u0027t\nhave any user left.  Kill RT workqueue support.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "a25909a4d4a29e272f953e12595bf2f04a292dbd",
      "tree": "86b54bc29aa126eff797b98728133ea960f8bd01",
      "parents": [
        "71d1d5c722db9ae3b3f9c08ef7ddcd7759fbb1e0"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Thu May 13 12:32:28 2010 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jun 14 16:37:26 2010 -0700"
      },
      "message": "lockdep: Add an in_workqueue_context() lockdep-based test function\n\nSome recent uses of RCU make use of workqueues.  In these uses, execution\nwithin the context of a specific workqueue takes the place of the usual\nRCU read-side primitives such as rcu_read_lock(), and flushing of workqueues\ntakes the place of the usual RCU grace-period primitives.  Checking for\ncorrect use of rcu_dereference() in such cases requires a test of whether\nthe code is executing in the context of a particular workqueue.  This\ncommit adds an in_workqueue_context() function that provides this test.\nThis new function is only defined when lockdep is enabled, which allows\nit to be used as the second argument of rcu_dereference_check().\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "80b5184cc537718122e036afe7e62d202b70d077",
      "tree": "d4e2b400f0e951156d64d546fd563fa5a8ab02d3",
      "parents": [
        "ad84bb5b98bf81deae97e3bcd814675d6b4e6f72"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Wed May 26 14:43:32 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:48 2010 -0700"
      },
      "message": "kernel/: convert cpu notifier to return encapsulate errno value\n\nBy the previous modification, the cpu notifier can return encapsulate\nerrno value.  This converts the cpu notifiers for kernel/*.c\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003cpeterz@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": "4d707b9f48e2c4aa94b96f1133813b73df71fb55",
      "tree": "2e8e6c44e55bcea9ae2de200ebb3edaac81c2a88",
      "parents": [
        "eef6a7d5c2f38adadab8240fabf43730fe796482"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Apr 23 17:40:40 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 30 08:57:25 2010 +0200"
      },
      "message": "workqueue: change cancel_work_sync() to clear work-\u003edata\n\nIn short: change cancel_work_sync(work) to mark this work as \"never\nqueued\" upon return.\n\nWhen cancel_work_sync(work) succeeds, we know that this work can\u0027t be\nqueued or running, and since we own WORK_STRUCT_PENDING nobody can change\nthe bits in work-\u003edata under us. This means we can also clear the \"cwq\"\npart along with _PENDING bit lockless before return, unless the work is\nqueued nobody can assume get_wq_data() is stable even under cwq-\u003elock.\n\nThis change can speedup the subsequent cancel/flush requests, and as\nDmitry pointed out this simplifies the usage of work_struct\u0027s which\ncan be queued on different workqueues. Consider this pseudo code from\nthe input subsystem:\n\n\tstruct workqueue_struct *WQ;\n\tstruct work_struct *WORK;\n\n\tfor (;;) {\n\t\tWQ \u003d create_workqueue();\n\t\t...\n\t\tif (condition())\n\t\t\tqueue_work(WQ, WORK);\n\t\t...\n\t\tcancel_work_sync(WORK);\n\t\tdestroy_workqueue(WQ);\n\t}\n\nIf condition() returns T and then F, cancel_work_sync() will crash the\nkernel because WORK-\u003edata still points to the already destroyed workqueue.\nWith this patch the code like above becomes correct.\n\nSuggested-by: Dmitry Torokhov \u003cdmitry.torokhov@gmail.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "eef6a7d5c2f38adadab8240fabf43730fe796482",
      "tree": "4ee96327e3f7880bea51bd4e05b37193915c00ae",
      "parents": [
        "47dd5be2d6a82b8153e059a1d09eb3879d485bfd"
      ],
      "author": {
        "name": "Alan Stern",
        "email": "stern@rowland.harvard.edu",
        "time": "Fri Feb 12 17:39:21 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 30 08:57:25 2010 +0200"
      },
      "message": "workqueue: warn about flush_scheduled_work()\n\nThis patch (as1319) adds kerneldoc and a pointed warning to\nflush_scheduled_work().\n\nSigned-off-by: Alan Stern \u003cstern@rowland.harvard.edu\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "47dd5be2d6a82b8153e059a1d09eb3879d485bfd",
      "tree": "8d67407e8c3e00d303bd59bf97ecad5d08b4dd19",
      "parents": [
        "66f41d4c5c8a5deed66fdcc84509376c9a0bf9d8"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Apr 30 07:23:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 30 07:24:51 2010 +0200"
      },
      "message": "workqueue: flush_delayed_work: keep the original workqueue for re-queueing\n\nflush_delayed_work() always uses keventd_wq for re-queueing,\nbut it should use the workqueue this dwork was queued on.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d71cb81af3817193bc605de061da0499934263a6",
      "tree": "f7ff95e0cf0cdf00234be29ba4050135314ab859",
      "parents": [
        "ab1831b0b87851c874a75e4b3a8538e3d76b37d7",
        "dc186ad741c12ae9ecac8b89e317ef706fdaf8f6"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 10 09:35:44 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 10 09:35:44 2009 -0800"
      },
      "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: Add debugobjects support\n"
    },
    {
      "commit": "9398180097e359646d46083c3e079a54e20bee82",
      "tree": "633933ddd86e3dba7c0970eea5768867849842c9",
      "parents": [
        "e13193319d3a5545c82ed4b724bffd16f87873e3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Nov 17 14:06:20 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Nov 17 17:40:33 2009 -0800"
      },
      "message": "workqueue: fix race condition in schedule_on_each_cpu()\n\nCommit 65a64464349883891e21e74af16c05d6e1eeb4e9 (\"HWPOISON: Allow\nschedule_on_each_cpu() from keventd\") which allows schedule_on_each_cpu()\nto be called from keventd added a race condition.  schedule_on_each_cpu()\nmay race with cpu hotplug and end up executing the function twice on a\ncpu.\n\nFix it by moving direct execution into the section protected with\nget/put_online_cpus().  While at it, update code such that direct\nexecution is done after works have been scheduled for all other cpus and\ndrop unnecessary cpu !\u003d orig test from flush loop.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dc186ad741c12ae9ecac8b89e317ef706fdaf8f6",
      "tree": "f118cc4972031c681b201d2b8ed95b21df41c1be",
      "parents": [
        "a9366e61b03f55a6e009e687ad10e706714c9907"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Nov 16 01:09:48 2009 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 16 01:09:48 2009 +0900"
      },
      "message": "workqueue: Add debugobjects support\n\nAdd debugobject support to track the life time of work_structs.\n\nWhile at it, remove duplicate definition of\nINIT_DELAYED_WORK_ON_STACK().\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "3242f9804ba992c867360e2b57efc268b8e4e175",
      "tree": "96fbdbc1344aa67588ce26765f308c674b91a75f",
      "parents": [
        "23756692147c5dfd3328afd42e16e9d943ff756c",
        "7456b0405d8fc063c49628f969cdb23be060fc80"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 29 08:20:00 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 29 08:20:00 2009 -0700"
      },
      "message": "Merge branch \u0027hwpoison-2.6.32\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6\n\n* \u0027hwpoison-2.6.32\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6:\n  HWPOISON: fix invalid page count in printk output\n  HWPOISON: Allow schedule_on_each_cpu() from keventd\n  HWPOISON: fix/proc/meminfo alignment\n  HWPOISON: fix oops on ksm pages\n  HWPOISON: Fix page count leak in hwpoison late kill in do_swap_page\n  HWPOISON: return early on non-LRU pages\n  HWPOISON: Add brief hwpoison description to Documentation\n  HWPOISON: Clean up PR_MCE_KILL interface\n"
    },
    {
      "commit": "65a64464349883891e21e74af16c05d6e1eeb4e9",
      "tree": "7b4744f01840c337506dbb24debe5e50ee76186e",
      "parents": [
        "5d5429af066b8896e903d829ac143711ed2c25f2"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Oct 14 06:22:47 2009 +0200"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Mon Oct 19 07:29:22 2009 +0200"
      },
      "message": "HWPOISON: Allow schedule_on_each_cpu() from keventd\n\nRight now when calling schedule_on_each_cpu() from keventd there\nis a deadlock because it tries to schedule a work item on the current CPU\ntoo. This happens via lru_add_drain_all() in hwpoison.\n\nJust call the function for the current CPU in this case. This is actually\nfaster too.\n\nDebugging with Fengguang Wu \u0026 Max Asbock\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    }
  ],
  "next": "8c53e46314562fe814b0afef6cfcbd2f562b017c"
}
