From: Leon Romanovsky <leonro@xxxxxxxxxxxx> Add new general helper to get restrack entry given by ID and their respective type. Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> --- drivers/infiniband/core/restrack.c | 14 ++++++++++++++ include/rdma/restrack.h | 11 +++++++++++ 2 files changed, 25 insertions(+) diff --git a/drivers/infiniband/core/restrack.c b/drivers/infiniband/core/restrack.c index a4f0432cf774..59bb6617a805 100644 --- a/drivers/infiniband/core/restrack.c +++ b/drivers/infiniband/core/restrack.c @@ -248,6 +248,20 @@ int __must_check rdma_restrack_get(struct rdma_restrack_entry *res) } EXPORT_SYMBOL(rdma_restrack_get); +struct rdma_restrack_entry * +rdma_restrack_get_byid(struct ib_device *dev, + enum rdma_restrack_type type, u32 id) +{ + struct rdma_restrack_root *rt = &dev->res; + struct rdma_restrack_entry *res; + + res = xa_load(&rt->xa[type], id); + if (!res || xa_is_err(res) || !rdma_restrack_get(res)) + return ERR_PTR(-ENOENT); + return res; +} +EXPORT_SYMBOL(rdma_restrack_get_byid); + static void restrack_release(struct kref *kref) { struct rdma_restrack_entry *res; diff --git a/include/rdma/restrack.h b/include/rdma/restrack.h index d8d7ea48a91b..fc433d54aad2 100644 --- a/include/rdma/restrack.h +++ b/include/rdma/restrack.h @@ -194,4 +194,15 @@ int rdma_nl_put_driver_u32_hex(struct sk_buff *msg, const char *name, int rdma_nl_put_driver_u64(struct sk_buff *msg, const char *name, u64 value); int rdma_nl_put_driver_u64_hex(struct sk_buff *msg, const char *name, u64 value); +/** + * rdma_restrack_get_byid() - translate from ID to restrack object + * @dev: IB device + * @type: resource track type + * @id: ID to take a look + * + * Return: Pointer to restrack entry or -ENOENT in case of error. + */ +struct rdma_restrack_entry *rdma_restrack_get_byid(struct ib_device *dev, + enum rdma_restrack_type type, + u32 id); #endif /* _RDMA_RESTRACK_H_ */ -- 2.19.1