)]}'
{
  "commit": "237c80c5c8fb7ec128cf2a756b550dc41ad7eac7",
  "tree": "5d6b3346f2c53cd3f7471001479a8dbd741533a3",
  "parents": [
    "019129d595caaa5bd0b41d128308da1be6a91869"
  ],
  "author": {
    "name": "Paul E. McKenney",
    "email": "paulmck@linux.vnet.ibm.com",
    "time": "Thu Oct 15 09:26:14 2009 -0700"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Thu Oct 15 20:33:01 2009 +0200"
  },
  "message": "rcu: Fix TREE_PREEMPT_RCU CPU_HOTPLUG bad-luck hang\n\nIf the following sequence of events occurs, then\nTREE_PREEMPT_RCU will hang waiting for a grace period to\ncomplete, eventually OOMing the system:\n\no\tA TREE_PREEMPT_RCU build of the kernel is booted on a system\n\twith more than 64 physical CPUs present (32 on a 32-bit system).\n\tAlternatively, a TREE_PREEMPT_RCU build of the kernel is booted\n\twith RCU_FANOUT set to a sufficiently small value that the\n\tphysical CPUs populate two or more leaf rcu_node structures.\n\no\tA task is preempted in an RCU read-side critical section\n\twhile running on a CPU corresponding to a given leaf rcu_node\n\tstructure.\n\no\tAll CPUs corresponding to this same leaf rcu_node structure\n\trecord quiescent states for the current grace period.\n\no\tAll of these same CPUs go offline (hence the need for enough\n\tphysical CPUs to populate more than one leaf rcu_node structure).\n\tThis causes the preempted task to be moved to the root rcu_node\n\tstructure.\n\nAt this point, there is nothing left to cause the quiescent\nstate to be propagated up the rcu_node tree, so the current\ngrace period never completes.\n\nThe simplest fix, especially after considering the deadlock\npossibilities, is to detect this situation when the last CPU is\nofflined, and to set that CPU\u0027s -\u003eqsmask bit in its leaf\nrcu_node structure.  This will cause the next invocation of\nforce_quiescent_state() to end the grace period.\n\nWithout this fix, this hang can be triggered in an hour or so on\nsome machines with rcutorture and random CPU onlining/offlining.\nWith this fix, these same machines pass a full 10 hours of this\nsort of abuse.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: laijs@cn.fujitsu.com\nCc: dipankar@in.ibm.com\nCc: mathieu.desnoyers@polymtl.ca\nCc: josh@joshtriplett.org\nCc: dvhltc@us.ibm.com\nCc: niv@us.ibm.com\nCc: peterz@infradead.org\nCc: rostedt@goodmis.org\nCc: Valdis.Kletnieks@vt.edu\nCc: dhowells@redhat.com\nLKML-Reference: \u003c20091015162614.GA19131@linux.vnet.ibm.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ddbf111e9e18e8e31cf25d88238e5d8aac03aa8b",
      "old_mode": 33188,
      "old_path": "kernel/rcutree.c",
      "new_id": "0536125b0497ab0d5f66bac3dc81ecec26fbd0ea",
      "new_mode": 33188,
      "new_path": "kernel/rcutree.c"
    },
    {
      "type": "modify",
      "old_id": "599161f309fbdc6fa4d852e67de0bb6d5e62225a",
      "old_mode": 33188,
      "old_path": "kernel/rcutree.h",
      "new_id": "1823c6e20609405e4bb0ecbc235dc7709546b7a3",
      "new_mode": 33188,
      "new_path": "kernel/rcutree.h"
    },
    {
      "type": "modify",
      "old_id": "ebd20ee7707d0c78d1766369d85489fae5a117ba",
      "old_mode": 33188,
      "old_path": "kernel/rcutree_plugin.h",
      "new_id": "ef2a58c2b9d5f977665329a07ef2ceda61677b3b",
      "new_mode": 33188,
      "new_path": "kernel/rcutree_plugin.h"
    }
  ]
}
