Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

RDMA/restrack: Add support to get resource tracking for SRQ

In order to track SRQ resources, a new restrack object is initialized and
added to the resource tracking database.

Link: https://lore.kernel.org/r/0db71c409f24f2f6b019bf8797a8fed96fe7079c.1618753110.git.leonro@nvidia.com
Signed-off-by: Neta Ostrovsky <netao@nvidia.com>
Reviewed-by: Mark Zhang <markzhang@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>

authored by

Neta Ostrovsky and committed by
Jason Gunthorpe
48f8a70e 12ce208f

+19
+3
drivers/infiniband/core/restrack.c
··· 47 47 [RDMA_RESTRACK_MR] = "MR", 48 48 [RDMA_RESTRACK_CTX] = "CTX", 49 49 [RDMA_RESTRACK_COUNTER] = "COUNTER", 50 + [RDMA_RESTRACK_SRQ] = "SRQ", 50 51 }; 51 52 52 53 return names[type]; ··· 142 141 return container_of(res, struct ib_ucontext, res)->device; 143 142 case RDMA_RESTRACK_COUNTER: 144 143 return container_of(res, struct rdma_counter, res)->device; 144 + case RDMA_RESTRACK_SRQ: 145 + return container_of(res, struct ib_srq, res)->device; 145 146 default: 146 147 WARN_ONCE(true, "Wrong resource tracking type %u\n", res->type); 147 148 return NULL;
+7
drivers/infiniband/core/verbs.c
··· 1039 1039 } 1040 1040 atomic_inc(&pd->usecnt); 1041 1041 1042 + rdma_restrack_new(&srq->res, RDMA_RESTRACK_SRQ); 1043 + rdma_restrack_parent_name(&srq->res, &pd->res); 1044 + 1042 1045 ret = pd->device->ops.create_srq(srq, srq_init_attr, udata); 1043 1046 if (ret) { 1047 + rdma_restrack_put(&srq->res); 1044 1048 atomic_dec(&srq->pd->usecnt); 1045 1049 if (srq->srq_type == IB_SRQT_XRC) 1046 1050 atomic_dec(&srq->ext.xrc.xrcd->usecnt); ··· 1053 1049 kfree(srq); 1054 1050 return ERR_PTR(ret); 1055 1051 } 1052 + 1053 + rdma_restrack_add(&srq->res); 1056 1054 1057 1055 return srq; 1058 1056 } ··· 1094 1088 atomic_dec(&srq->ext.xrc.xrcd->usecnt); 1095 1089 if (ib_srq_has_cq(srq->srq_type)) 1096 1090 atomic_dec(&srq->ext.cq->usecnt); 1091 + rdma_restrack_del(&srq->res); 1097 1092 kfree(srq); 1098 1093 1099 1094 return ret;
+5
include/rdma/ib_verbs.h
··· 1610 1610 } xrc; 1611 1611 }; 1612 1612 } ext; 1613 + 1614 + /* 1615 + * Implementation details of the RDMA core, don't use in drivers: 1616 + */ 1617 + struct rdma_restrack_entry res; 1613 1618 }; 1614 1619 1615 1620 enum ib_raw_packet_caps {
+4
include/rdma/restrack.h
··· 50 50 */ 51 51 RDMA_RESTRACK_COUNTER, 52 52 /** 53 + * @RDMA_RESTRACK_SRQ: Shared receive queue (SRQ) 54 + */ 55 + RDMA_RESTRACK_SRQ, 56 + /** 53 57 * @RDMA_RESTRACK_MAX: Last entry, used for array dclarations 54 58 */ 55 59 RDMA_RESTRACK_MAX