)]}'
{
  "commit": "1b12bbc747560ea68bcc132c3d05699e52271da0",
  "tree": "0e0fe5b7fe07d411251eebdd053e9e7793820248",
  "parents": [
    "64aa348edc617dea17bbd01ddee4e47886d5ec8c"
  ],
  "author": {
    "name": "Peter Zijlstra",
    "email": "a.p.zijlstra@chello.nl",
    "time": "Mon Aug 11 09:30:22 2008 +0200"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Mon Aug 11 09:30:22 2008 +0200"
  },
  "message": "lockdep: re-annotate scheduler runqueues\n\nInstead of using a per-rq lock class, use the regular nesting operations.\n\nHowever, take extra care with double_lock_balance() as it can release the\nalready held rq-\u003elock (and therefore change its nesting class).\n\nSo what can happen is:\n\n spin_lock(rq-\u003elock);\t// this rq subclass 0\n\n double_lock_balance(rq, other_rq);\n   // release rq\n   // acquire other_rq-\u003elock subclass 0\n   // acquire rq-\u003elock subclass 1\n\n spin_unlock(other_rq-\u003elock);\n\nleaving you with rq-\u003elock in subclass 1\n\nSo a subsequent double_lock_balance() call can try to nest a subclass 1\nlock while already holding a subclass 1 lock.\n\nFix this by introducing double_unlock_balance() which releases the other\nrq\u0027s lock, but also re-sets the subclass for this rq\u0027s lock to 0.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "655f1db26b12639562ea06007ae7c6f8d7f22586",
      "old_mode": 33188,
      "old_path": "kernel/sched.c",
      "new_id": "9b2b6a85577d328c417692ba92f5c6ea8ca423d9",
      "new_mode": 33188,
      "new_path": "kernel/sched.c"
    },
    {
      "type": "modify",
      "old_id": "908c04f9dad02d23df66fbc55a28f5619fc10081",
      "old_mode": 33188,
      "old_path": "kernel/sched_rt.c",
      "new_id": "6163e4cf885b90075fd2734427fac4f3f24eae1f",
      "new_mode": 33188,
      "new_path": "kernel/sched_rt.c"
    }
  ]
}
