)]}'
{
  "commit": "85bf11e84b48ef51e60d848e68b18e337cbe7cfe",
  "tree": "c5cb175abc77e9b01a68371afe9151c1359225e2",
  "parents": [
    "aa945ef64aeee87f4352a88b6a50138c85f93895"
  ],
  "author": {
    "name": "Chuyi Zhou",
    "email": "zhouchuyi@bytedance.com",
    "time": "Mon Jun 08 19:23:49 2026 +0800"
  },
  "committer": {
    "name": "Paul E. McKenney",
    "email": "paulmck@kernel.org",
    "time": "Mon Jun 08 06:18:54 2026 -0700"
  },
  "message": "smp: Make CSD lock acquisition atomic for debug mode\n\nCommit b0473dcd4b1d (\"smp: Improve smp_call_function_single()\nCSD-lock diagnostics\") changed smp_call_function_single() so that,\nwhen CSD lock debugging is enabled, async !wait calls use the\ndestination CPU csd_data. That improves diagnostics, but it also removes\nthe single-writer property that made the old csd_lock() safe: multiple\nCPUs can now prepare the same destination CPU CSD concurrently.\n\ncsd_lock() currently waits for CSD_FLAG_LOCK to clear and then sets the\nbit with a non-atomic read-modify-write. Two senders can both see an\nunlocked CSD, set the bit, overwrite the callback fields, and enqueue\nthe same llist node. Re-adding a node that is already the queue head can\nmake node-\u003enext point to itself, leaving the target CPU stuck walking\ncall_single_queue. Later synchronous work, such as a TLB shootdown, can\nthen remain queued and trigger soft-lockup warnings or panics.\n\nKeep the single csd_lock() implementation, but when CSD lock debugging is\nenabled, acquire CSD_FLAG_LOCK with try_cmpxchg_acquire(). This makes the\ndestination CPU CSD a real atomic lock in the only configuration where it\ncan be shared by multiple remote senders, while preserving the existing\nnon-debug fast path.\n\nFixes: b0473dcd4b1d (\"smp: Improve smp_call_function_single() CSD-lock diagnostics\")\nSigned-off-by: Chuyi Zhou \u003czhouchuyi@bytedance.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@kernel.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "dc6582bb35d084ad3517305ec224299f99189c35",
      "old_mode": 33188,
      "old_path": "kernel/smp.c",
      "new_id": "b9448fe3b84ff50589a45ff8dc611e91c1322d7f",
      "new_mode": 33188,
      "new_path": "kernel/smp.c"
    }
  ]
}
