)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "8c53e46314562fe814b0afef6cfcbd2f562b017c",
      "tree": "e9b68a33c470a91967c5930438e93beeb3126c50",
      "parents": [
        "c8e33141911bf8fe87dc6c92793b9a59b2be0130"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 14 09:16:42 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 14 15:11:35 2009 -0700"
      },
      "message": "workqueue: add \u0027flush_delayed_work()\u0027 to run and wait for delayed work\n\nIt basically turns a delayed work into an immediate work, and then waits\nfor it to finish, thus allowing you to force (and wait for) an immediate\nflush of a delayed work.\n\nWe\u0027ll want to use this in the tty layer to clean up tty_flush_to_ldisc().\n\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n[ Fixed to use \u0027del_timer_sync()\u0027 as noted by Oleg ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "774a694f8cd08115d130a290d73c6d8563f26b1b",
      "tree": "2b5f834ac7a149278d2a7e44d7afe69f40ef1431",
      "parents": [
        "4f0ac854167846bd55cd81dbc9a36e03708aa01c",
        "e1f8450854d69f0291882804406ea1bab3ca44b4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 11 13:23:18 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 11 13:23:18 2009 -0700"
      },
      "message": "Merge branch \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (64 commits)\n  sched: Fix sched::sched_stat_wait tracepoint field\n  sched: Disable NEW_FAIR_SLEEPERS for now\n  sched: Keep kthreads at default priority\n  sched: Re-tune the scheduler latency defaults to decrease worst-case latencies\n  sched: Turn off child_runs_first\n  sched: Ensure that a child can\u0027t gain time over it\u0027s parent after fork()\n  sched: enable SD_WAKE_IDLE\n  sched: Deal with low-load in wake_affine()\n  sched: Remove short cut from select_task_rq_fair()\n  sched: Turn on SD_BALANCE_NEWIDLE\n  sched: Clean up topology.h\n  sched: Fix dynamic power-balancing crash\n  sched: Remove reciprocal for cpu_power\n  sched: Try to deal with low capacity, fix update_sd_power_savings_stats()\n  sched: Try to deal with low capacity\n  sched: Scale down cpu_power due to RT tasks\n  sched: Implement dynamic cpu_power\n  sched: Add smt_gain\n  sched: Update the cpu_power sum during load-balance\n  sched: Add SD_PREFER_SIBLING\n  ...\n"
    },
    {
      "commit": "61cbe54d9479ad98283b2dda686deae4c34b2d59",
      "tree": "e7d4766daaf2895aab96b035a973b67439baecf2",
      "parents": [
        "172e082a9111ea504ee34cbba26284a5ebdc53a7"
      ],
      "author": {
        "name": "Mike Galbraith",
        "email": "efault@gmx.de",
        "time": "Wed Sep 09 15:41:37 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Sep 09 17:30:06 2009 +0200"
      },
      "message": "sched: Keep kthreads at default priority\n\nRemoves kthread/workqueue priority boost, they increase worst-case\ndesktop latencies.\n\nSigned-off-by: Mike Galbraith \u003cefault@gmx.de\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLKML-Reference: \u003c1252486344.28645.18.camel@marge.simson.net\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "5b0f437df0a3e374d26ad533eb78fe64744f55a8",
      "tree": "b450a583c3fea39baac8cdea13b152634cdea121",
      "parents": [
        "a33a052f19a21d727847391c8c1aff3fb221c472"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bart.vanassche@gmail.com",
        "time": "Thu Jul 30 19:00:53 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Aug 04 15:21:16 2009 +0200"
      },
      "message": "workqueues: Improve schedule_work() documentation\n\nTwo important aspects of the schedule_work() function are not\nyet documented:\n\n - that it is allowed to pass a struct work_struct * to this\n   function that is already on the kernel-global workqueue;\n\n - the meaning of its return value.\n\nThe patch below documents both aspects.\n\nSigned-off-by: Bart Van Assche \u003cbart.vanassche@gmail.com\u003e\nCc: \"Greg Kroah-Hartman\" \u003cgregkh@suse.de\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nLKML-Reference: \u003c200907301900.54202.bart.vanassche@gmail.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "fb39125fd79a25c5002f3b45cf4c80e3fa6b961b",
      "tree": "96a9d274896f94306bc4d4972eca2153934f4814",
      "parents": [
        "f2aebaee653a35b01c3665de2cbb1e31456b8ea8"
      ],
      "author": {
        "name": "Zhaolei",
        "email": "zhaolei@cn.fujitsu.com",
        "time": "Fri Apr 17 15:15:51 2009 +0800"
      },
      "committer": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Tue Jun 02 01:10:40 2009 +0200"
      },
      "message": "ftrace, workqueuetrace: make workqueue tracepoints use TRACE_EVENT macro\n\nv3: zhaolei@cn.fujitsu.com: Change TRACE_EVENT definition to new format\n    introduced by Steven Rostedt: consolidate trace and trace_event headers\nv2: kosaki@jp.fujitsu.com: print the function names instead of addr, and zap\n    the work addr\nv1: zhaolei@cn.fujitsu.com: Make workqueue tracepoints use TRACE_EVENT macro\n\nTRACE_EVENT is a more generic way to define tracepoints.\nDoing so adds these new capabilities to the tracepoints:\n\n  - zero-copy and per-cpu splice() tracing\n  - binary tracing without printf overhead\n  - structured logging records exposed under /debug/tracing/events\n  - trace events embedded in function tracer output and other plugins\n  - user-defined, per tracepoint filter expressions\n\nThen, this patch converts DEFINE_TRACE to TRACE_EVENT in workqueue related\ntracepoints.\n\n[ Impact: expand workqueue tracer to events tracing ]\n\nSigned-off-by: Zhao Lei \u003czhaolei@cn.fujitsu.com\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Tom Zanussi \u003ctzanussi@gmail.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\n"
    },
    {
      "commit": "6b44003e5ca66a3fffeb5bc90f40ada2c4340896",
      "tree": "d9dce0a39b5e66d8e760344a51ffb6de9594cd2f",
      "parents": [
        "1c99315bb36b5d776210546d438ca928dc9b1f22"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Thu Apr 09 09:50:37 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Thu Apr 09 09:50:37 2009 +0930"
      },
      "message": "work_on_cpu(): rewrite it to create a kernel thread on demand\n\nImpact: circular locking bugfix\n\nThe various implemetnations and proposed implemetnations of work_on_cpu()\nare vulnerable to various deadlocks because they all used queues of some\nform.\n\nUnrelated pieces of kernel code thus gained dependencies wherein if one\nwork_on_cpu() caller holds a lock which some other work_on_cpu() callback\nalso takes, the kernel could rarely deadlock.\n\nFix this by creating a short-lived kernel thread for each work_on_cpu()\ninvokation.\n\nThis is not terribly fast, but the only current caller of work_on_cpu() is\npci_call_probe().\n\nIt would be nice to find some other way of doing the node-local\nallocations in the PCI probe code so that we can zap work_on_cpu()\naltogether.  The code there is rather nasty.  I can\u0027t think of anything\nsimple at this time...\n\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "714f83d5d9f7c785f622259dad1f4fad12d64664",
      "tree": "20563541ae438e11d686b4d629074eb002a481b7",
      "parents": [
        "8901e7ffc2fa78ede7ce9826dbad68a3a25dc2dc",
        "645dae969c3b8651c5bc7c54a1835ec03820f85f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 05 11:04:19 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 05 11:04:19 2009 -0700"
      },
      "message": "Merge branch \u0027tracing-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027tracing-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (413 commits)\n  tracing, net: fix net tree and tracing tree merge interaction\n  tracing, powerpc: fix powerpc tree and tracing tree interaction\n  ring-buffer: do not remove reader page from list on ring buffer free\n  function-graph: allow unregistering twice\n  trace: make argument \u0027mem\u0027 of trace_seq_putmem() const\n  tracing: add missing \u0027extern\u0027 keywords to trace_output.h\n  tracing: provide trace_seq_reserve()\n  blktrace: print out BLK_TN_MESSAGE properly\n  blktrace: extract duplidate code\n  blktrace: fix memory leak when freeing struct blk_io_trace\n  blktrace: fix blk_probes_ref chaos\n  blktrace: make classic output more classic\n  blktrace: fix off-by-one bug\n  blktrace: fix the original blktrace\n  blktrace: fix a race when creating blk_tree_root in debugfs\n  blktrace: fix timestamp in binary output\n  tracing, Text Edit Lock: cleanup\n  tracing: filter fix for TRACE_EVENT_FORMAT events\n  ftrace: Using FTRACE_WARN_ON() to check \"freed record\" in ftrace_release()\n  x86: kretprobe-booster interrupt emulation code fix\n  ...\n\nFix up trivial conflicts in\n arch/parisc/include/asm/ftrace.h\n include/linux/memory.h\n kernel/extable.c\n kernel/module.c\n"
    },
    {
      "commit": "2355b70fd59cb5be7de2052a9edeee7afb7ff099",
      "tree": "93f192f9dab4748a313ec8d78041b1937e232f33",
      "parents": [
        "1ee1184485df9c9a3503d3a684b911fb7c73d259"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Thu Apr 02 16:58:24 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:00 2009 -0700"
      },
      "message": "workqueue: avoid recursion in run_workqueue()\n\n1) lockdep will complain when run_workqueue() performs recursion.\n\n2) The recursive implementation of run_workqueue() means that\n   flush_workqueue() and its documentation are inconsistent.  This may\n   hide deadlocks and other bugs.\n\n3) The recursion in run_workqueue() will poison cwq-\u003ecurrent_work, but\n   flush_work() and __cancel_work_timer(), etcetera need a reliable\n   cwq-\u003ecurrent_work.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8302294f43250dc337108c51882a6007f2b1e2e0",
      "tree": "85acd4440799c46a372df9cad170fa0c21e59096",
      "parents": [
        "4fe70410d9a219dabb47328effccae7e7f2a6e26",
        "2e572895bf3203e881356a4039ab0fa428ed2639"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Apr 01 21:54:19 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Apr 02 00:49:02 2009 +0200"
      },
      "message": "Merge branch \u0027tracing/core-v2\u0027 into tracing-for-linus\n\nConflicts:\n\tinclude/linux/slub_def.h\n\tlib/Kconfig.debug\n\tmm/slob.c\n\tmm/slub.c\n"
    },
    {
      "commit": "aa85ea5b89c36c51200d795dd788139bd9b8cf50",
      "tree": "0b68a35b691417d927127376beb0541d96c9cc64",
      "parents": [
        "1a8a51004a18b627ea81444201f7867875212f46"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Mar 30 22:05:15 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Mar 30 22:05:16 2009 +1030"
      },
      "message": "cpumask: use new cpumask_ functions in core code.\n\nImpact: cleanup\n\nTime to clean up remaining laggards using the old cpu_ functions.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Trond.Myklebust@netapp.com\n"
    },
    {
      "commit": "dc573f9b20c8710105ac35c08ed0fe1da5160ecd",
      "tree": "24db0a0f6364b78f9c74e62541d26155e785b8f9",
      "parents": [
        "b3a8c34886d0e3dd3a24a5b614ee025181da2f41",
        "ecf441b593ac41cb8cd8cd3695110167c42e098c",
        "b1792e367053968f2ddb48bc911d314143ce6242"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Feb 03 06:25:38 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Feb 03 06:25:38 2009 +0100"
      },
      "message": "Merge branches \u0027tracing/ftrace\u0027, \u0027tracing/kmemtrace\u0027 and \u0027linus\u0027 into tracing/core\n"
    },
    {
      "commit": "8ccad40df8d314f786fdb06bdbedd4f43f3257cd",
      "tree": "7d3c1bde4ff36bb936a5934e602a4e1b50702545",
      "parents": [
        "31ad9081200c06ccc350625d41d1f8b2d1cef29f"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jan 16 15:31:15 2009 -0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jan 19 22:36:07 2009 +0100"
      },
      "message": "work_on_cpu: Use our own workqueue.\n\nImpact: remove potential clashes with generic kevent workqueue\n\nAnnoyingly, some places we want to use work_on_cpu are already in\nworkqueues.  As per Ingo\u0027s suggestion, we create a different workqueue\nfor work_on_cpu.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Mike Travis \u003ctravis@sgi.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "31ad9081200c06ccc350625d41d1f8b2d1cef29f",
      "tree": "99768cf8eae9aaa2d1f4167103aa7ea9c70068a1",
      "parents": [
        "c7f8562a51c2e5dcc1a00a2bdd232b9965ff960d"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jan 16 15:31:15 2009 -0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jan 19 22:36:02 2009 +0100"
      },
      "message": "work_on_cpu: don\u0027t try to get_online_cpus() in work_on_cpu.\n\nImpact: remove potential circular lock dependency with cpu hotplug lock\n\nThis has caused more problems than it solved, with a pile of cpu\nhotplug locking issues.\n\nFollowup patches will get_online_cpus() in callers that need it, but\nif they don\u0027t do it they\u0027re no worse than before when they were using\nset_cpus_allowed without locking.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Mike Travis \u003ctravis@sgi.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "e1d8aa9f1dd655a3534b22fcfbecb70cdb125766",
      "tree": "eb01b005a1d378515d5839bf1c7ea9836355ec9c",
      "parents": [
        "002bb86d8d42f18937aef396c3ecd65c7e02e21a"
      ],
      "author": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Mon Jan 12 23:15:46 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Jan 14 12:11:43 2009 +0100"
      },
      "message": "tracing: add a new workqueue tracer\n\nImpact: new tracer\n\nThe workqueue tracer provides some statistical informations\nabout each cpu workqueue thread such as the number of the\nworks inserted and executed since their creation. It can help\nto evaluate the amount of work each of them have to perform.\nFor example it can help a developer to decide whether he should\nchoose a per cpu workqueue instead of a singlethreaded one.\n\nIt only traces statistical informations for now but it will probably later\nprovide event tracing too.\n\nSuch a tracer could help too, and be improved, to help rt priority sorted\nworkqueue development.\n\nTo have a snapshot of the workqueues state at any time, just do\n\ncat /debugfs/tracing/trace_stat/workqueues\n\nIe:\n\n  1    125        125       reiserfs/1\n  1      0          0       scsi_tgtd/1\n  1      0          0       aio/1\n  1      0          0       ata/1\n  1    114        114       kblockd/1\n  1      0          0       kintegrityd/1\n  1   2147       2147       events/1\n\n  0      0          0       kpsmoused\n  0    105        105       reiserfs/0\n  0      0          0       scsi_tgtd/0\n  0      0          0       aio/0\n  0      0          0       ata_aux\n  0      0          0       ata/0\n  0      0          0       cqueue\n  0      0          0       kacpi_notify\n  0      0          0       kacpid\n  0    149        149       kblockd/0\n  0      0          0       kintegrityd/0\n  0   1000       1000       khelper\n  0   2270       2270       events/0\n\nChanges in V2:\n\n_ Drop the static array based on NR_CPU and dynamically allocate the stat array\n  with num_possible_cpus() and other cpu mask facilities....\n_ Trace workqueue insertion at a bit lower level (insert_work instead of queue_work) to handle\n  even the workqueue barriers.\n\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "e7577c50f2fb2d1c167e2c04a4b4c2cc042acb82",
      "tree": "a3f3db2e4c2feec93873c8015499f33834b38389",
      "parents": [
        "a45185d2d7108b01b90b9e0293377be4d6346dde"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Thu Jan 01 10:12:25 2009 +1030"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Thu Jan 01 10:12:25 2009 +1030"
      },
      "message": "cpumask: convert kernel/workqueue.c\n\nImpact: Reduce memory usage, use new cpumask API.\n\ncpu_populated_map becomes a cpumask_var_t, and cpu_singlethread_map is\nsimply a cpumask pointer: it\u0027s simply the cpumask containing the first\npossible CPU anyway.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "2b828925652340277a889cbc11b2d0637f7cdaf7",
      "tree": "32fcb3d3e466fc419fad2d3717956a5b5ad3d35a",
      "parents": [
        "3a3b7ce9336952ea7b9564d976d068a238976c9d",
        "58e20d8d344b0ee083febb18c2b021d2427e56ca"
      ],
      "author": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri Nov 14 11:29:12 2008 +1100"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri Nov 14 11:29:12 2008 +1100"
      },
      "message": "Merge branch \u0027master\u0027 into next\n\nConflicts:\n\tsecurity/keys/internal.h\n\tsecurity/keys/process_keys.c\n\tsecurity/keys/request_key.c\n\nFixed conflicts above by using the non \u0027tsk\u0027 versions.\n\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "6cc88bc45ce8043171089c9592da223dfab91823",
      "tree": "f89bf8162895a5eb89ea7969098876e08a8999d8",
      "parents": [
        "bb952bb98a7e479262c7eb25d5592545a3af147d"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Nov 14 10:39:21 2008 +1100"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri Nov 14 10:39:21 2008 +1100"
      },
      "message": "CRED: Rename is_single_threaded() to is_wq_single_threaded()\n\nRename is_single_threaded() to is_wq_single_threaded() so that a new\nis_single_threaded() can be created that refers to tasks rather than\nwaitqueues.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nReviewed-by: James Morris \u003cjmorris@namei.org\u003e\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "2d3854a37e8b767a51aba38ed6d22817b0631e33",
      "tree": "3b55cc93720b2e525460216b196ed20298ae985b",
      "parents": [
        "75fa67706cce5272bcfc51ed646f2da21f3bdb6e"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Wed Nov 05 13:39:10 2008 +1100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Nov 06 09:05:33 2008 +0100"
      },
      "message": "cpumask: introduce new API, without changing anything\n\nImpact: introduce new APIs\n\nWe want to deprecate cpumasks on the stack, as we are headed for\ngynormous numbers of CPUs.  Eventually, we want to head towards an\nundefined \u0027struct cpumask\u0027 so they can never be declared on stack.\n\n1) New cpumask functions which take pointers instead of copies.\n   (cpus_* -\u003e cpumask_*)\n\n2) Several new helpers to reduce requirements for temporary cpumasks\n   (cpumask_first_and, cpumask_next_and, cpumask_any_and)\n\n3) Helpers for declaring cpumasks on or offstack for large NR_CPUS\n   (cpumask_var_t, alloc_cpumask_var and free_cpumask_var)\n\n4) \u0027struct cpumask\u0027 for explicitness and to mark new-style code.\n\n5) Make iterator functions stop at nr_cpu_ids (a runtime constant),\n   not NR_CPUS for time efficiency and for smaller dynamic allocations\n   in future.\n\n6) cpumask_copy() so we can allocate less than a full cpumask eventually\n   (for alloc_cpumask_var), and so we can eliminate the \u0027struct cpumask\u0027\n   definition eventually.\n\n7) work_on_cpu() helper for doing task on a CPU, rather than saving old\n   cpumask for current thread and manipulating it.\n\n8) smp_call_function_many() which is smp_call_function_mask() except\n   taking a cpumask pointer.\n\nNote that this patch simply introduces the new functions and leaves\nthe obsolescent ones in place.  This is to simplify the transition\npatches.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "0d557dc97f4bb501f086a03d0f00b99a7855d794",
      "tree": "be717fc70de4fc76f48cf4f4f3cebc3b8569d798",
      "parents": [
        "a802dd0eb5fc97a50cf1abb1f788a8f6cc5db635"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Mon Oct 13 23:50:09 2008 +0200"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Wed Oct 22 10:00:25 2008 +1100"
      },
      "message": "workqueue: introduce create_rt_workqueue\n\ncreate_rt_workqueue will create a real time prioritized workqueue.\nThis is needed for the conversion of stop_machine to a workqueue based\nimplementation.\nThis patch adds yet another parameter to __create_workqueue_key to tell\nit that we want an rt workqueue.\nHowever it looks like we rather should have something like \"int type\"\ninstead of singlethread, freezable and rt.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "e1f8e87449147ffe5ea3de64a46af7de450ce279",
      "tree": "304e90a6747f5a7586a67305b7225ed4b4dbb53a",
      "parents": [
        "8033fe65a6d6c0e47ba9e3cb2e4e6902f9dfb8dd"
      ],
      "author": {
        "name": "Francois Cami",
        "email": "francois.cami@free.fr",
        "time": "Wed Oct 15 22:01:59 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 16 11:21:32 2008 -0700"
      },
      "message": "Remove Andrew Morton\u0027s old email accounts\n\nPeople can use the real name an an index into MAINTAINERS to find the\ncurrent email address.\n\nSigned-off-by: Francois Cami \u003cfrancois.cami@free.fr\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "23a0ee908cbfba3264d19729c67c22b20fa73886"
}
