]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/rdmavt: Add ucontext alloc/dealloc passthrough
authorDean Luick <dean.luick@cornelisnetworks.com>
Wed, 11 Mar 2026 17:28:03 +0000 (13:28 -0400)
committerLeon Romanovsky <leon@kernel.org>
Wed, 11 Mar 2026 19:17:28 +0000 (15:17 -0400)
Add a private data pointer to the ucontext structure and add
per-client pass-throughs.

Signed-off-by: Dean Luick <dean.luick@cornelisnetworks.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
Link: https://patch.msgid.link/177325008318.52243.7367786996925601681.stgit@awdrv-04.cornelisnetworks.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/sw/rdmavt/vt.c
include/rdma/rdma_vt.h

index 0c28b412d81a43908acc66d2572a91d9a8c6f3e6..033d8932aff161c1e96fce51a983b5897c968eb5 100644 (file)
@@ -244,6 +244,10 @@ static int rvt_query_gid(struct ib_device *ibdev, u32 port_num,
  */
 static int rvt_alloc_ucontext(struct ib_ucontext *uctx, struct ib_udata *udata)
 {
+       struct rvt_dev_info *rdi = ib_to_rvt(uctx->device);
+
+       if (rdi->driver_f.alloc_ucontext)
+               return rdi->driver_f.alloc_ucontext(uctx, udata);
        return 0;
 }
 
@@ -253,6 +257,10 @@ static int rvt_alloc_ucontext(struct ib_ucontext *uctx, struct ib_udata *udata)
  */
 static void rvt_dealloc_ucontext(struct ib_ucontext *context)
 {
+       struct rvt_dev_info *rdi = ib_to_rvt(context->device);
+
+       if (rdi->driver_f.dealloc_ucontext)
+               rdi->driver_f.dealloc_ucontext(context);
        return;
 }
 
index c429d6ddb1292efbb4297085c09fad927095fad0..8671c6da16bb29bd3469a992c0d3bb4f02d8c751 100644 (file)
@@ -149,6 +149,7 @@ struct rvt_driver_params {
 /* User context */
 struct rvt_ucontext {
        struct ib_ucontext ibucontext;
+       void *priv;
 };
 
 /* Protection domain */
@@ -359,6 +360,12 @@ struct rvt_driver_provided {
 
        /* Get and return CPU to pin CQ processing thread */
        int (*comp_vect_cpu_lookup)(struct rvt_dev_info *rdi, int comp_vect);
+
+       /* allocate a ucontext */
+       int (*alloc_ucontext)(struct ib_ucontext *uctx, struct ib_udata *udata);
+
+       /* deallocate a ucontext */
+       void (*dealloc_ucontext)(struct ib_ucontext *context);
 };
 
 struct rvt_dev_info {