)]}'
{
  "log": [
    {
      "commit": "23a0ee908cbfba3264d19729c67c22b20fa73886",
      "tree": "541103f6283cbac6b82cff88a7b91128acfce046",
      "parents": [
        "cc7a486cac78f6fc1a24e8cd63036bae8d2ab431",
        "0f2bc27be27ca1dcc66b96131e44bf7648b959c6"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Aug 12 00:11:49 2008 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Aug 12 00:11:49 2008 +0200"
      },
      "message": "Merge branch \u0027core/locking\u0027 into core/urgent\n"
    },
    {
      "commit": "3295f0ef9ff048a4619ede597ad9ec9cab725654",
      "tree": "f39a8ecf1958130a0b86c554399d23a65b1c3991",
      "parents": [
        "8bfe0298f7a04952d19f4a2cf510d7a6311eeed0"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Aug 11 10:30:30 2008 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Aug 11 10:30:30 2008 +0200"
      },
      "message": "lockdep: rename map_[acquire|release]() \u003d\u003e lock_map_[acquire|release]()\n\nthe names were too generic:\n\n drivers/uio/uio.c:87: error: expected identifier or \u0027(\u0027 before \u0027do\u0027\n drivers/uio/uio.c:87: error: expected identifier or \u0027(\u0027 before \u0027while\u0027\n drivers/uio/uio.c:113: error: \u0027map_release\u0027 undeclared here (not in a function)\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "4f3e7524b2e703d9f8b02ac338153a53dd7ede66",
      "tree": "0033ade94f230d6044ad318e3791c55ad611069e",
      "parents": [
        "f82b217e3513fe3af342c0f3ee1494e86250c21c"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Mon Aug 11 09:30:23 2008 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Aug 11 09:30:23 2008 +0200"
      },
      "message": "lockdep: map_acquire\n\nMost the free-standing lock_acquire() usages look remarkably similar, sweep\nthem into a new helper.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "6af8bf3d86d55c98af6e453cb920ddc30867e5c7",
      "tree": "a82494403b76591082a2dc391da3136c6674b356",
      "parents": [
        "dbacefc9c4f6bd365243db379473ab7041656d90"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Tue Jul 29 22:33:49 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jul 30 09:41:47 2008 -0700"
      },
      "message": "workqueues: add comments to __create_workqueue_key()\n\nDmitry Adamushko pointed out that the error handling in\n__create_workqueue_key() is not clear, add the comment.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Dmitry Adamushko \u003cdmitry.adamushko@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8448502cfc915f70e3f8923849ade27d472044cb",
      "tree": "964522eb36ea5424ece910092da5dce773c1f6cc",
      "parents": [
        "8de6d308bab4f67fcf953562f9f08f9527cad72d"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Fri Jul 25 01:47:54 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 25 10:53:41 2008 -0700"
      },
      "message": "workqueues: do CPU_UP_CANCELED if CPU_UP_PREPARE fails\n\nThe bug was pointed out by Akinobu Mita \u003cakinobu.mita@gmail.com\u003e, and this\npatch is based on his original patch.\n\nworkqueue_cpu_callback(CPU_UP_PREPARE) expects that if it returns\nNOTIFY_BAD, _cpu_up() will send CPU_UP_CANCELED then.\n\nHowever, this is not true since\n\n\t\"cpu hotplug: cpu: deliver CPU_UP_CANCELED only to NOTIFY_OKed callbacks with CPU_UP_PREPARE\"\n\tcommit: a0d8cdb652d35af9319a9e0fb7134de2a276c636\n\nThe callback which has returned NOTIFY_BAD will not receive\nCPU_UP_CANCELED.  Change the code to fulfil the CPU_UP_CANCELED logic if\nCPU_UP_PREPARE fails.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nReported-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8de6d308bab4f67fcf953562f9f08f9527cad72d",
      "tree": "d896d82088d50a6c9d56300225605c5658f44549",
      "parents": [
        "ef1ca236b8d645349ed6569598ae3f6c1b9511c0"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Fri Jul 25 01:47:53 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 25 10:53:40 2008 -0700"
      },
      "message": "workqueues: schedule_on_each_cpu() can use schedule_work_on()\n\nschedule_on_each_cpu() can use schedule_work_on() to avoid the code\nduplication.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ef1ca236b8d645349ed6569598ae3f6c1b9511c0",
      "tree": "a193741b4aca43c90fcf2bf8be0d999d27b99eba",
      "parents": [
        "a67da70dc0955580665f5444f318b92e69a3c272"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Fri Jul 25 01:47:53 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 25 10:53:40 2008 -0700"
      },
      "message": "workqueues: queue_work() can use queue_work_on()\n\nqueue_work() can use queue_work_on() to avoid the code duplication.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a67da70dc0955580665f5444f318b92e69a3c272",
      "tree": "204164627e0fb6495516b24cca005845f492f600",
      "parents": [
        "69b895fd13d73aebf62b75502eb6513d43057ba3"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Fri Jul 25 01:47:52 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 25 10:53:40 2008 -0700"
      },
      "message": "workqueues: lockdep annotations for flush_work()\n\nAdd lockdep annotations to flush_work() and update the comment.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Jarek Poplawski \u003cjarkao2@o2.pl\u003e\nAcked-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3da1c84c00c7e5fa8348336bd8c342f9128b0f14",
      "tree": "af960c65a670319fa86846a493a6d97f9fb37cd9",
      "parents": [
        "8616a89ab761239c963eea3a63be383f127cc7e8"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Fri Jul 25 01:47:50 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 25 10:53:40 2008 -0700"
      },
      "message": "workqueues: make get_online_cpus() useable for work-\u003efunc()\n\nworkqueue_cpu_callback(CPU_DEAD) flushes cwq-\u003ethread under\ncpu_maps_update_begin().  This means that the multithreaded workqueues\ncan\u0027t use get_online_cpus() due to the possible deadlock, very bad and\nvery old problem.\n\nIntroduce the new state, CPU_POST_DEAD, which is called after\ncpu_hotplug_done() but before cpu_maps_update_done().\n\nChange workqueue_cpu_callback() to use CPU_POST_DEAD instead of CPU_DEAD.\nThis means that create/destroy functions can\u0027t rely on get_online_cpus()\nany longer and should take cpu_add_remove_lock instead.\n\n[akpm@linux-foundation.org: fix CONFIG_SMP\u003dn]\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nAcked-by: Gautham R Shenoy \u003cego@in.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Max Krasnyansky \u003cmaxk@qualcomm.com\u003e\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Vegard Nossum \u003cvegard.nossum@gmail.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8616a89ab761239c963eea3a63be383f127cc7e8",
      "tree": "b74212be00198b64d0c3fcbf552e0e3ced01a350",
      "parents": [
        "db700897224b5ebdf852f2d38920ce428940d059"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Fri Jul 25 01:47:49 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 25 10:53:40 2008 -0700"
      },
      "message": "workqueues: schedule_on_each_cpu: use flush_work()\n\nChange schedule_on_each_cpu() to use flush_work() instead of\nflush_workqueue(), this way we don\u0027t wait for other work_struct\u0027s which\ncan be queued meanwhile.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Jarek Poplawski \u003cjarkao2@gmail.com\u003e\nCc: Max Krasnyansky \u003cmaxk@qualcomm.com\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": "db700897224b5ebdf852f2d38920ce428940d059",
      "tree": "98f0052929e79b35393352addde70fa5e97b8dee",
      "parents": [
        "1a4d9b0aa0d3c50314e57525a5e5ec2cfc48b4c8"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Fri Jul 25 01:47:49 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 25 10:53:40 2008 -0700"
      },
      "message": "workqueues: implement flush_work()\n\nMost of users of flush_workqueue() can be changed to use cancel_work_sync(),\nbut sometimes we really need to wait for the completion and cancelling is not\nan option. schedule_on_each_cpu() is good example.\n\nAdd the new helper, flush_work(work), which waits for the completion of the\nspecific work_struct. More precisely, it \"flushes\" the result of of the last\nqueue_work() which is visible to the caller.\n\nFor example, this code\n\n\tqueue_work(wq, work);\n\t/* WINDOW */\n\tqueue_work(wq, work);\n\n\tflush_work(work);\n\ndoesn\u0027t necessary work \"as expected\". What can happen in the WINDOW above is\n\n\t- wq starts the execution of work-\u003efunc()\n\n\t- the caller migrates to another CPU\n\nnow, after the 2nd queue_work() this work is active on the previous CPU, and\nat the same time it is queued on another. In this case flush_work(work) may\nreturn before the first work-\u003efunc() completes.\n\nIt is trivial to add another helper\n\n\tint flush_work_sync(struct work_struct *work)\n\t{\n\t\treturn flush_work(work) || wait_on_work(work);\n\t}\n\nwhich works \"more correctly\", but it has to iterate over all CPUs and thus\nit much slower than flush_work().\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nAcked-by: Max Krasnyansky \u003cmaxk@qualcomm.com\u003e\nAcked-by: Jarek Poplawski \u003cjarkao2@gmail.com\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": "1a4d9b0aa0d3c50314e57525a5e5ec2cfc48b4c8",
      "tree": "2ea94cce9fe2cfbcfdc2fd25d33e57f31e0b2699",
      "parents": [
        "565b9b14e7f48131bca58840aa404bbef058fa89"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Fri Jul 25 01:47:47 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 25 10:53:40 2008 -0700"
      },
      "message": "workqueues: insert_work: use \"list_head *\" instead of \"int tail\"\n\ninsert_work() inserts the new work_struct before or after cwq-\u003eworklist,\ndepending on the \"int tail\" parameter. Change it to accept \"list_head *\"\ninstead, this shrinks .text a bit and allows us to insert the barrier\nafter specific work_struct.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Jarek Poplawski \u003cjarkao2@gmail.com\u003e\nCc: Max Krasnyansky \u003cmaxk@qualcomm.com\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": "c1a220e7acf8ad2c03504891f4a70cd9c32c904b",
      "tree": "902104a5a5debb5b881d7af4110ad1258ea5b0bd",
      "parents": [
        "0d83304c7e7bd3b05be90281b3a47841bc8f057a"
      ],
      "author": {
        "name": "Zhang Rui",
        "email": "rui.zhang@intel.com",
        "time": "Wed Jul 23 21:28:39 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:23 2008 -0700"
      },
      "message": "pm: introduce new interfaces schedule_work_on() and queue_work_on()\n\nThis interface allows adding a job on a specific cpu.\n\nAlthough a work struct on a cpu will be scheduled to other cpu if the cpu\ndies, there is a recursion if a work task tries to offline the cpu it\u0027s\nrunning on.  we need to schedule the task to a specific cpu in this case.\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d10897\n\n[oleg@tv-sign.ru: cleanups]\nSigned-off-by: Zhang Rui \u003crui.zhang@intel.com\u003e\nTested-by: Rus \u003charbour@sfinx.od.ua\u003e\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nAcked-by: Pavel Machek \u003cpavel@ucw.cz\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "68083e05d72d94f347293d8cc0067050ba904bfa",
      "tree": "842e71365bd90866be7add181661a4039d891564",
      "parents": [
        "7baac8b91f9871ba8cb09af84de4ae1d86d07812",
        "b7279469d66b55119784b8b9529c99c1955fe747"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Jul 06 14:23:39 2008 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Jul 06 14:23:39 2008 +0200"
      },
      "message": "Merge commit \u0027v2.6.26-rc9\u0027 into cpus4096\n"
    },
    {
      "commit": "cde53535991fbb5c34a1566f25955297c1487b8d",
      "tree": "4f87e67b52c8761cfc421a619379263733b91159",
      "parents": [
        "a926c063738f31c8c8b5c2b883812a40e7868072"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jul 04 09:59:22 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 04 10:40:04 2008 -0700"
      },
      "message": "Christoph has moved\n\nRemove all clameter@sgi.com addresses from the kernel tree since they will\nbecome invalid on June 27th.  Change my maintainer email address for the\nslab allocators to cl@linux-foundation.org (which will be the new email\naddress for the future).\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "363ab6f1424cdea63e5d182312d60e19077b892a",
      "tree": "e200197412691015ca8de083155985e7e460ecfc",
      "parents": [
        "068b12772a64c2440ef2f64ac5d780688c06576f"
      ],
      "author": {
        "name": "Mike Travis",
        "email": "travis@sgi.com",
        "time": "Mon May 12 21:21:13 2008 +0200"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Fri May 23 18:35:12 2008 +0200"
      },
      "message": "core: use performance variant for_each_cpu_mask_nr\n\nChange references from for_each_cpu_mask to for_each_cpu_mask_nr\nwhere appropriate\n\nReviewed-by: Paul Jackson \u003cpj@sgi.com\u003e\nReviewed-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Mike Travis \u003ctravis@sgi.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n\n"
    },
    {
      "commit": "8a3e77cc212f3bc8eccc95e0d046405cf2a02764",
      "tree": "a5812f9b077d7faf00f82969a9bd766e97ecfd97",
      "parents": [
        "55e462b05b5df4fd113c4a304c4f487d44b0898e"
      ],
      "author": {
        "name": "Andrew Liu",
        "email": "shengping.liu@windriver.com",
        "time": "Thu May 01 04:35:14 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 01 08:04:02 2008 -0700"
      },
      "message": "workqueue: remove redundant function invocation\n\ntimer_stats_timer_set_start_info is invoked twice, additionally, the\ninvocation of this function can be moved to where it is only called when a\ndelay is really required.\n\nSigned-off-by: Andrew Liu \u003cshengping.liu@windriver.com\u003e\nCc: Pavel Machek \u003cpavel@ucw.cz\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "af1f16d08f38ab6f17b5760e6ec9d2b7d3a5ff1a",
      "tree": "7d03fc171300efd43634d2e28d913fd508ab7474",
      "parents": [
        "d40cee245ff6ad05d3448401d7320be82c1c5af1"
      ],
      "author": {
        "name": "Harvey Harrison",
        "email": "harvey.harrison@gmail.com",
        "time": "Wed Apr 30 00:55:08 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:54 2008 -0700"
      },
      "message": "kernel: replace remaining __FUNCTION__ occurrences\n\n__FUNCTION__ is gcc-specific, use __func__\n\nSigned-off-by: Harvey Harrison \u003charvey.harrison@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1e35eaa2d86419470f3f3aed9acd85b8addff25c",
      "tree": "4cea78468e4789dcd64a4c38100e010994f1b4ff",
      "parents": [
        "00dfcaf748f46de89efe41baa298b5cf9adda67e"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Tue Apr 29 01:00:28 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 29 08:06:11 2008 -0700"
      },
      "message": "cleanup_workqueue_thread: remove the unneeded \"cpu\" parameter\n\ncleanup_workqueue_thread() doesn\u0027t need the second argument, remove it.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "00dfcaf748f46de89efe41baa298b5cf9adda67e",
      "tree": "4420dbfac9ba213e1604320cf9615a505ca909fd",
      "parents": [
        "786083667e0ced85ce17c4c0b6c57a9f47c5b9f2"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Tue Apr 29 01:00:27 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 29 08:06:11 2008 -0700"
      },
      "message": "workqueues: shrink cpu_populated_map when CPU dies\n\nWhen cpu_populated_map was introduced, it was supposed that cwq-\u003ethread can\nsurvive after CPU_DEAD, that is why we never shrink cpu_populated_map.\n\nThis is not very nice, we can safely remove the already dead CPU from the map.\n The only required change is that destroy_workqueue() must hold the hotplug\nlock until it destroys all cwq-\u003ethread\u0027s, to protect the cpu_populated_map.\nWe could make the local copy of cpu mask and drop the lock, but\nsizeof(cpumask_t) may be very large.\n\nAlso, fix the comment near queue_work().  Unless _cpu_down() happens we do\nguarantee the cpu-affinity of the work_struct, and we have users which rely on\nthis.\n\n[akpm@linux-foundation.org: repair comment]\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d59b949f771eb3cbe50865c72e13e2a0a8d4d781",
      "tree": "cf0ca4406e2e82a3c7b7aaaf791a1f4296d1b126",
      "parents": [
        "029a07e0311c7fef968d44b50beca53969cee40b"
      ],
      "author": {
        "name": "Pavel Machek",
        "email": "pavel@ucw.cz",
        "time": "Tue Feb 05 00:48:13 2008 +0100"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Apr 17 12:22:30 2008 +0200"
      },
      "message": "timer_list: add annotations to workqueue.c\n\nAdd timer list annotations to workqueue.c so we can see the call site\nin the timer stats.\n\nSigned-off-by: Pavel Machek \u003cPavel@suse.cz\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "6d141c3ff6d74cc30cdbf26155842756ac16cf7f",
      "tree": "55c20a99ba64aa48ebc17d1df61e9c7e7a5dd0cc",
      "parents": [
        "ae161068756c203ccbeeb9178f4d4f6665d294cf"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Fri Feb 08 04:21:09 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Feb 08 09:22:37 2008 -0800"
      },
      "message": "workqueue: make delayed_work_timer_fn() static\n\ndelayed_work_timer_fn() is a timer function, make it static.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7ad5b3a505e68cfdc342933d6e0fc0eaa5e0a4f7",
      "tree": "6715ffd8df509d3d53dea581bb97418a21bc7cbc",
      "parents": [
        "fc9b52cd8f5f459b88adcf67c47668425ae31a78"
      ],
      "author": {
        "name": "Harvey Harrison",
        "email": "harvey.harrison@gmail.com",
        "time": "Fri Feb 08 04:19:53 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Feb 08 09:22:31 2008 -0800"
      },
      "message": "kernel: remove fastcall in kernel/*\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Harvey Harrison \u003charvey.harrison@gmail.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "95402b3829010fe1e208f44e4a158ccade88969a",
      "tree": "3b9895b47623b4673e3c11121980e5171af76bbe",
      "parents": [
        "86ef5c9a8edd78e6bf92879f32329d89b2d55b5a"
      ],
      "author": {
        "name": "Gautham R Shenoy",
        "email": "ego@in.ibm.com",
        "time": "Fri Jan 25 21:08:02 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jan 25 21:08:02 2008 +0100"
      },
      "message": "cpu-hotplug: replace per-subsystem mutexes with get_online_cpus()\n\nThis patch converts the known per-subsystem mutexes to get_online_cpus\nput_online_cpus. It also eliminates the CPU_LOCK_ACQUIRE and\nCPU_LOCK_RELEASE hotplug notification events.\n\nSigned-off-by: Gautham  R Shenoy \u003cego@in.ibm.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "eb13ba873881abd5e15af784756a61af635e665e",
      "tree": "228bf4afa2c4418ad09cd50b3ebb762f793ed84a",
      "parents": [
        "5a26db5bd25cf4bf32ae9fa9f6136b6b6d5b45c5"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Wed Jan 16 09:51:58 2008 +0100"
      },
      "committer": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Wed Jan 16 09:51:58 2008 +0100"
      },
      "message": "lockdep: fix workqueue creation API lockdep interaction\nDave Young reported warnings from lockdep that the workqueue API\ncan sometimes try to register lockdep classes with the same key\nbut different names. This is not permitted in lockdep.\n\nUnfortunately, I was unaware of that restriction when I wrote\nthe code to debug workqueue problems with lockdep and used the\nworkqueue name as the lockdep class name. This can obviously\nlead to the problem if the workqueue name is dynamic.\n\nThis patch solves the problem by always using a constant name\nfor the workqueue\u0027s lockdep class, namely either the constant\nname that was passed in or a string consisting of the variable\nname.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\n"
    },
    {
      "commit": "ba25f9dcc4ea6e30839fcab5a5516f2176d5bfed",
      "tree": "3123c03b25dd5c0cd24b6ab4fc16731217838157",
      "parents": [
        "9a2e70572e94e21e7ec4186702d045415422bda0"
      ],
      "author": {
        "name": "Pavel Emelyanov",
        "email": "xemul@openvz.org",
        "time": "Thu Oct 18 23:40:40 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Oct 19 11:53:43 2007 -0700"
      },
      "message": "Use helpers to obtain task pid in printks\n\nThe task_struct-\u003epid member is going to be deprecated, so start\nusing the helpers (task_pid_nr/task_pid_vnr/task_pid_nr_ns) in\nthe kernel.\n\nThe first thing to start with is the pid, printed to dmesg - in\nthis case we may safely use task_pid_nr(). Besides, printks produce\nmore (much more) than a half of all the explicit pid usage.\n\n[akpm@linux-foundation.org: git-drm went and changed lots of stuff]\nSigned-off-by: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nCc: Dave Airlie \u003cairlied@linux.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4e6045f134784f4b158b3c0f7a282b04bd816887",
      "tree": "3304628f666c8524accd10f40da48cfba8b08608",
      "parents": [
        "cf7b708c8d1d7a27736771bcf4c457b332b0f818"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Thu Oct 18 23:39:55 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Oct 19 11:53:38 2007 -0700"
      },
      "message": "workqueue: debug flushing deadlocks with lockdep\n\nIn the following scenario:\n\ncode path 1:\n  my_function() -\u003e lock(L1); ...; flush_workqueue(); ...\n\ncode path 2:\n  run_workqueue() -\u003e my_work() -\u003e ...; lock(L1); ...\n\nyou can get a deadlock when my_work() is queued or running\nbut my_function() has acquired L1 already.\n\nThis patch adds a pseudo-lock to each workqueue to make lockdep\nwarn about this scenario.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nAcked-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d243769d3f83b318813a04a9592bb7cfedc6c280",
      "tree": "4f288332b6b20f414b452219b1ea5ff4cc41eaa5",
      "parents": [
        "721ebe005c3bb9add55b2e462dfc1bcf8efc6b8f"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Mon Aug 27 16:06:19 2007 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Aug 27 10:27:48 2007 -0700"
      },
      "message": "fix bogus hotplug cpu warning\n\nFix bogus DEBUG_PREEMPT warning on x86_64, when cpu brought online after\nbootup: current_is_keventd is right to note its use of smp_processor_id\nis preempt-safe, but should use raw_smp_processor_id to avoid the warning.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "13c22168b7276dffe49dc66675d5a78f6d288e0d",
      "tree": "4062929954f04db9c24be08cba94a0ed6e7fd65f",
      "parents": [
        "87a7defb0d4255d5aea2c5067813b26836127983"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Tue Jul 17 04:03:55 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:03 2007 -0700"
      },
      "message": "destroy_workqueue() can livelock\n\nPointed out by Michal Schmidt \u003cmschmidt@redhat.com\u003e.\n\nThe bug was introduced in 2.6.22 by me.\n\ncleanup_workqueue_thread() does flush_cpu_workqueue(cwq) in a loop until\n-\u003eworklist becomes empty.  This is live-lockable, a re-niced caller can get\nCPU after wake_up() and insert a new barrier before the lower-priority\ncwq-\u003ethread has a chance to clear -\u003ecurrent_work.\n\nChange cleanup_workqueue_thread() to do flush_cpu_workqueue(cwq) only once.\n We can rely on the fact that run_workqueue() won\u0027t return until it flushes\nall works.  So it is safe to call kthread_stop() after that, the \"should\nstop\" request won\u0027t be noticed until run_workqueue() returns.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Michal Schmidt \u003cmschmidt@redhat.com\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "831441862956fffa17b9801db37e6ea1650b0f69",
      "tree": "b0334921341f8f1734bdd3243de76d676329d21c",
      "parents": [
        "787d2214c19bcc9b6ac48af0ce098277a801eded"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Tue Jul 17 04:03:35 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:02 2007 -0700"
      },
      "message": "Freezer: make kernel threads nonfreezable by default\n\nCurrently, the freezer treats all tasks as freezable, except for the kernel\nthreads that explicitly set the PF_NOFREEZE flag for themselves.  This\napproach is problematic, since it requires every kernel thread to either\nset PF_NOFREEZE explicitly, or call try_to_freeze(), even if it doesn\u0027t\ncare for the freezing of tasks at all.\n\nIt seems better to only require the kernel threads that want to or need to\nbe frozen to use some freezer-related code and to remove any\nfreezer-related code from the other (nonfreezable) kernel threads, which is\ndone in this patch.\n\nThe patch causes all kernel threads to be nonfreezable by default (ie.  to\nhave PF_NOFREEZE set by default) and introduces the set_freezable()\nfunction that should be called by the freezable kernel threads in order to\nunset PF_NOFREEZE.  It also makes all of the currently freezable kernel\nthreads call set_freezable(), so it shouldn\u0027t cause any (intentional)\nchange of behaviour to appear.  Additionally, it updates documentation to\ndescribe the freezing of tasks more accurately.\n\n[akpm@linux-foundation.org: build fixes]\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nAcked-by: Nigel Cunningham \u003cnigel@nigel.suspend2.net\u003e\nCc: Pavel Machek \u003cpavel@ucw.cz\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Gautham R Shenoy \u003cego@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1f1f642e2f092e37eb9038060eb0100c44f55a11",
      "tree": "73dea7896dea85dcf5cfa13b9e3ebf9645868160",
      "parents": [
        "f5a421a4509a7e2dff11da0f01b0548f4f84d503"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Sun Jul 15 23:41:44 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Jul 16 09:05:51 2007 -0700"
      },
      "message": "make cancel_xxx_work_sync() return a boolean\n\nChange cancel_work_sync() and cancel_delayed_work_sync() to return a boolean\nindicating whether the work was actually cancelled.  A zero return value means\nthat the work was not pending/queued.\n\nWithout that kind of change it is not possible to avoid flush_workqueue()\nsometimes, see the next patch as an example.\n\nAlso, this patch unifies both functions and kills the (unlikely) busy-wait\nloop.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nAcked-by: Jarek Poplawski \u003cjarkao2@o2.pl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f5a421a4509a7e2dff11da0f01b0548f4f84d503",
      "tree": "1338d2ab1e5b88ff0b62c2fd38feed38112cffea",
      "parents": [
        "422b14c2e2f816f58ce8ce0ab0beeae02dfb7a75"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Sun Jul 15 23:41:44 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Jul 16 09:05:51 2007 -0700"
      },
      "message": "rename cancel_rearming_delayed_work() to cancel_delayed_work_sync()\n\nImho, the current naming of cancel_xxx workqueue functions is very confusing.\n\n\tcancel_delayed_work()\n\tcancel_rearming_delayed_work()\n\tcancel_rearming_delayed_workqueue()\t// obsolete\n\n\tcancel_work_sync()\n\nThis looks as if the first 2 functions differ in \"type\" of their argument\nwhich is not true any longer, nowadays the difference is the behaviour.\n\nThe semantics of cancel_rearming_delayed_work(dwork) was changed\nsignificantly, it doesn\u0027t require that dwork rearms itself, and cancels dwork\nsynchronously.\n\nRename it to cancel_delayed_work_sync().  This matches cancel_delayed_work()\nand cancel_work_sync().  Re-create cancel_rearming_delayed_work() as a simple\ninline obsolete wrapper, like cancel_rearming_delayed_workqueue().\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nAcked-by: Jarek Poplawski \u003cjarkao2@o2.pl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "14441960e8c27a64487e0b455b323e784f33583f",
      "tree": "bc224f965db3951edbbee7e776e334187b5a32d6",
      "parents": [
        "3fcbc72965f767bb5c4518aef754c28f45fc6147"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 23 13:57:57 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 23 20:14:13 2007 -0700"
      },
      "message": "simplify cleanup_workqueue_thread()\n\ncleanup_workqueue_thread() and cwq_should_stop() are overcomplicated.\n\nConvert the code to use kthread_should_stop/kthread_stop as was\nsuggested by Gautham and Srivatsa.\n\nIn particular this patch removes the (unlikely) busy-wait loop from the\nexit path, it was a temporary and ugly kludge (if not a bug).\n\nNote: the current code was designed to solve another old problem:\nwork-\u003efunc can\u0027t share locks with hotplug callbacks.  I think this could\nbe done, see\n\n\thttp://marc.info/?l\u003dlinux-kernel\u0026m\u003d116905366428633\n\nbut this needs some more complications to preserve CPU affinity of\ncwq-\u003ethread during cpu_up().  A freezer-based hotplug looks more\nappealing.\n\n[akpm@linux-foundation.org: make it more tolerant of gcc borkenness]\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Zilvinas Valinskas \u003czilvinas@wilibox.com\u003e\nCc: Gautham R Shenoy \u003cego@in.ibm.com\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8bb7844286fb8c9fce6f65d8288aeb09d03a5e0d",
      "tree": "f4e305edaedbde05774bb1e4acd89a9475661d2e",
      "parents": [
        "f37bc2712b54ec641e0c0c8634f1a4b61d9956c0"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Wed May 09 02:35:10 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:56 2007 -0700"
      },
      "message": "Add suspend-related notifications for CPU hotplug\n\nSince nonboot CPUs are now disabled after tasks and devices have been\nfrozen and the CPU hotplug infrastructure is used for this purpose, we need\nspecial CPU hotplug notifications that will help the CPU-hotplug-aware\nsubsystems distinguish normal CPU hotplug events from CPU hotplug events\nrelated to a system-wide suspend or resume operation in progress.  This\npatch introduces such notifications and causes them to be used during\nsuspend and resume transitions.  It also changes all of the\nCPU-hotplug-aware subsystems to take these notifications into consideration\n(for now they are handled in the same way as the corresponding \"normal\"\nones).\n\n[oleg@tv-sign.ru: cleanups]\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nCc: Gautham R Shenoy \u003cego@in.ibm.com\u003e\nCc: Pavel Machek \u003cpavel@ucw.cz\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6e84d644b5929789398914b0ccf447355dec6fb0",
      "tree": "0de4bd0c8d3bf4cd764275f02d56d8576f376ae5",
      "parents": [
        "7b0834c26fd796c79dfcc3939ed2b9122b75246f"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:46 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:53 2007 -0700"
      },
      "message": "make cancel_rearming_delayed_work() reliable\n\nThanks to Jarek Poplawski for the ideas and for spotting the bug in the\ninitial draft patch.\n\ncancel_rearming_delayed_work() currently has many limitations, because it\nrequires that dwork always re-arms itself via queue_delayed_work().  So it\nhangs forever if dwork doesn\u0027t do this, or cancel_rearming_delayed_work/\ncancel_delayed_work was already called.  It uses flush_workqueue() in a\nloop, so it can\u0027t be used if workqueue was freezed, and it is potentially\nlive- lockable on busy system if delay is small.\n\nWith this patch cancel_rearming_delayed_work() doesn\u0027t make any assumptions\nabout dwork, it can re-arm itself via queue_delayed_work(), or\nqueue_work(), or do nothing.\n\nAs a \"side effect\", cancel_work_sync() was changed to handle re-arming works\nas well.\n\nDisadvantages:\n\n\t- this patch adds wmb() to insert_work().\n\n\t- slowdowns the fast path (when del_timer() succeeds on entry) of\n\t  cancel_rearming_delayed_work(), because wait_on_work() is called\n\t  unconditionally. In that case, compared to the old version, we are\n\t  doing \"unneeded\" lock/unlock for each online CPU.\n\n\t  On the other hand, this means we don\u0027t need to use cancel_work_sync()\n\t  after cancel_rearming_delayed_work().\n\n\t- complicates the code (.text grows by 130 bytes).\n\n[akpm@linux-foundation.org: fix speling]\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: David Chinner \u003cdgc@sgi.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Gautham Shenoy \u003cego@in.ibm.com\u003e\nAcked-by: Jarek Poplawski \u003cjarkao2@o2.pl\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5de18d169739293e27e0cf9acfc75a2d2f4aa572",
      "tree": "3360a4235a92d787fb7e48fccfc945fa0ee15758",
      "parents": [
        "90cce03d9bfcb28600a56efef6b0a5a4fbf6c2b1"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:36 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:53 2007 -0700"
      },
      "message": "worker_thread: don\u0027t play with SIGCHLD and numa policy\n\nworker_thread() inherits ignored SIGCHLD and numa_default_policy() from its\nparent, kthreadd.  No need to setup this again.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nAcked-by: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "28e53bddf814485699a4142bc056fd37d4e11dd4",
      "tree": "5182090c4cc2186eedbda3cb90ed82a2836f6ff6",
      "parents": [
        "5830c5902138f80b0a097b797200c739466beedd"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:22 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:53 2007 -0700"
      },
      "message": "unify flush_work/flush_work_keventd and rename it to cancel_work_sync\n\nflush_work(wq, work) doesn\u0027t need the first parameter, we can use cwq-\u003ewq\n(this was possible from the very beginnig, I missed this).  So we can unify\nflush_work_keventd and flush_work.\n\nAlso, rename flush_work() to cancel_work_sync() and fix all callers.\nPerhaps this is not the best name, but \"flush_work\" is really bad.\n\n(akpm: this is why the earlier patches bypassed maintainers)\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Jeff Garzik \u003cjeff@garzik.org\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Tejun Heo \u003chtejun@gmail.com\u003e\nCc: Auke Kok \u003cauke-jan.h.kok@intel.com\u003e,\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "85f4186af944c1240c84934a9ab578743df2d69b",
      "tree": "743d6a619538cda98495aaaac67a86246d3007e4",
      "parents": [
        "b9aac8e0d32499217417ff0b494731811f185b18"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:20 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:53 2007 -0700"
      },
      "message": "worker_thread: fix racy try_to_freeze() usage\n\nworker_thread() can miss freeze_process()-\u003esignal_wake_up() if it happens\nbetween try_to_freeze() and prepare_to_wait().  We should check freezing()\nbefore entering schedule().\n\nThis race was introduced by me in\n\n\t[PATCH 1/1] workqueue: don\u0027t migrate pending works from the dead CPU\n\nLooks like mm/vmscan.c:kswapd() has the same race.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b9aac8e0d32499217417ff0b494731811f185b18",
      "tree": "1cd79adb88431d3ebe6b9dd253b8ed1bbd4f9e07",
      "parents": [
        "23b2e5991afde5af91a1a661d7f47ee56120759e"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:20 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:53 2007 -0700"
      },
      "message": "worker_thread: don\u0027t play with signals\n\nworker_thread() doesn\u0027t need to \"Block and flush all signals\", this was\nalready done by its caller, kthread().\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "23b2e5991afde5af91a1a661d7f47ee56120759e",
      "tree": "d4b8e5bc1a311abd6b6de469f862a8b53c5f9f36",
      "parents": [
        "c214b2cc5f9be7c236f9b91acf524688ff0e3e72"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:19 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "workqueue: kill NOAUTOREL works\n\nWe don\u0027t have any users, and it is not so trivial to use NOAUTOREL works\ncorrectly.  It is better to simplify API.\n\nDelete NOAUTOREL support and rename work_release to work_clear_pending to\navoid a confusion.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nAcked-by: David Howells \u003cdhowells@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": "1634c48f8b85dcb05101f1eb2eab9af40b5976da",
      "tree": "143aa0fbf21e712a5258806b37f2024ba432b522",
      "parents": [
        "a848e3b67c07ed79374bd0f9b82f9ce45a419643"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:18 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "make cancel_rearming_delayed_work() work on any workqueue, not just keventd_wq\n\ncancel_rearming_delayed_workqueue(wq, dwork) doesn\u0027t need the first\nparameter.  We don\u0027t hang on un-queued dwork any longer, and work-\u003edata\ndoesn\u0027t change its type.  This means we can always figure out \"wq\" from\ndwork when it is needed.\n\nRemove this parameter, and rename the function to\ncancel_rearming_delayed_work().  Re-create an inline \"obsolete\"\ncancel_rearming_delayed_workqueue(wq) which just calls\ncancel_rearming_delayed_work().\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a848e3b67c07ed79374bd0f9b82f9ce45a419643",
      "tree": "72f4385e12310bf8e1b959d4d90d32f05c10cd61",
      "parents": [
        "63bc0362521cbaae3ed17b8de7b094f9492453f0"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:17 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "workqueue: introduce wq_per_cpu() helper\n\nCleanup.  A number of per_cpu_ptr(wq-\u003ecpu_wq, cpu) users have to check that\ncpu is valid for this wq.  Make a simple helper.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "63bc0362521cbaae3ed17b8de7b094f9492453f0",
      "tree": "2a1bee6651fe00b76828cf75742bbff221188990",
      "parents": [
        "ed7c0feede39d70092d048ec30f59bb1df69eec6"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:16 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "unify queue_delayed_work() and queue_delayed_work_on()\n\nChange queue_delayed_work() to use queue_delayed_work_on() to avoid the code\nduplication (saves 133 bytes).\n\nQ: queue_delayed_work() enqueues \u0026dwork-\u003ework directly when delay \u003d\u003d 0, why?\n\n[jirislaby@gmail.com: oops fix]\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Jiri Slaby \u003cjirislaby@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ed7c0feede39d70092d048ec30f59bb1df69eec6",
      "tree": "67ff89df1a5db2037da34ddf17002b4c7ff218df",
      "parents": [
        "06ba38a9a0f6ceffe70343f684c5a690e3710ef4"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:16 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "make queue_delayed_work() friendly to flush_fork()\n\nCurrently typeof(delayed_work-\u003ework.data) is\n\n\t\"struct workqueue_struct\" when the timer is pending\n\n\t\"struct cpu_workqueue_struct\" whe the work is queued\n\nThis makes impossible to use flush_fork(delayed_work-\u003ework) in addition\nto cancel_delayed_work/cancel_rearming_delayed_work, not good.\n\nChange queue_delayed_work/delayed_work_timer_fn to use cwq, not wq. This\ncomplicates (and uglifies) these functions a little bit, but alows us to\nuse flush_fork(dwork) and imho makes the whole code more consistent.\n\nAlso, document the fact that cancel_rearming_delayed_work() doesn\u0027t garantee\nthe completion of work-\u003efunc() upon return.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "06ba38a9a0f6ceffe70343f684c5a690e3710ef4",
      "tree": "500f4d8a3be212ececa80ead44d9658c8b7a4ce1",
      "parents": [
        "c12920d19078eb8fd99560ec232a6e05c6ff1aa8"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:15 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "workqueues: shift kthread_bind() from CPU_UP_PREPARE to CPU_ONLINE\n\nCPU_UP_PREPARE binds cwq-\u003ethread to the new CPU.  So CPU_UP_CANCELED tries to\nwake up the task which is bound to the failed CPU.\n\nWith this patch we don\u0027t bind cwq-\u003ethread until CPU becomes online.  The first\nwake_up() after kthread_create() is a bit special, make a simple helper for\nthat.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Gautham R Shenoy \u003cego@in.ibm.com\u003e\nCc: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c12920d19078eb8fd99560ec232a6e05c6ff1aa8",
      "tree": "614d7acbb8393bc3ae16d41c5a7f69a0abb4c9c1",
      "parents": [
        "cce1a1656c9a3fdc6c6c1029b576e4ab6ecaac37"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:14 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "workqueue: make init_workqueues() __init\n\nThe only caller of init_workqueues() is do_basic_setup().\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cce1a1656c9a3fdc6c6c1029b576e4ab6ecaac37",
      "tree": "016a79e653156e32766f17bd801ffd0e4dd3a79f",
      "parents": [
        "b1f4ec172f75bc2f5cc4f4be69b5587660a955d2"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:13 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "workqueue: introduce workqueue_struct-\u003esinglethread\n\nAdd explicit workqueue_struct-\u003esinglethread flag.  This lessens .text a\nlittle, but most importantly this allows us to manipulate wq-\u003elist without\nchangine the meaning of is_single_threaded().\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b1f4ec172f75bc2f5cc4f4be69b5587660a955d2",
      "tree": "41a96f3996246d1f8667b9b84705a800f03d7c49",
      "parents": [
        "dfb4b82e1c631b1a6057e77212996a890aa515b7"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:12 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "workqueue: introduce cpu_singlethread_map\n\nThe code like\n\n\tif (is_single_threaded(wq))\n\t\tdo_something(singlethread_cpu);\n\telse {\n\t\tfor_each_cpu_mask(cpu, cpu_populated_map)\n\t\t\tdo_something(cpu);\n\t}\n\nlooks very annoying. We can add \"static cpumask_t cpu_singlethread_map\" and\nsimplify the code. Lessens .text a bit, and imho makes the code more readable.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dfb4b82e1c631b1a6057e77212996a890aa515b7",
      "tree": "9e2fcd9ff6bd990740b3f0a48fc4194f2e64d89f",
      "parents": [
        "f293ea92007419e4f9c52db0cf57af17f45b9f94"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:11 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "workqueue: make cancel_rearming_delayed_workqueue() work on idle dwork\n\ncancel_rearming_delayed_workqueue(dwork) will hang forever if dwork was not\nscheduled, because in that case cancel_delayed_work()-\u003edel_timer_sync() never\nreturns true.\n\nI don\u0027t know if there are any callers which may have problems, but this is not\nso convenient, and the fix is very simple.\n\nQ: looks like we don\u0027t need \"struct workqueue_struct *wq\" parameter.  If the\ntimer was aborted successfully, get_wq_data() \u003d\u003d wq.  Is it worth to add the\nnew function?\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f293ea92007419e4f9c52db0cf57af17f45b9f94",
      "tree": "829d06499c1d9004ca530e5f23de43df27d3baa4",
      "parents": [
        "7097a87afe937a5879528d52880c2d95f089e96c"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:10 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "workqueue: don\u0027t save interrupts in run_workqueue()\n\nwork-\u003efunc() may sleep, it\u0027s a bug to call run_workqueue() with irqs disabled.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7097a87afe937a5879528d52880c2d95f089e96c",
      "tree": "f06090c0f6ed327ee2894deb8ac7c588ab55bf4e",
      "parents": [
        "3af24433efac62f451bfdb1cf1edb7181fb73645"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:10 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "workqueue: kill run_scheduled_work()\n\nBecause it has no callers.\n\nActually, I think the whole idea of run_scheduled_work() was not right, not\ngood to mix \"unqueue this work and execute its -\u003efunc()\" in one function.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3af24433efac62f451bfdb1cf1edb7181fb73645",
      "tree": "330353b50a88615ef6e99440e8412667ae0a855e",
      "parents": [
        "36aa9dfc39bf473780439f5629c30f59d677e793"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:09 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "workqueue: don\u0027t migrate pending works from the dead CPU\n\nCurrently CPU_DEAD uses kthread_stop() to stop cwq-\u003ethread and then\ntransfers cwq-\u003eworklist to another CPU.  However, it is very unlikely that\nworker_thread() will notice kthread_should_stop() before flushing\ncwq-\u003eworklist.  It is only possible if worker_thread() was preempted after\nrun_workqueue(cwq), a new work_struct was added, and CPU_DEAD happened\nbefore cwq-\u003ethread has a chance to run.\n\nThis means that take_over_work() mostly adds unneeded complications.  Note\nalso that kthread_stop() is not good per se, wake_up_process() may confuse\nwork-\u003efunc() if it sleeps waiting for some event.\n\nRemove take_over_work() and migrate_sequence complications.  CPU_DEAD sets\nthe cwq-\u003eshould_stop flag (introduced by this patch) and waits for\ncwq-\u003ethread to flush cwq-\u003eworklist and exit.  Because the dead CPU is not\non cpu_online_map, no more works can be added to that cwq.\n\ncpu_populated_map was introduced to optimize for_each_possible_cpu(), it is\nnot strictly needed, and it is more a documentation in fact.\n\nSaves 418 bytes.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: \"Pallipadi, Venkatesh\" \u003cvenkatesh.pallipadi@intel.com\u003e\nCc: Gautham shenoy \u003cego@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "36aa9dfc39bf473780439f5629c30f59d677e793",
      "tree": "301d615747210733a271c376fc036a7480594207",
      "parents": [
        "d721304dce0ced0b3b0366996cc02929669708a8"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:08 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "workqueue: don\u0027t clear cwq-\u003ethread until it exits\n\nPointed out by Srivatsa Vaddagiri.\n\ncleanup_workqueue_thread() sets cwq-\u003ethread \u003d NULL and does kthread_stop().\nThis breaks the \"if (cwq-\u003ethread \u003d\u003d current)\" logic in flush_cpu_workqueue()\nand leads to deadlock.\n\nKill the thead first, then clear cwq-\u003ethread. workqueue_mutex protects us\nfrom create_workqueue_thread() so we don\u0027t need cwq-\u003elock.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: \"Pallipadi, Venkatesh\" \u003cvenkatesh.pallipadi@intel.com\u003e\nCc: Gautham shenoy \u003cego@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d721304dce0ced0b3b0366996cc02929669708a8",
      "tree": "a7c41390d082e4d2c70b185e508368293cf68b92",
      "parents": [
        "319c2a986eb45989690c955d9667b814ef0ed56f"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:07 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:52 2007 -0700"
      },
      "message": "workqueue: fix flush_workqueue() vs CPU_DEAD race\n\nMany thanks to Srivatsa Vaddagiri for the helpful discussion and for spotting\nthe bug in my previous attempt.\n\nwork-\u003efunc() (and thus flush_workqueue()) must not use workqueue_mutex,\nthis leads to deadlock when CPU_DEAD does kthread_stop(). However without\nthis mutex held we can\u0027t detect CPU_DEAD in progress, which can move pending\nworks to another CPU while the dead one is not on cpu_online_map.\n\nChange flush_workqueue() to use for_each_possible_cpu(). This means that\nflush_cpu_workqueue() may hit CPU which is already dead. However in that\ncase\n\n\t!list_empty(\u0026cwq-\u003eworklist) || cwq-\u003ecurrent_work !\u003d NULL\n\nmeans that CPU_DEAD in progress, it will do kthread_stop() + take_over_work()\nso we can proceed and insert a barrier. We hold cwq-\u003elock, so we are safe.\n\nAlso, add migrate_sequence incremented by take_over_work() under cwq-\u003elock.\nIf take_over_work() happened before we checked this CPU, we should see the\nnew value after spin_unlock().\n\nFurther possible changes:\n\n\tremove CPU_DEAD handling (along with take_over_work, migrate_sequence)\n\tfrom workqueue.c. CPU_DEAD just sets cwq-\u003eplease_exit_after_flush flag.\n\n\tCPU_UP_PREPARE-\u003ecreate_workqueue_thread() clears this flag, and creates\n\tthe new thread if cwq-\u003ethread \u003d\u003d NULL.\n\nThis way the workqueue/cpu-hotplug interaction is almost zero, workqueue_mutex\njust protects \"workqueues\" list, CPU_LOCK_ACQUIRE/CPU_LOCK_RELEASE go away.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: \"Pallipadi, Venkatesh\" \u003cvenkatesh.pallipadi@intel.com\u003e\nCc: Gautham shenoy \u003cego@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "319c2a986eb45989690c955d9667b814ef0ed56f",
      "tree": "1408756a141247f703b2866886d9707006ab33a9",
      "parents": [
        "38c3bd96a0a7d375e12f173c34fbebf9f153cb56"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:34:06 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:51 2007 -0700"
      },
      "message": "workqueue: fix freezeable workqueues implementation\n\nCurrently -\u003efreezeable is per-cpu, this is wrong. CPU_UP_PREPARE creates\ncwq-\u003ethread which is not freezeable. Move -\u003efreezeable to workqueue_struct.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: \"Pallipadi, Venkatesh\" \u003cvenkatesh.pallipadi@intel.com\u003e\nCc: Gautham shenoy \u003cego@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "83c22520c51bf67529367e8237f95c03fe44e2da",
      "tree": "d9798e4f60551bdad0f7d8f1f1d5c69d7c4214c1",
      "parents": [
        "edab2516a6c1752e8e5e3d55727cabf12346e5df"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:33:54 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:51 2007 -0700"
      },
      "message": "flush_cpu_workqueue: don\u0027t flush an empty -\u003eworklist\n\nNow when we have -\u003ecurrent_work we can avoid adding a barrier and waiting\nfor its completition when cwq\u0027s queue is empty.\n\nNote: this change is also useful if we change flush_workqueue() to also\ncheck the dead CPUs.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: Gautham Shenoy \u003cego@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "edab2516a6c1752e8e5e3d55727cabf12346e5df",
      "tree": "235f0e8dd26341a650cc3329e4fc54b3b857aa07",
      "parents": [
        "b89deed32ccc96098bd6bc953c64bba6b847774f"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Wed May 09 02:33:53 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:51 2007 -0700"
      },
      "message": "flush_workqueue(): use preempt_disable to hold off cpu hotplug\n\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: Gautham Shenoy \u003cego@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b89deed32ccc96098bd6bc953c64bba6b847774f",
      "tree": "7a5963bbc5203cfdb39bf2fb1204764df39c71db",
      "parents": [
        "fc2e4d70410546307344821eed6fd23803a45286"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:33:52 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:50 2007 -0700"
      },
      "message": "implement flush_work()\n\nA basic problem with flush_scheduled_work() is that it blocks behind _all_\npresently-queued works, rather than just the work whcih the caller wants to\nflush.  If the caller holds some lock, and if one of the queued work happens\nto want that lock as well then accidental deadlocks can occur.\n\nOne example of this is the phy layer: it wants to flush work while holding\nrtnl_lock().  But if a linkwatch event happens to be queued, the phy code will\ndeadlock because the linkwatch callback function takes rtnl_lock.\n\nSo we implement a new function which will flush a *single* work - just the one\nwhich the caller wants to free up.  Thus we avoid the accidental deadlocks\nwhich can arise from unrelated subsystems\u0027 callbacks taking shared locks.\n\nflush_work() non-blockingly dequeues the work_struct which we want to kill,\nthen it waits for its handler to complete on all CPUs.\n\nAdd -\u003ecurrent_work to the \"struct cpu_workqueue_struct\", it points to\ncurrently running \"struct work_struct\". When flush_work(work) detects\n-\u003ecurrent_work \u003d\u003d work, it inserts a barrier at the _head_ of -\u003eworklist\n(and thus right _after_ that work) and waits for completition. This means\nthat the next work fired on that CPU will be this barrier, or another\nbarrier queued by concurrent flush_work(), so the caller of flush_work()\nwill be woken before any \"regular\" work has a chance to run.\n\nWhen wait_on_work() unlocks workqueue_mutex (or whatever we choose to protect\nagainst CPU hotplug), CPU may go away. But in that case take_over_work() will\nmove a barrier we queued to another CPU, it will be fired sometime, and\nwait_on_work() will be woken.\n\nActually, we are doing cleanup_workqueue_thread()-\u003ekthread_stop() before\ntake_over_work(), so cwq-\u003ethread should complete its -\u003eworklist (and thus\nthe barrier), because currently we don\u0027t check kthread_should_stop() in\nrun_workqueue(). But even if we did, everything should be ok.\n\n[akpm@osdl.org: cleanup]\n[akpm@osdl.org: add flush_work_keventd() wrapper]\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fc2e4d70410546307344821eed6fd23803a45286",
      "tree": "b8253b7e42245c9b21b959a77c8070ddcbc9359e",
      "parents": [
        "e18f3ffb9c3ddfc1b4ad8f38f5f2acae8c16f0c9"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed May 09 02:33:51 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:50 2007 -0700"
      },
      "message": "reimplement flush_workqueue()\n\nRemove -\u003eremove_sequence, -\u003einsert_sequence, and -\u003ework_done from struct\ncpu_workqueue_struct.  To implement flush_workqueue() we can queue a\nbarrier work on each CPU and wait for its completition.\n\nThe barrier is queued under workqueue_mutex to ensure that per cpu\nwq-\u003ecpu_wq is alive, we drop this mutex before going to sleep.  If CPU goes\ndown while we are waiting for completition, take_over_work() will move the\nbarrier on another CPU, and the handler will wake up us eventually.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e18f3ffb9c3ddfc1b4ad8f38f5f2acae8c16f0c9",
      "tree": "6a1ccc7a10ccc25dd9b7e09fefa3db96e211e1ee",
      "parents": [
        "a1e3cf418fc1e6b13bdc472ffb60bd02735e41a6"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Wed May 09 02:33:50 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:50 2007 -0700"
      },
      "message": "schedule_on_each_cpu(): use preempt_disable()\n\nWe take workqueue_mutex in there to keep CPU hotplug away.  But\npreempt_disable() will suffice for that.\n\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "82f67cd9fca8c8762c15ba7ed0d5747588c1e221",
      "tree": "1ff7e5cc496580b85bb42fb1d7b19dcbef7b7776",
      "parents": [
        "8bfd9a7a229b5f3d3eda5d7d45c2eebec5b4ba16"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Feb 16 01:28:13 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Feb 16 08:13:59 2007 -0800"
      },
      "message": "[PATCH] Add debugging feature /proc/timer_stat\n\nAdd /proc/timer_stats support: debugging feature to profile timer expiration.\nBoth the starting site, process/PID and the expiration function is captured.\nThis allows the quick identification of timer event sources in a system.\n\nSample output:\n\n# echo 1 \u003e /proc/timer_stats\n# cat /proc/timer_stats\nTimer Stats Version: v0.1\nSample period: 4.010 s\n  24,     0 swapper          hrtimer_stop_sched_tick (hrtimer_sched_tick)\n  11,     0 swapper          sk_reset_timer (tcp_delack_timer)\n   6,     0 swapper          hrtimer_stop_sched_tick (hrtimer_sched_tick)\n   2,     1 swapper          queue_delayed_work_on (delayed_work_timer_fn)\n  17,     0 swapper          hrtimer_restart_sched_tick (hrtimer_sched_tick)\n   2,     1 swapper          queue_delayed_work_on (delayed_work_timer_fn)\n   4,  2050 pcscd            do_nanosleep (hrtimer_wakeup)\n   5,  4179 sshd             sk_reset_timer (tcp_write_timer)\n   4,  2248 yum-updatesd     schedule_timeout (process_timeout)\n  18,     0 swapper          hrtimer_restart_sched_tick (hrtimer_sched_tick)\n   3,     0 swapper          sk_reset_timer (tcp_delack_timer)\n   1,     1 swapper          neigh_table_init_no_netlink (neigh_periodic_timer)\n   2,     1 swapper          e1000_up (e1000_watchdog)\n   1,     1 init             schedule_timeout (process_timeout)\n100 total events, 25.24 events/sec\n\n[ cleanups and hrtimers support from Thomas Gleixner \u003ctglx@linutronix.de\u003e ]\n[bunk@stusta.de: nr_entries can become static]\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "72fd4a35a824331d7a0f4168d7576502d95d34b3",
      "tree": "be27880bc36b7f62e8044a88b8744a35c5317714",
      "parents": [
        "262086cf5b5343c2b81c97b1c606058e921859df"
      ],
      "author": {
        "name": "Robert P. J. Day",
        "email": "rpjday@mindspring.com",
        "time": "Sat Feb 10 01:45:59 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sun Feb 11 10:51:32 2007 -0800"
      },
      "message": "[PATCH] Numerous fixes to kernel-doc info in source files.\n\nA variety of (mostly) innocuous fixes to the embedded kernel-doc content in\nsource files, including:\n\n  * make multi-line initial descriptions single line\n  * denote some function names, constants and structs as such\n  * change erroneous opening \u0027/*\u0027 to \u0027/**\u0027 in a few places\n  * reword some text for clarity\n\nSigned-off-by: Robert P. J. Day \u003crpjday@mindspring.com\u003e\nCc: \"Randy.Dunlap\" \u003crdunlap@xenotime.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "af9997e426f9ddfe7a84cb4cd3c7ff938fabd41a",
      "tree": "8bbb991c584b1a555b35950900455517f5e55ee9",
      "parents": [
        "b7f869a2847dfe6f9b0835ca1b24e73bed926d7d"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Fri Dec 22 01:06:52 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Dec 22 08:55:47 2006 -0800"
      },
      "message": "[PATCH] fix kernel-doc warnings in 2.6.20-rc1\n\nFix kernel-doc warnings in 2.6.20-rc1.\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9bfb18392ef586467277fa25d8f3a7a93611f6df",
      "tree": "e0bb6aab4983a50f54b247ac3db323dbb8d025a2",
      "parents": [
        "5ccac88eeb5659c716af8e695e2943509c80d172"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Dec 18 20:05:09 2006 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 21 00:20:01 2006 -0800"
      },
      "message": "[PATCH] workqueue: fix schedule_on_each_cpu()\n\nfix the schedule_on_each_cpu() implementation: __queue_work() is now\nstricter, hence set the work-pending bit before passing in the new work.\n\n(found in the -rt tree, using Peter Zijlstra\u0027s files-lock scalability\npatchset)\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a08727bae727fc2ca3a6ee9506d77786b71070b3",
      "tree": "b1b42acea520c7738fc2e62476221a049f195f87",
      "parents": [
        "2f77d107050abc14bc393b34bdb7b91cf670c250"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sat Dec 16 09:53:50 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sat Dec 16 09:53:50 2006 -0800"
      },
      "message": "Make workqueue bit operations work on \"atomic_long_t\"\n\nOn architectures where the atomicity of the bit operations is handled by\nexternal means (ie a separate spinlock to protect concurrent accesses),\njust doing a direct assignment on the workqueue data field (as done by\ncommit 4594bf159f1962cec3b727954b7c598b07e2e737) can cause the\nassignment to be lost due to lack of serialization with the bitops on\nthe same word.\n\nSo we need to serialize the assignment with the locks on those\narchitectures (notably older ARM chips, PA-RISC and sparc32).\n\nSo rather than using an \"unsigned long\", let\u0027s use \"atomic_long_t\",\nwhich already has a safe assignment operation (atomic_long_set()) on\nsuch architectures.\n\nThis requires that the atomic operations use the same atomicity locks as\nthe bit operations do, but that is largely the case anyway.  Sparc32\nwill probably need fixing.\n\nArchitectures (including modern ARM with LL/SC) that implement sane\natomic operations for SMP won\u0027t see any of this matter.\n\nCc: Russell King \u003crmk+lkml@arm.linux.org.uk\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: David Miller \u003cdavem@davemloft.com\u003e\nCc: Matthew Wilcox \u003cmatthew@wil.cx\u003e\nCc: Linux Arch Maintainers \u003clinux-arch@vger.kernel.org\u003e\nCc: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4594bf159f1962cec3b727954b7c598b07e2e737",
      "tree": "bf2b58509973e8961d8d3a37c863ccec70547d3b",
      "parents": [
        "d8a53b358257625778387925165eaa97839b2f52"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Thu Dec 07 11:33:26 2006 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sat Dec 09 12:25:08 2006 -0800"
      },
      "message": "[PATCH] WorkStruct: Use direct assignment rather than cmpxchg()\n\nUse direct assignment rather than cmpxchg() as the latter is unavailable\nand unimplementable on some platforms and is actually unnecessary.\n\nThe use of cmpxchg() was to guard against two possibilities, neither of\nwhich can actually occur:\n\n (1) The pending flag may have been unset or may be cleared.  However, given\n     where it\u0027s called, the pending flag is _always_ set.  I don\u0027t think it\n     can be unset whilst we\u0027re in set_wq_data().\n\n     Once the work is enqueued to be actually run, the only way off the queue\n     is for it to be actually run.\n\n     If it\u0027s a delayed work item, then the bit can\u0027t be cleared by the timer\n     because we haven\u0027t started the timer yet.  Also, the pending bit can\u0027t be\n     cleared by cancelling the delayed work _until_ the work item has had its\n     timer started.\n\n (2) The workqueue pointer might change.  This can only happen in two cases:\n\n     (a) The work item has just been queued to actually run, and so we\u0027re\n         protected by the appropriate workqueue spinlock.\n\n     (b) A delayed work item is being queued, and so the timer hasn\u0027t been\n     \t started yet, and so no one else knows about the work item or can\n     \t access it (the pending bit protects us).\n\n     Besides, set_wq_data() _sets_ the workqueue pointer unconditionally, so\n     it can be assigned instead.\n\nSo, replacing the set_wq_data() with a straight assignment would be okay\nin most cases.\n\nThe problem is where we end up tangling with test_and_set_bit() emulated\nusing spinlocks, and even then it\u0027s not a problem _provided_\ntest_and_set_bit() doesn\u0027t attempt to modify the word if the bit was\nset.\n\nIf that\u0027s a problem, then a bitops-proofed assignment will be required -\nequivalent to atomic_set() vs other atomic_xxx() ops.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "68380b581383c028830f79ec2670f4a193854aa6",
      "tree": "49ea33a67213702ff56ca5843435c75749ac0ab3",
      "parents": [
        "2fd8507d14ef7af3ae05316b3277044cf6daa381"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 09:28:19 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 09:28:19 2006 -0800"
      },
      "message": "Add \"run_scheduled_work()\" workqueue function\n\nThis allows workqueue users to run just their own pending work, rather\nthan wait for the whole workqueue to finish running.  This solves the\ndeadlock with networking libphy that was due to other workqueue entries\npossibly needing a lock that was held by the routine that wanted to\nflush its own work.\n\nIt\u0027s not wonderful: if you absolutely need to synchronize with the work\nfunction having been executed, any user strictly speaking should have\nits own completion tracking logic, since when we run things explicitly\nby hand, the generic workqueue layer can no longer help us synchronize.\n\nAlso, this is strictly only usable for work that has been scheduled\nwithout any delayed timers.  You can not mix the new interface with\nschedule_delayed_work().\n\nBut it\u0027s better than what we had currently.\n\nAcked-by: Maciej W. Rozycki \u003cmacro@linux-mips.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "02316067852187b8bec781bec07410e91af79627",
      "tree": "856e3f4610c91a6548bf3bf5c70ecbc0b28a4145",
      "parents": [
        "a38a44c1a93078fc5fadc4ac2df8dea4697069e2"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Dec 06 20:38:17 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:39 2006 -0800"
      },
      "message": "[PATCH] hotplug CPU: clean up hotcpu_notifier() use\n\nThere was lots of #ifdef noise in the kernel due to hotcpu_notifier(fn,\nprio) not correctly marking \u0027fn\u0027 as used in the !HOTPLUG_CPU case, and thus\ngenerating compiler warnings of unused symbols, hence forcing people to add\n#ifdefs.\n\nthe compiler can skip truly unused functions just fine:\n\n    text    data     bss     dec     hex filename\n 1624412  728710 3674856 6027978  5bfaca vmlinux.before\n 1624412  728710 3674856 6027978  5bfaca vmlinux.after\n\n[akpm@osdl.org: topology.c fix]\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d5abe669172f20a4129a711de0f250a4e07db298",
      "tree": "8a1ae8ab51525bfa9e29707f27cc656e2275b247",
      "parents": [
        "6fb50ea79cb869667adaa71ed32cc15dd73986de"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Wed Dec 06 20:37:26 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:36 2006 -0800"
      },
      "message": "[PATCH] debug: workqueue locking sanity\n\nWorkqueue functions should not leak locks, assert so, printing the\nlast function ran.\n\nUse macros in lockdep.h to avoid include dependency pains.\n\n[akpm@osdl.org: build fix]\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "341a595850dac1b0503df34260257d71b4fdf72c",
      "tree": "478bba299639ddebed62c6d9feb3c54504726e9b",
      "parents": [
        "5045cfc103566878228ca36d05a0ae0076673e5a"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Wed Dec 06 20:34:49 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:29 2006 -0800"
      },
      "message": "[PATCH] Support for freezeable workqueues\n\nMake it possible to create a workqueue the worker thread of which will be\nfrozen during suspend, along with other kernel threads.\n\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nAcked-by: Pavel Machek \u003cpavel@ucw.cz\u003e\nCc: Nigel Cunningham \u003cnigel@suspend2.net\u003e\nCc: David Chinner \u003cdgc@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "65f27f38446e1976cc98fd3004b110fedcddd189",
      "tree": "68f8be93feae31dfa018c22db392a05546b63ee1",
      "parents": [
        "365970a1ea76d81cb1ad2f652acb605f06dae256"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Nov 22 14:55:48 2006 +0000"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Nov 22 14:55:48 2006 +0000"
      },
      "message": "WorkStruct: Pass the work_struct pointer instead of context data\n\nPass the work_struct pointer to the work function rather than context data.\nThe work function can use container_of() to work out the data.\n\nFor the cases where the container of the work_struct may go away the moment the\npending bit is cleared, it is made possible to defer the release of the\nstructure by deferring the clearing of the pending bit.\n\nTo make this work, an extra flag is introduced into the management side of the\nwork_struct.  This governs auto-release of the structure upon execution.\n\nOrdinarily, the work queue executor would release the work_struct for further\nscheduling or deallocation by clearing the pending bit prior to jumping to the\nwork function.  This means that, unless the driver makes some guarantee itself\nthat the work_struct won\u0027t go away, the work function may not access anything\nelse in the work_struct or its container lest they be deallocated..  This is a\nproblem if the auxiliary data is taken away (as done by the last patch).\n\nHowever, if the pending bit is *not* cleared before jumping to the work\nfunction, then the work function *may* access the work_struct and its container\nwith no problems.  But then the work function must itself release the\nwork_struct by calling work_release().\n\nIn most cases, automatic release is fine, so this is the default.  Special\ninitiators exist for the non-auto-release case (ending in _NAR).\n\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\n"
    },
    {
      "commit": "365970a1ea76d81cb1ad2f652acb605f06dae256",
      "tree": "d2a34e397a4c2d9d0c27ceb0854752afe143c100",
      "parents": [
        "6bb49e5965c1fc399b4d3cd2b5cf2da535b330c0"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Nov 22 14:54:49 2006 +0000"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Nov 22 14:54:49 2006 +0000"
      },
      "message": "WorkStruct: Merge the pending bit into the wq_data pointer\n\nReclaim a word from the size of the work_struct by folding the pending bit and\nthe wq_data pointer together.  This shouldn\u0027t cause misalignment problems as\nall pointers should be at least 4-byte aligned.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\n"
    },
    {
      "commit": "6bb49e5965c1fc399b4d3cd2b5cf2da535b330c0",
      "tree": "ebf48d3bb43c8dbf65d2653b8810973e69d3517e",
      "parents": [
        "52bad64d95bd89e08c49ec5a071fa6dcbe5a1a9c"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Nov 22 14:54:45 2006 +0000"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Nov 22 14:54:45 2006 +0000"
      },
      "message": "WorkStruct: Typedef the work function prototype\n\nDefine a type for the work function prototype.  It\u0027s not only kept in the\nwork_struct struct, it\u0027s also passed as an argument to several functions.\n\nThis makes it easier to change it.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\n"
    },
    {
      "commit": "52bad64d95bd89e08c49ec5a071fa6dcbe5a1a9c",
      "tree": "5849b4e3c17daa70a7e81cfdeaddac9ac8a0e953",
      "parents": [
        "0f9005a6f7a82f4aacbd72f7b92322a8ca1c3f97"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Nov 22 14:54:01 2006 +0000"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Nov 22 14:54:01 2006 +0000"
      },
      "message": "WorkStruct: Separate delayable and non-delayable events.\n\nSeparate delayable work items from non-delayable work items be splitting them\ninto a separate structure (delayed_work), which incorporates a work_struct and\nthe timer_list removed from work_struct.\n\nThe work_struct struct is huge, and this limits it\u0027s usefulness.  On a 64-bit\narchitecture it\u0027s nearly 100 bytes in size.  This reduces that by half for the\nnon-delayable type of event.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\n"
    },
    {
      "commit": "057647fc47b3a5fbcfa997041db3f483d506603c",
      "tree": "13887f534f51b164c8f6f5b21d15bc4cccac28ea",
      "parents": [
        "c333526f489044be2b93085720eb898f0037b346"
      ],
      "author": {
        "name": "Alan Stern",
        "email": "stern@rowland.harvard.edu",
        "time": "Sat Oct 28 10:38:58 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 28 11:30:55 2006 -0700"
      },
      "message": "[PATCH] workqueue: update kerneldoc\n\nThis patch (as812) changes the kerneldoc comments explaining the return\nvalues from queue_work(), queue_delayed_work(), and\nqueue_delayed_work_on().  The updated comments explain more accurately the\nmeaning of the return code and avoid suggesting that a 0 value means the\nroutine was unsuccessful.\n\nSigned-off-by: Alan Stern \u003cstern@rowland.harvard.edu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "469340236a7c9673df3e6a2425f559517f01464e",
      "tree": "83453754d7e3ac5d9d16fbd19374c66899938afe",
      "parents": [
        "fc513a333b45f8913d40c8241a0cb61be79e1c60"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Wed Oct 11 01:21:26 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 11 11:14:19 2006 -0700"
      },
      "message": "[PATCH] mm: kevent threads: use MPOL_DEFAULT\n\nSwitch the memory policy of the kevent threads to MPOL_DEFAULT while\nleaving the kzalloc of the workqueue structure on interleave.  This means\nthat all code executed in the context of the kevent thread is allocating\nnode local.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Alok Kataria \u003calok.kataria@calsoftinc.com\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nCc: \u003cpj@sgi.com\u003e\nCc: \u003cshai@scalex86.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9f5d785e93f7c68c37582ddea848de23689fdd76",
      "tree": "65c6068fd4e340747763de1caa20560b0e56aef7",
      "parents": [
        "c98acc5865c1217195217444cc6c6d317fddda50"
      ],
      "author": {
        "name": "Rolf Eike Beer",
        "email": "eike-kernel@sf-tec.de",
        "time": "Tue Oct 03 23:07:31 2006 +0200"
      },
      "committer": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Tue Oct 03 23:07:31 2006 +0200"
      },
      "message": "remove duplicate \"until\" from kernel/workqueue.c\n\ns/until until/until/\n\nSigned-off-by: Rolf Eike Beer \u003ceike-kernel@sf-tec.de\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\n"
    },
    {
      "commit": "9b41ea7289a589993d3daabc61f999b4147872c4",
      "tree": "35a79670ca4493832f1da026a047e3fc9eec0910",
      "parents": [
        "2b25742556b1a351ce4821f6feddcba23bdd930b"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Sun Aug 13 23:24:26 2006 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Aug 14 12:54:29 2006 -0700"
      },
      "message": "[PATCH] workqueue: remove lock_cpu_hotplug()\n\nUse a private lock instead.  It protects all per-cpu data structures in\nworkqueue.c, including the workqueues list.\n\nFix a bug in schedule_on_each_cpu(): it was forgetting to lock down the\nper-cpu resources.\n\nUnfixed long-standing bug: if someone unplugs the CPU identified by\n`singlethread_cpu\u0027 the kernel will get very sick.\n\nCc: Dave Jones \u003cdavej@codemonkey.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "0fcb78c22f06340cdba884d7381adb3a0148bbb6",
      "tree": "565c221a078fc7271d09fd4ad9453c4a2d76f485",
      "parents": [
        "d75763d24063cafe28ace8863560da9c968ee099"
      ],
      "author": {
        "name": "Rolf Eike Beer",
        "email": "eike-kernel@sf-tec.de",
        "time": "Sun Jul 30 03:03:42 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jul 31 13:28:40 2006 -0700"
      },
      "message": "[PATCH] Add DocBook documentation for workqueue functions\n\nkernel/workqueue.c was omitted from generating kernel documentation.  This\nadds a new section \"Workqueues and Kevents\" and adds documentation for some\nof the functions.\n\nSome functions in this file already had DocBook-style comments, now they\nfinally become visible.\n\nSigned-off-by: Rolf Eike Beer \u003ceike-kernel@sf-tec.de\u003e\nCc: \"Randy.Dunlap\" \u003crdunlap@xenotime.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ca78f6baca863afe2e6a244a0fe94b3a70211d46",
      "tree": "f5a3a169b6cfafa36f9c35cc86e782596c820915",
      "parents": [
        "7ad7153b051d9628ecd6a336b543ea6ef099bd2c",
        "ae90dd5dbee461652b90d9f7d292ba47dc3dc4b8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jul 04 14:00:26 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jul 04 14:00:26 2006 -0700"
      },
      "message": "Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/cpufreq\n\n* master.kernel.org:/pub/scm/linux/kernel/git/davej/cpufreq:\n  Move workqueue exports to where the functions are defined.\n  [CPUFREQ] Misc cleanups in ondemand.\n  [CPUFREQ] Make ondemand sampling per CPU and remove the mutex usage in sampling path.\n  [CPUFREQ] Add queue_delayed_work_on() interface for workqueues.\n  [CPUFREQ] Remove slowdown from ondemand sampling path.\n"
    },
    {
      "commit": "36c8b586896f60cb91a4fd526233190b34316baf",
      "tree": "003246e1e676de33703daa979b3e3109ca202a89",
      "parents": [
        "48f24c4da1ee7f3f22289cb85e8b8a73e4df4db5"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jul 03 00:25:41 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jul 03 15:27:11 2006 -0700"
      },
      "message": "[PATCH] sched: cleanup, remove task_t, convert to struct task_struct\n\ncleanup: remove task_t and convert all the uses to struct task_struct. I\nintroduced it for the scheduler anno and it was a mistake.\n\nConversion was mostly scripted, the result was reviewed and all\nsecondary whitespace and style impact (if any) was fixed up by hand.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ae90dd5dbee461652b90d9f7d292ba47dc3dc4b8",
      "tree": "694e12850d9686b1989d63ca1f92b8214359b47e",
      "parents": [
        "ffac80e925e54d84f6ea580231aa46d0ef051756"
      ],
      "author": {
        "name": "Dave Jones",
        "email": "davej@redhat.com",
        "time": "Fri Jun 30 01:40:45 2006 -0400"
      },
      "committer": {
        "name": "Dave Jones",
        "email": "davej@redhat.com",
        "time": "Fri Jun 30 01:40:45 2006 -0400"
      },
      "message": "Move workqueue exports to where the functions are defined.\n\nSigned-off-by: Dave Jones \u003cdavej@redhat.com\u003e\n"
    },
    {
      "commit": "7a6bc1cdd506cf81f856f0fef4e56a2ba0c5a26d",
      "tree": "610e6ad60d447838c3e26d00458eea04523daa5e",
      "parents": [
        "ccb2fe209dac9ff67f6351e783e610073afaaeaf"
      ],
      "author": {
        "name": "Venkatesh Pallipadi",
        "email": "venkatesh.pallipadi@intel.com",
        "time": "Wed Jun 28 13:50:33 2006 -0700"
      },
      "committer": {
        "name": "Dave Jones",
        "email": "davej@redhat.com",
        "time": "Fri Jun 30 01:33:31 2006 -0400"
      },
      "message": "[CPUFREQ] Add queue_delayed_work_on() interface for workqueues.\n\nAdd queue_delayed_work_on() interface for workqueues.\n\nSigned-off-by: Alexey Starikovskiy \u003calexey.y.starikovskiy@intel.com\u003e\nSigned-off-by: Venkatesh Pallipadi \u003cvenkatesh.pallipadi@intel.com\u003e\nSigned-off-by: Dave Jones \u003cdavej@redhat.com\u003e\n"
    },
    {
      "commit": "9c7b216d23e820e0e148d5be01bbb5bd2d8378fe",
      "tree": "53e6c1e4870db49b4999b4053862d3f63375773f",
      "parents": [
        "6ac12dfe9c2027cd3c5ed603f11d1bb4f04906fe"
      ],
      "author": {
        "name": "Chandra Seetharaman",
        "email": "sekharan@us.ibm.com",
        "time": "Tue Jun 27 02:54:07 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jun 27 17:32:40 2006 -0700"
      },
      "message": "[PATCH] cpu hotplug: revert init patch submitted for 2.6.17\n\nIn 2.6.17, there was a problem with cpu_notifiers and XFS.  I provided a\nband-aid solution to solve that problem.  In the process, i undid all the\nchanges you both were making to ensure that these notifiers were available\nonly at init time (unless CONFIG_HOTPLUG_CPU is defined).\n\nWe deferred the real fix to 2.6.18.  Here is a set of patches that fixes the\nXFS problem cleanly and makes the cpu notifiers available only at init time\n(unless CONFIG_HOTPLUG_CPU is defined).\n\nIf CONFIG_HOTPLUG_CPU is defined then cpu notifiers are available at run\ntime.\n\nThis patch reverts the notifier_call changes made in 2.6.17\n\nSigned-off-by: Chandra Seetharaman \u003csekharan@us.ibm.com\u003e\nCc: Ashok Raj \u003cashok.raj@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "fc75cdfa5b43ac4d3232b490800cd35063adafd3",
      "tree": "0529ffd9633667457d5340a09b3cb352d09436d2",
      "parents": [
        "04a3446c90137a473837288b04b517b19dc67a0d"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Sun Jun 25 05:49:10 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jun 25 10:01:22 2006 -0700"
      },
      "message": "[PATCH] cpu hotplug: fix CPU_UP_CANCEL handling\n\nIf a cpu hotplug callback fails on CPU_UP_PREPARE, all callbacks will be\ncalled with CPU_UP_CANCELED.  A few of these callbacks assume that on\nCPU_UP_PREPARE a pointer to task has been stored in a percpu array.  This\nassumption is not true if CPU_UP_PREPARE fails and the following calls to\nkthread_bind() in CPU_UP_CANCELED will cause an addressing exception\nbecause of passing a NULL pointer.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Ashok Raj \u003cashok.raj@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b61367732fc273977cc3fb85c272ce1a7bb1f533",
      "tree": "92aa6fc7f58b65f322f32612741c64347bc57152",
      "parents": [
        "232acbcf5304c29f5bb03b0dddeaefd0f98ef45e"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Sun Jun 25 05:47:49 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jun 25 10:01:07 2006 -0700"
      },
      "message": "[PATCH] schedule_on_each_cpu(): reduce kmalloc() size\n\nschedule_on_each_cpu() presently does a large kmalloc - 96 kbytes on 1024 CPU\n64-bit.\n\nRework it so that we do one 8192-byte allocation and then a pile of tiny ones,\nvia alloc_percpu().  This has a much higher chance of success (100% in the\ncurrent VM).\n\nThis also has the effect of reducing the memory requirements from NR_CPUS*n to\nnum_possible_cpus()*n.\n\nCc: Christoph Lameter \u003cclameter@engr.sgi.com\u003e\nCc: Andi Kleen \u003cak@muc.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "626ab0e69d376fa07599af669af8ba92d58e87c1",
      "tree": "a995e0231e61fab63568bc7bade81dc20c1dae09",
      "parents": [
        "54e73770357142e297c916c7865f5fca7499f69c"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Fri Jun 23 02:05:55 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 23 07:43:07 2006 -0700"
      },
      "message": "[PATCH] list: use list_replace_init() instead of list_splice_init()\n\nlist_splice_init(list, head) does unneeded job if it is known that\nlist_empty(head) \u003d\u003d 1.  We can use list_replace_init() instead.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nAcked-by: David S. Miller \u003cdavem@davemloft.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "83d722f7e198b034699b1500d98729beff930efd",
      "tree": "7d790a2fd62165373ec7bacde704837288e0bec3",
      "parents": [
        "649bbaa484bcdce94f40a1b97a6a2ded0549e8a2"
      ],
      "author": {
        "name": "Chandra Seetharaman",
        "email": "sekharan@us.ibm.com",
        "time": "Mon Apr 24 19:35:21 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Apr 26 08:30:03 2006 -0700"
      },
      "message": "[PATCH] Remove __devinit and __cpuinit from notifier_call definitions\n\nFew of the notifier_chain_register() callers use __init in the definition\nof notifier_call.  It is incorrect as the function definition should be\navailable after the initializations (they do not unregister them during\ninitializations).\n\nThis patch fixes all such usages to _not_ have the notifier_call __init\nsection.\n\nSigned-off-by: Chandra Seetharaman \u003csekharan@us.ibm.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1fa44ecad2b86475e038aed81b0bf333fa484f8b",
      "tree": "62e9e9aac0aaf64e6f8e69809d8ab513e22346a1",
      "parents": [
        "ba3af0aff042caa1f41b5f7164cab37c717b8811"
      ],
      "author": {
        "name": "James Bottomley",
        "email": "James.Bottomley@steeleye.com",
        "time": "Thu Feb 23 12:43:43 2006 -0600"
      },
      "committer": {
        "name": "James Bottomley",
        "email": "jejb@mulgrave.il.steeleye.com",
        "time": "Mon Feb 27 23:34:40 2006 -0600"
      },
      "message": "[SCSI] add execute_in_process_context() API\n\nWe have several points in the SCSI stack (primarily for our device\nfunctions) where we need to guarantee process context, but (given the\nplace where the last reference was released) we cannot guarantee this.\n\nThis API gets around the issue by executing the function directly if\nthe caller has process context, but scheduling a workqueue to execute\nin process context if the caller doesn\u0027t have it.\n\nSigned-off-by: James Bottomley \u003cJames.Bottomley@SteelEye.com\u003e\n"
    },
    {
      "commit": "858119e159384308a5dde67776691a2ebf70df0f",
      "tree": "f360768f999d51edc0863917ce0bf79e88c0ec4c",
      "parents": [
        "b0a9499c3dd50d333e2aedb7e894873c58da3785"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@infradead.org",
        "time": "Sat Jan 14 13:20:43 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Jan 14 18:27:06 2006 -0800"
      },
      "message": "[PATCH] Unlinline a bunch of other functions\n\nRemove the \"inline\" keyword from a bunch of big functions in the kernel with\nthe goal of shrinking it by 30kb to 40kb\n\nSigned-off-by: Arjan van de Ven \u003carjan@infradead.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: Jeff Garzik \u003cjgarzik@pobox.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f756d5e256059018d753f0ba79980ebeb87a1bc0",
      "tree": "e96ae0117aaf6dea19dad88079c3229f679c1948",
      "parents": [
        "945f390f02ce44a13aefc6d9449c99f33c9286a5"
      ],
      "author": {
        "name": "Nathan Lynch",
        "email": "ntl@pobox.com",
        "time": "Sun Jan 08 01:05:12 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:14:08 2006 -0800"
      },
      "message": "[PATCH] fix workqueue oops during cpu offline\n\nUse first_cpu(cpu_possible_map) for the single-thread workqueue case.  We\nused to hardcode 0, but that broke on systems where !cpu_possible(0) when\nworkqueue_struct-\u003ecpu_workqueue_struct was changed from a static array to\nalloc_percpu.\n\nCommit id bce61dd49d6ba7799be2de17c772e4c701558f14 (\"Fix hardcoded cpu\u003d0 in\nworkqueue for per_cpu_ptr() calls\") fixed that for Ben\u0027s funky sparc64\nsystem, but it regressed my Power5.  Offlining cpu 0 oopses upon the next\ncall to queue_work for a single-thread workqueue, because now we try to\nmanipulate per_cpu_ptr(wq-\u003ecpu_wq, 1), which is uninitialized.\n\nSo we need to establish an unchanging \"slot\" for single-thread workqueues\nwhich will have a valid percpu allocation.  Since alloc_percpu keys off of\ncpu_possible_map, which must not change after initialization, make this\nslot \u003d\u003d first_cpu(cpu_possible_map).\n\nSigned-off-by: Nathan Lynch \u003cntl@pobox.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "676121fcb66c861804e38d94214fd5670a1ef595",
      "tree": "7b0f9d34efd5e1cb9b6b595aedcd9419942b5055",
      "parents": [
        "9fa37fd1627ec804e57ae0388555719b03b39f20"
      ],
      "author": {
        "name": "Ben Collins",
        "email": "bcollins@debian.org",
        "time": "Sun Jan 08 01:03:04 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:54 2006 -0800"
      },
      "message": "[PATCH] Unchecked alloc_percpu() return in __create_workqueue()\n\n__create_workqueue() not checking return of alloc_percpu()\n\nNULL dereference was possible.\n\nSigned-off-by: Ben Collins \u003cbcollins@ubuntu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "15316ba81aee6775d6079fb46c66c801989e7d10",
      "tree": "c6190bdcc6e15fd8b5657a5932313e296b475577",
      "parents": [
        "48db57f8ff10eb09ab887ccb6150b0da0c7be24e"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@engr.sgi.com",
        "time": "Sun Jan 08 01:00:43 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:12:40 2006 -0800"
      },
      "message": "[PATCH] add schedule_on_each_cpu()\n\nswap migration\u0027s isolate_lru_page() currently uses an IPI to notify other\nprocessors that the lru caches need to be drained if the page cannot be\nfound on the LRU.  The IPI interrupt may interrupt a processor that is just\nprocessing lru requests and cause a race condition.\n\nThis patch introduces a new function run_on_each_cpu() that uses the\nkeventd() to run the LRU draining on each processor.  Processors disable\npreemption when dealing the LRU caches (these are per processor) and thus\nexecuting LRU draining from another process is safe.\n\nThanks to Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e for finding this race\ncondition.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "bce61dd49d6ba7799be2de17c772e4c701558f14",
      "tree": "a8fd75afc85ffef3c9af0bafa1989d7a14e1a187",
      "parents": [
        "ee500f274914653a7d3dfca7d0140a3d21658e32"
      ],
      "author": {
        "name": "Ben Collins",
        "email": "bcollins@debian.org",
        "time": "Mon Nov 28 13:43:56 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 28 14:42:23 2005 -0800"
      },
      "message": "[PATCH] Fix hardcoded cpu\u003d0 in workqueue for per_cpu_ptr() calls\n\nTracked this down on an Ultra Enterprise 3000.  It\u0027s a 6-way machine.  Odd\nthing about this machine (and it\u0027s good for finding bugs like this) is that\nthe CPU id\u0027s are not 0 based.  For instance, on my machine the CPU\u0027s are\n6/7/10/11/14/15.\n\nThis caused some NULL pointer dereference in kernel/workqueue.c because for\nsingle_threaded workqueue\u0027s, it hardcoded the cpu to 0.\n\nI changed the 0\u0027s to any_online_cpu(cpu_online_mask), which cpumask.h\nclaims is \"First cpu in mask\".  So this fits the same usage.\n\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a4c4af7c8dc1eccdfb8c57e1684f08179b4407e6",
      "tree": "210773f292da3ba85818402f1945ee7b14ba8c71",
      "parents": [
        "cc658cfe3c66a6124b5a8db90cdcdd440201b1dc"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Mon Nov 07 00:58:38 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 07 07:53:29 2005 -0800"
      },
      "message": "[PATCH] cpu hoptlug: avoid usage of smp_processor_id() in preemptible code\n\nReplace smp_processor_id() with any_online_cpu(cpu_online_map) in order to\navoid lots of \"BUG: using smp_processor_id() in preemptible [00000001]\ncode:...\" messages in case taking a cpu online fails.\n\nAll the traces start at the last notifier_call_chain(...) in kernel/cpu.c.\nSince we hold the cpu_control semaphore it shouldn\u0027t be any problem to access\ncpu_online_map.\n\nThe reason why cpu_up failed is simply that the cpu that was supposed to be\ntaken online wasn\u0027t even there.  That is because on s390 we never know when a\nnew cpu comes and therefore cpu_possible_map consists of only ones and doesn\u0027t\nreflect reality.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "89ada67917f516212452443a56b9fd3b65b74dc7",
      "tree": "00986fd653bf1973a70ae894f503b3b2352943b5",
      "parents": [
        "d61780c0d384939ef31c46b47442854d5def4623"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@engr.sgi.com",
        "time": "Sun Oct 30 15:01:59 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:18 2005 -0800"
      },
      "message": "[PATCH] Use alloc_percpu to allocate workqueues locally\n\nThis patch makes the workqueus use alloc_percpu instead of an array.  The\nworkqueues are placed on nodes local to each processor.\n\nThe workqueue structure can grow to a significant size on a system with\nlots of processors if this patch is not applied.  64 bit architectures with\nall debugging features enabled and configured for 512 processors will not\nbe able to boot without this patch.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "dd3927105b6f65afb7dac17682172cdfb86d3f00",
      "tree": "5cf282aff500cad23b9d7e13dc19b2b2d31e1ce6",
      "parents": [
        "640e803376b9c4072f69fec42e304c974a631298"
      ],
      "author": {
        "name": "Pekka J Enberg",
        "email": "penberg@cs.Helsinki.FI",
        "time": "Tue Sep 06 15:18:31 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 07 16:57:45 2005 -0700"
      },
      "message": "[PATCH] introduce and use kzalloc\n\nThis patch introduces a kzalloc wrapper and converts kernel/ to use it.  It\nsaves a little program text.\n\nSigned-off-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "230649da7cb73914b8b2a1ffc802a2951e970454",
      "tree": "ea18d1246118221640d1aebc89d6f1ba11b4869c",
      "parents": [
        "b80068543794864f533163c586be2a1a9880a65d"
      ],
      "author": {
        "name": "Mika Kukkonen",
        "email": "mikukkon@gmail.com",
        "time": "Tue Sep 06 15:17:17 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 07 16:57:28 2005 -0700"
      },
      "message": "[PATCH] create_workqueue_thread() signedness fix\n\nWith \"-W -Wno-unused -Wno-sign-compare\" I get the following compile warning:\n\n  CC      kernel/workqueue.o\nkernel/workqueue.c: In function `workqueue_cpu_callback\u0027:\nkernel/workqueue.c:504: warning: ordered comparison of pointer with integer zero\n\nOn error create_workqueue_thread() returns NULL, not negative pointer, so\nfollowing trivial patch suggests itself.\n\nSigned-off-by: Mika Kukkonen \u003cmikukkon@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "606867443764edac5a2c542f2fa0a12ef7a7c7fd",
      "tree": "61110afaef5e8be41be940815a8bd6065e32c5da",
      "parents": [
        "3462b925414a146d4c2252de97d20f89218d1ffb"
      ],
      "author": {
        "name": "James Bottomley",
        "email": "James.Bottomley@SteelEye.com",
        "time": "Wed Aug 10 11:29:15 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Aug 10 11:55:19 2005 -0700"
      },
      "message": "[PATCH] remove name length check in a workqueue\n\nWe have a chek in there to make sure that the name won\u0027t overflow\ntask_struct.comm[], but it\u0027s triggering for scsi with lots of HBAs, only\nscsi is using single-threaded workqueues which don\u0027t append the \"/%d\"\nanyway.\n\nAll too hard.  Just kill the BUG_ON.\n\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\n\n[ kthread_create() uses vsnprintf() and limits the thing, so no\n  actual overflow can actually happen regardless ]\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "81ddef77bb774e771db8588b937665cd38f40cee",
      "tree": "5e89b0f6bb47a43b3b00d30a5e1e22db727b5047",
      "parents": [
        "9ffb7146f0aa9c0070cda3d8701b0a89e34913d1"
      ],
      "author": {
        "name": "James Bottomley",
        "email": "James.Bottomley@SteelEye.com",
        "time": "Sat Apr 16 15:23:59 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:23:59 2005 -0700"
      },
      "message": "[PATCH] re-export cancel_rearming_delayed_workqueue\n\nThis was unexported by Arjan because we have no current users.\n\nHowever, during a conversion from tasklets to workqueues of the parisc led\nfunctions, we ran across a case where this was needed.  In particular, the\nopen coded equivalent of cancel_rearming_delayed_workqueue was implemented\nincorrectly, which is, I think, all the evidence necessary that this is a\nuseful API.\n\nSigned-off-by: James Bottomley \u003cJames.Bottomley@SteelEye.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    }
  ],
  "next": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2"
}
