)]}'
{
  "log": [
    {
      "commit": "a0327ff0eda915be623658babacef706099c11a8",
      "tree": "4787aedc2877b41e1df066f510b828574527163c",
      "parents": [
        "9fdb04cdc5566d6ba68283a0bebe49667ca0b0e8"
      ],
      "author": {
        "name": "James Hogan",
        "email": "james.hogan@imgtec.com",
        "time": "Fri Jan 25 10:13:59 2013 +0000"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jan 25 09:14:48 2013 -0800"
      },
      "message": "async: initialise list heads to fix crash\n\n9fdb04cdc55 (\"async: replace list of active domains with global list\nof pending items\") added a struct list_head global_list in struct\nasync_entry, which isn\u0027t initialised.  This means that if\n!domain-\u003eregistered at __async_schedule(), then list_del_init() will\nbe called on the list head in async_run_entry_fn with both pointers\nNULL, causing a crash.  This is fixed by initialising both the\nglobal_list and domain_list list_heads after kzalloc\u0027ing the entry.\n\nThis was noticed due to dapm_power_widgets() which uses\nASYNC_DOMAIN_EXCLUSIVE, which initialises the domain-\u003eregistered to 0.\n\nSigned-off-by: James Hogan \u003cjames.hogan@imgtec.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: James Hogan \u003cjames.hogan@imgtec.com\u003e\nReported-by: Stephen Warren \u003cswarren@wwwdotorg.org\u003e\n"
    },
    {
      "commit": "9fdb04cdc5566d6ba68283a0bebe49667ca0b0e8",
      "tree": "998ae384cdfa764686f85e0b0dc57fc40b407d21",
      "parents": [
        "52722794d6a48162fd8906d54618ae60a4abdb21"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 23 09:32:30 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 23 09:32:30 2013 -0800"
      },
      "message": "async: replace list of active domains with global list of pending items\n\nGlobal synchronization - async_synchronize_full() - is currently\nimplemented by keeping a list of all active registered domains and\nsyncing them one by one until no domain is active.\n\nWhile this isn\u0027t necessarily a complex scheme, it can easily be\nsimplified by keeping global list of the pending items of all\nregistered active domains instead of list of domains and simply using\nthe globl pending list the same way as domain syncing.\n\nThis patch replaces async_domains with async_global_pending and update\nlowest_in_progress() to use the global pending list if @domain is\n%NULL.  async_synchronize_full_domain(NULL) is now allowed and\nequivalent to async_synchronize_full().  As no one is calling with\nNULL domain, this doesn\u0027t affect any existing users.\n\nasync_register_mutex is no longer necessary and dropped.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: Dan Williams \u003cdjbw@fb.com\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "52722794d6a48162fd8906d54618ae60a4abdb21",
      "tree": "9395231ed86edd40880a3438f77d10af2f6d953a",
      "parents": [
        "c68eee14ec2da345e86f2778c8570759309a4a2e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 23 09:32:30 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 23 09:32:30 2013 -0800"
      },
      "message": "async: keep pending tasks on async_domain and remove async_pending\n\nAsync kept single global pending list and per-domain running lists.\nWhen an async item is queued, it\u0027s put on the global pending list.\nThe item is moved to the per-domain running list when its execution\nstarts.\n\nAt this point, this design complicates execution and synchronization\nwithout bringing any benefit.  The list only matters for\nsynchronization which doesn\u0027t care whether a given async item is\npending or executing.  Also, global synchronization is done by\niterating through all active registered async_domains, so the global\nasync_pending list doesn\u0027t help anything either.\n\nRename async_domain-\u003erunning to async_domain-\u003epending and put async\nitems directly there and remove when execution completes.  This\nsimplifies lowest_in_progress() a lot - the first item on the pending\nlist is the one with the lowest cookie, and async_run_entry_fn()\ndoesn\u0027t have to mess with moving the item from pending to running.\n\nAfter the change, whether a domain is empty or not can be trivially\ndetermined by looking at async_domain-\u003epending.  Remove\nasync_domain-\u003ecount and use list_empty() on pending instead.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: Dan Williams \u003cdjbw@fb.com\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c68eee14ec2da345e86f2778c8570759309a4a2e",
      "tree": "953677198feb57ebd17b6d2c197cf8febc88a6c4",
      "parents": [
        "8723d5037cafea09c7242303c6c8e5d7058cec61"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 23 09:32:30 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 23 09:32:30 2013 -0800"
      },
      "message": "async: use ULLONG_MAX for infinity cookie value\n\nCurrently, next_cookie is used as the infinity value.  In most cases,\nthis should work fine but it theoretically could bring subtle behavior\ndifference between async_synchronize_full() and\nasync_synchronize_full_domain().\n\nasync_synchronize_full() keeps waiting until there\u0027s no registered\nasync_entry left regardless of what next_cookie was when the function\nwas called.  It guarantees that the queue is completely drained at\nleast once before returning.\n\nHowever, async_synchronize_full_domain() doesn\u0027t.  It synchronizes\nupto next_cookie and if further async jobs are queued after the\nnext_cookie value to synchronize is decided, they won\u0027t be waited for.\n\nFor unrelated async jobs, the behavior difference doesn\u0027t matter;\nhowever, if async jobs which are related (nested or otherwise) to the\nexecuting ones are queued while sychronization is in progress, the\nresulting behavior difference could be problematic.\n\nThis can be easily fixed by using ULLONG_MAX as the infinity value\ninstead.  Define ASYNC_COOKIE_MAX as ULLONG_MAX and use it as the\ninfinity value for synchronization.  This makes\nasync_synchronize_full_domain() fully drain the domain at least once\nbefore returning, making its behavior match async_synchronize_full().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: Dan Williams \u003cdjbw@fb.com\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8723d5037cafea09c7242303c6c8e5d7058cec61",
      "tree": "198cd51a199501557657dac0f2c46faa6be0a4e4",
      "parents": [
        "c14afb82ffff5903a701a9fb737ac20f36d1f755"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 23 09:32:30 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 23 09:32:30 2013 -0800"
      },
      "message": "async: bring sanity to the use of words domain and running\n\nIn the beginning, running lists were literal struct list_heads.  Later\non, struct async_domain was added.  For some reason, while the\nconversion substituted list_heads with async_domains, the variable\nnames weren\u0027t fully converted.  In more places, \"running\" was used for\nstruct async_domain while other places adopted new \"domain\" name.\n\nThe situation is made much worse by having async_domain\u0027s running list\nnamed \"domain\" and async_entry\u0027s field pointing to async_domain named\n\"running\".\n\nSo, we end up with mix of \"running\" and \"domain\" for variable names\nfor async_domain, with the field names of async_domain and async_entry\nswapped between \"running\" and \"domain\".\n\nIt feels almost intentionally made to be as confusing as possible.\nBring some sanity by\n\n* Renaming all async_domain variables \"domain\".\n\n* s/async_running/async_dfl_domain/\n\n* s/async_domain-\u003edomain/async_domain-\u003erunning/\n\n* s/async_entry-\u003erunning/async_entry-\u003edomain/\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: Dan Williams \u003cdjbw@fb.com\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c14afb82ffff5903a701a9fb737ac20f36d1f755",
      "tree": "304dcc7b1d7b9a5f564f7e978228e61ef41fbef2",
      "parents": [
        "0fdff3ec6d87856cdcc99e69cf42143fdd6c56b4",
        "1d8549085377674224bf30a368284c391a3ce40e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 23 09:31:01 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 23 09:31:01 2013 -0800"
      },
      "message": "Merge branch \u0027master\u0027 into for-3.9-async\n\nTo receive f56c3196f251012de9b3ebaff55732a9074fdaae (\"async: fix\n__lowest_in_progress()\").\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "f56c3196f251012de9b3ebaff55732a9074fdaae",
      "tree": "65ce7316a1262f402a14c4299d881907e7d03b05",
      "parents": [
        "ed06ef318a7ddde3823966f808f39b515eae1862"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 22 16:15:15 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 22 16:21:24 2013 -0800"
      },
      "message": "async: fix __lowest_in_progress()\n\nCommit 083b804c4d3e (\"async: use workqueue for worker pool\") made it\npossible that async jobs are moved from pending to running out-of-order.\nWhile pending async jobs will be queued and dispatched for execution in\nthe same order, nothing guarantees they\u0027ll enter \"1) move self to the\nrunning queue\" of async_run_entry_fn() in the same order.\n\nBefore the conversion, async implemented its own worker pool.  An async\nworker, upon being woken up, fetches the first item from the pending\nlist, which kept the executing lists sorted.  The conversion to\nworkqueue was done by adding work_struct to each async_entry and async\njust schedules the work item.  The queueing and dispatching of such work\nitems are still in order but now each worker thread is associated with a\nspecific async_entry and moves that specific async_entry to the\nexecuting list.  So, depending on which worker reaches that point\nearlier, which is non-deterministic, we may end up moving an async_entry\nwith larger cookie before one with smaller one.\n\nThis broke __lowest_in_progress().  running-\u003edomain may not be properly\nsorted and is not guaranteed to contain lower cookies than pending list\nwhen not empty.  Fix it by ensuring sort-inserting to the running list\nand always looking at both pending and running when trying to determine\nthe lowest cookie.\n\nOver time, the async synchronization implementation became quite messy.\nWe better restructure it such that each async_entry is linked to two\nlists - one global and one per domain - and not move it when execution\nstarts.  There\u0027s no reason to distinguish pending and running.  They\nbehave the same for synchronization purposes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: stable@vger.kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "84b233adcca3cacd5cfa8013a5feda7a3db4a9af",
      "tree": "3d1f4a7f5f1d27dc08bb661691fd1470acf497a5",
      "parents": [
        "2eaebdb33e1911c0cf3d44fd3596c42c6f502fab"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jan 18 14:05:56 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jan 18 14:05:56 2013 -0800"
      },
      "message": "workqueue: implement current_is_async()\n\nThis function queries whether %current is an async worker executing an\nasync item.  This will be used to implement warning on synchronous\nrequest_module() from async workers.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "774a1221e862b343388347bac9b318767336b20b",
      "tree": "ee02b2b71268d9478f709bea8636ddd5eafdc007",
      "parents": [
        "406089d01562f1e2bf9f089fd7637009ebaad589"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 15 18:52:51 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 16 09:05:33 2013 -0800"
      },
      "message": "module, async: async_synchronize_full() on module init iff async is used\n\nIf the default iosched is built as module, the kernel may deadlock\nwhile trying to load the iosched module on device probe if the probing\nwas running off async.  This is because async_synchronize_full() at\nthe end of module init ends up waiting for the async job which\ninitiated the module loading.\n\n async A\t\t\t\tmodprobe\n\n 1. finds a device\n 2. registers the block device\n 3. request_module(default iosched)\n\t\t\t\t\t4. modprobe in userland\n\t\t\t\t\t5. load and init module\n\t\t\t\t\t6. async_synchronize_full()\n\nAsync A waits for modprobe to finish in request_module() and modprobe\nwaits for async A to finish in async_synchronize_full().\n\nBecause there\u0027s no easy to track dependency once control goes out to\nuserland, implementing properly nested flushing is difficult.  For\nnow, make module init perform async_synchronize_full() iff module init\nhas queued async jobs as suggested by Linus.\n\nThis avoids the described deadlock because iosched module doesn\u0027t use\nasync and thus wouldn\u0027t invoke async_synchronize_full().  This is\nhacky and incomplete.  It will deadlock if async module loading nests;\nhowever, this works around the known problem case and seems to be the\nbest of bad options.\n\nFor more details, please refer to the following thread.\n\n  http://thread.gmane.org/gmane.linux.kernel/1420814\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Alex Riesen \u003craa.lkml@gmail.com\u003e\nTested-by: Ming Lei \u003cming.lei@canonical.com\u003e\nTested-by: Alex Riesen \u003craa.lkml@gmail.com\u003e\nCc: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a4683487f90bfe3049686fc5c566bdc1ad03ace6",
      "tree": "b5aeadd3155256378804c04571febeee9f77c5fb",
      "parents": [
        "2955b47d2c1983998a8c5915cb96884e67f7cb53"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Mon Jul 09 19:33:30 2012 -0700"
      },
      "committer": {
        "name": "James Bottomley",
        "email": "JBottomley@Parallels.com",
        "time": "Fri Jul 20 09:07:37 2012 +0100"
      },
      "message": "[SCSI] async: make async_synchronize_full() flush all work regardless of domain\n\nIn response to an async related regression James noted:\n\n  \"My theory is that this is an init problem: The assumption in a lot of\n   our code is that async_synchronize_full() waits for everything ... even\n   the domain specific async schedules, which isn\u0027t true.\"\n\n...so make this assumption true.\n\nEach domain, including the default one, registers itself on a global domain\nlist when work is scheduled.  Once all entries complete it exits that\nlist.  Waiting for the list to be empty syncs all in-flight work across\nall domains.\n\nDomains can opt-out of global syncing if they are declared as exclusive\nASYNC_DOMAIN_EXCLUSIVE().  All stack-based domains have been declared\nexclusive since the domain may go out of scope as soon as the last work\nitem completes.\n\nStatically declared domains are mostly ok, but async_unregister_domain()\nis there to close any theoretical races with pending\nasync_synchronize_full waiters at module removal time.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nAcked-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nReported-by: Meelis Roos \u003cmroos@linux.ee\u003e\nReported-by: Eldad Zack \u003celdadzack@gmail.com\u003e\nTested-by: Eldad Zack \u003celdad@fogrefinery.com\u003e\nSigned-off-by: James Bottomley \u003cJBottomley@Parallels.com\u003e\n"
    },
    {
      "commit": "2955b47d2c1983998a8c5915cb96884e67f7cb53",
      "tree": "e21ace685c01c698f20b7cb81b0097519c2fa18c",
      "parents": [
        "529f9a765509c2c141ecfee0c54e17bf9a6b8bc1"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Mon Jul 09 19:33:25 2012 -0700"
      },
      "committer": {
        "name": "James Bottomley",
        "email": "JBottomley@Parallels.com",
        "time": "Fri Jul 20 09:05:54 2012 +0100"
      },
      "message": "[SCSI] async: introduce \u0027async_domain\u0027 type\n\nThis is in preparation for teaching async_synchronize_full() to sync all\npending async work, and not just on the async_running domain.  This\nconversion is functionally equivalent, just embedding the existing list\nin a new async_domain type.\n\nThe .registered attribute is used in a later patch to distinguish\nbetween domains that want to be flushed by async_synchronize_full()\nversus those that only expect async_synchronize_{full|cookie}_domain to\nbe used for flushing.\n\n[jejb: add async.h to scsi_priv.h for struct async_domain]\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nAcked-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nAcked-by: Mark Brown \u003cbroonie@opensource.wolfsonmicro.com\u003e\nTested-by: Eldad Zack \u003celdad@fogrefinery.com\u003e\nSigned-off-by: James Bottomley \u003cJBottomley@Parallels.com\u003e\n"
    },
    {
      "commit": "6d6a55ec0877393f467067d44b9a2a8c2e4a82d2",
      "tree": "112aad751ea0cff183f926cf4e833ccb7d6e7fd4",
      "parents": [
        "29d4d6df107b9d86982dc759f5b1ddfe2c6b29c0"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jan 13 09:32:18 2012 +1030"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jan 13 09:32:18 2012 +1030"
      },
      "message": "kernel/async: remove redundant declaration.\n\nIt\u0027s in linux/init.h, and I\u0027m about to change it to a bool.\n\nCc: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "9984de1a5a8a96275fcab818f7419af5a3c86e71",
      "tree": "1935d411752707a1621c5caf64f75dfe105beb3a",
      "parents": [
        "7c77509c542927ee2a3c8812fad84957e51bf67d"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon May 23 14:51:41 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 09:20:12 2011 -0400"
      },
      "message": "kernel: Map most files to use export.h instead of module.h\n\nThe changed files were only including linux/module.h for the\nEXPORT_SYMBOL infrastructure, and nothing else.  Revector them\nonto the isolated export header for faster compile times.\n\nNothing to see here but a whole lot of instances of:\n\n  -#include \u003clinux/module.h\u003e\n  +#include \u003clinux/export.h\u003e\n\nThis commit is only changing the kernel dir; next targets\nwill probably be mm, fs, the arch dirs, etc.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "124ff4e53ace98300bf7465e0285167a3df838d3",
      "tree": "4b071c4b75196e20c4a7c88d8d2fde0a4b0c4b61",
      "parents": [
        "f1ee39ff69bfe7f15398c6b13fdf496134c05c75"
      ],
      "author": {
        "name": "Vitaliy Ivanov",
        "email": "vitalivanov@gmail.com",
        "time": "Thu Jul 07 14:10:40 2011 +0300"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Thu Sep 15 14:22:28 2011 +0200"
      },
      "message": "async: uninitialized warning corrections\n\nThe variables here are really not used uninitialized.\n\nkernel/async.c: In function \u0027async_synchronize_cookie_domain\u0027:\nkernel/async.c:270:10: warning: \u0027starttime.tv64\u0027 may be used uninitialized in this function\nkernel/async.c: In function \u0027async_run_entry_fn\u0027:\nkernel/async.c:122:10: warning: \u0027calltime.tv64\u0027 may be used uninitialized in this function\n\nSigned-off-by: Vitaliy Ivanov \u003cvitalivanov@gmail.com\u003e\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nSigned-off-by: Viresh Kumar \u003cviresh.kumar@st.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "84c15027a7f2fbd7f1180d7cbb60e41abbbaedd2",
      "tree": "178205c66fe01998b9eb72a3fca17dd72682f032",
      "parents": [
        "bd38c0e6f98326132a691d73b2056b426423c638"
      ],
      "author": {
        "name": "Paul McQuade",
        "email": "tungstentide@gmail.com",
        "time": "Tue May 31 20:51:55 2011 +0100"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Jun 14 22:48:46 2011 -0400"
      },
      "message": "async: Fixed an include coding style issue\n\nAdded \u003clinux/atomic.h\u003e,\u003clinux/ktime.h\u003e and Removed \u003casm/atomic.h\u003e.\nAdded KERN_DEBUG to printk() functions.\n\nAcked-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nSigned-off-by: Paul McQuade \u003ctungstentide@gmail.com\u003e\nLink: http://lkml.kernel.org/r/4DE596B4.7030904@gmail.com\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "083b804c4d3e1e3d0eace56bdbc0f674946d2847",
      "tree": "f09c2ca4f4e14edbf99030ed50a553ba0dadec47",
      "parents": [
        "c7fc77f78f16d138ca997ce096a62f46e2e9420a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:52 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jul 14 11:29:46 2010 +0200"
      },
      "message": "async: use workqueue for worker pool\n\nReplace private worker pool with system_unbound_wq.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Arjan van de Ven \u003carjan@infradead.org\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "3af968e066d593bc4dacc021715f3e95ddf0996f",
      "tree": "37851a67d855e228d503a569973469b067ef218a",
      "parents": [
        "46056be71c37378f518711da651e4bb76d650ee9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 08 12:31:53 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 08 12:31:53 2009 -0700"
      },
      "message": "async: Fix lack of boot-time console due to insufficient synchronization\n\nOur async work synchronization was broken by \"async: make sure\nindependent async domains can\u0027t accidentally entangle\" (commit\nd5a877e8dd409d8c702986d06485c374b705d340), because it would report\nthe wrong lowest active async ID when there was both running and\npending async work.\n\nThis caused things like no being able to read the root filesystem,\nresulting in missing console devices and inability to run \u0027init\u0027,\ncausing a boot-time panic.\n\nThis fixes it by properly returning the lowest pending async ID: if\nthere is any running async work, that will have a lower ID than any\npending work, and we should _not_ look at the pending work list.\n\nThere were alternative patches from Jaswinder and James, but this one\nalso cleans up the code by removing the pointless \u0027ret\u0027 variable and\nthe unnecesary testing for an empty list around \u0027for_each_entry()\u0027 (if\nthe list is empty, the for_each_entry() thing just won\u0027t execute).\n\nFixes-bug: http://bugzilla.kernel.org/show_bug.cgi?id\u003d13474\nReported-and-tested-by: Chris Clayton \u003cchris2553@googlemail.com\u003e\nCc: Jaswinder Singh Rajput \u003cjaswinder@kernel.org\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nCc: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d5a877e8dd409d8c702986d06485c374b705d340",
      "tree": "ece6d685c074c6823d31b7db99a52134866fd1a7",
      "parents": [
        "657cafa6b0f5296424d6f43f6f6eeb4a3222117e"
      ],
      "author": {
        "name": "James Bottomley",
        "email": "James.Bottomley@HansenPartnership.com",
        "time": "Sun May 24 13:03:43 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun May 24 13:38:41 2009 -0700"
      },
      "message": "async: make sure independent async domains can\u0027t accidentally entangle\n\nThe problem occurs when async_synchronize_full_domain() is called when\nthe async_pending list is not empty.  This will cause lowest_running()\nto return the cookie of the first entry on the async_pending list, which\nmight be nothing at all to do with the domain being asked for and thus\ncause the domain synchronization to wait for an unrelated domain.   This\ncan cause a deadlock if domain synchronization is used from one domain\nto wait for another.\n\nFix by running over the async_pending list to see if any pending items\nactually belong to our domain (and return their cookies if they do).\n\nSigned-off-by: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9710794383ee5008d67f1a6613a4717bf6de47bc",
      "tree": "9917f2f1a345a6de6b957c308acc6b6b8813c697",
      "parents": [
        "5d80f8e5a9dc9c9a94d4aeaa567e219a808b8a4a"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Sun Mar 15 11:11:44 2009 -0700"
      },
      "committer": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Sat Mar 28 13:05:30 2009 -0700"
      },
      "message": "async: remove the temporary (2.6.29) \"async is off by default\" code\n\nNow that everyone has been able to test the async code (and it\u0027s being used\nin the Moblin betas by default), we can enable it by default.\nThe various fixes needed have gone into 2.6.29 already.\n\n[With an important bugfix from Stefan Richter]\n\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\n"
    },
    {
      "commit": "f7de7621f07495ad14fb23a812003bcf8f6af65a",
      "tree": "56eee689f5bbc2cac09c08fcdf897e9366dafbf8",
      "parents": [
        "766ccb9ed406c230d13c145def08ebea1b932982"
      ],
      "author": {
        "name": "Stefan Richter",
        "email": "stefanr@s5r6.in-berlin.de",
        "time": "Mon Feb 02 13:24:34 2009 +0100"
      },
      "committer": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Sun Feb 08 10:00:26 2009 -0800"
      },
      "message": "async: use list_move_tail\n\nlist.h provides a dedicated primitive for\n\"list_del followed by list_add_tail\"... list_move_tail.\n\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nSigned-off-by: Stefan Richter \u003cstefanr@s5r6.in-berlin.de\u003e\n"
    },
    {
      "commit": "766ccb9ed406c230d13c145def08ebea1b932982",
      "tree": "952f74260d8baa66063fd8efa1b29d2dddb45c2b",
      "parents": [
        "f30d5b307c694e03368ab55f2f96b0ca4131e775"
      ],
      "author": {
        "name": "Cornelia Huck",
        "email": "cornelia.huck@de.ibm.com",
        "time": "Tue Jan 20 15:31:31 2009 +0100"
      },
      "committer": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Sun Feb 08 09:56:11 2009 -0800"
      },
      "message": "async: Rename _special -\u003e _domain for clarity.\n\nRename the async_*_special() functions to async_*_domain(), which\ndescribes the purpose of these functions much better.\n[Broke up long lines to silence checkpatch]\n\nSigned-off-by: Cornelia Huck \u003ccornelia.huck@de.ibm.com\u003e\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\n"
    },
    {
      "commit": "f30d5b307c694e03368ab55f2f96b0ca4131e775",
      "tree": "86f1ceb849bc186e4fa9b64fd8459668f4133390",
      "parents": [
        "86532d8b167e71e24da8b564348b52977b76d15f"
      ],
      "author": {
        "name": "Cornelia Huck",
        "email": "cornelia.huck@de.ibm.com",
        "time": "Mon Jan 19 13:45:33 2009 +0100"
      },
      "committer": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Sun Feb 08 09:56:11 2009 -0800"
      },
      "message": "async: Add some documentation.\n\nAdd some kerneldoc to the async interface.\n\nSigned-off-by: Cornelia Huck \u003ccornelia.huck@de.ibm.com\u003e\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\n"
    },
    {
      "commit": "86532d8b167e71e24da8b564348b52977b76d15f",
      "tree": "86cfa88409db2867ddfc45322f7cd3175b6accad",
      "parents": [
        "7a89bbc74937cd74a6bcf109cfc7c032109639be"
      ],
      "author": {
        "name": "Cornelia Huck",
        "email": "cornelia.huck@de.ibm.com",
        "time": "Mon Jan 19 13:45:31 2009 +0100"
      },
      "committer": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Sun Feb 08 09:56:10 2009 -0800"
      },
      "message": "async: Handle kthread_run() return codes.\n\nIf we fail to create the manager thread, fall back to non-fastboot.\nIf we fail to create an async thread, try again after waiting for\na bit.\n\nSigned-off-by: Cornelia Huck \u003ccornelia.huck@de.ibm.com\u003e\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\n"
    },
    {
      "commit": "7a89bbc74937cd74a6bcf109cfc7c032109639be",
      "tree": "2b542e7f48c53cf1ef462524ecdf93b4d8a03f58",
      "parents": [
        "e83102cab0fd95d4508361b061146c978b3abd60"
      ],
      "author": {
        "name": "Cornelia Huck",
        "email": "cornelia.huck@de.ibm.com",
        "time": "Mon Jan 19 13:45:28 2009 +0100"
      },
      "committer": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Sun Feb 08 09:56:10 2009 -0800"
      },
      "message": "async: Fix running list handling.\n\nasync_schedule() should pass in async_running as the running\nlist, and run_one_entry() should put the entry to be run on\nthe provided running list instead of always on the generic one.\n\nReported-by: Jonathan Corbet \u003ccorbet@lwn.net\u003e\nSigned-off-by: Cornelia Huck \u003ccornelia.huck@de.ibm.com\u003e\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\n"
    },
    {
      "commit": "58763a297405024d23d8f1d0bba3e6603660c4b6",
      "tree": "2ccbddc449bb704326070e373c5b10a8ae35e07a",
      "parents": [
        "647802d6db5f2e62e53f44bfdc61416547ba7f5b"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Wed Feb 04 15:11:58 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 05 12:56:46 2009 -0800"
      },
      "message": "kernel/async.c: fix printk warnings\n\nalpha:\n\nkernel/async.c: In function \u0027run_one_entry\u0027:\nkernel/async.c:141: warning: format \u0027%lli\u0027 expects type \u0027long long int\u0027, but argument 2 has type \u0027async_cookie_t\u0027\nkernel/async.c:149: warning: format \u0027%lli\u0027 expects type \u0027long long int\u0027, but argument 2 has type \u0027async_cookie_t\u0027\nkernel/async.c:149: warning: format \u0027%lld\u0027 expects type \u0027long long int\u0027, but argument 4 has type \u0027s64\u0027\nkernel/async.c: In function \u0027async_synchronize_cookie_special\u0027:\nkernel/async.c:250: warning: format \u0027%lli\u0027 expects type \u0027long long int\u0027, but argument 3 has type \u0027s64\u0027\n\nCc: Arjan van de Ven \u003carjan@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": "37a76bd4f1b716949fc38a6842e89f0ccb8384d0",
      "tree": "6537cab6fb0e1a9508d34ca95b25808866bf04af",
      "parents": [
        "d32ad102c6d748b510fd89f1af4232eac1be8732"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Sun Jan 11 15:35:01 2009 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 12 16:39:58 2009 -0800"
      },
      "message": "async: fix __lowest_in_progress()\n\nAt 37000 feet somewhere near Greenland I woke up from a half-sleep with the\nrealisation that __lowest_in_progress() is buggy. After landing I checked\nand there were indeed 2 problems with it; this patch fixes both:\n* The order of the list checks was wrong\n* The locking was not correct.\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": "cdb80f630be5cbc23d82331f24dc4704f75b64f4",
      "tree": "537545e474b5906e4887aaa28e4e832134a97fa3",
      "parents": [
        "b32714ba29358a688ef337d5297bf4bdc9f596dc"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Fri Jan 09 13:23:45 2009 -0800"
      },
      "committer": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Fri Jan 09 13:23:45 2009 -0800"
      },
      "message": "async: make async a command line option for now\n\n... and have it default off.\nThis does allow people to work with it for testing.\n\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\n"
    },
    {
      "commit": "33b04b9308959af7febc1c111c766fa3fd8b1934",
      "tree": "3438b08d90973cee03f8e37e41c93c774aad5c85",
      "parents": [
        "85da1fb545e5fe51c35e0576f71780cc557f4277"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Thu Jan 08 12:35:11 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 08 12:58:09 2009 -0800"
      },
      "message": "async: make async_synchronize_full() more serializing\n\nturns out that there are real problems with allowing async\ntasks that are scheduled from async tasks to run after\nthe async_synchronize_full() returns.\n\nThis patch makes the _full more strict and a complete\nsynchronization. Later I might need to add back a lighter\nform of synchronization for other uses.. but not right now.\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": "ad160d23198193135cb2bcc75222e0816b5838c0",
      "tree": "ba7cc0e98494d63a02b10ab22f896e07efa6f509",
      "parents": [
        "24b0ecad07ac4d7ef74cb6f7da08c449fa9f6a4f"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Wed Jan 07 09:28:53 2009 -0800"
      },
      "committer": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Wed Jan 07 09:31:49 2009 -0800"
      },
      "message": "async: don\u0027t do the initcall stuff post boot\n\nwhile tracking the asynchronous calls during boot using the initcall_debug\nconvention is useful, doing it once the kernel is done is actually\nbad now that we use asynchronous operations post boot as well...\n\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\n"
    },
    {
      "commit": "22a9d645677feefd402befd02edd59b122289ef1",
      "tree": "9f1215cc8f7f0e1c36b03882b2926cc26ccfa5ff",
      "parents": [
        "ede6f5aea054d3fb67c78857f7abdee602302043"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Wed Jan 07 08:45:46 2009 -0800"
      },
      "committer": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Wed Jan 07 08:45:46 2009 -0800"
      },
      "message": "async: Asynchronous function calls to speed up kernel boot\n\nRight now, most of the kernel boot is strictly synchronous, such that\nvarious hardware delays are done sequentially.\n\nIn order to make the kernel boot faster, this patch introduces\ninfrastructure to allow doing some of the initialization steps\nasynchronously, which will hide significant portions of the hardware delays\nin practice.\n\nIn order to not change device order and other similar observables, this\npatch does NOT do full parallel initialization.\n\nRather, it operates more in the way an out of order CPU does; the work may\nbe done out of order and asynchronous, but the observable effects\n(instruction retiring for the CPU) are still done in the original sequence.\n\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\n"
    }
  ]
}
