)]}'
{
  "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",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "49587abfc2f77cd3e9872efcf34bee4b9ac6e22f",
      "old_mode": 33188,
      "old_path": "Documentation/RCU/trace.txt",
      "new_id": "f6f15ce399036e4c03b99d9d7bd77aab7480cd98",
      "new_mode": 33188,
      "new_path": "Documentation/RCU/trace.txt"
    },
    {
      "type": "modify",
      "old_id": "05470d4caba3b6f9bb35cff66f2b09a504ad7ed1",
      "old_mode": 33188,
      "old_path": "kernel/rcutree.c",
      "new_id": "708469a06860b7935ea750f7fb7fb5fe44c410e7",
      "new_mode": 33188,
      "new_path": "kernel/rcutree.c"
    },
    {
      "type": "modify",
      "old_id": "e2ac8ee415bbdf5fa011cb65f7996b0f2b6e6c38",
      "old_mode": 33188,
      "old_path": "kernel/rcutree.h",
      "new_id": "cdd1be0a40720f0a436951035be9f3adc68d1815",
      "new_mode": 33188,
      "new_path": "kernel/rcutree.h"
    },
    {
      "type": "modify",
      "old_id": "5e25ee327ccb159d9ead6a1d65b985027fe7e6b2",
      "old_mode": 33188,
      "old_path": "kernel/rcutree_plugin.h",
      "new_id": "07f880445d8dabc0ebc6307992b9e8918d16d516",
      "new_mode": 33188,
      "new_path": "kernel/rcutree_plugin.h"
    },
    {
      "type": "modify",
      "old_id": "db0987c1e1bd64e3b8c96e51c3138ba53c608e1c",
      "old_mode": 33188,
      "old_path": "kernel/rcutree_trace.c",
      "new_id": "ed459edeff43826cdd642445c24e0b5aae03a836",
      "new_mode": 33188,
      "new_path": "kernel/rcutree_trace.c"
    }
  ]
}
