)]}'
{
  "commit": "9ead190bfde2a434c74ea604382d08acb2eceef5",
  "tree": "937f1bb8dedea56efc46aed12370bb3865898763",
  "parents": [
    "c93b6fbaa99bb3a1552e14317296be14dde51dfb"
  ],
  "author": {
    "name": "Roland Dreier",
    "email": "rolandd@cisco.com",
    "time": "Sat Jun 17 20:44:49 2006 -0700"
  },
  "committer": {
    "name": "Roland Dreier",
    "email": "rolandd@cisco.com",
    "time": "Sat Jun 17 20:44:49 2006 -0700"
  },
  "message": "IB/uverbs: Don\u0027t serialize with ib_uverbs_idr_mutex\n\nCurrently, all userspace verbs operations that call into the kernel\nare serialized by ib_uverbs_idr_mutex.  This can be a scalability\nissue for some workloads, especially for devices driven by the ipath\ndriver, which needs to call into the kernel even for datapath\noperations.\n\nFix this by adding reference counts to the userspace objects, and then\nconverting ib_uverbs_idr_mutex into a spinlock that only protects the\nidrs long enough to take a reference on the object being looked up.\nBecause remove operations may fail, we have to do a slightly funky\ntwo-step deletion, which is described in the comments at the top of\nuverbs_cmd.c.\n\nThis also still leaves ib_uverbs_idr_lock as a single lock that is\npossibly subject to contention.  However, the lock hold time will only\nbe a single idr operation, so multiple threads should still be able to\nmake progress, even if ib_uverbs_idr_lock is being ping-ponged.\n\nSurprisingly, these changes even shrink the object code:\n\nadd/remove: 23/5 grow/shrink: 4/21 up/down: 633/-693 (-60)\n\nSigned-off-by: Roland Dreier \u003crolandd@cisco.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3372d67ff139eb51232f96ad287e50608e5998ef",
      "old_mode": 33188,
      "old_path": "drivers/infiniband/core/uverbs.h",
      "new_id": "bb9bee56a824a9ea5b1da2417a882a12aab11f16",
      "new_mode": 33188,
      "new_path": "drivers/infiniband/core/uverbs.h"
    },
    {
      "type": "modify",
      "old_id": "403dd811ec7f97e666ac496cf4f8a627f1954b0f",
      "old_mode": 33188,
      "old_path": "drivers/infiniband/core/uverbs_cmd.c",
      "new_id": "76bf61e9b552424e37347b7cd52a3e92bff30ed5",
      "new_mode": 33188,
      "new_path": "drivers/infiniband/core/uverbs_cmd.c"
    },
    {
      "type": "modify",
      "old_id": "ff092a0a94da0ebf77967dbeef73da9d2943ec8c",
      "old_mode": 33188,
      "old_path": "drivers/infiniband/core/uverbs_main.c",
      "new_id": "5ec2d49e9bb6ebae15bd88da1206e94d7f6eb860",
      "new_mode": 33188,
      "new_path": "drivers/infiniband/core/uverbs_main.c"
    },
    {
      "type": "modify",
      "old_id": "7ced208edacf81131aca4541c5419195e0320171",
      "old_mode": 33188,
      "old_path": "include/rdma/ib_verbs.h",
      "new_id": "ee1f3a355666dbddaa388fc3d613bc329c24c9d3",
      "new_mode": 33188,
      "new_path": "include/rdma/ib_verbs.h"
    }
  ]
}
