)]}'
{
  "commit": "cd689985cf49f6ff5c8eddc48d98b9d581d9475d",
  "tree": "a1a119402f5208c45c21b855e8d2fbbaf18cfd72",
  "parents": [
    "83e96c604e781098a2f61b8a294919bcf3abfab4"
  ],
  "author": {
    "name": "Thomas Gleixner",
    "email": "tglx@linutronix.de",
    "time": "Fri Feb 01 17:45:14 2008 +0100"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Fri Feb 01 17:45:14 2008 +0100"
  },
  "message": "futex: Add bitset conditional wait/wakeup functionality\n\nTo allow the implementation of optimized rw-locks in user space, glibc\nneeds a possibility to select waiters for wakeup depending on a bitset\nmask.\n\nThis requires two new futex OPs: FUTEX_WAIT_BITS and FUTEX_WAKE_BITS\nThese OPs are basically the same as FUTEX_WAIT and FUTEX_WAKE plus an\nadditional argument - a bitset. Further the FUTEX_WAIT_BITS OP is\nexpecting an absolute timeout value instead of the relative one, which\nis used for the FUTEX_WAIT OP.\n\nFUTEX_WAIT_BITS calls into the kernel with a bitset. The bitset is\nstored in the futex_q structure, which is used to enqueue the waiter\ninto the hashed futex waitqueue.\n\nFUTEX_WAKE_BITS also calls into the kernel with a bitset. The wakeup\nfunction logically ANDs the bitset with the bitset stored in each\nwaiters futex_q structure. If the result is zero (i.e. none of the set\nbits in the bitsets is matching), then the waiter is not woken up. If\nthe result is not zero (i.e. one of the set bits in the bitsets is\nmatching), then the waiter is woken.\n\nThe bitset provided by the caller must be non zero. In case the\nprovided bitset is zero the kernel returns EINVAL.\n\nInternaly the new OPs are only extensions to the existing FUTEX_WAIT\nand FUTEX_WAKE functions. The existing OPs hand a bitset with all bits\nset into the futex_wait() and futex_wake() functions.\n\nSigned-off-by: Thomas Gleixner \u003ctgxl@linutronix.de\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1a15f8e237a7cf2404b1aa5bf16ccbb4f52214b4",
      "old_mode": 33188,
      "old_path": "include/linux/futex.h",
      "new_id": "90048fb28a38041a8a3975a59a30502f0b5a23bd",
      "new_mode": 33188,
      "new_path": "include/linux/futex.h"
    },
    {
      "type": "modify",
      "old_id": "dfbdfb9836f469ff78184c9b99825a569953c1fd",
      "old_mode": 33188,
      "old_path": "include/linux/thread_info.h",
      "new_id": "421323e5a2d6ce3e6d82b09cacf308e59c66bac7",
      "new_mode": 33188,
      "new_path": "include/linux/thread_info.h"
    },
    {
      "type": "modify",
      "old_id": "0006d64c448e6267ce791e8a0599bc796f0b7092",
      "old_mode": 33188,
      "old_path": "kernel/futex.c",
      "new_id": "a6baaec44b8f89009bafe2597fa90a6697702afa",
      "new_mode": 33188,
      "new_path": "kernel/futex.c"
    },
    {
      "type": "modify",
      "old_id": "0a43def6fee7de877f43bdd0d7276efc05b8a48e",
      "old_mode": 33188,
      "old_path": "kernel/futex_compat.c",
      "new_id": "133d558db452e38b68c664e9560457f7c3902fc9",
      "new_mode": 33188,
      "new_path": "kernel/futex_compat.c"
    }
  ]
}
