)]}'
{
  "commit": "4bb85590a5cb6b349702804cd1144ad768e543bf",
  "tree": "4cb1bb8609efd504d3e2cf61b43ad2317183a437",
  "parents": [
    "98c219b57f1350a23ed8636a539ae550859aaab4"
  ],
  "author": {
    "name": "Catalin Marinas",
    "email": "catalin.marinas@arm.com",
    "time": "Fri Jun 12 11:32:40 2026 +0100"
  },
  "committer": {
    "name": "Catalin Marinas",
    "email": "catalin.marinas@arm.com",
    "time": "Fri Jun 12 11:36:11 2026 +0100"
  },
  "message": "qspinlock: Split set_locked() into its own atomic step\n\nThe old sp21 label collapsed set_locked(), the wait for node-\u003enext, and\narch_mcs_spin_unlock_contended() into a single atomic action. That hid\nthe contended *,*,0 -\u003e *,*,1 transition: the window where, after the\nqueue head sets the locked byte but before it hands off the MCS lock, a\nconcurrent locker can observe the lock held with the tail still\npopulated and queue behind us.\n\nMove the set_locked() store into sp21 and the wait/handoff into a new\nsp22 label so TLC interleaves other CPUs in that window.\n\nSigned-off-by: Catalin Marinas \u003ccatalin.marinas@arm.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fde2ffc6db5c242a77ef5783e8a8ff3cbd23c35d",
      "old_mode": 33188,
      "old_path": "qspinlock.tla",
      "new_id": "350e4226dd94eb27c50aca109911a2a55558aef7",
      "new_mode": 33188,
      "new_path": "qspinlock.tla"
    }
  ]
}
