)]}'
{
  "commit": "d2045151af9da38178c6e38581d94f239dc840e5",
  "tree": "10c34aec817517aaa6f475dd924ad4b9d2ad9904",
  "parents": [
    "34f9130a457c0a4f9ec1b30a1311a3a02c6581f2"
  ],
  "author": {
    "name": "Will Deacon",
    "email": "will.deacon@arm.com",
    "time": "Thu Feb 28 11:58:08 2019 +0000"
  },
  "committer": {
    "name": "Greg Kroah-Hartman",
    "email": "gregkh@linuxfoundation.org",
    "time": "Fri May 10 17:53:15 2019 +0200"
  },
  "message": "locking/futex: Allow low-level atomic operations to return -EAGAIN\n\ncommit 6b4f4bc9cb22875f97023984a625386f0c7cc1c0 upstream.\n\nSome futex() operations, including FUTEX_WAKE_OP, require the kernel to\nperform an atomic read-modify-write of the futex word via the userspace\nmapping. These operations are implemented by each architecture in\narch_futex_atomic_op_inuser() and futex_atomic_cmpxchg_inatomic(), which\nare called in atomic context with the relevant hash bucket locks held.\n\nAlthough these routines may return -EFAULT in response to a page fault\ngenerated when accessing userspace, they are expected to succeed (i.e.\nreturn 0) in all other cases. This poses a problem for architectures\nthat do not provide bounded forward progress guarantees or fairness of\ncontended atomic operations and can lead to starvation in some cases.\n\nIn these problematic scenarios, we must return back to the core futex\ncode so that we can drop the hash bucket locks and reschedule if\nnecessary, much like we do in the case of a page fault.\n\nAllow architectures to return -EAGAIN from their implementations of\narch_futex_atomic_op_inuser() and futex_atomic_cmpxchg_inatomic(), which\nwill cause the core futex code to reschedule if necessary and return\nback to the architecture code later on.\n\nCc: \u003cstable@kernel.org\u003e\nAcked-by: Peter Zijlstra (Intel) \u003cpeterz@infradead.org\u003e\nSigned-off-by: Will Deacon \u003cwill.deacon@arm.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f2fa48c6c47662312e817c01c60b9ea9b87fd1e1",
      "old_mode": 33188,
      "old_path": "kernel/futex.c",
      "new_id": "afe6a81584c971b0ced802617343de02a5796c3f",
      "new_mode": 33188,
      "new_path": "kernel/futex.c"
    }
  ]
}
