)]}'
{
  "commit": "d19fb8d1f3f66cc342d30aa48f090c70afb753ed",
  "tree": "4d84a0e35b659907b3c651a7841613afc3ad5011",
  "parents": [
    "b6a932d1d9840727eee619d455bdeeedaa205be9"
  ],
  "author": {
    "name": "Paul E. McKenney",
    "email": "paulmck@linux.vnet.ibm.com",
    "time": "Fri Oct 31 12:56:16 2014 -0700"
  },
  "committer": {
    "name": "Paul E. McKenney",
    "email": "paulmck@linux.vnet.ibm.com",
    "time": "Tue Jan 06 11:02:44 2015 -0800"
  },
  "message": "rcu: Don\u0027t migrate blocked tasks even if all corresponding CPUs offline\n\nWhen the last CPU associated with a given leaf rcu_node structure\ngoes offline, something must be done about the tasks queued on that\nrcu_node structure.  Each of these tasks has been preempted on one of\nthe leaf rcu_node structure\u0027s CPUs while in an RCU read-side critical\nsection that it have not yet exited.  Handling these tasks is the job of\nrcu_preempt_offline_tasks(), which migrates them from the leaf rcu_node\nstructure to the root rcu_node structure.\n\nUnfortunately, this migration has to be done one task at a time because\neach tasks allegiance must be shifted from the original leaf rcu_node to\nthe root, so that future attempts to deal with these tasks will acquire\nthe root rcu_node structure\u0027s -\u003elock rather than that of the leaf.\nWorse yet, this migration must be done with interrupts disabled, which\nis not so good for realtime response, especially given that there is\nno bound on the number of tasks on a given rcu_node structure\u0027s list.\n(OK, OK, there is a bound, it is just that it is unreasonably large,\nespecially on 64-bit systems.)  This was not considered a problem back\nwhen rcu_preempt_offline_tasks() was first written because realtime\nsystems were assumed not to do CPU-hotplug operations while real-time\napplications were running.  This assumption has proved of dubious validity\ngiven that people are starting to run multiple realtime applications\non a single SMP system and that it is common practice to offline then\nonline a CPU before starting its real-time application in order to clear\nextraneous processing off of that CPU.  So we now need CPU hotplug\noperations to avoid undue latencies.\n\nThis commit therefore avoids migrating these tasks, instead letting\nthem be dequeued one by one from the original leaf rcu_node structure\nby rcu_read_unlock_special().  This means that the clearing of bits\nfrom the upper-level rcu_node structures must be deferred until the\nlast such task has been dequeued, because otherwise subsequent grace\nperiods won\u0027t wait on them.  This commit has the beneficial side effect\nof simplifying the CPU-hotplug code for TREE_PREEMPT_RCU, especially in\nCONFIG_RCU_BOOST builds.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6625a1b5d9a1f6e8bd6a1ca832659aa1db4be2f9",
      "old_mode": 33188,
      "old_path": "kernel/rcu/tree.c",
      "new_id": "84f16cf05991c58d36293205569b9ef4a7dfbd75",
      "new_mode": 33188,
      "new_path": "kernel/rcu/tree.c"
    },
    {
      "type": "modify",
      "old_id": "9315477b47d95a2fee602abb429d72aeeb0bcfcc",
      "old_mode": 33188,
      "old_path": "kernel/rcu/tree.h",
      "new_id": "883ebc8e2b6ef0431740f07eec15b5ae44e188aa",
      "new_mode": 33188,
      "new_path": "kernel/rcu/tree.h"
    },
    {
      "type": "modify",
      "old_id": "8a2b84157d346faa9a3124d1ffe035051dfe63a9",
      "old_mode": 33188,
      "old_path": "kernel/rcu/tree_plugin.h",
      "new_id": "d594da48f4b4e971dd66154f3c5b4be576a2c0f2",
      "new_mode": 33188,
      "new_path": "kernel/rcu/tree_plugin.h"
    }
  ]
}
