From: Leon Romanovsky <leonro@xxxxxxxxxxxx> Changelog: Jason, despite you desire to allow port=0, I didn't find it is exciting to do such change in -rc7 and left it as is. v5->v6: * Fixed next-id kernel-doc comment * Delete irrelevant comments from res_get_common_dumpit() * Converion to per-type XArray allows us to replace rwsem lock in favour of xa_lock() * Don't expose number of not-visible entries * Fix regression in cx-3 device introduced by patch with .doit callback. Resources were presented for one port only. * Created private to core restrack.h file. v4->v5: * Removed fill_res_entry from rdam_restrack_root - rebase error * Removed irrelevant comment from rwsem * Deleted set_type/res_to_id helpers * Unfold fill_res_to_id() * Removed get XA helper v3->v4: * Changed lock/unlock to receive xarray to lock instead of ib_device * and restrack type. * Fixed spelling error in comment * Rebased on top of already accepted patches * Removed redundant xa_load check. * Squashed per-port/per-device separation patch v2->v3: * Rebased on to -rc4 * Removed special XA markings (RES_VISIBLE) * Dropped HW ID allocator for now. * Removed xa_is_err() check in *_byid() function * Reworded commit messages to reflect changes * Fixed compilation warning due to my changes to rdmavt v1->v2: * Dropped HW ID allocator for now. * Removed xa_is_err() check in *_byid() function * Reworded commit messages to reflect changes * Fixed compilation warning due to my changes to rdmavt v1->v2: * Added "Fortify .." atch, it helps to find uninitialized paths * Rewrote ".doit" patch v0->v1: * Don't set mark in case restrack entry failed to be added * Fix typos * Move kdoc comments from restrack.h to restrack.c * Rewrote user/kernel marking patch to drop xa_set_mark in favour of "user" field * Fixed two panics with uninitialized values, one for QPs and another for ibdev in CM_ID ----------------------------------------------------------------------------- This part converts internal restrack DB implementation from hash-based to be XArray-based. Such change is needed to allow access per specific index for .doit callbacks. In addition, such index will provide ability to bind/unbind counters to specific QPs, provide valuable debug information about parent object (e.g. PD of specific QP, or context of specific PD) and get list of objects connected to specific context. Thanks Leon Romanovsky (10): RDMA/restrack: Convert internal DB from hash to XArray RDMA/restrack: Translate from ID to restrack object RDMA/nldev: Add resource tracker doit callback RDMA/restrack: Reduce scope of synchronization lock while updating DB RDMA/restrack: Hide restrack DB from IB/core RDMA/restrack: Prepare restrack_root to addition of extra fields per-type RDMA/nldev: Share with user-space object IDs RDMA/nldev: Provide parent IDs for PD, MR and QP objects RDMA/nldev: Connect QP number to .doit callback RDMA/nldev: Don't expose number of not-visible entries drivers/infiniband/core/device.c | 6 +- drivers/infiniband/core/nldev.c | 277 ++++++++++++++++++++--------- drivers/infiniband/core/restrack.c | 175 +++++++++++++----- drivers/infiniband/core/restrack.h | 28 +++ include/rdma/ib_verbs.h | 7 +- include/rdma/restrack.h | 32 +--- include/uapi/rdma/rdma_netlink.h | 10 ++ 7 files changed, 373 insertions(+), 162 deletions(-) create mode 100644 drivers/infiniband/core/restrack.h -- 2.19.1