)]}'
{
  "commit": "f23d5fe12cbee88734d205cd9f7d447928120c26",
  "tree": "577471f6f2bf5ed6cc5cafb395e49fd82a52c8b5",
  "parents": [
    "d06ef970bc8200bc86448290251bc902e4a2fede"
  ],
  "author": {
    "name": "Michael Margolin",
    "email": "mrgolin@amazon.com",
    "time": "Thu Jul 23 16:23:18 2026 +0000"
  },
  "committer": {
    "name": "Michael Margolin",
    "email": "mrgolin@amazon.com",
    "time": "Thu Jul 23 16:26:07 2026 +0000"
  },
  "message": "pyverbs: Add Completion Counters support\n\nExpose the Completion Counters verbs API through pyverbs.\n\nAdd CompCntr class with set, set_err, inc, inc_err, read and read_err\nmethods. Add CompCntrInitAttr and CompCntrAttachAttr helper classes.\nAdd attach_comp_cntr method to the QP class. Expose supported\ncapabilities using query_comp_cntr_caps device method.\n\nAdditionally add pyverbs interface for creating EFA Completion Counters\nwith external memory.\n\nSigned-off-by: Michael Margolin \u003cmrgolin@amazon.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4beb11843fdba9fac906229b8fb44c7ebb4bddda",
      "old_mode": 33188,
      "old_path": "pyverbs/CMakeLists.txt",
      "new_id": "6399fea716f7f057193f4c15991ed51b49eb3bed",
      "new_mode": 33188,
      "new_path": "pyverbs/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "86997867c4fa3bb76497d2633cca35ddf4b9fbef",
      "new_mode": 33188,
      "new_path": "pyverbs/comp_cntr.pxd"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "12e812cb927fcc93f93c0543b17f664c0df15df9",
      "new_mode": 33188,
      "new_path": "pyverbs/comp_cntr.pyx"
    },
    {
      "type": "modify",
      "old_id": "26bbe9a8eadae88795a240ad444ed9e4772cc051",
      "old_mode": 33188,
      "old_path": "pyverbs/device.pxd",
      "new_id": "02446cea61b444152b13626c37c877f8fc587c2b",
      "new_mode": 33188,
      "new_path": "pyverbs/device.pxd"
    },
    {
      "type": "modify",
      "old_id": "25466f1e9624744193189cf5db8e95dfb9ed7c12",
      "old_mode": 33188,
      "old_path": "pyverbs/device.pyx",
      "new_id": "ea1f71d327d0e0492937c826062acab8cb735122",
      "new_mode": 33188,
      "new_path": "pyverbs/device.pyx"
    },
    {
      "type": "modify",
      "old_id": "a8e942aba85890986395856dd076a13322fd652f",
      "old_mode": 33188,
      "old_path": "pyverbs/libibverbs.pxd",
      "new_id": "82bfa869ae98bf7cd21ed1bf33fe46fa36f65c11",
      "new_mode": 33188,
      "new_path": "pyverbs/libibverbs.pxd"
    },
    {
      "type": "modify",
      "old_id": "9219a367d9498a1c4084290679f17873b3c25f2a",
      "old_mode": 33188,
      "old_path": "pyverbs/libibverbs_enums.pxd",
      "new_id": "c37f9fec3ede09504c3ae526210feca3fd1dc297",
      "new_mode": 33188,
      "new_path": "pyverbs/libibverbs_enums.pxd"
    },
    {
      "type": "modify",
      "old_id": "179f30cf5736d6b1460524b4dc114eee2c704f8c",
      "old_mode": 33188,
      "old_path": "pyverbs/providers/efa/efa_enums.pxd",
      "new_id": "725e486e1d21f1c3abc2dd3f3141110bdb53d0e9",
      "new_mode": 33188,
      "new_path": "pyverbs/providers/efa/efa_enums.pxd"
    },
    {
      "type": "modify",
      "old_id": "ab56f386acd94bb034e62de1e5865af66d098097",
      "old_mode": 33188,
      "old_path": "pyverbs/providers/efa/efadv.pyx",
      "new_id": "791a3cb1a816f191601b2862e326c45b200014fa",
      "new_mode": 33188,
      "new_path": "pyverbs/providers/efa/efadv.pyx"
    },
    {
      "type": "modify",
      "old_id": "5cd4d1b0637e67769499128d268dae8b97cce154",
      "old_mode": 33188,
      "old_path": "pyverbs/providers/efa/libefa.pxd",
      "new_id": "878cc5b1aece7d870588d47bd7aad2a53832964d",
      "new_mode": 33188,
      "new_path": "pyverbs/providers/efa/libefa.pxd"
    },
    {
      "type": "modify",
      "old_id": "25afd325f4308d3909d6ca5e78909ebf6e32534a",
      "old_mode": 33188,
      "old_path": "pyverbs/qp.pxd",
      "new_id": "050d59df9812c379f20453b1507a832dffff1903",
      "new_mode": 33188,
      "new_path": "pyverbs/qp.pxd"
    },
    {
      "type": "modify",
      "old_id": "b4f84033ff3938bee9c034fe074d00485dc294e4",
      "old_mode": 33188,
      "old_path": "pyverbs/qp.pyx",
      "new_id": "a14fd93eb36da060338d35be9f23af397aa7bdd2",
      "new_mode": 33188,
      "new_path": "pyverbs/qp.pyx"
    }
  ]
}
