)]}'
{
  "log": [
    {
      "commit": "f6500947a9cbb81cfa07ff344f16955d9c6ebe61",
      "tree": "6544ae45f39370fd35cb44076dc4628bd852bc19",
      "parents": [
        "38f51568005873a241a8ae6bf28c9ddd3f6a11ed"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 09 11:50:34 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 09 11:50:34 2010 +0200"
      },
      "message": "workqueue: workqueue_cpu_callback() should be cpu_notifier instead of hotcpu_notifier\n\nCommit 6ee0578b (workqueue: mark init_workqueues as early_initcall)\nmade workqueue SMP initialization depend on workqueue_cpu_callback(),\nwhich however was registered as hotcpu_notifier() and didn\u0027t get\ncalled if CONFIG_HOTPLUG_CPU is not set.  This made gcwqs on non-boot\nCPUs not create their initial workers leading to boot failures.  Fix\nit by making it a cpu_notifier.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-and-bisected-by: walt \u003cw41ter@gmail.com\u003e\nTested-by: Markus Trippelsdorf \u003cmarkus@trippelsdorf.de\u003e\n"
    },
    {
      "commit": "38f51568005873a241a8ae6bf28c9ddd3f6a11ed",
      "tree": "88adaff7c44514bf3bc2610473d4b7fc266178c6",
      "parents": [
        "2d53056973079e6c2ffc0d7ae3afbdd3d4f18ae3"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Sun Aug 08 14:24:09 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Aug 08 14:24:09 2010 +0200"
      },
      "message": "workqueue: add missing __percpu markup in kernel/workqueue.c\n\nworks in schecule_on_each_cpu() is a percpu pointer but was missing\n__percpu markup.  Add it.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "3b7433b8a8a83c87972065b1852b7dcae691e464",
      "tree": "93fa2c003f8baef5ab0733b53bac77961ed5240c",
      "parents": [
        "4a386c3e177ca2fbc70c9283d0b46537844763a0",
        "6ee0578b4daaea01c96b172c6aacca43fd9807a6"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 07 12:42:58 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 07 12:42:58 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (55 commits)\n  workqueue: mark init_workqueues() as early_initcall()\n  workqueue: explain for_each_*cwq_cpu() iterators\n  fscache: fix build on !CONFIG_SYSCTL\n  slow-work: kill it\n  gfs2: use workqueue instead of slow-work\n  drm: use workqueue instead of slow-work\n  cifs: use workqueue instead of slow-work\n  fscache: drop references to slow-work\n  fscache: convert operation to use workqueue instead of slow-work\n  fscache: convert object to use workqueue instead of slow-work\n  workqueue: fix how cpu number is stored in work-\u003edata\n  workqueue: fix mayday_mask handling on UP\n  workqueue: fix build problem on !CONFIG_SMP\n  workqueue: fix locking in retry path of maybe_create_worker()\n  async: use workqueue for worker pool\n  workqueue: remove WQ_SINGLE_CPU and use WQ_UNBOUND instead\n  workqueue: implement unbound workqueue\n  workqueue: prepare for WQ_UNBOUND implementation\n  libata: take advantage of cmwq and remove concurrency limitations\n  workqueue: fix worker management invocation without pending works\n  ...\n\nFixed up conflicts in fs/cifs/* as per Tejun. Other trivial conflicts in\ninclude/linux/workqueue.h, kernel/trace/Kconfig and kernel/workqueue.c\n"
    },
    {
      "commit": "6ee0578b4daaea01c96b172c6aacca43fd9807a6",
      "tree": "bb82bb4e2a95704477da6c527b23af59c8c2a041",
      "parents": [
        "098849516dd522a343e659740c8f1394a5b7fa69"
      ],
      "author": {
        "name": "Suresh Siddha",
        "email": "suresh.b.siddha@intel.com",
        "time": "Fri Jul 30 14:57:37 2010 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Aug 01 13:05:29 2010 +0200"
      },
      "message": "workqueue: mark init_workqueues() as early_initcall()\n\nMark init_workqueues() as early_initcall() and thus it will be initialized\nbefore smp bringup. init_workqueues() registers for the hotcpu notifier\nand thus it should cope with the processors that are brought online after\nthe workqueues are initialized.\n\nx86 smp bringup code uses workqueues and uses a workaround for the\ncold boot process (as the workqueues are initialized post smp_init()).\nMarking init_workqueues() as early_initcall() will pave the way for\ncleaning up this code.\n\nSigned-off-by: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n"
    },
    {
      "commit": "098849516dd522a343e659740c8f1394a5b7fa69",
      "tree": "46e902aabf3734c68173e959735ee75760b9f911",
      "parents": [
        "40f2b6ffe525e975203c1621d4d4abaa7689b674"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Aug 01 11:50:12 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Aug 01 11:50:12 2010 +0200"
      },
      "message": "workqueue: explain for_each_*cwq_cpu() iterators\n\nfor_each_*cwq_cpu() are similar to regular CPU iterators except that\nit also considers the pseudo CPU number used for unbound workqueues.\nExplain them.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e120153ddf8620fd0a194d301e9c5a8b28483bb5",
      "tree": "953ef1a61ca29d0486a6c8c3bb72dd8bbc080419",
      "parents": [
        "f2e005aaff4878a8ea93d5fb033a21389b72579a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jul 22 14:14:25 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jul 22 22:39:22 2010 +0200"
      },
      "message": "workqueue: fix how cpu number is stored in work-\u003edata\n\nOnce a work starts execution, its data contains the cpu number it was\non instead of pointing to cwq.  This is added by commit 7a22ad75\n(workqueue: carry cpu number in work data once execution starts) to\nreliably determine the work was last on even if the workqueue itself\nwas destroyed inbetween.\n\nWhether data points to a cwq or contains a cpu number was\ndistinguished by comparing the value against PAGE_OFFSET.  The\nassumption was that a cpu number should be below PAGE_OFFSET while a\npointer to cwq should be above it.  However, on architectures which\nuse separate address spaces for user and kernel spaces, this doesn\u0027t\nhold as PAGE_OFFSET is zero.\n\nFix it by using an explicit flag, WORK_STRUCT_CWQ, to mark what the\ndata field contains.  If the flag is set, it\u0027s pointing to a cwq;\notherwise, it contains a cpu number.\n\nReported on s390 and microblaze during linux-next testing.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Sachin Sant \u003csachinp@in.ibm.com\u003e\nReported-by: Michal Simek \u003cmichal.simek@petalogix.com\u003e\nReported-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nTested-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nTested-by: Michal Simek \u003cmonstr@monstr.eu\u003e\n"
    },
    {
      "commit": "f2e005aaff4878a8ea93d5fb033a21389b72579a",
      "tree": "13929e2e6010d10ec84dfd43e2cd063002daecca",
      "parents": [
        "931ac77ef65d2d90ee1def63d2041402ec7c53ab"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jul 20 15:59:09 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jul 20 15:59:09 2010 +0200"
      },
      "message": "workqueue: fix mayday_mask handling on UP\n\nAll cpumasks are assumed to have cpu 0 permanently set on UP, so it\ncan\u0027t be used to signify whether there\u0027s something to be done for the\nCPU.  workqueue was using cpumask to track which CPU requested rescuer\nassistance and this led rescuer thread to think there always are\npending mayday requests on UP, which resulted in infinite busy loops.\n\nThis patch fixes the problem by introducing mayday_mask_t and\nassociated helpers which wrap cpumask on SMP and emulates its behavior\nusing bitops and unsigned long on UP.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "931ac77ef65d2d90ee1def63d2041402ec7c53ab",
      "tree": "370153ff6e85c9e8e0d00f1811d214dbcba6b00a",
      "parents": [
        "9f9c23644b07e7a51f6f39064e61c150be712932"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jul 20 11:07:48 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jul 20 11:15:14 2010 +0200"
      },
      "message": "workqueue: fix build problem on !CONFIG_SMP\n\nCommit f3421797 (workqueue: implement unbound workqueue) incorrectly\ntested CONFIG_SMP as part of a C expression in alloc/free_cwqs().  As\nCONFIG_SMP is not defined in UP, this breaks build.  Fix it by using\n\nFound during linux-next build test.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\n"
    },
    {
      "commit": "9f9c23644b07e7a51f6f39064e61c150be712932",
      "tree": "831849ae8bfd602b3333e8ea8e3beb2cf0dee348",
      "parents": [
        "083b804c4d3e1e3d0eace56bdbc0f674946d2847"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jul 14 11:31:20 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jul 14 11:31:20 2010 +0200"
      },
      "message": "workqueue: fix locking in retry path of maybe_create_worker()\n\nmaybe_create_worker() mismanaged locking when worker creation fails\nand it has to retry.  Fix locking and simplify lock manipulation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Yong Zhang \u003cyong.zhang@windriver.com\u003e\n"
    },
    {
      "commit": "c7fc77f78f16d138ca997ce096a62f46e2e9420a",
      "tree": "0478e5dde66f6ff86d4baa0fe541748e1a6f1ed2",
      "parents": [
        "f34217977d717385a3e9fd7018ac39fade3964c0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 11:00:08 2010 +0200"
      },
      "message": "workqueue: remove WQ_SINGLE_CPU and use WQ_UNBOUND instead\n\nWQ_SINGLE_CPU combined with @max_active of 1 is used to achieve full\nordering among works queued to a workqueue.  The same can be achieved\nusing WQ_UNBOUND as unbound workqueues always use the gcwq for\nWORK_CPU_UNBOUND.  As @max_active is always one and benefits from cpu\nlocality isn\u0027t accessible anyway, serving them with unbound workqueues\nshould be fine.\n\nDrop WQ_SINGLE_CPU support and use WQ_UNBOUND instead.  Note that most\nsingle thread workqueue users will be converted to use multithread or\nnon-reentrant instead and only the ones which require strict ordering\nwill keep using WQ_UNBOUND + @max_active of 1.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "f34217977d717385a3e9fd7018ac39fade3964c0",
      "tree": "7e05645e911eea15b33a368b91ac82ae12884e6d",
      "parents": [
        "bdbc5dd7de5d07d6c9d3536e598956165a031d4c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 11:00:02 2010 +0200"
      },
      "message": "workqueue: implement unbound workqueue\n\nThis patch implements unbound workqueue which can be specified with\nWQ_UNBOUND flag on creation.  An unbound workqueue has the following\nproperties.\n\n* It uses a dedicated gcwq with a pseudo CPU number WORK_CPU_UNBOUND.\n  This gcwq is always online and disassociated.\n\n* Workers are not bound to any CPU and not concurrency managed.  Works\n  are dispatched to workers as soon as possible and the only applied\n  limitation is @max_active.  IOW, all unbound workqeueues are\n  implicitly high priority.\n\nUnbound workqueues can be used as simple execution context provider.\nContexts unbound to any cpu are served as soon as possible.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\n"
    },
    {
      "commit": "bdbc5dd7de5d07d6c9d3536e598956165a031d4c",
      "tree": "1f0f263126c2fc2e07a032df1e9ad3fecb534c9a",
      "parents": [
        "ad72cf9885c536e3adae03f8337557ac9dd1e4bb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:59:57 2010 +0200"
      },
      "message": "workqueue: prepare for WQ_UNBOUND implementation\n\nIn preparation of WQ_UNBOUND addition, make the following changes.\n\n* Add WORK_CPU_* constants for pseudo cpu id numbers used (currently\n  only WORK_CPU_NONE) and use them instead of NR_CPUS.  This is to\n  allow another pseudo cpu id for unbound cpu.\n\n* Reorder WQ_* flags.\n\n* Make workqueue_struct-\u003ecpu_wq a union which contains a percpu\n  pointer, regular pointer and an unsigned long value and use\n  kzalloc/kfree() in UP allocation path.  This will be used to\n  implement unbound workqueues which will use only one cwq on SMPs.\n\n* Move alloc_cwqs() allocation after initialization of wq fields, so\n  that alloc_cwqs() has access to wq-\u003eflags.\n\n* Trivial relocation of wq local variables in freeze functions.\n\nThese changes don\u0027t cause any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d313dd85ad846bc768d58e9ceb28588f917f4c9a",
      "tree": "b61b92f270b9fedc577e8196d605c93d695052d4",
      "parents": [
        "a1e453d2799760ecf2e09ecd45b80edbe7ff540e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "message": "workqueue: fix worker management invocation without pending works\n\nWhen there\u0027s no pending work to do, worker_thread() goes back to sleep\nafter waking up without checking whether worker management is\nnecessary.  This means that idle worker exit requests can be ignored\nif the gcwq stays empty.\n\nFix it by making worker_thread() always check whether worker\nmanagement is necessary before going to sleep.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "a1e453d2799760ecf2e09ecd45b80edbe7ff540e",
      "tree": "d2f9383f2703c762051a8379872244b1a4ebda2e",
      "parents": [
        "4ce48b37bfedc2bc11e61eae76784887e88b922c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "message": "workqueue: fix incorrect cpu number BUG_ON() in get_work_gcwq()\n\nget_work_gcwq() was incorrectly triggering BUG_ON() if cpu number is\nequal to or higher than num_possible_cpus() instead of nr_cpu_ids.\nFix it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "4ce48b37bfedc2bc11e61eae76784887e88b922c",
      "tree": "0829ba93c3bb5f586bacd11c3f21711b3de04da2",
      "parents": [
        "cb444766996395d4370bcc17ec895dd4e13ceb72"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:51 2010 +0200"
      },
      "message": "workqueue: fix race condition in flush_workqueue()\n\nWhen one flusher is cascading to the next flusher, it first sets\nwq-\u003efirst_flusher to the next one and sets up the next flush cycle.\nIf there\u0027s nothing to do for the next cycle, it clears\nwq-\u003eflush_flusher and proceeds to the one after that.\n\nIf the woken up flusher checks wq-\u003efirst_flusher before it gets\ncleared, it will incorrectly assume the role of the first flusher,\nwhich triggers BUG_ON() sanity check.\n\nFix it by checking wq-\u003efirst_flusher again after grabbing the mutex.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "cb444766996395d4370bcc17ec895dd4e13ceb72",
      "tree": "e682bd69dafadae8b27861888ec0802107d5a93a",
      "parents": [
        "fb0e7beb5c1b6fb4da786ba709d7138373d5fb22"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:50 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 02 10:03:50 2010 +0200"
      },
      "message": "workqueue: use worker_set/clr_flags() only from worker itself\n\nworker_set/clr_flags() assume that if none of NOT_RUNNING flags is set\nthe worker must be contributing to nr_running which is only true if\nthe worker is actually running.\n\nAs when called from self, it is guaranteed that the worker is running,\nthose functions can be safely used from the worker itself and they\naren\u0027t necessary from other places anyway.  Make the following changes\nto fix the bug.\n\n* Make worker_set/clr_flags() whine if not called from self.\n\n* Convert all places which called those functions from other tasks to\n  manipulate flags directly.\n\n* Make trustee_thread() directly clear nr_running after setting\n  WORKER_ROGUE on all workers.  This is the only place where\n  nr_running manipulation is necessary outside of workers themselves.\n\n* While at it, add sanity check for nr_running in worker_enter_idle().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "fb0e7beb5c1b6fb4da786ba709d7138373d5fb22",
      "tree": "e222b2238ed691ced6eaeb47733f7e4c2b9a3c37",
      "parents": [
        "649027d73a6309ac34dc2886362e662bd73456dc"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:15 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:15 2010 +0200"
      },
      "message": "workqueue: implement cpu intensive workqueue\n\nThis patch implements cpu intensive workqueue which can be specified\nwith WQ_CPU_INTENSIVE flag on creation.  Works queued to a cpu\nintensive workqueue don\u0027t participate in concurrency management.  IOW,\nit doesn\u0027t contribute to gcwq-\u003enr_running and thus doesn\u0027t delay\nexcution of other works.\n\nNote that although cpu intensive works won\u0027t delay other works, they\ncan be delayed by other works.  Combine with WQ_HIGHPRI to avoid being\ndelayed by other works too.\n\nAs the name suggests this is useful when using workqueue for cpu\nintensive works.  Workers executing cpu intensive works are not\nconsidered for workqueue concurrency management and left for the\nscheduler to manage.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n"
    },
    {
      "commit": "649027d73a6309ac34dc2886362e662bd73456dc",
      "tree": "4faf07773683ff5ec2b120d9070dbbb590199057",
      "parents": [
        "dcd989cb73ab0f7b722d64ab6516f101d9f43f88"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "message": "workqueue: implement high priority workqueue\n\nThis patch implements high priority workqueue which can be specified\nwith WQ_HIGHPRI flag on creation.  A high priority workqueue has the\nfollowing properties.\n\n* A work queued to it is queued at the head of the worklist of the\n  respective gcwq after other highpri works, while normal works are\n  always appended at the end.\n\n* As long as there are highpri works on gcwq-\u003eworklist,\n  [__]need_more_worker() remains %true and process_one_work() wakes up\n  another worker before it start executing a work.\n\nThe above two properties guarantee that works queued to high priority\nworkqueues are dispatched to workers and start execution as soon as\npossible regardless of the state of other works.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dcd989cb73ab0f7b722d64ab6516f101d9f43f88",
      "tree": "8c2f14e708367cb67dd9d29f2da0f7e5f454cf31",
      "parents": [
        "d320c03830b17af64e4547075003b1eeb274bc6c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "message": "workqueue: implement several utility APIs\n\nImplement the following utility APIs.\n\n workqueue_set_max_active()\t: adjust max_active of a wq\n workqueue_congested()\t\t: test whether a wq is contested\n work_cpu()\t\t\t: determine the last / current cpu of a work\n work_busy()\t\t\t: query whether a work is busy\n\n* Anton Blanchard fixed missing ret initialization in work_busy().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Anton Blanchard \u003canton@samba.org\u003e\n"
    },
    {
      "commit": "d320c03830b17af64e4547075003b1eeb274bc6c",
      "tree": "9917a69dc2efa6f37c54097c4651408faf4b343b",
      "parents": [
        "b71ab8c2025caef8db719aa41af0ed735dc543cd"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "message": "workqueue: s/__create_workqueue()/alloc_workqueue()/, and add system workqueues\n\nThis patch makes changes to make new workqueue features available to\nits users.\n\n* Now that workqueue is more featureful, there should be a public\n  workqueue creation function which takes paramters to control them.\n  Rename __create_workqueue() to alloc_workqueue() and make 0\n  max_active mean WQ_DFL_ACTIVE.  In the long run, all\n  create_workqueue_*() will be converted over to alloc_workqueue().\n\n* To further unify access interface, rename keventd_wq to system_wq\n  and export it.\n\n* Add system_long_wq and system_nrt_wq.  The former is to host long\n  running works separately (so that flush_scheduled_work() dosen\u0027t\n  take so long) and the latter guarantees any queued work item is\n  never executed in parallel by multiple CPUs.  These will be used by\n  future patches to update workqueue users.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "b71ab8c2025caef8db719aa41af0ed735dc543cd",
      "tree": "8cc2c6164acf5fe82e8d8d05924590cb80fe088d",
      "parents": [
        "e22bee782b3b00bd4534ae9b1c5fb2e8e6573c5c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "message": "workqueue: increase max_active of keventd and kill current_is_keventd()\n\nDefine WQ_MAX_ACTIVE and create keventd with max_active set to half of\nit which means that keventd now can process upto WQ_MAX_ACTIVE / 2 - 1\nworks concurrently.  Unless some combination can result in dependency\nloop longer than max_active, deadlock won\u0027t happen and thus it\u0027s\nunnecessary to check whether current_is_keventd() before trying to\nschedule a work.  Kill current_is_keventd().\n\n(Lockdep annotations are broken.  We need lock_map_acquire_read_norecurse())\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Tony Luck \u003ctony.luck@intel.com\u003e\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "e22bee782b3b00bd4534ae9b1c5fb2e8e6573c5c",
      "tree": "9854d22294699d9ec27e28f70c05f479e5640abd",
      "parents": [
        "d302f0178223802a1e496ba90c66193b7721c9c1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:14 2010 +0200"
      },
      "message": "workqueue: implement concurrency managed dynamic worker pool\n\nInstead of creating a worker for each cwq and putting it into the\nshared pool, manage per-cpu workers dynamically.\n\nWorks aren\u0027t supposed to be cpu cycle hogs and maintaining just enough\nconcurrency to prevent work processing from stalling due to lack of\nprocessing context is optimal.  gcwq keeps the number of concurrent\nactive workers to minimum but no less.  As long as there\u0027s one or more\nrunning workers on the cpu, no new worker is scheduled so that works\ncan be processed in batch as much as possible but when the last\nrunning worker blocks, gcwq immediately schedules new worker so that\nthe cpu doesn\u0027t sit idle while there are works to be processed.\n\ngcwq always keeps at least single idle worker around.  When a new\nworker is necessary and the worker is the last idle one, the worker\nassumes the role of \"manager\" and manages the worker pool -\nie. creates another worker.  Forward-progress is guaranteed by having\ndedicated rescue workers for workqueues which may be necessary while\ncreating a new worker.  When the manager is having problem creating a\nnew worker, mayday timer activates and rescue workers are summoned to\nthe cpu and execute works which might be necessary to create new\nworkers.\n\nTrustee is expanded to serve the role of manager while a CPU is being\ntaken down and stays down.  As no new works are supposed to be queued\non a dead cpu, it just needs to drain all the existing ones.  Trustee\ncontinues to try to create new workers and summon rescuers as long as\nthere are pending works.  If the CPU is brought back up while the\ntrustee is still trying to drain the gcwq from the previous offlining,\nthe trustee will kill all idles ones and tell workers which are still\nbusy to rebind to the cpu, and pass control over to gcwq which assumes\nthe manager role as necessary.\n\nConcurrency managed worker pool reduces the number of workers\ndrastically.  Only workers which are necessary to keep the processing\ngoing are created and kept.  Also, it reduces cache footprint by\navoiding unnecessarily switching contexts between different workers.\n\nPlease note that this patch does not increase max_active of any\nworkqueue.  All workqueues can still only process one work per cpu.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d302f0178223802a1e496ba90c66193b7721c9c1",
      "tree": "d9282d8a6a69b6b5b1db9fbe97301f6338af8752",
      "parents": [
        "7e11629d0efec829cbf62366143ba1081944a70e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:13 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:13 2010 +0200"
      },
      "message": "workqueue: implement worker_{set|clr}_flags()\n\nImplement worker_{set|clr}_flags() to manipulate worker flags.  These\nare currently simple wrappers but logics to track the current worker\nstate and the current level of concurrency will be added.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "7e11629d0efec829cbf62366143ba1081944a70e",
      "tree": "946f6383f420fafc89550ad2f7efbdfee441ccbb",
      "parents": [
        "18aa9effad4adb2c1efe123af4eb24fec9f59b30"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:13 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:13 2010 +0200"
      },
      "message": "workqueue: use shared worklist and pool all workers per cpu\n\nUse gcwq-\u003eworklist instead of cwq-\u003eworklist and break the strict\nassociation between a cwq and its worker.  All works queued on a cpu\nare queued on gcwq-\u003eworklist and processed by any available worker on\nthe gcwq.\n\nAs there no longer is strict association between a cwq and its worker,\nwhether a work is executing can now only be determined by calling\n[__]find_worker_executing_work().\n\nAfter this change, the only association between a cwq and its worker\nis that a cwq puts a worker into shared worker pool on creation and\nkills it on destruction.  As all workqueues are still limited to\nmax_active of one, this means that there are always at least as many\nworkers as active works and thus there\u0027s no danger for deadlock.\n\nThe break of strong association between cwqs and workers requires\nsomewhat clumsy changes to current_is_keventd() and\ndestroy_workqueue().  Dynamic worker pool management will remove both\nclumsy changes.  current_is_keventd() won\u0027t be necessary at all as the\nonly reason it exists is to avoid queueing a work from a work which\nwill be allowed just fine.  The clumsy part of destroy_workqueue() is\nadded because a worker can only be destroyed while idle and there\u0027s no\nguarantee a worker is idle when its wq is going down.  With dynamic\npool management, workers are not associated with workqueues at all and\nonly idle ones will be submitted to destroy_workqueue() so the code\nwon\u0027t be necessary anymore.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "18aa9effad4adb2c1efe123af4eb24fec9f59b30",
      "tree": "76975b37ae0ef1ebf460aaab68359ed7a12fe37a",
      "parents": [
        "7a22ad757ec75186ad43a5b4670fa7423ee8f480"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:13 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:13 2010 +0200"
      },
      "message": "workqueue: implement WQ_NON_REENTRANT\n\nWith gcwq managing all the workers and work-\u003edata pointing to the last\ngcwq it was on, non-reentrance can be easily implemented by checking\nwhether the work is still running on the previous gcwq on queueing.\nImplement it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "7a22ad757ec75186ad43a5b4670fa7423ee8f480",
      "tree": "698807765421a46dcb5e2daa609336a61d1cdea5",
      "parents": [
        "8cca0eea3964b72b14e8c3f88e3a40bef7b9113e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:13 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:13 2010 +0200"
      },
      "message": "workqueue: carry cpu number in work data once execution starts\n\nTo implement non-reentrant workqueue, the last gcwq a work was\nexecuted on must be reliably obtainable as long as the work structure\nis valid even if the previous workqueue has been destroyed.\n\nTo achieve this, work-\u003edata will be overloaded to carry the last cpu\nnumber once execution starts so that the previous gcwq can be located\nreliably.  This means that cwq can\u0027t be obtained from work after\nexecution starts but only gcwq.\n\nImplement set_work_{cwq|cpu}(), get_work_[g]cwq() and\nclear_work_data() to set work data to the cpu number when starting\nexecution, access the overloaded work data and clear it after\ncancellation.\n\nqueue_delayed_work_on() is updated to preserve the last cpu while\nin-flight in timer and other callers which depended on getting cwq\nfrom work after execution starts are converted to depend on gcwq\ninstead.\n\n* Anton Blanchard fixed compile error on powerpc due to missing\n  linux/threads.h include.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Anton Blanchard \u003canton@samba.org\u003e\n"
    },
    {
      "commit": "8cca0eea3964b72b14e8c3f88e3a40bef7b9113e",
      "tree": "49a8e4496ad0ffa99386f6566bc9ffc0c0cc39b2",
      "parents": [
        "502ca9d819792e7d79b6e002afe9094c641fe410"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:13 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:13 2010 +0200"
      },
      "message": "workqueue: add find_worker_executing_work() and track current_cwq\n\nNow that all the workers are tracked by gcwq, we can find which worker\nis executing a work from gcwq.  Implement find_worker_executing_work()\nand make worker track its current_cwq so that we can find things the\nother way around.  This will be used to implement non-reentrant wqs.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "502ca9d819792e7d79b6e002afe9094c641fe410",
      "tree": "5f06a8845643f1007ce9807636cde4057f8761a9",
      "parents": [
        "db7bccf45cb87522096b8f43144e31ca605a9f24"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:13 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:13 2010 +0200"
      },
      "message": "workqueue: make single thread workqueue shared worker pool friendly\n\nReimplement st (single thread) workqueue so that it\u0027s friendly to\nshared worker pool.  It was originally implemented by confining st\nworkqueues to use cwq of a fixed cpu and always having a worker for\nthe cpu.  This implementation isn\u0027t very friendly to shared worker\npool and suboptimal in that it ends up crossing cpu boundaries often.\n\nReimplement st workqueue using dynamic single cpu binding and\ncwq-\u003elimit.  WQ_SINGLE_THREAD is replaced with WQ_SINGLE_CPU.  In a\nsingle cpu workqueue, at most single cwq is bound to the wq at any\ngiven time.  Arbitration is done using atomic accesses to\nwq-\u003esingle_cpu when queueing a work.  Once bound, the binding stays\ntill the workqueue is drained.\n\nNote that the binding is never broken while a workqueue is frozen.\nThis is because idle cwqs may have works waiting in delayed_works\nqueue while frozen.  On thaw, the cwq is restarted if there are any\ndelayed works or unbound otherwise.\n\nWhen combined with max_active limit of 1, single cpu workqueue has\nexactly the same execution properties as the original single thread\nworkqueue while allowing sharing of per-cpu workers.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "db7bccf45cb87522096b8f43144e31ca605a9f24",
      "tree": "d16cc764243fb6feaa4c9dea5398e139c8012124",
      "parents": [
        "c8e55f360210c1bc49bea5d62bc3939b7ee13483"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "message": "workqueue: reimplement CPU hotplugging support using trustee\n\nReimplement CPU hotplugging support using trustee thread.  On CPU\ndown, a trustee thread is created and each step of CPU down is\nexecuted by the trustee and workqueue_cpu_callback() simply drives and\nwaits for trustee state transitions.\n\nCPU down operation no longer waits for works to be drained but trustee\nsticks around till all pending works have been completed.  If CPU is\nbrought back up while works are still draining,\nworkqueue_cpu_callback() tells trustee to step down and tell workers\nto rebind to the cpu.\n\nAs it\u0027s difficult to tell whether cwqs are empty if it\u0027s freezing or\nfrozen, trustee doesn\u0027t consider draining to be complete while a gcwq\nis freezing or frozen (tracked by new GCWQ_FREEZING flag).  Also,\nworkers which get unbound from their cpu are marked with WORKER_ROGUE.\n\nTrustee based implementation doesn\u0027t bring any new feature at this\npoint but it will be used to manage worker pool when dynamic shared\nworker pool is implemented.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "c8e55f360210c1bc49bea5d62bc3939b7ee13483",
      "tree": "c2e88d5576e5f65c036ba60c52f9518901f2a2f0",
      "parents": [
        "8b03ae3cde59af9facab7c831b4141515d5dbcc8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "message": "workqueue: implement worker states\n\nImplement worker states.  After created, a worker is STARTED.  While a\nworker isn\u0027t processing a work, it\u0027s IDLE and chained on\ngcwq-\u003eidle_list.  While processing a work, a worker is BUSY and\nchained on gcwq-\u003ebusy_hash.  Also, gcwq now counts the number of all\nworkers and idle ones.\n\nworker_thread() is restructured to reflect state transitions.\ncwq-\u003emore_work is removed and waking up a worker makes it check for\nevents.  A worker is killed by setting DIE flag while it\u0027s IDLE and\nwaking it up.\n\nThis gives gcwq better visibility of what\u0027s going on and allows it to\nfind out whether a work is executing quickly which is necessary to\nhave multiple workers processing the same cwq.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "8b03ae3cde59af9facab7c831b4141515d5dbcc8",
      "tree": "900829ac17fa941e9819208489081e4de1218ac4",
      "parents": [
        "a0a1a5fd4fb15ec61117c759fe9f5c16c53d9e9c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "message": "workqueue: introduce global cwq and unify cwq locks\n\nThere is one gcwq (global cwq) per each cpu and all cwqs on an cpu\npoint to it.  A gcwq contains a lock to be used by all cwqs on the cpu\nand an ida to give IDs to workers belonging to the cpu.\n\nThis patch introduces gcwq, moves worker_ida into gcwq and make all\ncwqs on the same cpu use the cpu\u0027s gcwq-\u003elock instead of separate\nlocks.  gcwq-\u003eida is now protected by gcwq-\u003elock too.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "a0a1a5fd4fb15ec61117c759fe9f5c16c53d9e9c",
      "tree": "6df8eddcaeff6cde892c8cae6bdfa7653805e144",
      "parents": [
        "1e19ffc63dbbaea7a7d1c63d99c38d3e5a4c7edf"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "message": "workqueue: reimplement workqueue freeze using max_active\n\nCurrently, workqueue freezing is implemented by marking the worker\nfreezeable and calling try_to_freeze() from dispatch loop.\nReimplement it using cwq-\u003elimit so that the workqueue is frozen\ninstead of the worker.\n\n* workqueue_struct-\u003esaved_max_active is added which stores the\n  specified max_active on initialization.\n\n* On freeze, all cwq-\u003emax_active\u0027s are quenched to zero.  Freezing is\n  complete when nr_active on all cwqs reach zero.\n\n* On thaw, all cwq-\u003emax_active\u0027s are restored to wq-\u003esaved_max_active\n  and the worklist is repopulated.\n\nThis new implementation allows having single shared pool of workers\nper cpu.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "1e19ffc63dbbaea7a7d1c63d99c38d3e5a4c7edf",
      "tree": "357690d6017682a4a21824f7d3f34a83406a136d",
      "parents": [
        "affee4b294a0fc97d67c8a77dc080c4dd262a79e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "message": "workqueue: implement per-cwq active work limit\n\nAdd cwq-\u003enr_active, cwq-\u003emax_active and cwq-\u003edelayed_work.  nr_active\ncounts the number of active works per cwq.  A work is active if it\u0027s\nflushable (colored) and is on cwq\u0027s worklist.  If nr_active reaches\nmax_active, new works are queued on cwq-\u003edelayed_work and activated\nlater as works on the cwq complete and decrement nr_active.\n\ncwq-\u003emax_active can be specified via the new @max_active parameter to\n__create_workqueue() and is set to 1 for all workqueues for now.  As\neach cwq has only single worker now, this double queueing doesn\u0027t\ncause any behavior difference visible to its users.\n\nThis will be used to reimplement freeze/thaw and implement shared\nworker pool.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "affee4b294a0fc97d67c8a77dc080c4dd262a79e",
      "tree": "5b3fd79640ad7940e0abbed193a192d3919f259d",
      "parents": [
        "c34056a3fdde777c079cc8a70785c2602f2586cb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:12 2010 +0200"
      },
      "message": "workqueue: reimplement work flushing using linked works\n\nA work is linked to the next one by having WORK_STRUCT_LINKED bit set\nand these links can be chained.  When a linked work is dispatched to a\nworker, all linked works are dispatched to the worker\u0027s newly added\n-\u003escheduled queue and processed back-to-back.\n\nCurrently, as there\u0027s only single worker per cwq, having linked works\ndoesn\u0027t make any visible behavior difference.  This change is to\nprepare for multiple shared workers per cpu.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "c34056a3fdde777c079cc8a70785c2602f2586cb",
      "tree": "583cc13af000d1c085b1f951f8975eee78cea54c",
      "parents": [
        "73f53c4aa732eced5fcb1844d3d452c30905f20f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "message": "workqueue: introduce worker\n\nSeparate out worker thread related information to struct worker from\nstruct cpu_workqueue_struct and implement helper functions to deal\nwith the new struct worker.  The only change which is visible outside\nis that now workqueue worker are all named \"kworker/CPUID:WORKERID\"\nwhere WORKERID is allocated from per-cpu ida.\n\nThis is in preparation of concurrency managed workqueue where shared\nmultiple workers would be available per cpu.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "73f53c4aa732eced5fcb1844d3d452c30905f20f",
      "tree": "6185ebab8337d33de9ca9c3d19fc5217bc4ee6bc",
      "parents": [
        "0f900049cbe2767d47c2a62b54f0e822e1d66840"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "message": "workqueue: reimplement workqueue flushing using color coded works\n\nReimplement workqueue flushing using color coded works.  wq has the\ncurrent work color which is painted on the works being issued via\ncwqs.  Flushing a workqueue is achieved by advancing the current work\ncolors of cwqs and waiting for all the works which have any of the\nprevious colors to drain.\n\nCurrently there are 16 possible colors, one is reserved for no color\nand 15 colors are useable allowing 14 concurrent flushes.  When color\nspace gets full, flush attempts are batched up and processed together\nwhen color frees up, so even with many concurrent flushers, the new\nimplementation won\u0027t build up huge queue of flushers which has to be\nprocessed one after another.\n\nOnly works which are queued via __queue_work() are colored.  Works\nwhich are directly put on queue using insert_work() use NO_COLOR and\ndon\u0027t participate in workqueue flushing.  Currently only works used\nfor work-specific flush fall in this category.\n\nThis new implementation leaves only cleanup_workqueue_thread() as the\nuser of flush_cpu_workqueue().  Just make its users use\nflush_workqueue() and kthread_stop() directly and kill\ncleanup_workqueue_thread().  As workqueue flushing doesn\u0027t use barrier\nrequest anymore, the comment describing the complex synchronization\naround it in cleanup_workqueue_thread() is removed together with the\nfunction.\n\nThis new implementation is to allow having and sharing multiple\nworkers per cpu.\n\nPlease note that one more bit is reserved for a future work flag by\nthis patch.  This is to avoid shifting bits and updating comments\nlater.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "0f900049cbe2767d47c2a62b54f0e822e1d66840",
      "tree": "b7d2ce3e00ef49c038d0641a860b98b4c24fb203",
      "parents": [
        "1537663f5763892cacf1409ac0efef1b4f332d1e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "message": "workqueue: update cwq alignement\n\nwork-\u003edata field is used for two purposes.  It points to cwq it\u0027s\nqueued on and the lower bits are used for flags.  Currently, two bits\nare reserved which is always safe as 4 byte alignment is guaranteed on\nevery architecture.  However, future changes will need more flag bits.\n\nOn SMP, the percpu allocator is capable of honoring larger alignment\n(there are other users which depend on it) and larger alignment works\njust fine.  On UP, percpu allocator is a thin wrapper around\nkzalloc/kfree() and don\u0027t honor alignment request.\n\nThis patch introduces WORK_STRUCT_FLAG_BITS and implements\nalloc/free_cwqs() which guarantees max(1 \u003c\u003c WORK_STRUCT_FLAG_BITS,\n__alignof__(unsigned long long) alignment both on SMP and UP.  On SMP,\nsimply wrapping percpu allocator is enough.  On UP, extra space is\nallocated so that cwq can be aligned and the original pointer can be\nstored after it which is used in the free path.\n\n* Alignment problem on UP is reported by Michal Simek.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nReported-by: Michal Simek \u003cmichal.simek@petalogix.com\u003e\n"
    },
    {
      "commit": "1537663f5763892cacf1409ac0efef1b4f332d1e",
      "tree": "b2fe110d52315438c71b16f14d8a1b043b91deb4",
      "parents": [
        "64166699752006f1a23a9cf7c96ae36654ccfc2c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "message": "workqueue: kill cpu_populated_map\n\nWorker management is about to be overhauled.  Simplify things by\nremoving cpu_populated_map, creating workers for all possible cpus and\nmaking single threaded workqueues behave more like multi threaded\nones.\n\nAfter this patch, all cwqs are always initialized, all workqueues are\nlinked on the workqueues list and workers for all possibles cpus\nalways exist.  This also makes CPU hotplug support simpler - checking\n-\u003ecpus_allowed before processing works in worker_thread() and flushing\ncwqs on CPU_POST_DEAD are enough.\n\nWhile at it, make get_cwq() always return the cwq for the specified\ncpu, add target_cwq() for cases where single thread distinction is\nnecessary and drop all direct usage of per_cpu_ptr() on wq-\u003ecpu_wq.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "64166699752006f1a23a9cf7c96ae36654ccfc2c",
      "tree": "ef4d825be9526409102bff79ca8bb1dd60aa2443",
      "parents": [
        "a62428c0ae54a39e411251e836c3fe3dc11a5f5f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:11 2010 +0200"
      },
      "message": "workqueue: temporarily remove workqueue tracing\n\nStrip tracing code from workqueue and remove workqueue tracing.  This\nis temporary measure till concurrency managed workqueue is complete.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\n"
    },
    {
      "commit": "a62428c0ae54a39e411251e836c3fe3dc11a5f5f",
      "tree": "364b1f65ac8c54d852a7863eebdf2a8d8dbde6f9",
      "parents": [
        "22df02bb3fab24af97bff4c69cc6fd8529fc66fe"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "message": "workqueue: separate out process_one_work()\n\nSeparate out process_one_work() out of run_workqueue().  This patch\ndoesn\u0027t cause any behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "22df02bb3fab24af97bff4c69cc6fd8529fc66fe",
      "tree": "125b00589e5abe4dc941a1dba467cd50563ad195",
      "parents": [
        "97e37d7b9e65a6ac939f796f91081135b7a08acc"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "message": "workqueue: define masks for work flags and conditionalize STATIC flags\n\nWork flags are about to see more traditional mask handling.  Define\nWORK_STRUCT_*_BIT as the bit position constant and redefine\nWORK_STRUCT_* as bit masks.  Also, make WORK_STRUCT_STATIC_* flags\nconditional\n\nWhile at it, re-define these constants as enums and use\nWORK_STRUCT_STATIC instead of hard-coding 2 in\nWORK_DATA_STATIC_INIT().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "97e37d7b9e65a6ac939f796f91081135b7a08acc",
      "tree": "1125644ee13ecf0825688502aa4a7495008cc88e",
      "parents": [
        "4690c4ab56c71919893ca25252f2dd65b58188c7"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "message": "workqueue: merge feature parameters into flags\n\nCurrently, __create_workqueue_key() takes @singlethread and\n@freezeable paramters and store them separately in workqueue_struct.\nMerge them into a single flags parameter and field and use\nWQ_FREEZEABLE and WQ_SINGLE_THREAD.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "4690c4ab56c71919893ca25252f2dd65b58188c7",
      "tree": "dcdb5b7dd2104db2dc8babe66064dd6f5022247f",
      "parents": [
        "c790bce0481857412c964c5e9d46d56e41c4b051"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:10 2010 +0200"
      },
      "message": "workqueue: misc/cosmetic updates\n\nMake the following updates in preparation of concurrency managed\nworkqueue.  None of these changes causes any visible behavior\ndifference.\n\n* Add comments and adjust indentations to data structures and several\n  functions.\n\n* Rename wq_per_cpu() to get_cwq() and swap the position of two\n  parameters for consistency.  Convert a direct per_cpu_ptr() access\n  to wq-\u003ecpu_wq to get_cwq().\n\n* Add work_static() and Update set_wq_data() such that it sets the\n  flags part to WORK_STRUCT_PENDING | WORK_STRUCT_STATIC if static |\n  @extra_flags.\n\n* Move santiy check on work-\u003eentry emptiness from queue_work_on() to\n  __queue_work() which all queueing paths share.\n\n* Make __queue_work() take @cpu and @wq instead of @cwq.\n\n* Restructure flush_work() and __create_workqueue_key() to make them\n  easier to modify.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "c790bce0481857412c964c5e9d46d56e41c4b051",
      "tree": "82e87167b78bbf3456a53d057b1b741c250a0b76",
      "parents": [
        "8fec62b2d9d0c80b594d0d85678bfdf57a70df1b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:09 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 29 10:07:09 2010 +0200"
      },
      "message": "workqueue: kill RT workqueue\n\nWith stop_machine() converted to use cpu_stop, RT workqueue doesn\u0027t\nhave any user left.  Kill RT workqueue support.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "a25909a4d4a29e272f953e12595bf2f04a292dbd",
      "tree": "86b54bc29aa126eff797b98728133ea960f8bd01",
      "parents": [
        "71d1d5c722db9ae3b3f9c08ef7ddcd7759fbb1e0"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Thu May 13 12:32:28 2010 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jun 14 16:37:26 2010 -0700"
      },
      "message": "lockdep: Add an in_workqueue_context() lockdep-based test function\n\nSome recent uses of RCU make use of workqueues.  In these uses, execution\nwithin the context of a specific workqueue takes the place of the usual\nRCU read-side primitives such as rcu_read_lock(), and flushing of workqueues\ntakes the place of the usual RCU grace-period primitives.  Checking for\ncorrect use of rcu_dereference() in such cases requires a test of whether\nthe code is executing in the context of a particular workqueue.  This\ncommit adds an in_workqueue_context() function that provides this test.\nThis new function is only defined when lockdep is enabled, which allows\nit to be used as the second argument of rcu_dereference_check().\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "80b5184cc537718122e036afe7e62d202b70d077",
      "tree": "d4e2b400f0e951156d64d546fd563fa5a8ab02d3",
      "parents": [
        "ad84bb5b98bf81deae97e3bcd814675d6b4e6f72"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Wed May 26 14:43:32 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:48 2010 -0700"
      },
      "message": "kernel/: convert cpu notifier to return encapsulate errno value\n\nBy the previous modification, the cpu notifier can return encapsulate\nerrno value.  This converts the cpu notifiers for kernel/*.c\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4d707b9f48e2c4aa94b96f1133813b73df71fb55",
      "tree": "2e8e6c44e55bcea9ae2de200ebb3edaac81c2a88",
      "parents": [
        "eef6a7d5c2f38adadab8240fabf43730fe796482"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Apr 23 17:40:40 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 30 08:57:25 2010 +0200"
      },
      "message": "workqueue: change cancel_work_sync() to clear work-\u003edata\n\nIn short: change cancel_work_sync(work) to mark this work as \"never\nqueued\" upon return.\n\nWhen cancel_work_sync(work) succeeds, we know that this work can\u0027t be\nqueued or running, and since we own WORK_STRUCT_PENDING nobody can change\nthe bits in work-\u003edata under us. This means we can also clear the \"cwq\"\npart along with _PENDING bit lockless before return, unless the work is\nqueued nobody can assume get_wq_data() is stable even under cwq-\u003elock.\n\nThis change can speedup the subsequent cancel/flush requests, and as\nDmitry pointed out this simplifies the usage of work_struct\u0027s which\ncan be queued on different workqueues. Consider this pseudo code from\nthe input subsystem:\n\n\tstruct workqueue_struct *WQ;\n\tstruct work_struct *WORK;\n\n\tfor (;;) {\n\t\tWQ \u003d create_workqueue();\n\t\t...\n\t\tif (condition())\n\t\t\tqueue_work(WQ, WORK);\n\t\t...\n\t\tcancel_work_sync(WORK);\n\t\tdestroy_workqueue(WQ);\n\t}\n\nIf condition() returns T and then F, cancel_work_sync() will crash the\nkernel because WORK-\u003edata still points to the already destroyed workqueue.\nWith this patch the code like above becomes correct.\n\nSuggested-by: Dmitry Torokhov \u003cdmitry.torokhov@gmail.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "eef6a7d5c2f38adadab8240fabf43730fe796482",
      "tree": "4ee96327e3f7880bea51bd4e05b37193915c00ae",
      "parents": [
        "47dd5be2d6a82b8153e059a1d09eb3879d485bfd"
      ],
      "author": {
        "name": "Alan Stern",
        "email": "stern@rowland.harvard.edu",
        "time": "Fri Feb 12 17:39:21 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 30 08:57:25 2010 +0200"
      },
      "message": "workqueue: warn about flush_scheduled_work()\n\nThis patch (as1319) adds kerneldoc and a pointed warning to\nflush_scheduled_work().\n\nSigned-off-by: Alan Stern \u003cstern@rowland.harvard.edu\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "47dd5be2d6a82b8153e059a1d09eb3879d485bfd",
      "tree": "8d67407e8c3e00d303bd59bf97ecad5d08b4dd19",
      "parents": [
        "66f41d4c5c8a5deed66fdcc84509376c9a0bf9d8"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Apr 30 07:23:51 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 30 07:24:51 2010 +0200"
      },
      "message": "workqueue: flush_delayed_work: keep the original workqueue for re-queueing\n\nflush_delayed_work() always uses keventd_wq for re-queueing,\nbut it should use the workqueue this dwork was queued on.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d71cb81af3817193bc605de061da0499934263a6",
      "tree": "f7ff95e0cf0cdf00234be29ba4050135314ab859",
      "parents": [
        "ab1831b0b87851c874a75e4b3a8538e3d76b37d7",
        "dc186ad741c12ae9ecac8b89e317ef706fdaf8f6"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 10 09:35:44 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 10 09:35:44 2009 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:\n  workqueue: Add debugobjects support\n"
    },
    {
      "commit": "9398180097e359646d46083c3e079a54e20bee82",
      "tree": "633933ddd86e3dba7c0970eea5768867849842c9",
      "parents": [
        "e13193319d3a5545c82ed4b724bffd16f87873e3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Nov 17 14:06:20 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Nov 17 17:40:33 2009 -0800"
      },
      "message": "workqueue: fix race condition in schedule_on_each_cpu()\n\nCommit 65a64464349883891e21e74af16c05d6e1eeb4e9 (\"HWPOISON: Allow\nschedule_on_each_cpu() from keventd\") which allows schedule_on_each_cpu()\nto be called from keventd added a race condition.  schedule_on_each_cpu()\nmay race with cpu hotplug and end up executing the function twice on a\ncpu.\n\nFix it by moving direct execution into the section protected with\nget/put_online_cpus().  While at it, update code such that direct\nexecution is done after works have been scheduled for all other cpus and\ndrop unnecessary cpu !\u003d orig test from flush loop.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dc186ad741c12ae9ecac8b89e317ef706fdaf8f6",
      "tree": "f118cc4972031c681b201d2b8ed95b21df41c1be",
      "parents": [
        "a9366e61b03f55a6e009e687ad10e706714c9907"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Nov 16 01:09:48 2009 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 16 01:09:48 2009 +0900"
      },
      "message": "workqueue: Add debugobjects support\n\nAdd debugobject support to track the life time of work_structs.\n\nWhile at it, remove duplicate definition of\nINIT_DELAYED_WORK_ON_STACK().\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "3242f9804ba992c867360e2b57efc268b8e4e175",
      "tree": "96fbdbc1344aa67588ce26765f308c674b91a75f",
      "parents": [
        "23756692147c5dfd3328afd42e16e9d943ff756c",
        "7456b0405d8fc063c49628f969cdb23be060fc80"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 29 08:20:00 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 29 08:20:00 2009 -0700"
      },
      "message": "Merge branch \u0027hwpoison-2.6.32\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6\n\n* \u0027hwpoison-2.6.32\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6:\n  HWPOISON: fix invalid page count in printk output\n  HWPOISON: Allow schedule_on_each_cpu() from keventd\n  HWPOISON: fix/proc/meminfo alignment\n  HWPOISON: fix oops on ksm pages\n  HWPOISON: Fix page count leak in hwpoison late kill in do_swap_page\n  HWPOISON: return early on non-LRU pages\n  HWPOISON: Add brief hwpoison description to Documentation\n  HWPOISON: Clean up PR_MCE_KILL interface\n"
    },
    {
      "commit": "65a64464349883891e21e74af16c05d6e1eeb4e9",
      "tree": "7b4744f01840c337506dbb24debe5e50ee76186e",
      "parents": [
        "5d5429af066b8896e903d829ac143711ed2c25f2"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Oct 14 06:22:47 2009 +0200"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Mon Oct 19 07:29:22 2009 +0200"
      },
      "message": "HWPOISON: Allow schedule_on_each_cpu() from keventd\n\nRight now when calling schedule_on_each_cpu() from keventd there\nis a deadlock because it tries to schedule a work item on the current CPU\ntoo. This happens via lru_add_drain_all() in hwpoison.\n\nJust call the function for the current CPU in this case. This is actually\nfaster too.\n\nDebugging with Fengguang Wu \u0026 Max Asbock\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "8c53e46314562fe814b0afef6cfcbd2f562b017c",
      "tree": "e9b68a33c470a91967c5930438e93beeb3126c50",
      "parents": [
        "c8e33141911bf8fe87dc6c92793b9a59b2be0130"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 14 09:16:42 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 14 15:11:35 2009 -0700"
      },
      "message": "workqueue: add \u0027flush_delayed_work()\u0027 to run and wait for delayed work\n\nIt basically turns a delayed work into an immediate work, and then waits\nfor it to finish, thus allowing you to force (and wait for) an immediate\nflush of a delayed work.\n\nWe\u0027ll want to use this in the tty layer to clean up tty_flush_to_ldisc().\n\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n[ Fixed to use \u0027del_timer_sync()\u0027 as noted by Oleg ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "774a694f8cd08115d130a290d73c6d8563f26b1b",
      "tree": "2b5f834ac7a149278d2a7e44d7afe69f40ef1431",
      "parents": [
        "4f0ac854167846bd55cd81dbc9a36e03708aa01c",
        "e1f8450854d69f0291882804406ea1bab3ca44b4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 11 13:23:18 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 11 13:23:18 2009 -0700"
      },
      "message": "Merge branch \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (64 commits)\n  sched: Fix sched::sched_stat_wait tracepoint field\n  sched: Disable NEW_FAIR_SLEEPERS for now\n  sched: Keep kthreads at default priority\n  sched: Re-tune the scheduler latency defaults to decrease worst-case latencies\n  sched: Turn off child_runs_first\n  sched: Ensure that a child can\u0027t gain time over it\u0027s parent after fork()\n  sched: enable SD_WAKE_IDLE\n  sched: Deal with low-load in wake_affine()\n  sched: Remove short cut from select_task_rq_fair()\n  sched: Turn on SD_BALANCE_NEWIDLE\n  sched: Clean up topology.h\n  sched: Fix dynamic power-balancing crash\n  sched: Remove reciprocal for cpu_power\n  sched: Try to deal with low capacity, fix update_sd_power_savings_stats()\n  sched: Try to deal with low capacity\n  sched: Scale down cpu_power due to RT tasks\n  sched: Implement dynamic cpu_power\n  sched: Add smt_gain\n  sched: Update the cpu_power sum during load-balance\n  sched: Add SD_PREFER_SIBLING\n  ...\n"
    },
    {
      "commit": "61cbe54d9479ad98283b2dda686deae4c34b2d59",
      "tree": "e7d4766daaf2895aab96b035a973b67439baecf2",
      "parents": [
        "172e082a9111ea504ee34cbba26284a5ebdc53a7"
      ],
      "author": {
        "name": "Mike Galbraith",
        "email": "efault@gmx.de",
        "time": "Wed Sep 09 15:41:37 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Sep 09 17:30:06 2009 +0200"
      },
      "message": "sched: Keep kthreads at default priority\n\nRemoves kthread/workqueue priority boost, they increase worst-case\ndesktop latencies.\n\nSigned-off-by: Mike Galbraith \u003cefault@gmx.de\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLKML-Reference: \u003c1252486344.28645.18.camel@marge.simson.net\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "5b0f437df0a3e374d26ad533eb78fe64744f55a8",
      "tree": "b450a583c3fea39baac8cdea13b152634cdea121",
      "parents": [
        "a33a052f19a21d727847391c8c1aff3fb221c472"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bart.vanassche@gmail.com",
        "time": "Thu Jul 30 19:00:53 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Aug 04 15:21:16 2009 +0200"
      },
      "message": "workqueues: Improve schedule_work() documentation\n\nTwo important aspects of the schedule_work() function are not\nyet documented:\n\n - that it is allowed to pass a struct work_struct * to this\n   function that is already on the kernel-global workqueue;\n\n - the meaning of its return value.\n\nThe patch below documents both aspects.\n\nSigned-off-by: Bart Van Assche \u003cbart.vanassche@gmail.com\u003e\nCc: \"Greg Kroah-Hartman\" \u003cgregkh@suse.de\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nLKML-Reference: \u003c200907301900.54202.bart.vanassche@gmail.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "fb39125fd79a25c5002f3b45cf4c80e3fa6b961b",
      "tree": "96a9d274896f94306bc4d4972eca2153934f4814",
      "parents": [
        "f2aebaee653a35b01c3665de2cbb1e31456b8ea8"
      ],
      "author": {
        "name": "Zhaolei",
        "email": "zhaolei@cn.fujitsu.com",
        "time": "Fri Apr 17 15:15:51 2009 +0800"
      },
      "committer": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Tue Jun 02 01:10:40 2009 +0200"
      },
      "message": "ftrace, workqueuetrace: make workqueue tracepoints use TRACE_EVENT macro\n\nv3: zhaolei@cn.fujitsu.com: Change TRACE_EVENT definition to new format\n    introduced by Steven Rostedt: consolidate trace and trace_event headers\nv2: kosaki@jp.fujitsu.com: print the function names instead of addr, and zap\n    the work addr\nv1: zhaolei@cn.fujitsu.com: Make workqueue tracepoints use TRACE_EVENT macro\n\nTRACE_EVENT is a more generic way to define tracepoints.\nDoing so adds these new capabilities to the tracepoints:\n\n  - zero-copy and per-cpu splice() tracing\n  - binary tracing without printf overhead\n  - structured logging records exposed under /debug/tracing/events\n  - trace events embedded in function tracer output and other plugins\n  - user-defined, per tracepoint filter expressions\n\nThen, this patch converts DEFINE_TRACE to TRACE_EVENT in workqueue related\ntracepoints.\n\n[ Impact: expand workqueue tracer to events tracing ]\n\nSigned-off-by: Zhao Lei \u003czhaolei@cn.fujitsu.com\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Tom Zanussi \u003ctzanussi@gmail.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\n"
    },
    {
      "commit": "6b44003e5ca66a3fffeb5bc90f40ada2c4340896",
      "tree": "d9dce0a39b5e66d8e760344a51ffb6de9594cd2f",
      "parents": [
        "1c99315bb36b5d776210546d438ca928dc9b1f22"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Thu Apr 09 09:50:37 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Thu Apr 09 09:50:37 2009 +0930"
      },
      "message": "work_on_cpu(): rewrite it to create a kernel thread on demand\n\nImpact: circular locking bugfix\n\nThe various implemetnations and proposed implemetnations of work_on_cpu()\nare vulnerable to various deadlocks because they all used queues of some\nform.\n\nUnrelated pieces of kernel code thus gained dependencies wherein if one\nwork_on_cpu() caller holds a lock which some other work_on_cpu() callback\nalso takes, the kernel could rarely deadlock.\n\nFix this by creating a short-lived kernel thread for each work_on_cpu()\ninvokation.\n\nThis is not terribly fast, but the only current caller of work_on_cpu() is\npci_call_probe().\n\nIt would be nice to find some other way of doing the node-local\nallocations in the PCI probe code so that we can zap work_on_cpu()\naltogether.  The code there is rather nasty.  I can\u0027t think of anything\nsimple at this time...\n\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "714f83d5d9f7c785f622259dad1f4fad12d64664",
      "tree": "20563541ae438e11d686b4d629074eb002a481b7",
      "parents": [
        "8901e7ffc2fa78ede7ce9826dbad68a3a25dc2dc",
        "645dae969c3b8651c5bc7c54a1835ec03820f85f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 05 11:04:19 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 05 11:04:19 2009 -0700"
      },
      "message": "Merge branch \u0027tracing-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027tracing-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (413 commits)\n  tracing, net: fix net tree and tracing tree merge interaction\n  tracing, powerpc: fix powerpc tree and tracing tree interaction\n  ring-buffer: do not remove reader page from list on ring buffer free\n  function-graph: allow unregistering twice\n  trace: make argument \u0027mem\u0027 of trace_seq_putmem() const\n  tracing: add missing \u0027extern\u0027 keywords to trace_output.h\n  tracing: provide trace_seq_reserve()\n  blktrace: print out BLK_TN_MESSAGE properly\n  blktrace: extract duplidate code\n  blktrace: fix memory leak when freeing struct blk_io_trace\n  blktrace: fix blk_probes_ref chaos\n  blktrace: make classic output more classic\n  blktrace: fix off-by-one bug\n  blktrace: fix the original blktrace\n  blktrace: fix a race when creating blk_tree_root in debugfs\n  blktrace: fix timestamp in binary output\n  tracing, Text Edit Lock: cleanup\n  tracing: filter fix for TRACE_EVENT_FORMAT events\n  ftrace: Using FTRACE_WARN_ON() to check \"freed record\" in ftrace_release()\n  x86: kretprobe-booster interrupt emulation code fix\n  ...\n\nFix up trivial conflicts in\n arch/parisc/include/asm/ftrace.h\n include/linux/memory.h\n kernel/extable.c\n kernel/module.c\n"
    },
    {
      "commit": "2355b70fd59cb5be7de2052a9edeee7afb7ff099",
      "tree": "93f192f9dab4748a313ec8d78041b1937e232f33",
      "parents": [
        "1ee1184485df9c9a3503d3a684b911fb7c73d259"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Thu Apr 02 16:58:24 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:00 2009 -0700"
      },
      "message": "workqueue: avoid recursion in run_workqueue()\n\n1) lockdep will complain when run_workqueue() performs recursion.\n\n2) The recursive implementation of run_workqueue() means that\n   flush_workqueue() and its documentation are inconsistent.  This may\n   hide deadlocks and other bugs.\n\n3) The recursion in run_workqueue() will poison cwq-\u003ecurrent_work, but\n   flush_work() and __cancel_work_timer(), etcetera need a reliable\n   cwq-\u003ecurrent_work.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8302294f43250dc337108c51882a6007f2b1e2e0",
      "tree": "85acd4440799c46a372df9cad170fa0c21e59096",
      "parents": [
        "4fe70410d9a219dabb47328effccae7e7f2a6e26",
        "2e572895bf3203e881356a4039ab0fa428ed2639"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Apr 01 21:54:19 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Apr 02 00:49:02 2009 +0200"
      },
      "message": "Merge branch \u0027tracing/core-v2\u0027 into tracing-for-linus\n\nConflicts:\n\tinclude/linux/slub_def.h\n\tlib/Kconfig.debug\n\tmm/slob.c\n\tmm/slub.c\n"
    },
    {
      "commit": "aa85ea5b89c36c51200d795dd788139bd9b8cf50",
      "tree": "0b68a35b691417d927127376beb0541d96c9cc64",
      "parents": [
        "1a8a51004a18b627ea81444201f7867875212f46"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Mar 30 22:05:15 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Mar 30 22:05:16 2009 +1030"
      },
      "message": "cpumask: use new cpumask_ functions in core code.\n\nImpact: cleanup\n\nTime to clean up remaining laggards using the old cpu_ functions.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Trond.Myklebust@netapp.com\n"
    },
    {
      "commit": "dc573f9b20c8710105ac35c08ed0fe1da5160ecd",
      "tree": "24db0a0f6364b78f9c74e62541d26155e785b8f9",
      "parents": [
        "b3a8c34886d0e3dd3a24a5b614ee025181da2f41",
        "ecf441b593ac41cb8cd8cd3695110167c42e098c",
        "b1792e367053968f2ddb48bc911d314143ce6242"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Feb 03 06:25:38 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Feb 03 06:25:38 2009 +0100"
      },
      "message": "Merge branches \u0027tracing/ftrace\u0027, \u0027tracing/kmemtrace\u0027 and \u0027linus\u0027 into tracing/core\n"
    },
    {
      "commit": "8ccad40df8d314f786fdb06bdbedd4f43f3257cd",
      "tree": "7d3c1bde4ff36bb936a5934e602a4e1b50702545",
      "parents": [
        "31ad9081200c06ccc350625d41d1f8b2d1cef29f"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jan 16 15:31:15 2009 -0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jan 19 22:36:07 2009 +0100"
      },
      "message": "work_on_cpu: Use our own workqueue.\n\nImpact: remove potential clashes with generic kevent workqueue\n\nAnnoyingly, some places we want to use work_on_cpu are already in\nworkqueues.  As per Ingo\u0027s suggestion, we create a different workqueue\nfor work_on_cpu.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Mike Travis \u003ctravis@sgi.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "31ad9081200c06ccc350625d41d1f8b2d1cef29f",
      "tree": "99768cf8eae9aaa2d1f4167103aa7ea9c70068a1",
      "parents": [
        "c7f8562a51c2e5dcc1a00a2bdd232b9965ff960d"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jan 16 15:31:15 2009 -0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jan 19 22:36:02 2009 +0100"
      },
      "message": "work_on_cpu: don\u0027t try to get_online_cpus() in work_on_cpu.\n\nImpact: remove potential circular lock dependency with cpu hotplug lock\n\nThis has caused more problems than it solved, with a pile of cpu\nhotplug locking issues.\n\nFollowup patches will get_online_cpus() in callers that need it, but\nif they don\u0027t do it they\u0027re no worse than before when they were using\nset_cpus_allowed without locking.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Mike Travis \u003ctravis@sgi.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "e1d8aa9f1dd655a3534b22fcfbecb70cdb125766",
      "tree": "eb01b005a1d378515d5839bf1c7ea9836355ec9c",
      "parents": [
        "002bb86d8d42f18937aef396c3ecd65c7e02e21a"
      ],
      "author": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Mon Jan 12 23:15:46 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Jan 14 12:11:43 2009 +0100"
      },
      "message": "tracing: add a new workqueue tracer\n\nImpact: new tracer\n\nThe workqueue tracer provides some statistical informations\nabout each cpu workqueue thread such as the number of the\nworks inserted and executed since their creation. It can help\nto evaluate the amount of work each of them have to perform.\nFor example it can help a developer to decide whether he should\nchoose a per cpu workqueue instead of a singlethreaded one.\n\nIt only traces statistical informations for now but it will probably later\nprovide event tracing too.\n\nSuch a tracer could help too, and be improved, to help rt priority sorted\nworkqueue development.\n\nTo have a snapshot of the workqueues state at any time, just do\n\ncat /debugfs/tracing/trace_stat/workqueues\n\nIe:\n\n  1    125        125       reiserfs/1\n  1      0          0       scsi_tgtd/1\n  1      0          0       aio/1\n  1      0          0       ata/1\n  1    114        114       kblockd/1\n  1      0          0       kintegrityd/1\n  1   2147       2147       events/1\n\n  0      0          0       kpsmoused\n  0    105        105       reiserfs/0\n  0      0          0       scsi_tgtd/0\n  0      0          0       aio/0\n  0      0          0       ata_aux\n  0      0          0       ata/0\n  0      0          0       cqueue\n  0      0          0       kacpi_notify\n  0      0          0       kacpid\n  0    149        149       kblockd/0\n  0      0          0       kintegrityd/0\n  0   1000       1000       khelper\n  0   2270       2270       events/0\n\nChanges in V2:\n\n_ Drop the static array based on NR_CPU and dynamically allocate the stat array\n  with num_possible_cpus() and other cpu mask facilities....\n_ Trace workqueue insertion at a bit lower level (insert_work instead of queue_work) to handle\n  even the workqueue barriers.\n\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "e7577c50f2fb2d1c167e2c04a4b4c2cc042acb82",
      "tree": "a3f3db2e4c2feec93873c8015499f33834b38389",
      "parents": [
        "a45185d2d7108b01b90b9e0293377be4d6346dde"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Thu Jan 01 10:12:25 2009 +1030"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Thu Jan 01 10:12:25 2009 +1030"
      },
      "message": "cpumask: convert kernel/workqueue.c\n\nImpact: Reduce memory usage, use new cpumask API.\n\ncpu_populated_map becomes a cpumask_var_t, and cpu_singlethread_map is\nsimply a cpumask pointer: it\u0027s simply the cpumask containing the first\npossible CPU anyway.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "2b828925652340277a889cbc11b2d0637f7cdaf7",
      "tree": "32fcb3d3e466fc419fad2d3717956a5b5ad3d35a",
      "parents": [
        "3a3b7ce9336952ea7b9564d976d068a238976c9d",
        "58e20d8d344b0ee083febb18c2b021d2427e56ca"
      ],
      "author": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri Nov 14 11:29:12 2008 +1100"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri Nov 14 11:29:12 2008 +1100"
      },
      "message": "Merge branch \u0027master\u0027 into next\n\nConflicts:\n\tsecurity/keys/internal.h\n\tsecurity/keys/process_keys.c\n\tsecurity/keys/request_key.c\n\nFixed conflicts above by using the non \u0027tsk\u0027 versions.\n\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "6cc88bc45ce8043171089c9592da223dfab91823",
      "tree": "f89bf8162895a5eb89ea7969098876e08a8999d8",
      "parents": [
        "bb952bb98a7e479262c7eb25d5592545a3af147d"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Nov 14 10:39:21 2008 +1100"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri Nov 14 10:39:21 2008 +1100"
      },
      "message": "CRED: Rename is_single_threaded() to is_wq_single_threaded()\n\nRename is_single_threaded() to is_wq_single_threaded() so that a new\nis_single_threaded() can be created that refers to tasks rather than\nwaitqueues.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nReviewed-by: James Morris \u003cjmorris@namei.org\u003e\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "2d3854a37e8b767a51aba38ed6d22817b0631e33",
      "tree": "3b55cc93720b2e525460216b196ed20298ae985b",
      "parents": [
        "75fa67706cce5272bcfc51ed646f2da21f3bdb6e"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Wed Nov 05 13:39:10 2008 +1100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Nov 06 09:05:33 2008 +0100"
      },
      "message": "cpumask: introduce new API, without changing anything\n\nImpact: introduce new APIs\n\nWe want to deprecate cpumasks on the stack, as we are headed for\ngynormous numbers of CPUs.  Eventually, we want to head towards an\nundefined \u0027struct cpumask\u0027 so they can never be declared on stack.\n\n1) New cpumask functions which take pointers instead of copies.\n   (cpus_* -\u003e cpumask_*)\n\n2) Several new helpers to reduce requirements for temporary cpumasks\n   (cpumask_first_and, cpumask_next_and, cpumask_any_and)\n\n3) Helpers for declaring cpumasks on or offstack for large NR_CPUS\n   (cpumask_var_t, alloc_cpumask_var and free_cpumask_var)\n\n4) \u0027struct cpumask\u0027 for explicitness and to mark new-style code.\n\n5) Make iterator functions stop at nr_cpu_ids (a runtime constant),\n   not NR_CPUS for time efficiency and for smaller dynamic allocations\n   in future.\n\n6) cpumask_copy() so we can allocate less than a full cpumask eventually\n   (for alloc_cpumask_var), and so we can eliminate the \u0027struct cpumask\u0027\n   definition eventually.\n\n7) work_on_cpu() helper for doing task on a CPU, rather than saving old\n   cpumask for current thread and manipulating it.\n\n8) smp_call_function_many() which is smp_call_function_mask() except\n   taking a cpumask pointer.\n\nNote that this patch simply introduces the new functions and leaves\nthe obsolescent ones in place.  This is to simplify the transition\npatches.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "0d557dc97f4bb501f086a03d0f00b99a7855d794",
      "tree": "be717fc70de4fc76f48cf4f4f3cebc3b8569d798",
      "parents": [
        "a802dd0eb5fc97a50cf1abb1f788a8f6cc5db635"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Mon Oct 13 23:50:09 2008 +0200"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Wed Oct 22 10:00:25 2008 +1100"
      },
      "message": "workqueue: introduce create_rt_workqueue\n\ncreate_rt_workqueue will create a real time prioritized workqueue.\nThis is needed for the conversion of stop_machine to a workqueue based\nimplementation.\nThis patch adds yet another parameter to __create_workqueue_key to tell\nit that we want an rt workqueue.\nHowever it looks like we rather should have something like \"int type\"\ninstead of singlethread, freezable and rt.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "e1f8e87449147ffe5ea3de64a46af7de450ce279",
      "tree": "304e90a6747f5a7586a67305b7225ed4b4dbb53a",
      "parents": [
        "8033fe65a6d6c0e47ba9e3cb2e4e6902f9dfb8dd"
      ],
      "author": {
        "name": "Francois Cami",
        "email": "francois.cami@free.fr",
        "time": "Wed Oct 15 22:01:59 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 16 11:21:32 2008 -0700"
      },
      "message": "Remove Andrew Morton\u0027s old email accounts\n\nPeople can use the real name an an index into MAINTAINERS to find the\ncurrent email address.\n\nSigned-off-by: Francois Cami \u003cfrancois.cami@free.fr\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "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"
    }
  ],
  "next": "4e6045f134784f4b158b3c0f7a282b04bd816887"
}
