)]}'
{
  "log": [
    {
      "commit": "1b0048a44c502c5ab850203e6e0a6498d7d8676d",
      "tree": "762871009312e2e744ff013921b9ae940e567585",
      "parents": [
        "353af9c9a866b07492b15a4efd18ec93123d3a1d"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Thu Dec 20 13:19:22 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Jan 08 14:12:19 2013 -0800"
      },
      "message": "rcu: Make rcu_nocb_poll an early_param instead of module_param\n\nThe as-documented rcu_nocb_poll will fail to enable this feature\nfor two reasons.  (1) there is an extra \"s\" in the documented\nname which is not in the code, and (2) since it uses module_param,\nit really is expecting a prefix, akin to \"rcutree.fanout_leaf\"\nand the prefix isn\u0027t documented.\n\nHowever, there are several reasons why we might not want to\nsimply fix the typo and add the prefix:\n\n1) we\u0027d end up with rcutree.rcu_nocb_poll, and rather probably make\na change to rcutree.nocb_poll\n\n2) if we did #1, then the prefix wouldn\u0027t be consistent with the\nrcu_nocbs\u003d\u003ccpumap\u003e parameter (i.e. one with, one without prefix)\n\n3) the use of module_param in a header file is less than desired,\nsince it isn\u0027t immediately obvious that it will get processed\nvia rcutree.c and get the prefix from that (although use of\nmodule_param_named() could clarify that.)\n\n4) the implied export of /sys/module/rcutree/parameters/rcu_nocb_poll\ndata to userspace via module_param() doesn\u0027t really buy us anything,\nas it is read-only and we can tell if it is enabled already without\nit, since there is a printk at early boot telling us so.\n\nIn light of all that, just change it from a module_param() to an\nearly_setup() call, and worry about adding it to /sys later on if\nwe decide to allow a dynamic setting of it.\n\nAlso change the variable to be tagged as read_mostly, since it\nwill only ever be fiddled with at most, once at boot.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "353af9c9a866b07492b15a4efd18ec93123d3a1d",
      "tree": "a514865e4134796a7a1b2cf1ae85e5c89e821eee",
      "parents": [
        "d1c3ed669a2d452cacfb48c2d171a1f364dae2ed"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Thu Dec 20 09:35:02 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Jan 08 14:12:18 2013 -0800"
      },
      "message": "rcu: Prevent soft-lockup complaints about no-CBs CPUs\n\nThe wait_event() at the head of the rcu_nocb_kthread() can result in\nsoft-lockup complaints if the CPU in question does not register RCU\ncallbacks for an extended period.  This commit therefore changes\nthe wait_event() to a wait_event_interruptible().\n\nReported-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "c635a4e1c24e9396db10ed7424b2084908b32252",
      "tree": "ac1cced2e0c05d5edcd74af6d3493e15e99a7cec",
      "parents": [
        "3fbfbf7a3b66ec424042d909f14ba2ddf4372ea8"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Oct 29 07:29:20 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Nov 16 10:05:57 2012 -0800"
      },
      "message": "rcu: Separate accounting of callbacks from callback-free CPUs\n\nCurrently, callback invocations from callback-free CPUs are accounted to\nthe CPU that registered the callback, but using the same field that is\nused for normal callbacks.  This makes it impossible to determine from\ndebugfs output whether callbacks are in fact being diverted.  This commit\ntherefore adds a separate -\u003en_nocbs_invoked field in the rcu_data structure\nin which diverted callback invocations are counted.  RCU\u0027s debugfs tracing\nstill displays normal callback invocations using ci\u003d, but displayed\ndiverted callbacks with nci\u003d.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "3fbfbf7a3b66ec424042d909f14ba2ddf4372ea8",
      "tree": "cc364c320a6e23927ecc154a8ef8021dc7d1a9e8",
      "parents": [
        "aac1cda34b84a9411d6b8d18c3658f094c834911"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Sun Aug 19 21:35:53 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Nov 16 10:05:56 2012 -0800"
      },
      "message": "rcu: Add callback-free CPUs\n\nRCU callback execution can add significant OS jitter and also can\ndegrade both scheduling latency and, in asymmetric multiprocessors,\nenergy efficiency.  This commit therefore adds the ability for selected\nCPUs (\"rcu_nocbs\u003d\" boot parameter) to have their callbacks offloaded\nto kthreads.  If the \"rcu_nocb_poll\" boot parameter is also specified,\nthese kthreads will do polling, removing the need for the offloaded\nCPUs to do wakeups.  At least one CPU must be doing normal callback\nprocessing: currently CPU 0 cannot be selected as a no-CBs CPU.\nIn addition, attempts to offline the last normal-CBs CPU will fail.\n\nThis feature was inspired by Jim Houston\u0027s and Joe Korty\u0027s JRCU, and\nthis commit includes fixes to problems located by Fengguang Wu\u0027s\nkbuild test robot.\n\n[ paulmck: Added gfp.h include file as suggested by Fengguang Wu. ]\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "aac1cda34b84a9411d6b8d18c3658f094c834911",
      "tree": "60cc2e3d6793fdbf8b13704608aafdf01bcec118",
      "parents": [
        "2c5594df344cd1ff0cc9bf007dea3235582b3acf",
        "d484a215139cf556cb718a7ec7042260b7fc2d28",
        "351573a86d0ef17cbba1c5436706602692781bfe",
        "cda4dc813071e6cb04944c5a140610bd06acd295",
        "c896054f75f9a720ecf2ab3e688f4da79a55fe05",
        "7bd8f2a74bcbd39f4277766f4d49441c45dd10a0",
        "af71befa282ddf51c09509978abe1e83de8fe7eb"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Nov 16 09:59:58 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Nov 16 09:59:58 2012 -0800"
      },
      "message": "Merge branches \u0027urgent.2012.10.27a\u0027, \u0027doc.2012.11.16a\u0027, \u0027fixes.2012.11.13a\u0027, \u0027srcu.2012.10.27a\u0027, \u0027stall.2012.11.13a\u0027, \u0027tracing.2012.11.08a\u0027 and \u0027idle.2012.10.24a\u0027 into HEAD\n\nurgent.2012.10.27a: Fix for RCU user-mode transition (already in -tip).\n\ndoc.2012.11.08a: Documentation updates, most notably codifying the\n\tmemory-barrier guarantees inherent to grace periods.\n\nfixes.2012.11.13a: Miscellaneous fixes.\n\nsrcu.2012.10.27a: Allow statically allocated and initialized srcu_struct\n\tstructures (courtesy of Lai Jiangshan).\n\nstall.2012.11.13a: Add more diagnostic information to RCU CPU stall\n\twarnings, also decrease from 60 seconds to 21 seconds.\n\nhotplug.2012.11.08a: Minor updates to CPU hotplug handling.\n\ntracing.2012.11.08a: Improved debugfs tracing, courtesy of Michael Wang.\n\nidle.2012.10.24a: Updates to RCU idle/adaptive-idle handling, including\n\ta boot parameter that maps normal grace periods to expedited.\n\nResolved conflict in kernel/rcutree.c due to side-by-side change.\n"
    },
    {
      "commit": "f0a0e6f282c72247e7c8ec17c68d528c1bb4d49e",
      "tree": "22b66fc8ac9b95586866ddb447dcc8712d441c14",
      "parents": [
        "67afeed2cab0e59712b4ebf1aef9a2e555a188ce"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Oct 23 13:47:01 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Nov 13 14:08:23 2012 -0800"
      },
      "message": "rcu: Clarify memory-ordering properties of grace-period primitives\n\nThis commit explicitly states the memory-ordering properties of the\nRCU grace-period primitives.  Although these properties were in some\nsense implied by the fundmental property of RCU (\"a grace period must\nwait for all pre-existing RCU read-side critical sections to complete\"),\nstating it explicitly will be a great labor-saving device.\n\nReported-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "7b2e6011f150c42235c4a541d20cf6891afe878a",
      "tree": "a02ac239103e97847ec29183d8aaa45c385a3335",
      "parents": [
        "489832609a1ad7189d11715d8cefb457d90182c5"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Oct 08 10:54:03 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Thu Nov 08 11:50:11 2012 -0800"
      },
      "message": "rcu: Rename -\u003eonofflock to -\u003eorphan_lock\n\nThe -\u003eonofflock field in the rcu_state structure at one time synchronized\nCPU-hotplug operations for RCU.  However, its scope has decreased over time\nso that it now only protects the lists of orphaned RCU callbacks.  This\ncommit therefore renames it to -\u003eorphan_lock to reflect its current use.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "3705b88db0d7cc4a097c32d9e554054103d3f807",
      "tree": "f3baf8c94363506964c9f944496267f74cdee47c",
      "parents": [
        "ba49df4767d4fa5bbd2af3a51709fb81f94264ec"
      ],
      "author": {
        "name": "Antti P Miettinen",
        "email": "ananaza@iki.fi",
        "time": "Fri Oct 05 09:59:15 2012 +0300"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Oct 23 14:54:08 2012 -0700"
      },
      "message": "rcu: Add a module parameter to force use of expedited RCU primitives\n\nThere have been some embedded applications that would benefit from\nuse of expedited grace-period primitives.  In some ways, this is\nsimilar to synchronize_net() doing either a normal or an expedited\ngrace period depending on lock state, but with control outside of\nthe kernel.\n\nThis commit therefore adds rcu_expedited boot and sysfs parameters\nthat cause the kernel to substitute expedited primitives for the\nnormal grace-period primitives.\n\n[ paulmck: Add trace/event/rcu.h to kernel/srcu.c to avoid build error.\n\t   Get rid of infinite loop through contention path.]\n\nSigned-off-by: Antti P Miettinen \u003camiettinen@nvidia.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "9a0c6fef423528ba5b62aa31b29aabf689eb8f70",
      "tree": "8560ac17f9a19f2f03c47fed1eb3e02011a6205f",
      "parents": [
        "19dd1591fc379f1d89f39cd99cbbe97433baa3c3"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Thu Jun 28 12:33:51 2012 -0700"
      },
      "committer": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Wed Sep 26 15:44:02 2012 +0200"
      },
      "message": "rcu: Make RCU_FAST_NO_HZ handle adaptive ticks\n\nThe current implementation of RCU_FAST_NO_HZ tries reasonably hard to rid\nthe current CPU of RCU callbacks.  This is appropriate when the CPU is\nentering idle, where it doesn\u0027t have much useful to do anyway, but is most\ndefinitely not what you want when transitioning to user-mode execution.\nThis commit therefore detects the adaptive-tick case, and refrains from\nburning CPU time getting rid of RCU callbacks in that case.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "5217192b85480353aeeb395574e60d0db04f3676",
      "tree": "a45b440623a8fc55ece18b72e40829b2d9815d74",
      "parents": [
        "bda4ec9f6a7d7b249c7b14baa553731efedce300",
        "bff4a394795add6b919debc009f72b7607f5d4bf"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Sep 25 10:01:45 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Sep 25 10:01:45 2012 -0700"
      },
      "message": "Merge remote-tracking branch \u0027tip/smp/hotplug\u0027 into next.2012.09.25b\n\nThe conflicts between kernel/rcutree.h and kernel/rcutree_plugin.h\nwere due to adjacent insertions and deletions, which were resolved\nby simply accepting the changes on both branches.\n"
    },
    {
      "commit": "bda4ec9f6a7d7b249c7b14baa553731efedce300",
      "tree": "3ef6df518d8d48a29f4aafc05ffa4d427b015ce9",
      "parents": [
        "b17c7035f37f47c7f7cb08a5555ab2aebfa31f91",
        "60f53782c51f27c695840ce90c6c432284319eef",
        "86f343b50bb9f56cce60fade22da9defff28934c",
        "429227bbe55647aa42f8f63cac61e4544e248629",
        "93482f4ef1093f5961a63359a34612183d6beea0"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Sep 23 20:37:55 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Sep 24 20:02:22 2012 -0700"
      },
      "message": "Merge branches \u0027bigrt.2012.09.23a\u0027, \u0027doctorture.2012.09.23a\u0027, \u0027fixes.2012.09.23a\u0027, \u0027hotplug.2012.09.23a\u0027 and \u0027idlechop.2012.09.23a\u0027 into HEAD\n\nbigrt.2012.09.23a contains additional commits to reduce scheduling latency\n\tfrom RCU on huge systems (many hundrends or thousands of CPUs).\n\ndoctorture.2012.09.23a contains documentation changes and rcutorture fixes.\n\nfixes.2012.09.23a contains miscellaneous fixes.\n\nhotplug.2012.09.23a contains CPU-hotplug-related changes.\n\nidle.2012.09.23a fixes architectures for which RCU no longer considered\n\tthe idle loop to be a quiescent state due to earlier\n\tadaptive-dynticks changes.  Affected architectures are alpha,\n\tcris, frv, h8300, m32r, m68k, mn10300, parisc, score, xtensa,\n\tand ia64.\n"
    },
    {
      "commit": "86f343b50bb9f56cce60fade22da9defff28934c",
      "tree": "c2951c5b76afcd56a3d9f4a5d1d40e95528f3bbe",
      "parents": [
        "22a767269a767b3ee91e4aaea353ac6bec6a912d"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Fri Sep 21 10:41:50 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Sep 23 07:42:52 2012 -0700"
      },
      "message": "rcu: Fix CONFIG_RCU_FAST_NO_HZ stall warning message\n\nThe print_cpu_stall_fast_no_hz() function attempts to print -1 when\nthe -\u003eidle_gp_timer is not pending, but unsigned arithmetic causes it\nto instead print ULONG_MAX, which is 4294967295 on 32-bit systems and\n18446744073709551615 on 64-bit systems.  Neither of these are the most\nreader-friendly values, so this commit instead causes \"timer not pending\"\nto be printed when -\u003eidle_gp_timer is not pending.\n\nReported-by: Paul Walmsley \u003cpaul@pwsan.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "5fd4dc068c4ded1339180dbcd1a99e15b1c0a728",
      "tree": "89e0113e51e255dac69a726ada08044d461a0c18",
      "parents": [
        "115f7a7ca0d412aab81acaaaa95eb1ab1c622e2f"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Aug 10 16:00:11 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Sep 23 07:42:50 2012 -0700"
      },
      "message": "rcu: Avoid rcu_print_detail_task_stall_rnp() segfault\n\nThe rcu_print_detail_task_stall_rnp() function invokes\nrcu_preempt_blocked_readers_cgp() to verify that there are some preempted\nRCU readers blocking the current grace period outside of the protection\nof the rcu_node structure\u0027s -\u003elock.  This means that the last blocked\nreader might exit its RCU read-side critical section and remove itself\nfrom the -\u003eblkd_tasks list before the -\u003elock is acquired, resulting in\na segmentation fault when the subsequent code attempts to dereference\nthe now-NULL gp_tasks pointer.\n\nThis commit therefore moves the test under the lock.  This will not\nhave measurable effect on lock contention because this code is invoked\nonly when printing RCU CPU stall warnings, in other words, in the common\ncase, never.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "115f7a7ca0d412aab81acaaaa95eb1ab1c622e2f",
      "tree": "03efa7f9a3f796c88af60a8bf2cc7cdf2885000b",
      "parents": [
        "b065a85354239cc96295f696eeace67ad3a55e5c"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Aug 10 13:55:03 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Sep 23 07:42:50 2012 -0700"
      },
      "message": "rcu: Apply for_each_rcu_flavor() to increment_cpu_stall_ticks()\n\nThe increment_cpu_stall_ticks() function listed each RCU flavor\nexplicitly, with an ifdef to handle preemptible RCU.  This commit\ntherefore applies for_each_rcu_flavor() to save a line of code.\n\nBecause this commit switches from a code-based enumeration of the\nflavors of RCU to an rcu_state-list-based enumeration, it is no longer\npossible to apply __get_cpu_var() to the per-CPU rcu_data structures.\nWe instead use __this_cpu_var() on the rcu_state structure\u0027s -\u003erda field\nthat references the corresponding rcu_data structures.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "b065a85354239cc96295f696eeace67ad3a55e5c",
      "tree": "3f1d429c803ddf21c8bc0583711ba0d9e3ee4fab",
      "parents": [
        "a82dcc76021e22c174ba85d90b7a8c750b7362d0"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Wed Aug 01 15:57:54 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Sep 23 07:42:50 2012 -0700"
      },
      "message": "rcu: Fix obsolete rcu_initiate_boost() header comment\n\nCommit 1217ed1b (rcu: permit rcu_read_unlock() to be called while holding\nrunqueue locks) made rcu_initiate_boost() restore irq state when releasing\nthe rcu_node structure\u0027s -\u003elock, but failed to update the header comment\naccordingly.  This commit therefore brings the header comment up to date.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "5cc900cf55fe58aaad93767c5a526e2a69cbcbc6",
      "tree": "d6eb08a2df0797927d5288e2fa0ba9f2b8b1d4b6",
      "parents": [
        "b4270ee356e5ecef5394ab80c0a0301c1676b7f0"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Jul 31 14:09:49 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Sep 23 07:42:50 2012 -0700"
      },
      "message": "rcu: Improve boost selection when moving tasks to root rcu_node\n\nThe rcu_preempt_offline_tasks() moves all tasks queued on a given leaf\nrcu_node structure to the root rcu_node, which is done when the last CPU\ncorresponding the the leaf rcu_node structure goes offline.  Now that\nRCU-preempt\u0027s synchronize_rcu_expedited() implementation blocks CPU-hotplug\noperations during the initialization of each rcu_node structure\u0027s\n-\u003eboost_tasks pointer, rcu_preempt_offline_tasks() can do a better job\nof setting the root rcu_node\u0027s -\u003eboost_tasks pointer.\n\nThe key point is that rcu_preempt_offline_tasks() runs as part of the\nCPU-hotplug process, so that a concurrent synchronize_rcu_expedited()\nis guaranteed to either have not started on the one hand (in which case\nthere is no boosting on behalf of the expedited grace period) or to be\ncompletely initialized on the other (in which case, in the absence of\nother priority boosting, all -\u003eboost_tasks pointers will be initialized).\nTherefore, if rcu_preempt_offline_tasks() finds that the -\u003eboost_tasks\npointer is equal to the -\u003eexp_tasks pointer, it can be sure that it is\ncorrectly placed.\n\nIn the case where there was boosting ongoing at the time that the\nsynchronize_rcu_expedited() function started, different nodes might start\nboosting the tasks blocking the expedited grace period at different times.\nIn this mixed case, the root node will either be boosting tasks for\nthe expedited grace period already, or it will start as soon as it gets\ndone boosting for the normal grace period -- but in this latter case,\nthe root node\u0027s tasks needed to be boosted in any case.\n\nThis commit therefore adds a check of the -\u003eboost_tasks pointer against\nthe -\u003eexp_tasks pointer to the list that prevents updating -\u003eboost_tasks.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "1e3fd2b38cea41f5386bf23440f2cbdd74cf13d0",
      "tree": "0323ed32ad7616b328d49d1f0a934278988ca5a4",
      "parents": [
        "818615c4cde2a71a5857007b134cce89d506cc3f"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Fri Jul 27 13:41:47 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Sep 23 07:42:49 2012 -0700"
      },
      "message": "rcu: Properly initialize -\u003eboost_tasks on CPU offline\n\nWhen rcu_preempt_offline_tasks() clears tasks from a leaf rcu_node\nstructure, it does not NULL out the structure\u0027s -\u003eboost_tasks field.\nThis commit therefore fixes this issue.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "d7d6a11e8609f0319d4a2d8ede348f8b3374b652",
      "tree": "64a2e3260690a85fe637a3e34c94e8ca540e8fc6",
      "parents": [
        "1943c89de700248d68385300a9b5588a1e314f90"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Aug 21 15:00:05 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Sep 23 07:41:56 2012 -0700"
      },
      "message": "rcu: Simplify quiescent-state detection\n\nThe current quiescent-state detection algorithm is needlessly\ncomplex.  It records the grace-period number corresponding to\nthe quiescent state at the time of the quiescent state, which\nworks, but it seems better to simply erase any record of previous\nquiescent states at the time that the CPU notices the new grace\nperiod.  This has the further advantage of removing another piece\nof RCU for which lockless reasoning is required.\n\nTherefore, this commit makes this change.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "1943c89de700248d68385300a9b5588a1e314f90",
      "tree": "4b94666097ec98ebb5524799203d215c4c575148",
      "parents": [
        "bcfa57ce10d3d53d37a6e324f3010b1ce6a2784a"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 30 17:19:25 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Sep 23 07:41:56 2012 -0700"
      },
      "message": "rcu: Reduce synchronize_rcu_expedited() latency\n\nThe synchronize_rcu_expedited() function disables interrupts across a\nscan of all leaf rcu_node structures, which is not good for real-time\nscheduling latency on large systems (hundreds or especially thousands\nof CPUs).  This commit therefore holds off CPU-hotplug operations using\nget_online_cpus(), and removes the prior acquisiion of the -\u003eonofflock\n(which required disabling interrupts).\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "bcfa57ce10d3d53d37a6e324f3010b1ce6a2784a",
      "tree": "1d365a7a64e3ea1d1dc743afcc1de4b6935caa57",
      "parents": [
        "25d30cf4250f74e5ceb35f8f39739782408db633"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Jul 23 16:03:51 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Sep 23 07:41:56 2012 -0700"
      },
      "message": "rcu: Eliminate signed overflow in synchronize_rcu_expedited()\n\nIn the C language, signed overflow is undefined.  It is true that\ntwos-complement arithmetic normally comes to the rescue, but if the\ncompiler can subvert this any time it has any information about the values\nbeing compared.  For example, given \"if (a - b \u003e 0)\", if the compiler\nhas enough information to realize that (for example) the value of \"a\"\nis positive and that of \"b\" is negative, the compiler is within its\nrights to optimize to a simple \"if (1)\", which might not be what you want.\n\nThis commit therefore converts synchronize_rcu_expedited()\u0027s work-done\ndetection counter from signed to unsigned.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "4cdfc175c25c89eedc08460b5e6239c2ec67fcb6",
      "tree": "716acd208cb0633cdd19fc0cd5ad601906cceb24",
      "parents": [
        "b402b73b3afe3614bc0e921ebe18013ea103115a"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Jun 22 17:06:26 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Sep 23 07:41:54 2012 -0700"
      },
      "message": "rcu: Move quiescent-state forcing into kthread\n\nAs the first step towards allowing quiescent-state forcing to be\npreemptible, this commit moves RCU quiescent-state forcing into the\nsame kthread that is now used to initialize and clean up after grace\nperiods.  This is yet another step towards keeping scheduling\nlatency down to a dull roar.\n\nUpdated to change from raw_spin_lock_irqsave() to raw_spin_lock_irq()\nand to remove the now-unused rcu_state structure fields as suggested by\nPeter Zijlstra.\n\nReported-by: Mike Galbraith \u003cmgalbraith@suse.de\u003e\nReported-by: Dimitri Sivanich \u003csivanich@sgi.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "b626c1b689364859ccd2e86d5e043aeadfeb2cd4",
      "tree": "6a9deb7bd94a1bcf30b60ca0eb8c1d5f3a2b9172",
      "parents": [
        "bfa00b4c4028f39357d16279ff0fddf550241593"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Jun 11 17:39:43 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Sep 23 07:41:53 2012 -0700"
      },
      "message": "rcu: Provide OOM handler to motivate lazy RCU callbacks\n\nIn kernels built with CONFIG_RCU_FAST_NO_HZ\u003dy, CPUs can accumulate a\nlarge number of lazy callbacks, which as the name implies will be slow\nto be invoked.  This can be a problem on small-memory systems, where the\ndefault 6-second sleep for CPUs having only lazy RCU callbacks could well\nbe fatal.  This commit therefore installs an OOM hander that ensures that\nevery CPU with lazy callbacks has at least one non-lazy callback, in turn\nensuring timely advancement for these callbacks.\n\nUpdated to fix bug that disabled OOM killing, noted by Lai Jiangshan.\n\nUpdated to push the for_each_rcu_flavor() loop into rcu_oom_notify_cpu(),\nthus reducing the number of IPIs, as suggested by Steven Rostedt.  Also\nto make the for_each_online_cpu() loop be preemptible.  (Later, it might\nbe good to use smp_call_function(), as suggested by Peter Zijlstra.)\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nTested-by: Sasha Levin \u003clevinsasha928@gmail.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "62ab7072476ae1600e877cc62b43758e485f4f1e",
      "tree": "c1df0992432cf5bae0f9122d606e73628368fb8e",
      "parents": [
        "bcd951cf10f24e341defcd002c15a1f4eea13ddb"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 16 10:42:38 2012 +0000"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Aug 13 17:01:08 2012 +0200"
      },
      "message": "rcu: Use smp_hotplug_thread facility for RCUs per-CPU kthread\n\nBring RCU into the new-age CPU-hotplug fold by modifying RCU\u0027s per-CPU\nkthread code to use the new smp_hotplug_thread facility.\n\n[ tglx: Adapted it to use callbacks and to the simplified rcu yield ]\n    \nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Srivatsa S. Bhat \u003csrivatsa.bhat@linux.vnet.ibm.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Namhyung Kim \u003cnamhyung@kernel.org\u003e\nLink: http://lkml.kernel.org/r/20120716103948.673354828@linutronix.de\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "5d01bbd111d6ff9ea9d9847774f66dff39633776",
      "tree": "77cbce5ff479b3e70f95a29cc88ce50e025f9078",
      "parents": [
        "3bf671af14d591ede9251acb0085e8017f3705e7"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Jul 16 10:42:35 2012 +0000"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Aug 13 17:01:06 2012 +0200"
      },
      "message": "rcu: Yield simpler\n\nThe rcu_yield() code is amazing. It\u0027s there to avoid starvation of the\nsystem when lots of (boosting) work is to be done.\n\nNow looking at the code it\u0027s functionality is:\n\n Make the thread SCHED_OTHER and very nice, i.e. get it out of the way\n Arm a timer with 2 ticks\n schedule()\n\nNow if the system goes idle the rcu task returns, regains SCHED_FIFO\nand plugs on. If the systems stays busy the timer fires and wakes a\nper node kthread which in turn makes the per cpu thread SCHED_FIFO and\nbrings it back on the cpu. For the boosting thread the \"make it FIFO\"\nbit is missing and it just runs some magic boost checks. Now this is a\nlot of code with extra threads and complexity.\n\nIt\u0027s way simpler to let the tasks when they detect overload schedule\naway for 2 ticks and defer the normal wakeup as long as they are in\nyielded state and the cpu is not idle.\n\nThat solves the same problem and the only difference is that when the\ncpu goes idle it\u0027s not guaranteed that the thread returns right away,\nbut it won\u0027t be longer out than two ticks, so no harm is done. If\nthat\u0027s an issue than it is way simpler just to wake the task from\nidle as RCU has callbacks there anyway.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Srivatsa S. Bhat \u003csrivatsa.bhat@linux.vnet.ibm.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Namhyung Kim \u003cnamhyung@kernel.org\u003e\nReviewed-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nLink: http://lkml.kernel.org/r/20120716103948.131256723@linutronix.de\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "c701d5d9b384ff03ceb232ef21236364d784a411",
      "tree": "ae5b4793c478d3c575e506f1d36c798b73c542ff",
      "parents": [
        "02a0677b0be545a07ffb15a13419efd7c82881e0"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Thu Jun 28 08:08:25 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Jul 06 06:01:48 2012 -0700"
      },
      "message": "rcu: Fix code-style issues involving \"else\"\n\nThe Linux kernel coding style says that single-statement blocks should\nomit curly braces unless the other leg of the \"if\" statement has\nmultiple statements, in which case the curly braces should be included.\nThis commit fixes RCU\u0027s violations of this rule.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "02a0677b0be545a07ffb15a13419efd7c82881e0",
      "tree": "90a5e0699269465c16cc4e247bc5980d0655c3e6",
      "parents": [
        "ff015030c939f0bec68fa9b8898da3aaa7fe55ea",
        "72472a02a9c4507ef54d03d71bb253c26015f52c",
        "cfca927972e31a5b3da49bf641c525732ff3c357",
        "9d2ad24306f2fafc3612e5a216aab31f9e56e879"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Jul 06 05:59:20 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Jul 06 05:59:30 2012 -0700"
      },
      "message": "Merge branches \u0027bigrtm.2012.07.04a\u0027, \u0027doctorture.2012.07.02a\u0027, \u0027fixes.2012.07.06a\u0027 and \u0027fnh.2012.07.02a\u0027 into HEAD\n\nbigrtm: First steps towards getting RCU out of the way of\n\ttens-of-microseconds real-time response on systems compiled\n\twith NR_CPUS\u003d4096.  Also cleanups for and increased concurrency\n\tof rcu_barrier() family of primitives.\ndoctorture: rcutorture and documentation improvements.\nfixes:  Miscellaneous fixes.\nfnh: RCU_FAST_NO_HZ fixes and improvements.\n"
    },
    {
      "commit": "9d2ad24306f2fafc3612e5a216aab31f9e56e879",
      "tree": "6ced8145e842e29aaedda3d9453c74b6f0c92b4f",
      "parents": [
        "4fa3b6cb1bc8c14b81b4c8ffdfd3f2500a7e9367"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Sun Jun 24 10:15:02 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 02 12:34:43 2012 -0700"
      },
      "message": "rcu: Make RCU_FAST_NO_HZ respect nohz\u003d boot parameter\n\nIf the nohz\u003d boot parameter disables nohz, then RCU_FAST_NO_HZ needs to\nalso disable itself.  This commit therefore checks for tick_nohz_enabled\nbeing zero, disabling rcu_prepare_for_idle() if so.  This commit assumes\nthat tick_nohz_enabled can change at runtime: If this is not the case,\nthen a simpler approach suffices.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "e84c48ae3024ac2f14ed1c3671e5ea37c60fb838",
      "tree": "1fa778d1878c9cc79afe5b5687180a6b4e06d36d",
      "parents": [
        "28f8555364ef5b54b21251c5c8022109a70626e9"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Jun 04 20:45:10 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 02 12:34:42 2012 -0700"
      },
      "message": "rcu: Round FAST_NO_HZ lazy timeout to nearest second\n\nCurrently, if several CPUs in the same package have all lazy RCU\ncallbacks, their wakeups will be uncorrelated.  If all the CPUs are in the\nsame power domain (as is often the case), this will result in unnecessary\npower-ups of the package.  This commit therefore uses round_jiffies()\nto round the timeouts to a second boundary, increasing the odds that\nthey can be coalesced with each other or with other timeouts.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "1c17e4d4437d8045a596d9f06c1558dc09e2b372",
      "tree": "3ca3d1752b954211d8f3e295d107bd0bcca65a9d",
      "parents": [
        "d7118175cce7e76b3292b60832813ef1f28b6523"
      ],
      "author": {
        "name": "Carsten Emde",
        "email": "C.Emde@osadl.org",
        "time": "Tue Jun 19 10:43:16 2012 +0200"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 02 12:34:25 2012 -0700"
      },
      "message": "rcu: Prevent uninitialized string in RCU CPU stall info\n\nAn uninitialized string may be displayed at the end of the rcu_preempt\ndetected stall info such as\n\n0: (1 GPs behind) idle\u003d075/140000000000000/0 \u003d8?^D\u003d8?^D\n                                             ^^^^^^^^^^\nif CONFIG_RCU_FAST_NO_HZ is not defined.\n\nThis trivial patch clears the string in this case.\n\nSigned-off-by: Carsten Emde \u003cC.Emde@osadl.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "2a3fa843b555d202e682bf08c65ee1a4a93c79cf",
      "tree": "b7db689ab83f041319b80493b12a8f7ecc79ad0f",
      "parents": [
        "e9023c4061054cbf59c5288068118a4d0b152f01"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon May 21 11:58:36 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 02 12:34:23 2012 -0700"
      },
      "message": "rcu: Consolidate tree/tiny __rcu_read_{,un}lock() implementations\n\nThe CONFIG_TREE_PREEMPT_RCU and CONFIG_TINY_PREEMPT_RCU versions of\n__rcu_read_lock() and __rcu_read_unlock() are identical, so this commit\nconsolidates them into kernel/rcupdate.h.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "6ce75a2326e6f8b3bdfb60e1de7934b89858e87b",
      "tree": "c3ecd512422ad9f445f69c78037142a99bc8db2c",
      "parents": [
        "1bca8cf1a2c3c6683b12ad28a3e826ca7a834978"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Jun 12 11:01:13 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 02 12:33:24 2012 -0700"
      },
      "message": "rcu: Introduce for_each_rcu_flavor() and use it\n\nThe arrival of TREE_PREEMPT_RCU some years back included some ugly\ncode involving either #ifdef or #ifdef\u0027ed wrapper functions to iterate\nover all non-SRCU flavors of RCU.  This commit therefore introduces\na for_each_rcu_flavor() iterator over the rcu_state structures for each\nflavor of RCU to clean up a bit of the ugliness.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "1bca8cf1a2c3c6683b12ad28a3e826ca7a834978",
      "tree": "db7b56bd65c8ac7af376599febb44324698b53d4",
      "parents": [
        "d7e187c8e9f30543f9cadfed094896ff414acb8f"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Jun 12 09:40:38 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 02 12:33:23 2012 -0700"
      },
      "message": "rcu: Remove unneeded __rcu_process_callbacks() argument\n\nWith the advent of __this_cpu_ptr(), it is no longer necessary to pass\nboth the rcu_state and rcu_data structures into __rcu_process_callbacks().\nThis commit therefore computes the rcu_data pointer from the rcu_state\npointer within __rcu_process_callbacks() so that callers can pass in\nonly the pointer to the rcu_state structure.  This paves the way for\nlinking the rcu_state structures together and iterating over them.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "037b64ed0bf2405a1a01542164d3418564b44fff",
      "tree": "59aa7e486e1673564f2a5687992130dffa71ca1b",
      "parents": [
        "6c90cc7bf077f28144013e949ee0c122012d194a"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon May 28 23:26:01 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 02 12:33:21 2012 -0700"
      },
      "message": "rcu: Place pointer to call_rcu() in rcu_data structure\n\nThis is a preparatory commit for increasing rcu_barrier()\u0027s concurrency.\nIt adds a pointer in the rcu_data structure to the corresponding call_rcu()\nfunction.  This allows a pointer to the rcu_data structure to imply the\nfunction pointer, which allows _rcu_barrier() state to be placed in the\nrcu_state structure.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "cca6f3931920a7547d02e68adc2ca635bea5600c",
      "tree": "31e2cd3d9e73f080ca78a89a6dba474c1987beee",
      "parents": [
        "cc5df65b0370fc6aa2bfe3bb19e0451d5cafb99f"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue May 08 21:00:28 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 02 12:33:21 2012 -0700"
      },
      "message": "rcu: Size rcu_node tree from nr_cpu_ids rather than NR_CPUS\n\nThe rcu_node tree array is sized based on compile-time constants,\nincluding NR_CPUS.  Although this approach has worked well in the past,\nthe recent trend by many distros to define NR_CPUS\u003d4096 results in\nexcessive grace-period-initialization latencies.\n\nThis commit therefore substitutes the run-time computed nr_cpu_ids for\nthe compile-time NR_CPUS when building the tree.  This can result in\nmuch of the compile-time-allocated rcu_node array being unused.  If\nthis is a major problem, you are in a specialized situation anyway,\nso you can manually adjust the NR_CPUS, RCU_FANOUT, and RCU_FANOUT_LEAF\nkernel config parameters.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "cc5df65b0370fc6aa2bfe3bb19e0451d5cafb99f",
      "tree": "b67e2d6a0988a95e74134d55ec2cfe3bd75228f3",
      "parents": [
        "f885b7f2b2de70be266d2cecc476f773a1e2ca5d"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Jun 15 18:16:00 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 02 12:33:20 2012 -0700"
      },
      "message": "rcu: Four-level hierarchy is no longer experimental\n\nTime to make the four-level-hierarchy setting less scary, so this\ncommit removes \"Experimental\" from the boot-time message.  Leave the\nmessage in order to get a heads-up on any possible need to expand to\na five-level hierarchy.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "f885b7f2b2de70be266d2cecc476f773a1e2ca5d",
      "tree": "c4f4d03ca1469f22701b848274034a74c5ae2b04",
      "parents": [
        "cba6d0d64ee53772b285d0c0c288deefbeaf7775"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Apr 23 15:52:53 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 02 12:33:20 2012 -0700"
      },
      "message": "rcu: Control RCU_FANOUT_LEAF from boot-time parameter\n\nAlthough making RCU_FANOUT_LEAF a kernel configuration parameter rather\nthan a fixed constant makes it easier for people to decrease cache-miss\noverhead for large systems, it is of little help for people who must\nrun a single pre-built kernel binary.\n\nThis commit therefore allows the value of RCU_FANOUT_LEAF to be\nincreased (but not decreased!) via a boot-time parameter named\nrcutree.rcu_fanout_leaf.\n\nReported-by: Mike Galbraith \u003cefault@gmx.de\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "cba6d0d64ee53772b285d0c0c288deefbeaf7775",
      "tree": "b2d3de62d15a77d23708c1af6f188c86f0d87fb9",
      "parents": [
        "6887a4131da3adaab011613776d865f4bcfb5678"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 02 07:08:42 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Jul 02 11:39:19 2012 -0700"
      },
      "message": "Revert \"rcu: Move PREEMPT_RCU preemption to switch_to() invocation\"\n\nThis reverts commit 616c310e83b872024271c915c1b9ab505b9efad9.\n(Move PREEMPT_RCU preemption to switch_to() invocation).\nTesting by Sasha Levin \u003clevinsasha928@gmail.com\u003e showed that this\ncan result in deadlock due to invoking the scheduler when one of\nthe runqueue locks is held.  Because this commit was simply a\nperformance optimization, revert it.\n\nReported-by: Sasha Levin \u003clevinsasha928@gmail.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nTested-by: Sasha Levin \u003clevinsasha928@gmail.com\u003e\n"
    },
    {
      "commit": "aa9b16306e3243229580ff889cc59fd66bf77973",
      "tree": "f01812ee99804cd7d7533a1d3cba1e9d439e6f63",
      "parents": [
        "5955f7eecd77d6b440db278b266cfecdb72ecd00"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Thu May 10 16:41:44 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Jun 06 20:43:28 2012 -0700"
      },
      "message": "rcu: Precompute RCU_FAST_NO_HZ timer offsets\n\nWhen a CPU is entering dyntick-idle mode, tick_nohz_stop_sched_tick()\ncalls rcu_needs_cpu() see if RCU needs that CPU, and, if not, computes the\nnext wakeup time based on the timer wheels.  Only later, when actually\nentering the idle loop, rcu_prepare_for_idle() will be invoked.  In some\ncases, rcu_prepare_for_idle() will post timers to wake the CPU back up.\nBut all for naught: The next wakeup time for the CPU has already been\ncomputed, and posting a timer afterwards does not force that wakeup\ntime to be recomputed.  This means that rcu_prepare_for_idle()\u0027s have\nno effect.\n\nThis is not a problem on a busy system because something else will wake\nup the CPU soon enough.  However, on lightly loaded systems, the CPU\nmight stay asleep for a considerable length of time.  If that CPU has\na callback that the rest of the system is waiting on, the system might\nrun very slowly or (in theory) even hang.\n\nThis commit avoids this problem by having rcu_needs_cpu() give\ntick_nohz_stop_sched_tick() an estimate of when RCU will need the CPU\nto wake back up, which tick_nohz_stop_sched_tick() takes into account\nwhen programming the CPU\u0027s wakeup time.  An alternative approach is\nfor rcu_prepare_for_idle() to use hrtimers instead of normal timers,\nbut timers are much more efficient than are hrtimers for frequently\nand repeatedly posting and cancelling a given timer, which is exactly\nwhat RCU_FAST_NO_HZ does.\n\nReported-by: Pascal Chapperon \u003cpascal.chapperon@wanadoo.fr\u003e\nReported-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nTested-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nTested-by: Pascal Chapperon \u003cpascal.chapperon@wanadoo.fr\u003e\n"
    },
    {
      "commit": "5955f7eecd77d6b440db278b266cfecdb72ecd00",
      "tree": "a69a23707da5595be22fa09738be572a4ef69b4c",
      "parents": [
        "fd4b352687fd8604d49c190c4c9ea9e369fd42d5"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Wed May 09 12:07:05 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Jun 06 20:43:28 2012 -0700"
      },
      "message": "rcu: Move RCU_FAST_NO_HZ per-CPU variables to rcu_dynticks structure\n\nThe RCU_FAST_NO_HZ code relies on a number of per-CPU variables.\nThis works, but is hidden from someone scanning the data structures\nin rcutree.h.  This commit therefore converts these per-CPU variables\nto fields in the per-CPU rcu_dynticks structures.\n\nSuggested-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nTested-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nTested-by: Pascal Chapperon \u003cpascal.chapperon@wanadoo.fr\u003e\n"
    },
    {
      "commit": "fd4b352687fd8604d49c190c4c9ea9e369fd42d5",
      "tree": "1e20de9090f7d74eef642ac263dd71da0b494d7d",
      "parents": [
        "8f5af6f1f2d09fe5eac86a5dc1731a5917c1503a"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Sat May 05 19:10:35 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Jun 06 20:43:27 2012 -0700"
      },
      "message": "rcu: Update RCU_FAST_NO_HZ tracing for lazy callbacks\n\nIn the current code, a short dyntick-idle interval (where there is\nat least one non-lazy callback on the CPU) and a long dyntick-idle\ninterval (where there are only lazy callbacks on the CPU) are traced\nidentically, which can be less than helpful.  This commit therefore\nemits different event traces in these two cases.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nTested-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nTested-by: Pascal Chapperon \u003cpascal.chapperon@wanadoo.fr\u003e\n"
    },
    {
      "commit": "dc36be4419311fd57becdf54bfeef6bd04a6741d",
      "tree": "179d34f4e56861b66142dd6c39dac1af1e1e10d9",
      "parents": [
        "b1420f1c8bfc30ecf6380a31d0f686884834b599",
        "048a0e8f5e1d94c01a5fc70f5b2f2fd2f4527326",
        "9dd8fb16c36178df2066387d2abd44d8b4dca8c8",
        "9fab97876af844c2abb7c39300bff34025926565"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri May 11 10:14:09 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri May 11 10:14:21 2012 -0700"
      },
      "message": "Merge branches \u0027barrier.2012.05.09a\u0027, \u0027fixes.2012.04.26a\u0027, \u0027inline.2012.05.02b\u0027 and \u0027srcu.2012.05.07b\u0027 into HEAD\n\nbarrier:  Reduce the amount of disturbance by rcu_barrier() to the rest of\n    \tthe system.  This branch also includes improvements to\n    \tRCU_FAST_NO_HZ, which are included here due to conflicts.\nfixes:  Miscellaneous fixes.\ninline:  Remaining changes from an abortive attempt to inline\n    \tpreemptible RCU\u0027s __rcu_read_lock().  These are (1) making\n    \texit_rcu() avoid unnecessary work and (2) avoiding having\n    \tpreemptible RCU record a blocked thread when the scheduler\n    \tdeclines to do a context switch.\nsrcu:\tLai Jiangshan\u0027s algorithmic implementation of SRCU, including\n    \tcall_srcu().\n"
    },
    {
      "commit": "98248a0e24327bc64eb7518145c44bff7bebebc3",
      "tree": "5ec88465d949558e42e83fd8321c725614c00269",
      "parents": [
        "21e52e15666323078b8517a4312712579176b56f"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Thu May 03 15:38:10 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed May 09 14:26:57 2012 -0700"
      },
      "message": "rcu: Explicitly initialize RCU_FAST_NO_HZ per-CPU variables\n\nThe current initialization of the RCU_FAST_NO_HZ per-CPU variables makes\nneedless and fragile assumptions about the initial value of things like\nthe jiffies counter.  This commit therefore explicitly initializes all of\nthem that are better started with a non-zero value.  It also adds some\ncomments describing the per-CPU state variables.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "21e52e15666323078b8517a4312712579176b56f",
      "tree": "6e9e75c6e1400e0426a7c7985a3f986fea5a7782",
      "parents": [
        "f511fc624642f0bb8cf65aaa28979737514d4746"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Apr 30 14:16:19 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed May 09 14:26:56 2012 -0700"
      },
      "message": "rcu: Make RCU_FAST_NO_HZ handle timer migration\n\nThe current RCU_FAST_NO_HZ assumes that timers do not migrate unless a\nCPU goes offline, in which case it assumes that the CPU will have to come\nout of dyntick-idle mode (cancelling the timer) in order to go offline.\nThis is important because when RCU_FAST_NO_HZ permits a CPU to enter\ndyntick-idle mode despite having RCU callbacks pending, it posts a timer\non that CPU to force a wakeup on that CPU.  This wakeup ensures that the\nCPU will eventually handle the end of the grace period, including invoking\nits RCU callbacks.\n\nHowever, Pascal Chapperon\u0027s test setup shows that the timer handler\nrcu_idle_gp_timer_func() really does get invoked in some cases.  This is\nproblematic because this can cause the CPU that entered dyntick-idle\nmode despite still having RCU callbacks pending to remain in\ndyntick-idle mode indefinitely, which means that its RCU callbacks might\nnever be invoked.  This situation can result in grace-period delays or\neven system hangs, which matches Pascal\u0027s observations of slow boot-up\nand shutdown (https://lkml.org/lkml/2012/4/5/142).  See also the bugzilla:\n\n\thttps://bugzilla.redhat.com/show_bug.cgi?id\u003d806548\n\nThis commit therefore causes the \"should never be invoked\" timer handler\nrcu_idle_gp_timer_func() to use smp_call_function_single() to wake up\nthe CPU for which the timer was intended, allowing that CPU to invoke\nits RCU callbacks in a timely manner.\n\nReported-by: Pascal Chapperon \u003cpascal.chapperon@wanadoo.fr\u003e\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "9dd8fb16c36178df2066387d2abd44d8b4dca8c8",
      "tree": "330ac5704044c12bcc94ec6bf96dbb27d1057f5d",
      "parents": [
        "616c310e83b872024271c915c1b9ab505b9efad9"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Fri Apr 13 12:54:22 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed May 02 14:48:27 2012 -0700"
      },
      "message": "rcu: Make exit_rcu() more precise and consolidate\n\nWhen running preemptible RCU, if a task exits in an RCU read-side\ncritical section having blocked within that same RCU read-side critical\nsection, the task must be removed from the list of tasks blocking a\ngrace period (perhaps the current grace period, perhaps the next grace\nperiod, depending on timing).  The exit() path invokes exit_rcu() to\ndo this cleanup.\n\nHowever, the current implementation of exit_rcu() needlessly does the\ncleanup even if the task did not block within the current RCU read-side\ncritical section, which wastes time and needlessly increases the size\nof the state space.  Fix this by only doing the cleanup if the current\ntask is actually on the list of tasks blocking some grace period.\n\nWhile we are at it, consolidate the two identical exit_rcu() functions\ninto a single function.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nTested-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n\nConflicts:\n\n\tkernel/rcupdate.c\n"
    },
    {
      "commit": "616c310e83b872024271c915c1b9ab505b9efad9",
      "tree": "1339bc7b3bef920b4641a5af2f182e9dfa2a6632",
      "parents": [
        "66f75a5d028beaf67c931435fdc3e7823125730c"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Mar 27 16:02:08 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed May 02 14:43:23 2012 -0700"
      },
      "message": "rcu: Move PREEMPT_RCU preemption to switch_to() invocation\n\nCurrently, PREEMPT_RCU readers are enqueued upon entry to the scheduler.\nThis is inefficient because enqueuing is required only if there is a\ncontext switch, and entry to the scheduler does not guarantee a context\nswitch.\n\nThe commit therefore moves the enqueuing to immediately precede the\ncall to switch_to() from the scheduler.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nTested-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f511fc624642f0bb8cf65aaa28979737514d4746",
      "tree": "db1395c5d33da33c8ea6c82f6e5b7346cc5beb91",
      "parents": [
        "79b9a75fb703b6a2670e46b9dc495af5bc7029b3"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Thu Mar 15 12:16:26 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue May 01 08:22:50 2012 -0700"
      },
      "message": "rcu: Ensure that RCU_FAST_NO_HZ timers expire on correct CPU\n\nTimers are subject to migration, which can lead to the following\nsystem-hang scenario when CONFIG_RCU_FAST_NO_HZ\u003dy:\n\n1.\tCPU 0 executes synchronize_rcu(), which posts an RCU callback.\n\n2.\tCPU 0 then goes idle.  It cannot immediately invoke the callback,\n\tbut there is nothing RCU needs from ti, so it enters dyntick-idle\n\tmode after posting a timer.\n\n3.\tThe timer gets migrated to CPU 1.\n\n4.\tCPU 0 never wakes up, so the synchronize_rcu() never returns, so\n\tthe system hangs.\n\nThis commit fixes this problem by using mod_timer_pinned(), as suggested\nby Peter Zijlstra, to ensure that the timer is actually posted on the\nrunning CPU.\n\nReported-by: Dipankar Sarma \u003cdipankar@in.ibm.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "79b9a75fb703b6a2670e46b9dc495af5bc7029b3",
      "tree": "30d7d74e4af8af8c8d8b7cb00cf54b292d12c68e",
      "parents": [
        "c57afe80db4e169135eb675acc2d241e26cc064e"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Apr 23 10:06:39 2012 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Thu Apr 26 08:49:05 2012 -0700"
      },
      "message": "rcu: Add warning for RCU_FAST_NO_HZ timer firing\n\nRCU_FAST_NO_HZ uses a timer to limit the time that a CPU with callbacks\ncan remain in dyntick-idle mode.  This timer is cancelled when the CPU\nexits idle, and therefore should never fire.  However, if the timer\nwere migrated to some other CPU for whatever reason (1) the timer could\nactually fire and (2) firing on some other CPU would fail to wake up the\nCPU with callbacks, possibly resulting in sluggishness or a system hang.\n\nThis commit therfore adds a WARN_ON_ONCE() to the timer handler in order\nto detect this condition.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "c57afe80db4e169135eb675acc2d241e26cc064e",
      "tree": "ec011600725a2884efdca6f4c187ea7e3fa4d277",
      "parents": [
        "2ee3dc80660ac8285a37e662fd91b2e45c46f06a"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Feb 28 11:02:21 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Apr 24 20:55:20 2012 -0700"
      },
      "message": "rcu: Make RCU_FAST_NO_HZ account for pauses out of idle\n\nBoth Steven Rostedt\u0027s new idle-capable trace macros and the RCU_NONIDLE()\nmacro can cause RCU to momentarily pause out of idle without the rest\nof the system being involved.  This can cause rcu_prepare_for_idle()\nto run through its state machine too quickly, which can in turn result\nin needless scheduling-clock interrupts.\n\nThis commit therefore adds code to enable rcu_prepare_for_idle() to\ndistinguish between an initial entry to idle on the one hand (which needs\nto advance the rcu_prepare_for_idle() state machine) and an idle reentry\ndue to idle-capable trace macros and RCU_NONIDLE() on the other hand\n(which should avoid advancing the rcu_prepare_for_idle() state machine).\nAdditional state is maintained to allow the timer to be correctly reposted\nwhen returning after a momentary pause out of idle, and even more state\nis maintained to detect when new non-lazy callbacks have been enqueued\n(which may require re-evaluation of the approach to idleness).\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "2ee3dc80660ac8285a37e662fd91b2e45c46f06a",
      "tree": "d6fcd186eabf672b7bc54bd2f04f1f7956f8afe1",
      "parents": [
        "2fdbb31b662787f78bb78b3e4e18f1a072058ffc"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Thu Feb 23 17:13:19 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Apr 24 20:55:19 2012 -0700"
      },
      "message": "rcu: Make RCU_FAST_NO_HZ use timer rather than hrtimer\n\nThe RCU_FAST_NO_HZ facility uses an hrtimer to wake up a CPU when\nit is allowed to go into dyntick-idle mode, which is almost always\ncancelled soon after.  This is not what hrtimers are good at, so\nthis commit switches to the timer wheel.\n\nReported-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "2fdbb31b662787f78bb78b3e4e18f1a072058ffc",
      "tree": "c8dbe70ab53102acf7f802eb50c5262c82cd45aa",
      "parents": [
        "66f75a5d028beaf67c931435fdc3e7823125730c"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Thu Feb 23 15:58:29 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Apr 24 20:55:19 2012 -0700"
      },
      "message": "rcu: Add RCU_FAST_NO_HZ tracing for idle exit\n\nTraces of rcu_prep_idle events can be confusing because\nrcu_cleanup_after_idle() does no tracing.  This commit therefore adds\nthis tracing.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "696a02cc16b182dd78b1f395ae336f449cc90f11",
      "tree": "5411af06d52a3f567e6b3fe592128d3fc0306be1",
      "parents": [
        "c3ce910b1456a45fa88959af3735bd6b285e54af"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Thu Feb 16 21:59:33 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:42:30 2012 -0800"
      },
      "message": "rcu: Hold off RCU_FAST_NO_HZ after timer posted\n\nThis commit handles workloads that transition quickly between idle and\nnon-idle, and where the CPU\u0027s callbacks cannot be invoked, but where\nRCU does not have anything immediate for the CPU to do.  Without this\npatch, the RCU_FAST_NO_HZ code can be invoked repeatedly on each entry\nto idle.  The commit sets the per-CPU rcu_dyntick_holdoff variable to\nhold off further attempts for a tick.\n\nReported-by: \"Abou Gazala, Neven M\" \u003cneven.m.abou.gazala@intel.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "c3ce910b1456a45fa88959af3735bd6b285e54af",
      "tree": "d0e74991e637dddbeb3a8ab70ecd983325133893",
      "parents": [
        "8a2ecf474d3ee8dd5d001490349e422cec52f39f"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Feb 14 10:12:54 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:42:11 2012 -0800"
      },
      "message": "rcu: Eliminate softirq-mediated RCU_FAST_NO_HZ idle-entry loop\n\nIf a softirq is pending, the current CPU has RCU callbacks pending,\nand RCU does not immediately need anything from this CPU, then the\ncurrent code resets the RCU_FAST_NO_HZ state machine.  This means that\nupon exit from the subsequent softirq handler, RCU_FAST_NO_HZ will\ntry really hard to force RCU into dyntick-idle mode.  And if the same\nconditions hold after a few tries (determined by RCU_IDLE_OPT_FLUSHES),\nthe same situation can repeat, possibly endlessly.  This scenario is\nnot particularly good for battery lifetime.\n\nThis commit therefore suppresses the early exit from the RCU_FAST_NO_HZ\nstate machine in the case where there is a softirq pending.  This change\nforces the state machine to retain its memory, and to enter holdoff if\nthis condition persists.\n\nReported-by: \"Abou Gazala, Neven M\" \u003cneven.m.abou.gazala@intel.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "236fefafe5d3d34b78ed2ccf5510909716112326",
      "tree": "9ff5ec129e59667341aa07120720b6e4a5ced4d9",
      "parents": [
        "2036d94a7b61ca5032ce90f2bda06afec0fe713e"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Jan 31 14:00:41 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:06:08 2012 -0800"
      },
      "message": "rcu: Call out dangers of expedited RCU primitives\n\nThe expedited RCU primitives can be quite useful, but they have some\nhigh costs as well.  This commit updates and creates docbook comments\ncalling out the costs, and updates the RCU documentation as well.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "2036d94a7b61ca5032ce90f2bda06afec0fe713e",
      "tree": "fc9f4b5ba1058e5a2fdf9ccd187766c90f5ae036",
      "parents": [
        "c5fdcec927ee31fc96e92339c3a83ac6e0725289"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Jan 30 17:02:47 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:06:07 2012 -0800"
      },
      "message": "rcu: Rework detection of use of RCU by offline CPUs\n\nBecause newly offlined CPUs continue executing after completing the\nCPU_DYING notifiers, they legitimately enter the scheduler and use\nRCU while appearing to be offline.  This calls for a more sophisticated\napproach as follows:\n\n1.\tRCU marks the CPU online during the CPU_UP_PREPARE phase.\n\n2.\tRCU marks the CPU offline during the CPU_DEAD phase.\n\n3.\tDiagnostics regarding use of read-side RCU by offline CPUs use\n\tRCU\u0027s accounting rather than the cpu_online_map.  (Note that\n\t__call_rcu() still uses cpu_online_map to detect illegal\n\tinvocations within CPU_DYING notifiers.)\n\n4.\tOffline CPUs are prevented from hanging the system by\n\tforce_quiescent_state(), which pays attention to cpu_online_map.\n\tSome additional work (in a later commit) will be needed to\n\tguarantee that force_quiescent_state() waits a full jiffy before\n\tassuming that a CPU is offline, for example, when called from\n\tidle entry.  (This commit also makes the one-jiffy wait\n\texplicit, since the old-style implicit wait can now be defeated\n\tby RCU_FAST_NO_HZ and by rcutorture.)\n\nThis approach avoids the false positives encountered when attempting to\nuse more exact classification of CPU online/offline state.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "c0cfbbb0d4fca14b828a7635a59784adfba8989d",
      "tree": "a6201565b275d63b17df2a256e9b30c91f94cb6d",
      "parents": [
        "3d3b7db0a22085cfc05c3318b9874f7fb8266d18"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Jan 23 17:23:35 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:06:05 2012 -0800"
      },
      "message": "rcu: No interrupt disabling for rcu_prepare_for_idle()\n\nThe rcu_prepare_for_idle() function is always called with interrupts\ndisabled, so there is no reason to disable interrupts again within\nrcu_prepare_for_idle().  Therefore, this commit removes all of the\ninterrupt disabling, also removing a latent disabling-unbalance bug.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "3d3b7db0a22085cfc05c3318b9874f7fb8266d18",
      "tree": "7f6a080ca64f8a07dd058c2771b983c602fd1a65",
      "parents": [
        "c0d6d01bffdce19fa19baad6cb8cc3eed7bfd6f5"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Jan 23 17:05:46 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:06:04 2012 -0800"
      },
      "message": "rcu: Move synchronize_sched_expedited() to rcutree.c\n\nNow that TREE_RCU and TREE_PREEMPT_RCU no longer do anything different\nfor the single-CPU case, there is no need for multiple definitions of\nsynchronize_sched_expedited().  It is no longer in any sense a plug-in,\nso move it from kernel/rcutree_plugin.h to kernel/rcutree.c.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "c0d6d01bffdce19fa19baad6cb8cc3eed7bfd6f5",
      "tree": "ea4c20ddc87b94d7bef2402fe6dbe3186be263c2",
      "parents": [
        "24cd7fd0eaa0d9f5e197ff77a83b006a86696068"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Jan 23 12:41:26 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:06:03 2012 -0800"
      },
      "message": "rcu: Check for illegal use of RCU from offlined CPUs\n\nAlthough it is legal to use RCU during early boot, it is anything\nbut legal to use RCU at runtime from an offlined CPU.  After all, RCU\nexplicitly ignores offlined CPUs.  This commit therefore adds checks\nfor runtime use of RCU from offlined CPUs.\n\nThese checks are not perfect, in particular, they can be subverted\nthrough use of things like rcu_dereference_raw().  Note that it is not\npossible to put checks in rcu_read_lock() and friends due to the fact\nthat these primitives are used in code that might be used under either\nRCU or lock-based protection, which means that checking rcu_read_lock()\ngets you fat piles of false positives.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "a858af2875fb291d0f4b0a4419fefbf03c2379c0",
      "tree": "5183796cbf50ec0cd3bd5c741db15705376dacbd",
      "parents": [
        "13cfcca0e4e2d4cee1d0183c049eb34e54ac976e"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Jan 16 13:29:10 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:03:49 2012 -0800"
      },
      "message": "rcu: Print scheduling-clock information on RCU CPU stall-warning messages\n\nThere have been situations where RCU CPU stall warnings were caused by\nissues in scheduling-clock timer initialization.  To make it easier to\ntrack these down, this commit causes the RCU CPU stall-warning messages\nto print out the number of scheduling-clock interrupts taken in the\ncurrent grace period for each stalled CPU.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "27565d64a4e564e72c22d8c91a3cfcb9442383e8",
      "tree": "699319f63f6c1cddc04ce85e77b3718361bbe03f",
      "parents": [
        "5e1ee6e1016763812018bf5c5e966992821dc47e"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Thu Jan 12 19:35:08 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:03:47 2012 -0800"
      },
      "message": "rcu: Remove #ifdef CONFIG_SMP from TREE_RCU\n\nNow that both TINY_RCU and TINY_PREEMPT_RCU have been in place for awhile,\nit is time to remove UP support from TREE_RCU, which is what this commit\ndoes.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "30fbcc90b02187c55c57ff0ecf57cecbd487d694",
      "tree": "866824e1972d900ceda045c93a3958c74ffbf1e9",
      "parents": [
        "1aa03f1188f7b0b85df2de602b33ee7b6fab8e00"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Thu Jan 12 11:01:14 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:03:44 2012 -0800"
      },
      "message": "rcu: Clean up straggling rcu_preempt_needs_cpu() name\n\nThe recent updates to RCU_CPU_FAST_NO_HZ have an rcu_needs_cpu() that\ndoes more than just check for callbacks, so get the name for\nrcu_preempt_needs_cpu() consistent with that change, now calling it\nrcu_preempt_cpu_has_callbacks().\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "778d250a29224795e6320b58928bafa6b6104a06",
      "tree": "51eaa45a16731b22797ed88d34584c8b6d55cc01",
      "parents": [
        "091541bbdb9906349481a504e7d8e7fa89f6b6bb"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Jan 10 14:13:24 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:03:36 2012 -0800"
      },
      "message": "rcu: Limit lazy-callback duration\n\nCurrently, a given CPU is permitted to remain in dyntick-idle mode\nindefinitely if it has only lazy RCU callbacks queued.  This is vulnerable\nto corner cases in NUMA systems, so limit the time to six seconds by\ndefault.  (Currently controlled by a cpp macro.)\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "e5601400081651060a59bd1f45f2821bb8e97f95",
      "tree": "391e7e0b08d8b642eca260950c7f052832411aa9",
      "parents": [
        "ae1f18e480c83d15539fb234a2dc5f0aa04cb119"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Sat Jan 07 11:03:57 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:03:34 2012 -0800"
      },
      "message": "rcu: Simplify offline processing\n\nMove -\u003eqsmaskinit and blkd_tasks[] manipulation to the CPU_DYING\nnotifier.  This simplifies the code by eliminating a potential\ndeadlock and by reducing the responsibilities of force_quiescent_state().\nAlso rename functions to make their connection to the CPU-hotplug\nstages explicit.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "486e259340fc4c60474f2c14703e3b3634bb58ca",
      "tree": "70a58702194588fa0773463523f72c682785d040",
      "parents": [
        "0bb7b59d6e2b8440cd7097097dd4bbfc4d76ed07"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Fri Jan 06 14:11:30 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:03:25 2012 -0800"
      },
      "message": "rcu: Avoid waking up CPUs having only kfree_rcu() callbacks\n\nWhen CONFIG_RCU_FAST_NO_HZ is enabled, RCU will allow a given CPU to\nenter dyntick-idle mode even if it still has RCU callbacks queued.\nRCU avoids system hangs in this case by scheduling a timer for several\njiffies in the future.  However, if all of the callbacks on that CPU\nare from kfree_rcu(), there is no reason to wake the CPU up, as it is\nnot a problem to defer freeing of memory.\n\nThis commit therefore tracks the number of callbacks on a given CPU\nthat are from kfree_rcu(), and avoids scheduling the timer if all of\na given CPU\u0027s callbacks are from kfree_rcu().\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "fe15d706cfc1cb321dbe2329b04b5ca185edff60",
      "tree": "bec14ab52167f4f0210e8c207c93922c8270402f",
      "parents": [
        "18fec7d8758dd416904da205375e6fa667defc80"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Jan 04 13:30:33 2012 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Feb 21 09:03:23 2012 -0800"
      },
      "message": "rcu: Add lockdep-RCU checks for simple self-deadlock\n\nIt is illegal to have a grace period within a same-flavor RCU read-side\ncritical section, so this commit adds lockdep-RCU checks to splat when\nsuch abuse is encountered.  This commit does not detect more elaborate\nRCU deadlock situations.  These situations might be a job for lockdep\nenhancements.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "4f89b336fd1edf0c88875d0b7fcdc288c7de903d",
      "tree": "8cadb7d4c326ad01ce7f0da55db8f03af17917e6",
      "parents": [
        "70321d447aa1a7cc2d60db16234f43c5a65630e7"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Fri Dec 09 14:43:47 2011 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:33:19 2011 -0800"
      },
      "message": "rcu: Apply ACCESS_ONCE() to rcu_boost() return value\n\nBoth TINY_RCU\u0027s and TREE_RCU\u0027s implementations of rcu_boost() access\nthe -\u003eboost_tasks and -\u003eexp_tasks fields without preventing concurrent\nchanges to these fields.  This commit therefore applies ACCESS_ONCE in\norder to prevent compiler mischief.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "70321d447aa1a7cc2d60db16234f43c5a65630e7",
      "tree": "a97749ef35045fc41585d121f595cb0644b319c2",
      "parents": [
        "d493011a376f9df3b8b3da1102509b343b1a4ef2"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Dec 09 14:00:06 2011 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:33:18 2011 -0800"
      },
      "message": "Revert \"rcu: Permit rt_mutex_unlock() with irqs disabled\"\n\nThis reverts commit 5342e269b2b58ee0b0b4168a94087faaa60d0567.\n\nThe approach taken in this patch was deemed too abusive to mutexes,\nand thus too likely to result in maintenance problems in the future.\nInstead, we will disallow RCU read-side critical sections that partially\noverlap with interrupt-disbled code segments.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "f23f7fa1c8effca19b52b98fc71016109d21db59",
      "tree": "e669b1b0cd96820949dd9deee1e5113fd667fb36",
      "parents": [
        "dff1672d9199fffddb58fa7970ccf59005fc35f3"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Wed Nov 30 15:41:14 2011 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:32:10 2011 -0800"
      },
      "message": "rcu: Adaptive dyntick-idle preparation\n\nIf there are other CPUs active at a given point in time, then there is a\nlimit to what a given CPU can do to advance the current RCU grace period.\nBeyond this limit, attempting to force the RCU grace period forward will\ndo nothing but consume energy burning CPU cycles.\n\nTherefore, this commit takes an adaptive approach to RCU_FAST_NO_HZ\npreparations for idle.  It pushes the RCU core state machine for\ntwo cycles unconditionally, and then it will push from zero to three\nadditional cycles, but only as long as the RCU core has work for this\nCPU to do immediately.  The rcu_pending() function is used to check\nwhether the RCU core has such work.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "dff1672d9199fffddb58fa7970ccf59005fc35f3",
      "tree": "a9740f65dfc203d183cb06ce0faeed0de5cef58b",
      "parents": [
        "facc4e159672b4ed10aa18147bfa187b013c9505"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Nov 29 15:57:13 2011 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:32:09 2011 -0800"
      },
      "message": "rcu: Keep invoking callbacks if CPU otherwise idle\n\nThe rcu_do_batch() function that invokes callbacks for TREE_RCU and\nTREE_PREEMPT_RCU normally throttles callback invocation to avoid degrading\nscheduling latency.  However, as long as the CPU would otherwise be idle,\nthere is no downside to continuing to invoke any callbacks that have passed\nthrough their grace periods.  In fact, processing such callbacks in a\ntimely manner has the benefit of increasing the probability that the\nCPU can enter the power-saving dyntick-idle mode.\n\nTherefore, this commit allows callback invocation to continue beyond the\npreset limit as long as the scheduler does not have some other task to\nrun and as long as context is that of the idle task or the relevant\nRCU kthread.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "7cb92499000e3c86dae653077b1465458a039ef6",
      "tree": "ebc982a5cc562b4fe0cb8f20541f45a5506a0b5f",
      "parents": [
        "3842a0832a1d6eb0b31421f8810a813135967512"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Nov 28 12:28:34 2011 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:32:07 2011 -0800"
      },
      "message": "rcu: Permit dyntick-idle with callbacks pending\n\nThe current implementation of RCU_FAST_NO_HZ prevents CPUs from entering\ndyntick-idle state if they have RCU callbacks pending.  Unfortunately,\nthis has the side-effect of often preventing them from entering this\nstate, especially if at least one other CPU is not in dyntick-idle state.\nHowever, the resulting per-tick wakeup is wasteful in many cases: if the\nCPU has already fully responded to the current RCU grace period, there\nwill be nothing for it to do until this grace period ends, which will\nfrequently take several jiffies.\n\nThis commit therefore permits a CPU that has done everything that the\ncurrent grace period has asked of it (rcu_pending() \u003d\u003d 0) even if it\nstill as RCU callbacks pending.  However, such a CPU posts a timer to\nwake it up several jiffies later (6 jiffies, based on experience with\ngrace-period lengths).  This wakeup is required to handle situations\nthat can result in all CPUs being in dyntick-idle mode, thus failing\nto ever complete the current grace period.  If a CPU wakes up before\nthe timer goes off, then it cancels that timer, thus avoiding spurious\nwakeups.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "3ad0decf98d97b9039d8ed47cee287366b929cdf",
      "tree": "3d6c02ceb148b55b9632422346978bf369e790e9",
      "parents": [
        "f535a607c13c7b674e0788ca5765779aa74a01c3"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Nov 22 21:08:13 2011 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:32:03 2011 -0800"
      },
      "message": "rcu: Reduce latency of rcu_prepare_for_idle()\n\nRe-enable interrupts across calls to quiescent-state functions and\nalso across force_quiescent_state() to reduce latency.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "f535a607c13c7b674e0788ca5765779aa74a01c3",
      "tree": "433a07d16ff11d9f67e7991831cebf3cadfd9939",
      "parents": [
        "84ad00cb61f1cb21f0b63bc6f7dc254399eb3830"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Nov 22 20:43:02 2011 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:32:02 2011 -0800"
      },
      "message": "rcu: Eliminate RCU_FAST_NO_HZ grace-period hang\n\nWith the new implementation of RCU_FAST_NO_HZ, it was possible to hang\nRCU grace periods as follows:\n\no\tCPU 0 attempts to go idle, cycles several times through the\n\trcu_prepare_for_idle() loop, then goes dyntick-idle when\n\tRCU needs nothing more from it, while still having at least\n\ton RCU callback pending.\n\no\tCPU 1 goes idle with no callbacks.\n\nBoth CPUs can then stay in dyntick-idle mode indefinitely, preventing\nthe RCU grace period from ever completing, possibly hanging the system.\n\nThis commit therefore prevents CPUs that have RCU callbacks from entering\ndyntick-idle mode.  This approach also eliminates the need for the\nend-of-grace-period IPIs used previously.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "84ad00cb61f1cb21f0b63bc6f7dc254399eb3830",
      "tree": "7f275af0caaead54a5e8847afa308f5e2b33997a",
      "parents": [
        "3084f2f80cc8a1fd66233722d88beac0fe85e26f"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Nov 22 17:46:19 2011 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:32:01 2011 -0800"
      },
      "message": "rcu: Avoid needlessly IPIing CPUs at GP end\n\nIf a CPU enters dyntick-idle mode with callbacks pending, it will need\nan IPI at the end of the grace period.  However, if it exits dyntick-idle\nmode before the grace period ends, it will be needlessly IPIed at the\nend of the grace period.\n\nTherefore, this commit clears the per-CPU rcu_awake_at_gp_end flag\nwhen a CPU determines that it does not need it.  This in turn requires\ndisabling interrupts across much of rcu_prepare_for_idle() in order to\navoid having nested interrupts clearing this state out from under us.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "3084f2f80cc8a1fd66233722d88beac0fe85e26f",
      "tree": "bce77805235278599eda0572d5d36b11419681d7",
      "parents": [
        "433cdddcd9ac5558068edd7f8d4707a70f7710f5"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Nov 22 17:07:11 2011 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:32:00 2011 -0800"
      },
      "message": "rcu: Go dyntick-idle more quickly if CPU has serviced current grace period\n\nThe earlier version would attempt to push callbacks through five times\nbefore going into dyntick-idle mode if callbacks remained, but the CPU\nhad done all that it needed to do for the current RCU grace periods.\nThis is wasteful:  In most cases, once the CPU has done all that it\nneeds to for the current RCU grace periods, it will make no further\nprogress on the callbacks no matter how many times it loops through\nthe RCU core processing and the idle-entry code.\n\nThis commit therefore goes to dyntick-idle mode whenever the current\nCPU has done all it can for the current grace period.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "433cdddcd9ac5558068edd7f8d4707a70f7710f5",
      "tree": "7f3686eb64c9ee3a239e5920df588c70837c5637",
      "parents": [
        "045fb9315a2129023d70a0eecf0942e18fca4fcd"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Nov 22 14:58:03 2011 -0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:32:00 2011 -0800"
      },
      "message": "rcu: Add tracing for RCU_FAST_NO_HZ\n\nThis commit adds trace_rcu_prep_idle(), which is invoked from\nrcu_prepare_for_idle() and rcu_wake_cpu() to trace attempts on\nthe part of RCU to force CPUs into dyntick-idle mode.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "aea1b35e29e658d42d7ba2237f3aa7f93e18509d",
      "tree": "0221b1c12b5c3e3ed7f2bb2ffc957b09891bcb51",
      "parents": [
        "0989cb46783188ea7346ba6490be0046b9b7a725"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Wed Nov 02 06:54:54 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:31:43 2011 -0800"
      },
      "message": "rcu: Allow dyntick-idle mode for CPUs with callbacks\n\nCurrently, RCU does not permit a CPU to enter dyntick-idle mode if that\nCPU has any RCU callbacks queued.  This means that workloads for which\neach CPU wakes up and does some RCU updates every few ticks will never\nenter dyntick-idle mode.  This can result in significant unnecessary power\nconsumption, so this patch permits a given to enter dyntick-idle mode if\nit has callbacks, but only if that same CPU has completed all current\nwork for the RCU core.  We determine use rcu_pending() to determine\nwhether a given CPU has completed all current work for the RCU core.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "a0f8eefb127f5be07628954f310a7fc8c82b2fc3",
      "tree": "58fa4263824fa3b907b9ef70b1255fcf7c3c791b",
      "parents": [
        "b40d293eb36ba40cd428b6d178db911174689702"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Nov 03 12:08:17 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:31:29 2011 -0800"
      },
      "message": "rcu: Remove redundant return from rcu_report_exp_rnp()\n\nEmpty void functions do not need \"return\", so this commit removes it\nfrom rcu_report_exp_rnp().\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "b40d293eb36ba40cd428b6d178db911174689702",
      "tree": "78109a13c0bf86608f3caaea547fd9e948aee743",
      "parents": [
        "34240697d619c439c55f21989680024dcb604aab"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Sat Oct 22 07:12:34 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:31:28 2011 -0800"
      },
      "message": "rcu: Omit self-awaken when setting up expedited grace period\n\nWhen setting up an expedited grace period, if there were no readers, the\ntask will awaken itself.  This commit removes this useless self-awakening.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "7077714ec4940a6c5b1189c3afb4f47bf49ad877",
      "tree": "c8713205a1e6ce6973822bb76ea5e7e1774444ee",
      "parents": [
        "389abd48efe1ceacb141b2fd151263b1bc432dbc"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Thu Sep 22 13:18:44 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:31:22 2011 -0800"
      },
      "message": "rcu: Make synchronize_sched_expedited() better at work sharing\n\nWhen synchronize_sched_expedited() takes its second and subsequent\nsnapshots of sync_sched_expedited_started, it subtracts 1.  This\nmeans that the concurrent caller of synchronize_sched_expedited()\nthat incremented to that value sees our successful completion, it\nwill not be able to take advantage of it.  This restriction is\npointless, given that our full expedited grace period would have\nhappened after the other guy started, and thus should be able to\nserve as a proxy for the other guy successfully executing\ntry_stop_cpus().\n\nThis commit therefore removes the subtraction of 1.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "389abd48efe1ceacb141b2fd151263b1bc432dbc",
      "tree": "f61a46a05c11b3d6ecd10b6beb73824bd5e88388",
      "parents": [
        "af446b702c58b700cc5fa99f6edc78b99e55b995"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 21 14:41:37 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Dec 11 10:31:21 2011 -0800"
      },
      "message": "rcu: Avoid RCU-preempt expedited grace-period botch\n\nBecause rcu_read_unlock_special() samples rcu_preempted_readers_exp(rnp)\nafter dropping rnp-\u003elock, the following sequence of events is possible:\n\n1.\tTask A exits its RCU read-side critical section, and removes\n\titself from the -\u003eblkd_tasks list, releases rnp-\u003elock, and is\n\tthen preempted.  Task B remains on the -\u003eblkd_tasks list, and\n\tblocks the current expedited grace period.\n\n2.\tTask B exits from its RCU read-side critical section and removes\n\titself from the -\u003eblkd_tasks list.  Because it is the last task\n\tblocking the current expedited grace period, it ends that\n\texpedited grace period.\n\n3.\tTask A resumes, and samples rcu_preempted_readers_exp(rnp) which\n\tof course indicates that nothing is blocking the nonexistent\n\texpedited grace period. Task A is again preempted.\n\n4.\tSome other CPU starts an expedited grace period.  There are several\n\ttasks blocking this expedited grace period queued on the\n\tsame rcu_node structure that Task A was using in step 1 above.\n\n5.\tTask A examines its state and incorrectly concludes that it was\n\tthe last task blocking the expedited grace period on the current\n\trcu_node structure.  It therefore reports completion up the\n\trcu_node tree.\n\n6.\tThe expedited grace period can then incorrectly complete before\n\tthe tasks blocked on this same rcu_node structure exit their\n\tRCU read-side critical sections.  Arbitrarily bad things happen.\n\nThis commit therefore takes a snapshot of rcu_preempted_readers_exp(rnp)\nprior to dropping the lock, so that only the last task thinks that it is\nthe last task, thus avoiding the failure scenario laid out above.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n"
    },
    {
      "commit": "e90c53d3e238dd0b7b02964370e8fece1778df96",
      "tree": "23e5b8623c2c37bd8a4656c66266209872f80701",
      "parents": [
        "5b61b0baa9e80289c53413e573befc5790a04ac7"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sat Aug 20 18:29:32 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:38:48 2011 -0700"
      },
      "message": "rcu: Remove rcu_needs_cpu_flush() to avoid false quiescent states\n\nThe purpose of rcu_needs_cpu_flush() was to iterate on pushing the\ncurrent grace period in order to help the current CPU enter dyntick-idle\nmode.  However, this can result in failures if the CPU starts entering\ndyntick-idle mode, but then backs out.  In this case, the call to\nrcu_pending() from rcu_needs_cpu_flush() might end up announcing a\nnon-existing quiescent state.\n\nThis commit therefore removes rcu_needs_cpu_flush() in favor of letting\nthe dyntick-idle machinery at the end of the softirq handler push the\nloop along via its call to rcu_pending().\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "5b61b0baa9e80289c53413e573befc5790a04ac7",
      "tree": "5f3c4b002089b6d6e92fafaba42ab4a42ef1f1f9",
      "parents": [
        "ab8f11e5f6655861ad4758a7da76b2fc0e0dcc98"
      ],
      "author": {
        "name": "Mike Galbraith",
        "email": "efault@gmx.de",
        "time": "Fri Aug 19 11:39:11 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:38:47 2011 -0700"
      },
      "message": "rcu: Wire up RCU_BOOST_PRIO for rcutree\n\nRCU boost threads start life at RCU_BOOST_PRIO, while others remain\nat RCU_KTHREAD_PRIO.  While here, change thread names to match other\nkthreads, and adjust rcu_yield() to not override the priority set by\nthe user.  This last change sets the stage for runtime changes to\npriority in the -rt tree.\n\nSigned-off-by: Mike Galbraith \u003cefault@gmx.de\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "5342e269b2b58ee0b0b4168a94087faaa60d0567",
      "tree": "77467d64948328e506f06eaf5a719de7fade4b83",
      "parents": [
        "06ae115a1d551cd952d80df06eaf8b5153351875"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Aug 16 17:46:46 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:38:43 2011 -0700"
      },
      "message": "rcu: Permit rt_mutex_unlock() with irqs disabled\n\nCreate a separate lockdep class for the rt_mutex used for RCU priority\nboosting and enable use of rt_mutex_lock() with irqs disabled.  This\nprevents RCU priority boosting from falling prey to deadlocks when\nsomeone begins an RCU read-side critical section in preemptible state,\nbut releases it with an irq-disabled lock held.\n\nUnfortunately, the scheduler\u0027s runqueue and priority-inheritance locks\nstill must either completely enclose or be completely enclosed by any\noverlapping RCU read-side critical section.\n\nThis version removes a redundant local_irq_restore() noted by\nYong Zhang.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "9bc8b5586f94be6391458074ecbba8827ba8ba9d",
      "tree": "323804bb7180337c266f88519cea6b1f42114ead",
      "parents": [
        "037067a1b6f9a70f862f3ed9d59fe28b7cd55ac4"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sat Aug 13 13:31:47 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:38:41 2011 -0700"
      },
      "message": "rcu: Suppress NMI backtraces when stall ends before dump\n\nIt is possible for an RCU CPU stall to end just as it is detected, in\nwhich case the current code will uselessly dump all CPU\u0027s stacks.\nThis commit therefore checks for this condition and refrains from\nsending needless NMIs.\n\nAnd yes, the stall might also end just after we checked all CPUs and\ntasks, but in that case we would at least have given some clue as\nto which CPU/task was at fault.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "82e78d80fc392ac7e98326bc8beeb8a679913ffd",
      "tree": "4999d3c03ed711056474c3a31512e7d3cf253b87",
      "parents": [
        "5c51dd7349d4bb26f845f17f85daa168f5fa03f2"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Thu Aug 04 07:55:34 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:38:39 2011 -0700"
      },
      "message": "rcu: Simplify unboosting checks\n\nCommit 7765be (Fix RCU_BOOST race handling current-\u003ercu_read_unlock_special)\nintroduced a new -\u003ercu_boosted field in the task structure.  This is\nredundant because the existing -\u003ercu_boost_mutex will be non-NULL at\nany time that -\u003ercu_boosted is nonzero.  Therefore, this commit removes\n-\u003ercu_boosted and tests -\u003ercu_boost_mutex instead.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "6206ab9bab620fc0fbbed30ce20d145b0b3d1840",
      "tree": "b57912ba9fff6f2deba89c0178d3122bbd1fda6e",
      "parents": [
        "6846c0c54074d47927c90eab4a805115e1ae3292"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Aug 01 06:22:11 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:38:35 2011 -0700"
      },
      "message": "rcu: Move __rcu_read_unlock()\u0027s barrier() within if-statement\n\nWe only need to constrain the compiler if we are actually exiting\nthe top-level RCU read-side critical section.  This commit therefore\nmoves the first barrier() cal in __rcu_read_unlock() to inside the\n\"if\" statement, thus avoiding needless register flushes for inner\nrcu_read_unlock() calls.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "e4cc1f22b2f4e9b0207a8cdb63e56dcf99e82d35",
      "tree": "ec3fad6587f0a83e764a571394bdfb85a84edf30",
      "parents": [
        "d4c08f2ac311a360230eef7e5395b0ec8d8f0670"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Mon Jun 27 00:17:43 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:38:22 2011 -0700"
      },
      "message": "rcu: Simplify quiescent-state accounting\n\nThere is often a delay between the time that a CPU passes through a\nquiescent state and the time that this quiescent state is reported to the\nRCU core.  It is quite possible that the grace period ended before the\nquiescent state could be reported, for example, some other CPU might have\ndeduced that this CPU passed through dyntick-idle mode.  It is critically\nimportant that quiescent state be counted only against the grace period\nthat was in effect at the time that the quiescent state was detected.\n\nPreviously, this was handled by recording the number of the last grace\nperiod to complete when passing through a quiescent state.  The RCU\ncore then checks this number against the current value, and rejects\nthe quiescent state if there is a mismatch.  However, one additional\npossibility must be accounted for, namely that the quiescent state was\nrecorded after the prior grace period completed but before the current\ngrace period started.  In this case, the RCU core must reject the\nquiescent state, but the recorded number will match.  This is handled\nwhen the CPU becomes aware of a new grace period -- at that point,\nit invalidates any prior quiescent state.\n\nThis works, but is a bit indirect.  The new approach records the current\ngrace period, and the RCU core checks to see (1) that this is still the\ncurrent grace period and (2) that this grace period has not yet ended.\nThis approach simplifies reasoning about correctness, and this commit\nchanges over to this new approach.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "d4c08f2ac311a360230eef7e5395b0ec8d8f0670",
      "tree": "06e425b8153e076fbe43b037cf4497ac50afddb7",
      "parents": [
        "965a002b4f1a458c5dcb334ec29f48a0046faa25"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Sat Jun 25 06:36:56 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:38:21 2011 -0700"
      },
      "message": "rcu: Add grace-period, quiescent-state, and call_rcu trace events\n\nAdd trace events to record grace-period start and end, quiescent states,\nCPUs noticing grace-period start and end, grace-period initialization,\ncall_rcu() invocation, tasks blocking in RCU read-side critical sections,\ntasks exiting those same critical sections, force_quiescent_state()\ndetection of dyntick-idle and offline CPUs, CPUs entering and leaving\ndyntick-idle mode (except from NMIs), CPUs coming online and going\noffline, and CPUs being kicked for staying in dyntick-idle mode for too\nlong (as in many weeks, even on 32-bit systems).\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n\nrcu: Add the rcu flavor to callback trace events\n\nThe earlier trace events for registering RCU callbacks and for invoking\nthem did not include the RCU flavor (rcu_bh, rcu_preempt, or rcu_sched).\nThis commit adds the RCU flavor to those trace events.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "385680a9487d2f85382ad6d74e2a15837e47bfd9",
      "tree": "68809ef9cdfeee43b7c08152bfdbc45d2c0d6489",
      "parents": [
        "eab0993c7ba5c7d9b3613d6037e0f31f0ccbe181"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Jun 21 22:43:26 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:38:19 2011 -0700"
      },
      "message": "rcu: Add event-trace markers to TREE_RCU kthreads\n\nAdd event-trace markers to TREE_RCU kthreads to allow including these\nkthread\u0027s CPU time in the utilization calculations.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "e0f23060adfa3f27beaa7918eff70258b88471b6",
      "tree": "f0e8ed4ad97a1fc4d3c2c5af639a63063ae52e32",
      "parents": [
        "72fe701b70e6ced35d734b676c13efbc8fc769a9"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Jun 21 01:29:39 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:38:16 2011 -0700"
      },
      "message": "rcu: Update comments to reflect softirqs vs. kthreads\n\nWe now have kthreads only for flavors of RCU that support boosting,\nso update the now-misleading comments accordingly.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "e99033c5c160f1f247c665923a66acec693a967c",
      "tree": "c5b0863ad4b673134070872a159055237186f0fe",
      "parents": [
        "300df91ca9358f7f09298eec9503c12b32054ef7"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Jun 21 00:13:44 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:38:14 2011 -0700"
      },
      "message": "rcu: Put names into TINY_RCU structures under RCU_TRACE\n\nIn order to allow event tracing to distinguish between flavors of\nRCU, we need those names in the relevant RCU data structures.  TINY_RCU\nhas avoided them for memory-footprint reasons, so add them only if\nCONFIG_RCU_TRACE\u003dy.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "2c42818e962e2858334bf45bfc56662b3752df34",
      "tree": "192364123c9aeeab282c53168e51eddece9d8be4",
      "parents": [
        "f039d1f1884b2fe9c13d28f59d8330f0b0518fc4"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Thu May 26 22:14:36 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:36:42 2011 -0700"
      },
      "message": "rcu: Abstract common code for RCU grace-period-wait primitives\n\nPull the code that waits for an RCU grace period into a single function,\nwhich is then called by synchronize_rcu() and friends in the case of\nTREE_RCU and TREE_PREEMPT_RCU, and from rcu_barrier() and friends in\nthe case of TINY_RCU and TINY_PREEMPT_RCU.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "1eb521210a8c9823038abe4ddfe8c69e713ec17d",
      "tree": "f9fc70df7c25f80def12aeb231475405043eb1ed",
      "parents": [
        "1f288094807861ec1e48c428d2c49ccf7aaf3767"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Jun 16 16:02:54 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:36:34 2011 -0700"
      },
      "message": "rcu: Avoid unnecessary self-wakeup of per-CPU kthreads\n\nThere are a number of cases where the RCU can find additional work\nfor the per-CPU kthread within the context of that per-CPU kthread.\nIn such cases, the per-CPU kthread is already running, so attempting\nto wake itself up does nothing except waste CPU cycles.  This commit\ntherefore checks to see if it is in the per-CPU kthread context,\nomitting the wakeup in this case.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "1f288094807861ec1e48c428d2c49ccf7aaf3767",
      "tree": "f8f1217bcf0a720d6ae17304b1bcb3ddbecb42be",
      "parents": [
        "a102a9ece5489e1718cd7543aa079082450ac3a2"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Thu Jun 16 15:53:18 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Sep 28 21:36:33 2011 -0700"
      },
      "message": "rcu: Use kthread_create_on_node()\n\nCommit a26ac2455ffc (move TREE_RCU from softirq to kthread) added\nper-CPU kthreads.  However, kthread creation uses kthread_create(), which\ncan put the kthread\u0027s stack and task struct on the wrong NUMA node.\nTherefore, use kthread_create_on_node() instead of kthread_create()\nso that the stacks and task structs are placed on the correct NUMA node.\n\nA similar change was carried out in commit 94dcf29a11b3 (kthread:\nuse kthread_create_on_node()).\n\nAlso change rcutorture\u0027s priority-boost-test kthread creation.\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCC: Tejun Heo \u003ctj@kernel.org\u003e\nCC: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCC: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCC: Andi Kleen \u003cak@linux.intel.com\u003e\nCC: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "ec433f0c51527426989ea8a38a856d810d739414",
      "tree": "001550d7b18b3f2b5326da3f9dfd893e31c8dc1c",
      "parents": [
        "c5d753a55ac92e09816d410cd17093813f1a904b"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Jul 19 15:32:00 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Jul 20 10:50:12 2011 -0700"
      },
      "message": "softirq,rcu: Inform RCU of irq_exit() activity\n\nThe rcu_read_unlock_special() function relies on in_irq() to exclude\nscheduler activity from interrupt level.  This fails because exit_irq()\ncan invoke the scheduler after clearing the preempt_count() bits that\nin_irq() uses to determine that it is at interrupt level.  This situation\ncan result in failures as follows:\n\n $task\t\t\tIRQ\t\tSoftIRQ\n\n rcu_read_lock()\n\n /* do stuff */\n\n \u003cpreempt\u003e |\u003d UNLOCK_BLOCKED\n\n rcu_read_unlock()\n   --t-\u003ercu_read_lock_nesting\n\n\t\t\tirq_enter();\n\t\t\t/* do stuff, don\u0027t use RCU */\n\t\t\tirq_exit();\n\t\t\t  sub_preempt_count(IRQ_EXIT_OFFSET);\n\t\t\t  invoke_softirq()\n\n\t\t\t\t\tttwu();\n\t\t\t\t\t  spin_lock_irq(\u0026pi-\u003elock)\n\t\t\t\t\t  rcu_read_lock();\n\t\t\t\t\t  /* do stuff */\n\t\t\t\t\t  rcu_read_unlock();\n\t\t\t\t\t    rcu_read_unlock_special()\n\t\t\t\t\t      rcu_report_exp_rnp()\n\t\t\t\t\t        ttwu()\n\t\t\t\t\t          spin_lock_irq(\u0026pi-\u003elock) /* deadlock */\n\n   rcu_read_unlock_special(t);\n\nEd can simply trigger this \u0027easy\u0027 because invoke_softirq() immediately\ndoes a ttwu() of ksoftirqd/# instead of doing the in-place softirq stuff\nfirst, but even without that the above happens.\n\nCure this by also excluding softirqs from the\nrcu_read_unlock_special() handler and ensuring the force_irqthreads\nksoftirqd/# wakeup is done from full softirq context.\n\n[ Alternatively, delaying the -\u003ercu_read_lock_nesting decrement\n  until after the special handling would make the thing more robust\n  in the face of interrupts as well.  And there is a separate patch\n  for that. ]\n\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nReported-and-tested-by: Ed Tomlinson \u003cedt@aei.ca\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "10f39bb1b2c1923ca73e70cb13aeee0e9b822d8f",
      "tree": "2e8349c57b1f0563a27be49410f413b643ded1a9",
      "parents": [
        "be0e1e21ef707be4d16ea6a96ac9997463e4b8d2"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Sun Jul 17 21:14:35 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Jul 20 10:50:11 2011 -0700"
      },
      "message": "rcu: protect __rcu_read_unlock() against scheduler-using irq handlers\n\nThe addition of RCU read-side critical sections within runqueue and\npriority-inheritance lock critical sections introduced some deadlock\ncycles, for example, involving interrupts from __rcu_read_unlock()\nwhere the interrupt handlers call wake_up().  This situation can cause\nthe instance of __rcu_read_unlock() invoked from interrupt to do some\nof the processing that would otherwise have been carried out by the\ntask-level instance of __rcu_read_unlock().  When the interrupt-level\ninstance of __rcu_read_unlock() is called with a scheduler lock held\nfrom interrupt-entry/exit situations where in_irq() returns false,\ndeadlock can result.\n\nThis commit resolves these deadlocks by using negative values of\nthe per-task -\u003ercu_read_lock_nesting counter to indicate that an\ninstance of __rcu_read_unlock() is in flight, which in turn prevents\ninstances from interrupt handlers from doing any special processing.\nThis patch is inspired by Steven Rostedt\u0027s earlier patch that similarly\nmade __rcu_read_unlock() guard against interrupt-mediated recursion\n(see https://lkml.org/lkml/2011/7/15/326), but this commit refines\nSteven\u0027s approach to avoid the need for preemption disabling on the\n__rcu_read_unlock() fastpath and to also avoid the need for manipulating\na separate per-CPU variable.\n\nThis patch avoids need for preempt_disable() by instead using negative\nvalues of the per-task -\u003ercu_read_lock_nesting counter.  Note that nested\nrcu_read_lock()/rcu_read_unlock() pairs are still permitted, but they will\nnever see -\u003ercu_read_lock_nesting go to zero, and will therefore never\ninvoke rcu_read_unlock_special(), thus preventing them from seeing the\nRCU_READ_UNLOCK_BLOCKED bit should it be set in -\u003ercu_read_unlock_special.\nThis patch also adds a check for -\u003ercu_read_unlock_special being negative\nin rcu_check_callbacks(), thus preventing the RCU_READ_UNLOCK_NEED_QS\nbit from being set should a scheduling-clock interrupt occur while\n__rcu_read_unlock() is exiting from an outermost RCU read-side critical\nsection.\n\nOf course, __rcu_read_unlock() can be preempted during the time that\n-\u003ercu_read_lock_nesting is negative.  This could result in the setting\nof the RCU_READ_UNLOCK_BLOCKED bit after __rcu_read_unlock() checks it,\nand would also result it this task being queued on the corresponding\nrcu_node structure\u0027s blkd_tasks list.  Therefore, some later RCU read-side\ncritical section would enter rcu_read_unlock_special() to clean up --\nwhich could result in deadlock if that critical section happened to be in\nthe scheduler where the runqueue or priority-inheritance locks were held.\n\nThis situation is dealt with by making rcu_preempt_note_context_switch()\ncheck for negative -\u003ercu_read_lock_nesting, thus refraining from\nqueuing the task (and from setting RCU_READ_UNLOCK_BLOCKED) if we are\nalready exiting from the outermost RCU read-side critical section (in\nother words, we really are no longer actually in that RCU read-side\ncritical section).  In addition, rcu_preempt_note_context_switch()\ninvokes rcu_read_unlock_special() to carry out the cleanup in this case,\nwhich clears out the -\u003ercu_read_unlock_special bits and dequeues the task\n(if necessary), in turn avoiding needless delay of the current RCU grace\nperiod and needless RCU priority boosting.\n\nIt is still illegal to call rcu_read_unlock() while holding a scheduler\nlock if the prior RCU read-side critical section has ever had either\npreemption or irqs enabled.  However, the common use case is legal,\nnamely where then entire RCU read-side critical section executes with\nirqs disabled, for example, when the scheduler lock is held across the\nentire lifetime of the RCU read-side critical section.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "be0e1e21ef707be4d16ea6a96ac9997463e4b8d2",
      "tree": "fe53c0731f5c3a6e56e2358eee9b8f17c3af83f4",
      "parents": [
        "7765be2fec0f476fcd61812d5f9406b04c765020"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sat May 21 05:57:18 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Jul 19 21:38:53 2011 -0700"
      },
      "message": "rcu: Streamline code produced by __rcu_read_unlock()\n\nGiven some common flag combinations, particularly -Os, gcc will inline\nrcu_read_unlock_special() despite its being in an unlikely() clause.\nUse noinline to prohibit this misoptimization.\n\nIn addition, move the second barrier() in __rcu_read_unlock() so that\nit is not on the common-case code path.  This will allow the compiler to\ngenerate better code for the common-case path through __rcu_read_unlock().\n\nSuggested-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nAcked-by: Mathieu Desnoyers \u003cmathieu.desnoyers@efficios.com\u003e\n"
    },
    {
      "commit": "7765be2fec0f476fcd61812d5f9406b04c765020",
      "tree": "e89ccb3fbd5655090b05f608f8e1d39924f23a9a",
      "parents": [
        "131906b0062ddde7f85bbe67754983c754648bd8"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Thu Jul 14 12:24:11 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Jul 19 21:38:52 2011 -0700"
      },
      "message": "rcu: Fix RCU_BOOST race handling current-\u003ercu_read_unlock_special\n\nThe RCU_BOOST commits for TREE_PREEMPT_RCU introduced an other-task\nwrite to a new RCU_READ_UNLOCK_BOOSTED bit in the task_struct structure\u0027s\n-\u003ercu_read_unlock_special field, but, as noted by Steven Rostedt, without\ncorrectly synchronizing all accesses to -\u003ercu_read_unlock_special.\nThis could result in bits in -\u003ercu_read_unlock_special being spuriously\nset and cleared due to conflicting accesses, which in turn could result\nin deadlocks between the rcu_node structure\u0027s -\u003elock and the scheduler\u0027s\nrq and pi locks.  These deadlocks would result from RCU incorrectly\nbelieving that the just-ended RCU read-side critical section had been\npreempted and/or boosted.  If that RCU read-side critical section was\nexecuted with either rq or pi locks held, RCU\u0027s ensuing (incorrect)\ncalls to the scheduler would cause the scheduler to attempt to once\nagain acquire the rq and pi locks, resulting in deadlock.  More complex\ndeadlock cycles are also possible, involving multiple rq and pi locks\nas well as locks from multiple rcu_node structures.\n\nThis commit fixes synchronization by creating -\u003ercu_boosted field in\ntask_struct that is accessed and modified only when holding the -\u003elock\nin the rcu_node structure on which the task is queued (on that rcu_node\nstructure\u0027s -\u003eblkd_tasks list).  This results in tasks accessing only\ntheir own current-\u003ercu_read_unlock_special fields, making unsynchronized\naccess once again legal, and keeping the rcu_read_unlock() fastpath free\nof atomic instructions and memory barriers.\n\nThe reason that the rcu_read_unlock() fastpath does not need to access\nthe new current-\u003ercu_boosted field is that this new field cannot\nbe non-zero unless the RCU_READ_UNLOCK_BLOCKED bit is set in the\ncurrent-\u003ercu_read_unlock_special field.  Therefore, rcu_read_unlock()\nneed only test current-\u003ercu_read_unlock_special: if that is zero, then\ncurrent-\u003ercu_boosted must also be zero.\n\nThis bug does not affect TINY_PREEMPT_RCU because this implementation\nof RCU accesses current-\u003ercu_read_unlock_special with irqs disabled,\nthus preventing races on the !SMP systems that TINY_PREEMPT_RCU runs on.\n\nMaybe-reported-by: Dave Jones \u003cdavej@redhat.com\u003e\nMaybe-reported-by: Sergey Senozhatsky \u003csergey.senozhatsky@gmail.com\u003e\nReported-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "131906b0062ddde7f85bbe67754983c754648bd8",
      "tree": "1b92eacb707befb294b4d9985f10aa44715cba16",
      "parents": [
        "b0d304172f49061b4ff78f9e2b02719ac69c8a7e"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sun Jul 17 02:05:49 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue Jul 19 21:38:51 2011 -0700"
      },
      "message": "rcu: decrease rcu_report_exp_rnp coupling with scheduler\n\nPREEMPT_RCU read-side critical sections blocking an expedited grace\nperiod invoke rcu_report_exp_rnp().  When the last such critical section\nhas completed, rcu_report_exp_rnp() invokes the scheduler to wake up the\ntask that invoked synchronize_rcu_expedited() -- needlessly holding the\nroot rcu_node structure\u0027s lock while doing so, thus needlessly providing\na way for RCU and the scheduler to deadlock.\n\nThis commit therefore releases the root rcu_node structure\u0027s lock before\ncalling wake_up().\n\nReported-by: Ed Tomlinson \u003cedt@aei.ca\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "b0d304172f49061b4ff78f9e2b02719ac69c8a7e",
      "tree": "882123e565ced895910490514f6e676c708b5001",
      "parents": [
        "620917de59eeb934b9f8cf35cc2d95c1ac8ed0fc"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Sun Jul 10 15:57:35 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Jul 13 08:17:56 2011 -0700"
      },
      "message": "rcu: Prevent RCU callbacks from executing before scheduler initialized\n\nUnder some rare but real combinations of configuration parameters, RCU\ncallbacks are posted during early boot that use kernel facilities that\nare not yet initialized.  Therefore, when these callbacks are invoked,\nhard hangs and crashes ensue.  This commit therefore prevents RCU\ncallbacks from being invoked until after the scheduler is fully up and\nrunning, as in after multiple tasks have been spawned.\n\nIt might well turn out that a better approach is to identify the specific\nRCU callbacks that are causing this problem, but that discussion will\nwait until such time as someone really needs an RCU callback to be invoked\n(as opposed to merely registered) during early boot.\n\nReported-by: julie Sullivan \u003ckernelmail.jms@gmail.com\u003e\nReported-by: RKK \u003ckulkarni.ravi4@gmail.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nTested-by: Konrad Rzeszutek Wilk \u003ckonrad.wilk@oracle.com\u003e\nTested-by: julie Sullivan \u003ckernelmail.jms@gmail.com\u003e\nTested-by: RKK \u003ckulkarni.ravi4@gmail.com\u003e\n"
    },
    {
      "commit": "f8b7fc6b514f34a51875dd48dff70d4d17a54f38",
      "tree": "dc6583851e3536516761b0fd9b07f5a3a1743ebb",
      "parents": [
        "a46e0899eec7a3069bcadd45dfba7bf67c6ed016"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Thu Jun 16 08:26:32 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Thu Jun 16 16:12:05 2011 -0700"
      },
      "message": "rcu: Move RCU_BOOST #ifdefs to header file\n\nThe commit \"use softirq instead of kthreads except when RCU_BOOST\u003dy\"\njust applied #ifdef in place.  This commit is a cleanup that moves\nthe newly #ifdef\u0027ed code to the header file kernel/rcutree_plugin.h.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    }
  ],
  "next": "a46e0899eec7a3069bcadd45dfba7bf67c6ed016"
}
