diff options
author | Leon Romanovsky <leonro@mellanox.com> | 2019-02-18 22:25:44 +0200 |
---|---|---|
committer | Jason Gunthorpe <jgg@mellanox.com> | 2019-02-18 21:04:36 -0700 |
commit | 18c4c66f76d99df89ad682ba25bafb9227e8ec30 (patch) | |
tree | 78a0d4190c3e416bda0a1ff4cc372c1d4fd70b6e /drivers/infiniband/core/restrack.c | |
parent | fd47c2f99f04249d1ba82c422d1818dcbe193908 (diff) | |
download | linux-stable-18c4c66f76d99df89ad682ba25bafb9227e8ec30.tar.gz linux-stable-18c4c66f76d99df89ad682ba25bafb9227e8ec30.tar.bz2 linux-stable-18c4c66f76d99df89ad682ba25bafb9227e8ec30.zip |
RDMA/restrack: Translate from ID to restrack object
Add new general helper to get restrack entry given by ID and their
respective type.
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Diffstat (limited to 'drivers/infiniband/core/restrack.c')
-rw-r--r-- | drivers/infiniband/core/restrack.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/infiniband/core/restrack.c b/drivers/infiniband/core/restrack.c index b4f302811858..ac97167da81c 100644 --- a/drivers/infiniband/core/restrack.c +++ b/drivers/infiniband/core/restrack.c @@ -256,6 +256,31 @@ int __must_check rdma_restrack_get(struct rdma_restrack_entry *res) } EXPORT_SYMBOL(rdma_restrack_get); +/** + * 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) +{ + struct rdma_restrack_root *rt = &dev->res; + struct rdma_restrack_entry *res; + + down_read(&dev->res.rwsem); + res = xa_load(&rt->xa[type], id); + if (!res || !rdma_restrack_get(res)) + res = ERR_PTR(-ENOENT); + up_read(&dev->res.rwsem); + + return res; +} +EXPORT_SYMBOL(rdma_restrack_get_byid); + static void restrack_release(struct kref *kref) { struct rdma_restrack_entry *res; |