All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH rdma-next v3] RDMA/mana_ib: Adopt robust udata
@ 2026-07-14 12:31 Konstantin Taranov
  2026-07-15  8:07 ` Leon Romanovsky
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Konstantin Taranov @ 2026-07-14 12:31 UTC (permalink / raw)
  To: kotaranov, longli, jgg, leon; +Cc: linux-rdma, linux-kernel

From: Konstantin Taranov <kotaranov@microsoft.com>

Enable the uverbs robust udata interface in mana_ib by setting
uverbs_robust_udata and converting the driver to the new udata
handling model.

Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com>
---
v3: use ib_no_udata_io
v2: Removed the udata request for alloc ucontext
 drivers/infiniband/hw/mana/cq.c     |  8 +++++-
 drivers/infiniband/hw/mana/device.c |  1 +
 drivers/infiniband/hw/mana/main.c   | 29 ++++++++++++++++------
 drivers/infiniband/hw/mana/mr.c     | 13 ++++++++++
 drivers/infiniband/hw/mana/qp.c     | 38 +++++++++++++++++++++++------
 drivers/infiniband/hw/mana/wq.c     | 12 +++++++++
 include/uapi/rdma/mana-abi.h        |  2 +-
 7 files changed, 86 insertions(+), 17 deletions(-)

diff --git a/drivers/infiniband/hw/mana/cq.c b/drivers/infiniband/hw/mana/cq.c
index f2547989f..d4e5e3f91 100644
--- a/drivers/infiniband/hw/mana/cq.c
+++ b/drivers/infiniband/hw/mana/cq.c
@@ -27,7 +27,8 @@ int mana_ib_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
 	is_rnic_cq = mana_ib_is_rnic(mdev);
 
 	if (udata) {
-		err = ib_copy_validate_udata_in(udata, ucmd, buf_addr);
+		err = ib_copy_validate_udata_in_cm(udata, ucmd, buf_addr,
+						   MANA_IB_CREATE_RNIC_CQ);
 		if (err)
 			return err;
 
@@ -105,6 +106,11 @@ int mana_ib_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata)
 	struct mana_ib_cq *cq = container_of(ibcq, struct mana_ib_cq, ibcq);
 	struct ib_device *ibdev = ibcq->device;
 	struct mana_ib_dev *mdev;
+	int err;
+
+	err = ib_no_udata_io(udata);
+	if (err)
+		return err;
 
 	mdev = container_of(ibdev, struct mana_ib_dev, ib_dev);
 
diff --git a/drivers/infiniband/hw/mana/device.c b/drivers/infiniband/hw/mana/device.c
index 9811570ab..a8d19586a 100644
--- a/drivers/infiniband/hw/mana/device.c
+++ b/drivers/infiniband/hw/mana/device.c
@@ -15,6 +15,7 @@ static const struct ib_device_ops mana_ib_dev_ops = {
 	.owner = THIS_MODULE,
 	.driver_id = RDMA_DRIVER_MANA,
 	.uverbs_abi_ver = MANA_IB_UVERBS_ABI_VERSION,
+	.uverbs_robust_udata = true,
 
 	.add_gid = mana_ib_gd_add_gid,
 	.alloc_mw = mana_ib_alloc_mw,
diff --git a/drivers/infiniband/hw/mana/main.c b/drivers/infiniband/hw/mana/main.c
index efe2935bd..e645b7637 100644
--- a/drivers/infiniband/hw/mana/main.c
+++ b/drivers/infiniband/hw/mana/main.c
@@ -101,6 +101,10 @@ int mana_ib_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
 	struct gdma_context *gc;
 	int err;
 
+	err = ib_no_udata_io(udata);
+	if (err)
+		return err;
+
 	dev = container_of(ibdev, struct mana_ib_dev, ib_dev);
 	gc = mdev_to_gc(dev);
 
@@ -133,6 +137,11 @@ int mana_ib_dealloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
 	struct gdma_destroy_pd_req req = {};
 	struct mana_ib_dev *dev;
 	struct gdma_context *gc;
+	int err;
+
+	err = ib_no_udata_io(udata);
+	if (err)
+		return err;
 
 	dev = container_of(ibdev, struct mana_ib_dev, ib_dev);
 	gc = mdev_to_gc(dev);
@@ -142,7 +151,11 @@ int mana_ib_dealloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
 
 	req.pd_handle = pd->pd_handle;
 
-	return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
+	err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
+	if (err)
+		return err;
+
+	return 0;
 }
 
 static int mana_gd_destroy_doorbell_page(struct gdma_context *gc,
@@ -198,17 +211,17 @@ int mana_ib_alloc_ucontext(struct ib_ucontext *ibcontext,
 	int doorbell_page;
 	int ret;
 
+	ret = ib_no_udata_io(udata);
+	if (ret)
+		return ret;
+
 	mdev = container_of(ibdev, struct mana_ib_dev, ib_dev);
 	gc = mdev_to_gc(mdev);
 
 	/* Allocate a doorbell page index */
 	ret = mana_gd_allocate_doorbell_page(gc, &doorbell_page);
-	if (ret) {
-		ibdev_dbg(ibdev, "Failed to allocate doorbell page %d\n", ret);
+	if (ret)
 		return ret;
-	}
-
-	ibdev_dbg(ibdev, "Doorbell page allocated %d\n", doorbell_page);
 
 	ucontext->doorbell = doorbell_page;
 
@@ -575,7 +588,7 @@ int mana_ib_query_device(struct ib_device *ibdev, struct ib_device_attr *props,
 	struct pci_dev *pdev = to_pci_dev(mdev_to_gc(dev)->dev);
 	int err;
 
-	err = ib_is_udata_in_empty(uhw);
+	err = ib_no_udata_io(uhw);
 	if (err)
 		return err;
 
@@ -605,7 +618,7 @@ int mana_ib_query_device(struct ib_device *ibdev, struct ib_device_attr *props,
 	if (!mana_ib_is_rnic(dev))
 		props->raw_packet_caps = IB_RAW_PACKET_CAP_IP_CSUM;
 
-	return ib_respond_empty_udata(uhw);
+	return 0;
 }
 
 int mana_ib_query_port(struct ib_device *ibdev, u32 port,
diff --git a/drivers/infiniband/hw/mana/mr.c b/drivers/infiniband/hw/mana/mr.c
index 030bfdcff..1233685b4 100644
--- a/drivers/infiniband/hw/mana/mr.c
+++ b/drivers/infiniband/hw/mana/mr.c
@@ -113,6 +113,10 @@ struct ib_mr *mana_ib_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 length,
 	if (dmah)
 		return ERR_PTR(-EOPNOTSUPP);
 
+	err = ib_no_udata_io(udata);
+	if (err)
+		return ERR_PTR(err);
+
 	dev = container_of(ibdev, struct mana_ib_dev, ib_dev);
 
 	ibdev_dbg(ibdev,
@@ -327,6 +331,11 @@ int mana_ib_alloc_mw(struct ib_mw *ibmw, struct ib_udata *udata)
 {
 	struct mana_ib_dev *mdev = container_of(ibmw->device, struct mana_ib_dev, ib_dev);
 	struct mana_ib_pd *pd = container_of(ibmw->pd, struct mana_ib_pd, ibpd);
+	int err;
+
+	err = ib_no_udata_io(udata);
+	if (err)
+		return err;
 
 	return mana_ib_gd_create_mw(mdev, pd, ibmw);
 }
@@ -346,6 +355,10 @@ int mana_ib_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata)
 	struct mana_ib_dev *dev;
 	int err;
 
+	err = ib_no_udata_io(udata);
+	if (err)
+		return err;
+
 	dev = container_of(ibdev, struct mana_ib_dev, ib_dev);
 
 	err = mana_ib_gd_destroy_mr(dev, mr->mr_handle);
diff --git a/drivers/infiniband/hw/mana/qp.c b/drivers/infiniband/hw/mana/qp.c
index 60926f39a..b5ff07e34 100644
--- a/drivers/infiniband/hw/mana/qp.c
+++ b/drivers/infiniband/hw/mana/qp.c
@@ -651,10 +651,8 @@ static int mana_ib_create_ud_qp(struct ib_qp *ibqp, struct ib_pd *ibpd,
 	u32 doorbell, queue_size;
 	int i, err;
 
-	if (udata) {
-		ibdev_dbg(&mdev->ib_dev, "User-level UD QPs are not supported\n");
+	if (udata)
 		return -EOPNOTSUPP;
-	}
 
 	for (i = 0; i < MANA_UD_QUEUE_TYPE_MAX; ++i) {
 		queue_size = mana_ib_queue_size(attr, i);
@@ -745,6 +743,11 @@ static int mana_ib_gd_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
 	struct gdma_context *gc = mdev_to_gc(mdev);
 	struct mana_port_context *mpc;
 	struct net_device *ndev;
+	int err;
+
+	err = ib_no_udata_io(udata);
+	if (err)
+		return err;
 
 	mana_gd_init_req_hdr(&req.hdr, MANA_IB_SET_QP_STATE, sizeof(req), sizeof(resp));
 
@@ -797,7 +800,11 @@ static int mana_ib_gd_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
 		req.ah_attr.flow_label = attr->ah_attr.grh.flow_label;
 	}
 
-	return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
+	err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
+	if (err)
+		return err;
+
+	return 0;
 }
 
 int mana_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
@@ -826,7 +833,11 @@ static int mana_ib_destroy_qp_rss(struct mana_ib_qp *qp,
 	struct mana_ib_pd *pd;
 	struct mana_ib_wq *wq;
 	struct ib_wq *ibwq;
-	int i;
+	int i, err;
+
+	err = ib_no_udata_io(udata);
+	if (err)
+		return err;
 
 	ndev = mana_ib_get_netdev(qp->ibqp.device, qp->port);
 	mpc = netdev_priv(ndev);
@@ -872,6 +883,11 @@ static int mana_ib_destroy_qp_raw(struct mana_ib_qp *qp, struct ib_udata *udata)
 	struct mana_port_context *mpc;
 	struct net_device *ndev;
 	struct mana_ib_pd *pd;
+	int err;
+
+	err = ib_no_udata_io(udata);
+	if (err)
+		return err;
 
 	ndev = mana_ib_get_netdev(qp->ibqp.device, qp->port);
 	mpc = netdev_priv(ndev);
@@ -890,7 +906,11 @@ static int mana_ib_destroy_rc_qp(struct mana_ib_qp *qp, struct ib_udata *udata)
 {
 	struct mana_ib_dev *mdev =
 		container_of(qp->ibqp.device, struct mana_ib_dev, ib_dev);
-	int i;
+	int i, err;
+
+	err = ib_no_udata_io(udata);
+	if (err)
+		return err;
 
 	mana_table_remove_qp(mdev, qp);
 
@@ -908,7 +928,11 @@ static int mana_ib_destroy_ud_qp(struct mana_ib_qp *qp, struct ib_udata *udata)
 {
 	struct mana_ib_dev *mdev =
 		container_of(qp->ibqp.device, struct mana_ib_dev, ib_dev);
-	int i;
+	int i, err;
+
+	err = ib_no_udata_io(udata);
+	if (err)
+		return err;
 
 	mana_remove_qp_from_cqs(qp);
 	mana_table_remove_qp(mdev, qp);
diff --git a/drivers/infiniband/hw/mana/wq.c b/drivers/infiniband/hw/mana/wq.c
index 5c2134a0b..6b066d605 100644
--- a/drivers/infiniband/hw/mana/wq.c
+++ b/drivers/infiniband/hw/mana/wq.c
@@ -55,6 +55,11 @@ int mana_ib_destroy_wq(struct ib_wq *ibwq, struct ib_udata *udata)
 	struct mana_ib_wq *wq = container_of(ibwq, struct mana_ib_wq, ibwq);
 	struct ib_device *ib_dev = ibwq->device;
 	struct mana_ib_dev *mdev;
+	int err;
+
+	err = ib_no_udata_io(udata);
+	if (err)
+		return err;
 
 	mdev = container_of(ib_dev, struct mana_ib_dev, ib_dev);
 
@@ -69,10 +74,17 @@ int mana_ib_create_rwq_ind_table(struct ib_rwq_ind_table *ib_rwq_ind_table,
 				 struct ib_rwq_ind_table_init_attr *init_attr,
 				 struct ib_udata *udata)
 {
+	int err;
+
+	err = ib_no_udata_io(udata);
+	if (err)
+		return err;
+
 	/*
 	 * There is no additional data in ind_table to be maintained by this
 	 * driver, do nothing
 	 */
+
 	return 0;
 }
 
diff --git a/include/uapi/rdma/mana-abi.h b/include/uapi/rdma/mana-abi.h
index a75bf32b8..8336bf51b 100644
--- a/include/uapi/rdma/mana-abi.h
+++ b/include/uapi/rdma/mana-abi.h
@@ -25,7 +25,7 @@ enum mana_ib_create_cq_flags {
 
 struct mana_ib_create_cq {
 	__aligned_u64 buf_addr;
-	__u16	flags;
+	__u16	comp_mask;
 	__u16	reserved0;
 	__u32	reserved1;
 };
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH rdma-next v3] RDMA/mana_ib: Adopt robust udata
  2026-07-14 12:31 [PATCH rdma-next v3] RDMA/mana_ib: Adopt robust udata Konstantin Taranov
@ 2026-07-15  8:07 ` Leon Romanovsky
  2026-07-15  8:23   ` Konstantin Taranov
  2026-07-16  8:48 ` Leon Romanovsky
  2026-07-16  9:16 ` Leon Romanovsky
  2 siblings, 1 reply; 7+ messages in thread
From: Leon Romanovsky @ 2026-07-15  8:07 UTC (permalink / raw)
  To: Konstantin Taranov; +Cc: kotaranov, longli, jgg, linux-rdma, linux-kernel

On Tue, Jul 14, 2026 at 05:31:13AM -0700, Konstantin Taranov wrote:
> From: Konstantin Taranov <kotaranov@microsoft.com>
> 
> Enable the uverbs robust udata interface in mana_ib by setting
> uverbs_robust_udata and converting the driver to the new udata
> handling model.
> 
> Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com>
> ---
> v3: use ib_no_udata_io
> v2: Removed the udata request for alloc ucontext
>  drivers/infiniband/hw/mana/cq.c     |  8 +++++-
>  drivers/infiniband/hw/mana/device.c |  1 +
>  drivers/infiniband/hw/mana/main.c   | 29 ++++++++++++++++------
>  drivers/infiniband/hw/mana/mr.c     | 13 ++++++++++
>  drivers/infiniband/hw/mana/qp.c     | 38 +++++++++++++++++++++++------
>  drivers/infiniband/hw/mana/wq.c     | 12 +++++++++
>  include/uapi/rdma/mana-abi.h        |  2 +-
>  7 files changed, 86 insertions(+), 17 deletions(-)

<...>

> diff --git a/include/uapi/rdma/mana-abi.h b/include/uapi/rdma/mana-abi.h
> index a75bf32b8..8336bf51b 100644
> --- a/include/uapi/rdma/mana-abi.h
> +++ b/include/uapi/rdma/mana-abi.h
> @@ -25,7 +25,7 @@ enum mana_ib_create_cq_flags {
>  
>  struct mana_ib_create_cq {
>  	__aligned_u64 buf_addr;
> -	__u16	flags;
> +	__u16	comp_mask;

This change is unrelated to the patch.

Thanks

>  	__u16	reserved0;
>  	__u32	reserved1;
>  };
> -- 
> 2.43.0
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH rdma-next v3] RDMA/mana_ib: Adopt robust udata
  2026-07-15  8:07 ` Leon Romanovsky
@ 2026-07-15  8:23   ` Konstantin Taranov
  0 siblings, 0 replies; 7+ messages in thread
From: Konstantin Taranov @ 2026-07-15  8:23 UTC (permalink / raw)
  To: Leon Romanovsky, Konstantin Taranov
  Cc: Long Li, jgg@ziepe.ca, linux-rdma@vger.kernel.org,
	linux-kernel@vger.kernel.org

> 
> > diff --git a/include/uapi/rdma/mana-abi.h
> > b/include/uapi/rdma/mana-abi.h index a75bf32b8..8336bf51b 100644
> > --- a/include/uapi/rdma/mana-abi.h
> > +++ b/include/uapi/rdma/mana-abi.h
> > @@ -25,7 +25,7 @@ enum mana_ib_create_cq_flags {
> >
> >  struct mana_ib_create_cq {
> >  	__aligned_u64 buf_addr;
> > -	__u16	flags;
> > +	__u16	comp_mask;
> 
> This change is unrelated to the patch.

It is related. It was done for this change:
-		err = ib_copy_validate_udata_in(udata, ucmd, buf_addr);
+		err = ib_copy_validate_udata_in_cm(udata, ucmd, buf_addr,
+						   MANA_IB_CREATE_RNIC_CQ);

The helper ib_copy_validate_udata_in_cm() expects that field to be named comp_mask.
This helper was used to ensure that the kernel processes only known flags.
So if we add another flag, the old kernel should fail it. ib_copy_validate_udata_in() was not checking the
supported flags.
My understanding that enforcing strict checks is a requirement for the robust udata.
I have also updated the rdma-core PR that renames flags to comp_mask.

Konstantin
> 
> Thanks
> 
> >  	__u16	reserved0;
> >  	__u32	reserved1;
> >  };
> > --
> > 2.43.0
> >

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH rdma-next v3] RDMA/mana_ib: Adopt robust udata
  2026-07-14 12:31 [PATCH rdma-next v3] RDMA/mana_ib: Adopt robust udata Konstantin Taranov
  2026-07-15  8:07 ` Leon Romanovsky
@ 2026-07-16  8:48 ` Leon Romanovsky
  2026-07-16  8:56   ` [EXTERNAL] " Konstantin Taranov
  2026-07-16  9:16 ` Leon Romanovsky
  2 siblings, 1 reply; 7+ messages in thread
From: Leon Romanovsky @ 2026-07-16  8:48 UTC (permalink / raw)
  To: Konstantin Taranov; +Cc: kotaranov, longli, jgg, linux-rdma, linux-kernel

On Tue, Jul 14, 2026 at 05:31:13AM -0700, Konstantin Taranov wrote:
> From: Konstantin Taranov <kotaranov@microsoft.com>
> 
> Enable the uverbs robust udata interface in mana_ib by setting
> uverbs_robust_udata and converting the driver to the new udata
> handling model.

Why didn't you set ".uverbs_robust_udata = true" in this patch?

Thanks

> 
> Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com>
> ---
> v3: use ib_no_udata_io
> v2: Removed the udata request for alloc ucontext
>  drivers/infiniband/hw/mana/cq.c     |  8 +++++-
>  drivers/infiniband/hw/mana/device.c |  1 +
>  drivers/infiniband/hw/mana/main.c   | 29 ++++++++++++++++------
>  drivers/infiniband/hw/mana/mr.c     | 13 ++++++++++
>  drivers/infiniband/hw/mana/qp.c     | 38 +++++++++++++++++++++++------
>  drivers/infiniband/hw/mana/wq.c     | 12 +++++++++
>  include/uapi/rdma/mana-abi.h        |  2 +-
>  7 files changed, 86 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/mana/cq.c b/drivers/infiniband/hw/mana/cq.c
> index f2547989f..d4e5e3f91 100644
> --- a/drivers/infiniband/hw/mana/cq.c
> +++ b/drivers/infiniband/hw/mana/cq.c
> @@ -27,7 +27,8 @@ int mana_ib_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
>  	is_rnic_cq = mana_ib_is_rnic(mdev);
>  
>  	if (udata) {
> -		err = ib_copy_validate_udata_in(udata, ucmd, buf_addr);
> +		err = ib_copy_validate_udata_in_cm(udata, ucmd, buf_addr,
> +						   MANA_IB_CREATE_RNIC_CQ);
>  		if (err)
>  			return err;
>  
> @@ -105,6 +106,11 @@ int mana_ib_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata)
>  	struct mana_ib_cq *cq = container_of(ibcq, struct mana_ib_cq, ibcq);
>  	struct ib_device *ibdev = ibcq->device;
>  	struct mana_ib_dev *mdev;
> +	int err;
> +
> +	err = ib_no_udata_io(udata);
> +	if (err)
> +		return err;
>  
>  	mdev = container_of(ibdev, struct mana_ib_dev, ib_dev);
>  
> diff --git a/drivers/infiniband/hw/mana/device.c b/drivers/infiniband/hw/mana/device.c
> index 9811570ab..a8d19586a 100644
> --- a/drivers/infiniband/hw/mana/device.c
> +++ b/drivers/infiniband/hw/mana/device.c
> @@ -15,6 +15,7 @@ static const struct ib_device_ops mana_ib_dev_ops = {
>  	.owner = THIS_MODULE,
>  	.driver_id = RDMA_DRIVER_MANA,
>  	.uverbs_abi_ver = MANA_IB_UVERBS_ABI_VERSION,
> +	.uverbs_robust_udata = true,
>  
>  	.add_gid = mana_ib_gd_add_gid,
>  	.alloc_mw = mana_ib_alloc_mw,
> diff --git a/drivers/infiniband/hw/mana/main.c b/drivers/infiniband/hw/mana/main.c
> index efe2935bd..e645b7637 100644
> --- a/drivers/infiniband/hw/mana/main.c
> +++ b/drivers/infiniband/hw/mana/main.c
> @@ -101,6 +101,10 @@ int mana_ib_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
>  	struct gdma_context *gc;
>  	int err;
>  
> +	err = ib_no_udata_io(udata);
> +	if (err)
> +		return err;
> +
>  	dev = container_of(ibdev, struct mana_ib_dev, ib_dev);
>  	gc = mdev_to_gc(dev);
>  
> @@ -133,6 +137,11 @@ int mana_ib_dealloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
>  	struct gdma_destroy_pd_req req = {};
>  	struct mana_ib_dev *dev;
>  	struct gdma_context *gc;
> +	int err;
> +
> +	err = ib_no_udata_io(udata);
> +	if (err)
> +		return err;
>  
>  	dev = container_of(ibdev, struct mana_ib_dev, ib_dev);
>  	gc = mdev_to_gc(dev);
> @@ -142,7 +151,11 @@ int mana_ib_dealloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
>  
>  	req.pd_handle = pd->pd_handle;
>  
> -	return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
> +	err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
> +	if (err)
> +		return err;
> +
> +	return 0;
>  }
>  
>  static int mana_gd_destroy_doorbell_page(struct gdma_context *gc,
> @@ -198,17 +211,17 @@ int mana_ib_alloc_ucontext(struct ib_ucontext *ibcontext,
>  	int doorbell_page;
>  	int ret;
>  
> +	ret = ib_no_udata_io(udata);
> +	if (ret)
> +		return ret;
> +
>  	mdev = container_of(ibdev, struct mana_ib_dev, ib_dev);
>  	gc = mdev_to_gc(mdev);
>  
>  	/* Allocate a doorbell page index */
>  	ret = mana_gd_allocate_doorbell_page(gc, &doorbell_page);
> -	if (ret) {
> -		ibdev_dbg(ibdev, "Failed to allocate doorbell page %d\n", ret);
> +	if (ret)
>  		return ret;
> -	}
> -
> -	ibdev_dbg(ibdev, "Doorbell page allocated %d\n", doorbell_page);
>  
>  	ucontext->doorbell = doorbell_page;
>  
> @@ -575,7 +588,7 @@ int mana_ib_query_device(struct ib_device *ibdev, struct ib_device_attr *props,
>  	struct pci_dev *pdev = to_pci_dev(mdev_to_gc(dev)->dev);
>  	int err;
>  
> -	err = ib_is_udata_in_empty(uhw);
> +	err = ib_no_udata_io(uhw);
>  	if (err)
>  		return err;
>  
> @@ -605,7 +618,7 @@ int mana_ib_query_device(struct ib_device *ibdev, struct ib_device_attr *props,
>  	if (!mana_ib_is_rnic(dev))
>  		props->raw_packet_caps = IB_RAW_PACKET_CAP_IP_CSUM;
>  
> -	return ib_respond_empty_udata(uhw);
> +	return 0;
>  }
>  
>  int mana_ib_query_port(struct ib_device *ibdev, u32 port,
> diff --git a/drivers/infiniband/hw/mana/mr.c b/drivers/infiniband/hw/mana/mr.c
> index 030bfdcff..1233685b4 100644
> --- a/drivers/infiniband/hw/mana/mr.c
> +++ b/drivers/infiniband/hw/mana/mr.c
> @@ -113,6 +113,10 @@ struct ib_mr *mana_ib_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 length,
>  	if (dmah)
>  		return ERR_PTR(-EOPNOTSUPP);
>  
> +	err = ib_no_udata_io(udata);
> +	if (err)
> +		return ERR_PTR(err);
> +
>  	dev = container_of(ibdev, struct mana_ib_dev, ib_dev);
>  
>  	ibdev_dbg(ibdev,
> @@ -327,6 +331,11 @@ int mana_ib_alloc_mw(struct ib_mw *ibmw, struct ib_udata *udata)
>  {
>  	struct mana_ib_dev *mdev = container_of(ibmw->device, struct mana_ib_dev, ib_dev);
>  	struct mana_ib_pd *pd = container_of(ibmw->pd, struct mana_ib_pd, ibpd);
> +	int err;
> +
> +	err = ib_no_udata_io(udata);
> +	if (err)
> +		return err;
>  
>  	return mana_ib_gd_create_mw(mdev, pd, ibmw);
>  }
> @@ -346,6 +355,10 @@ int mana_ib_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata)
>  	struct mana_ib_dev *dev;
>  	int err;
>  
> +	err = ib_no_udata_io(udata);
> +	if (err)
> +		return err;
> +
>  	dev = container_of(ibdev, struct mana_ib_dev, ib_dev);
>  
>  	err = mana_ib_gd_destroy_mr(dev, mr->mr_handle);
> diff --git a/drivers/infiniband/hw/mana/qp.c b/drivers/infiniband/hw/mana/qp.c
> index 60926f39a..b5ff07e34 100644
> --- a/drivers/infiniband/hw/mana/qp.c
> +++ b/drivers/infiniband/hw/mana/qp.c
> @@ -651,10 +651,8 @@ static int mana_ib_create_ud_qp(struct ib_qp *ibqp, struct ib_pd *ibpd,
>  	u32 doorbell, queue_size;
>  	int i, err;
>  
> -	if (udata) {
> -		ibdev_dbg(&mdev->ib_dev, "User-level UD QPs are not supported\n");
> +	if (udata)
>  		return -EOPNOTSUPP;
> -	}
>  
>  	for (i = 0; i < MANA_UD_QUEUE_TYPE_MAX; ++i) {
>  		queue_size = mana_ib_queue_size(attr, i);
> @@ -745,6 +743,11 @@ static int mana_ib_gd_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
>  	struct gdma_context *gc = mdev_to_gc(mdev);
>  	struct mana_port_context *mpc;
>  	struct net_device *ndev;
> +	int err;
> +
> +	err = ib_no_udata_io(udata);
> +	if (err)
> +		return err;
>  
>  	mana_gd_init_req_hdr(&req.hdr, MANA_IB_SET_QP_STATE, sizeof(req), sizeof(resp));
>  
> @@ -797,7 +800,11 @@ static int mana_ib_gd_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
>  		req.ah_attr.flow_label = attr->ah_attr.grh.flow_label;
>  	}
>  
> -	return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
> +	err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
> +	if (err)
> +		return err;
> +
> +	return 0;
>  }
>  
>  int mana_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
> @@ -826,7 +833,11 @@ static int mana_ib_destroy_qp_rss(struct mana_ib_qp *qp,
>  	struct mana_ib_pd *pd;
>  	struct mana_ib_wq *wq;
>  	struct ib_wq *ibwq;
> -	int i;
> +	int i, err;
> +
> +	err = ib_no_udata_io(udata);
> +	if (err)
> +		return err;
>  
>  	ndev = mana_ib_get_netdev(qp->ibqp.device, qp->port);
>  	mpc = netdev_priv(ndev);
> @@ -872,6 +883,11 @@ static int mana_ib_destroy_qp_raw(struct mana_ib_qp *qp, struct ib_udata *udata)
>  	struct mana_port_context *mpc;
>  	struct net_device *ndev;
>  	struct mana_ib_pd *pd;
> +	int err;
> +
> +	err = ib_no_udata_io(udata);
> +	if (err)
> +		return err;
>  
>  	ndev = mana_ib_get_netdev(qp->ibqp.device, qp->port);
>  	mpc = netdev_priv(ndev);
> @@ -890,7 +906,11 @@ static int mana_ib_destroy_rc_qp(struct mana_ib_qp *qp, struct ib_udata *udata)
>  {
>  	struct mana_ib_dev *mdev =
>  		container_of(qp->ibqp.device, struct mana_ib_dev, ib_dev);
> -	int i;
> +	int i, err;
> +
> +	err = ib_no_udata_io(udata);
> +	if (err)
> +		return err;
>  
>  	mana_table_remove_qp(mdev, qp);
>  
> @@ -908,7 +928,11 @@ static int mana_ib_destroy_ud_qp(struct mana_ib_qp *qp, struct ib_udata *udata)
>  {
>  	struct mana_ib_dev *mdev =
>  		container_of(qp->ibqp.device, struct mana_ib_dev, ib_dev);
> -	int i;
> +	int i, err;
> +
> +	err = ib_no_udata_io(udata);
> +	if (err)
> +		return err;
>  
>  	mana_remove_qp_from_cqs(qp);
>  	mana_table_remove_qp(mdev, qp);
> diff --git a/drivers/infiniband/hw/mana/wq.c b/drivers/infiniband/hw/mana/wq.c
> index 5c2134a0b..6b066d605 100644
> --- a/drivers/infiniband/hw/mana/wq.c
> +++ b/drivers/infiniband/hw/mana/wq.c
> @@ -55,6 +55,11 @@ int mana_ib_destroy_wq(struct ib_wq *ibwq, struct ib_udata *udata)
>  	struct mana_ib_wq *wq = container_of(ibwq, struct mana_ib_wq, ibwq);
>  	struct ib_device *ib_dev = ibwq->device;
>  	struct mana_ib_dev *mdev;
> +	int err;
> +
> +	err = ib_no_udata_io(udata);
> +	if (err)
> +		return err;
>  
>  	mdev = container_of(ib_dev, struct mana_ib_dev, ib_dev);
>  
> @@ -69,10 +74,17 @@ int mana_ib_create_rwq_ind_table(struct ib_rwq_ind_table *ib_rwq_ind_table,
>  				 struct ib_rwq_ind_table_init_attr *init_attr,
>  				 struct ib_udata *udata)
>  {
> +	int err;
> +
> +	err = ib_no_udata_io(udata);
> +	if (err)
> +		return err;
> +
>  	/*
>  	 * There is no additional data in ind_table to be maintained by this
>  	 * driver, do nothing
>  	 */
> +
>  	return 0;
>  }
>  
> diff --git a/include/uapi/rdma/mana-abi.h b/include/uapi/rdma/mana-abi.h
> index a75bf32b8..8336bf51b 100644
> --- a/include/uapi/rdma/mana-abi.h
> +++ b/include/uapi/rdma/mana-abi.h
> @@ -25,7 +25,7 @@ enum mana_ib_create_cq_flags {
>  
>  struct mana_ib_create_cq {
>  	__aligned_u64 buf_addr;
> -	__u16	flags;
> +	__u16	comp_mask;
>  	__u16	reserved0;
>  	__u32	reserved1;
>  };
> -- 
> 2.43.0
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [EXTERNAL] Re: [PATCH rdma-next v3] RDMA/mana_ib: Adopt robust udata
  2026-07-16  8:48 ` Leon Romanovsky
@ 2026-07-16  8:56   ` Konstantin Taranov
  2026-07-16  9:12     ` Leon Romanovsky
  0 siblings, 1 reply; 7+ messages in thread
From: Konstantin Taranov @ 2026-07-16  8:56 UTC (permalink / raw)
  To: Leon Romanovsky, Konstantin Taranov
  Cc: Long Li, jgg@ziepe.ca, linux-rdma@vger.kernel.org,
	linux-kernel@vger.kernel.org

> From: Leon Romanovsky <leon@kernel.org>
> On Tue, Jul 14, 2026 at 05:31:13AM -0700, Konstantin Taranov wrote:
> > From: Konstantin Taranov <kotaranov@microsoft.com>
> >
> > Enable the uverbs robust udata interface in mana_ib by setting
> > uverbs_robust_udata and converting the driver to the new udata
> > handling model.
> 
> Why didn't you set ".uverbs_robust_udata = true" in this patch?

I did set. See the changes in drivers/infiniband/hw/mana/device.c

Thanks

> 
> Thanks
> 
> >
> > Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com>
> > ---
> > v3: use ib_no_udata_io
> > v2: Removed the udata request for alloc ucontext
> >  drivers/infiniband/hw/mana/cq.c     |  8 +++++-
> >  drivers/infiniband/hw/mana/device.c |  1 +
> >  drivers/infiniband/hw/mana/main.c   | 29 ++++++++++++++++------
> >  drivers/infiniband/hw/mana/mr.c     | 13 ++++++++++
> >  drivers/infiniband/hw/mana/qp.c     | 38 +++++++++++++++++++++++------
> >  drivers/infiniband/hw/mana/wq.c     | 12 +++++++++
> >  include/uapi/rdma/mana-abi.h        |  2 +-
> >  7 files changed, 86 insertions(+), 17 deletions(-)
> >
> > diff --git a/drivers/infiniband/hw/mana/cq.c
> > b/drivers/infiniband/hw/mana/cq.c index f2547989f..d4e5e3f91 100644
> > --- a/drivers/infiniband/hw/mana/cq.c
> > +++ b/drivers/infiniband/hw/mana/cq.c
> > @@ -27,7 +27,8 @@ int mana_ib_create_cq(struct ib_cq *ibcq, const struct
> ib_cq_init_attr *attr,
> >  	is_rnic_cq = mana_ib_is_rnic(mdev);
> >
> >  	if (udata) {
> > -		err = ib_copy_validate_udata_in(udata, ucmd, buf_addr);
> > +		err = ib_copy_validate_udata_in_cm(udata, ucmd, buf_addr,
> > +
> MANA_IB_CREATE_RNIC_CQ);
> >  		if (err)
> >  			return err;
> >
> > @@ -105,6 +106,11 @@ int mana_ib_destroy_cq(struct ib_cq *ibcq, struct
> ib_udata *udata)
> >  	struct mana_ib_cq *cq = container_of(ibcq, struct mana_ib_cq, ibcq);
> >  	struct ib_device *ibdev = ibcq->device;
> >  	struct mana_ib_dev *mdev;
> > +	int err;
> > +
> > +	err = ib_no_udata_io(udata);
> > +	if (err)
> > +		return err;
> >
> >  	mdev = container_of(ibdev, struct mana_ib_dev, ib_dev);
> >
> > diff --git a/drivers/infiniband/hw/mana/device.c
> > b/drivers/infiniband/hw/mana/device.c
> > index 9811570ab..a8d19586a 100644
> > --- a/drivers/infiniband/hw/mana/device.c
> > +++ b/drivers/infiniband/hw/mana/device.c
> > @@ -15,6 +15,7 @@ static const struct ib_device_ops mana_ib_dev_ops = {
> >  	.owner = THIS_MODULE,
> >  	.driver_id = RDMA_DRIVER_MANA,
> >  	.uverbs_abi_ver = MANA_IB_UVERBS_ABI_VERSION,
> > +	.uverbs_robust_udata = true,
> >
> >  	.add_gid = mana_ib_gd_add_gid,
> >  	.alloc_mw = mana_ib_alloc_mw,
> > diff --git a/drivers/infiniband/hw/mana/main.c
> > b/drivers/infiniband/hw/mana/main.c
> > index efe2935bd..e645b7637 100644
> > --- a/drivers/infiniband/hw/mana/main.c
> > +++ b/drivers/infiniband/hw/mana/main.c
> > @@ -101,6 +101,10 @@ int mana_ib_alloc_pd(struct ib_pd *ibpd, struct
> ib_udata *udata)
> >  	struct gdma_context *gc;
> >  	int err;
> >
> > +	err = ib_no_udata_io(udata);
> > +	if (err)
> > +		return err;
> > +
> >  	dev = container_of(ibdev, struct mana_ib_dev, ib_dev);
> >  	gc = mdev_to_gc(dev);
> >
> > @@ -133,6 +137,11 @@ int mana_ib_dealloc_pd(struct ib_pd *ibpd, struct
> ib_udata *udata)
> >  	struct gdma_destroy_pd_req req = {};
> >  	struct mana_ib_dev *dev;
> >  	struct gdma_context *gc;
> > +	int err;
> > +
> > +	err = ib_no_udata_io(udata);
> > +	if (err)
> > +		return err;
> >
> >  	dev = container_of(ibdev, struct mana_ib_dev, ib_dev);
> >  	gc = mdev_to_gc(dev);
> > @@ -142,7 +151,11 @@ int mana_ib_dealloc_pd(struct ib_pd *ibpd, struct
> > ib_udata *udata)
> >
> >  	req.pd_handle = pd->pd_handle;
> >
> > -	return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp),
> &resp);
> > +	err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
> > +	if (err)
> > +		return err;
> > +
> > +	return 0;
> >  }
> >
> >  static int mana_gd_destroy_doorbell_page(struct gdma_context *gc, @@
> > -198,17 +211,17 @@ int mana_ib_alloc_ucontext(struct ib_ucontext
> *ibcontext,
> >  	int doorbell_page;
> >  	int ret;
> >
> > +	ret = ib_no_udata_io(udata);
> > +	if (ret)
> > +		return ret;
> > +
> >  	mdev = container_of(ibdev, struct mana_ib_dev, ib_dev);
> >  	gc = mdev_to_gc(mdev);
> >
> >  	/* Allocate a doorbell page index */
> >  	ret = mana_gd_allocate_doorbell_page(gc, &doorbell_page);
> > -	if (ret) {
> > -		ibdev_dbg(ibdev, "Failed to allocate doorbell page %d\n", ret);
> > +	if (ret)
> >  		return ret;
> > -	}
> > -
> > -	ibdev_dbg(ibdev, "Doorbell page allocated %d\n", doorbell_page);
> >
> >  	ucontext->doorbell = doorbell_page;
> >
> > @@ -575,7 +588,7 @@ int mana_ib_query_device(struct ib_device *ibdev,
> struct ib_device_attr *props,
> >  	struct pci_dev *pdev = to_pci_dev(mdev_to_gc(dev)->dev);
> >  	int err;
> >
> > -	err = ib_is_udata_in_empty(uhw);
> > +	err = ib_no_udata_io(uhw);
> >  	if (err)
> >  		return err;
> >
> > @@ -605,7 +618,7 @@ int mana_ib_query_device(struct ib_device *ibdev,
> struct ib_device_attr *props,
> >  	if (!mana_ib_is_rnic(dev))
> >  		props->raw_packet_caps = IB_RAW_PACKET_CAP_IP_CSUM;
> >
> > -	return ib_respond_empty_udata(uhw);
> > +	return 0;
> >  }
> >
> >  int mana_ib_query_port(struct ib_device *ibdev, u32 port, diff --git
> > a/drivers/infiniband/hw/mana/mr.c b/drivers/infiniband/hw/mana/mr.c
> > index 030bfdcff..1233685b4 100644
> > --- a/drivers/infiniband/hw/mana/mr.c
> > +++ b/drivers/infiniband/hw/mana/mr.c
> > @@ -113,6 +113,10 @@ struct ib_mr *mana_ib_reg_user_mr(struct ib_pd
> *ibpd, u64 start, u64 length,
> >  	if (dmah)
> >  		return ERR_PTR(-EOPNOTSUPP);
> >
> > +	err = ib_no_udata_io(udata);
> > +	if (err)
> > +		return ERR_PTR(err);
> > +
> >  	dev = container_of(ibdev, struct mana_ib_dev, ib_dev);
> >
> >  	ibdev_dbg(ibdev,
> > @@ -327,6 +331,11 @@ int mana_ib_alloc_mw(struct ib_mw *ibmw, struct
> > ib_udata *udata)  {
> >  	struct mana_ib_dev *mdev = container_of(ibmw->device, struct
> mana_ib_dev, ib_dev);
> >  	struct mana_ib_pd *pd = container_of(ibmw->pd, struct mana_ib_pd,
> > ibpd);
> > +	int err;
> > +
> > +	err = ib_no_udata_io(udata);
> > +	if (err)
> > +		return err;
> >
> >  	return mana_ib_gd_create_mw(mdev, pd, ibmw);  } @@ -346,6
> +355,10 @@
> > int mana_ib_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata)
> >  	struct mana_ib_dev *dev;
> >  	int err;
> >
> > +	err = ib_no_udata_io(udata);
> > +	if (err)
> > +		return err;
> > +
> >  	dev = container_of(ibdev, struct mana_ib_dev, ib_dev);
> >
> >  	err = mana_ib_gd_destroy_mr(dev, mr->mr_handle); diff --git
> > a/drivers/infiniband/hw/mana/qp.c b/drivers/infiniband/hw/mana/qp.c
> > index 60926f39a..b5ff07e34 100644
> > --- a/drivers/infiniband/hw/mana/qp.c
> > +++ b/drivers/infiniband/hw/mana/qp.c
> > @@ -651,10 +651,8 @@ static int mana_ib_create_ud_qp(struct ib_qp *ibqp,
> struct ib_pd *ibpd,
> >  	u32 doorbell, queue_size;
> >  	int i, err;
> >
> > -	if (udata) {
> > -		ibdev_dbg(&mdev->ib_dev, "User-level UD QPs are not
> supported\n");
> > +	if (udata)
> >  		return -EOPNOTSUPP;
> > -	}
> >
> >  	for (i = 0; i < MANA_UD_QUEUE_TYPE_MAX; ++i) {
> >  		queue_size = mana_ib_queue_size(attr, i); @@ -745,6 +743,11
> @@
> > static int mana_ib_gd_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
> >  	struct gdma_context *gc = mdev_to_gc(mdev);
> >  	struct mana_port_context *mpc;
> >  	struct net_device *ndev;
> > +	int err;
> > +
> > +	err = ib_no_udata_io(udata);
> > +	if (err)
> > +		return err;
> >
> >  	mana_gd_init_req_hdr(&req.hdr, MANA_IB_SET_QP_STATE,
> sizeof(req),
> > sizeof(resp));
> >
> > @@ -797,7 +800,11 @@ static int mana_ib_gd_modify_qp(struct ib_qp
> *ibqp, struct ib_qp_attr *attr,
> >  		req.ah_attr.flow_label = attr->ah_attr.grh.flow_label;
> >  	}
> >
> > -	return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp),
> &resp);
> > +	err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
> > +	if (err)
> > +		return err;
> > +
> > +	return 0;
> >  }
> >
> >  int mana_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, @@
> > -826,7 +833,11 @@ static int mana_ib_destroy_qp_rss(struct mana_ib_qp
> *qp,
> >  	struct mana_ib_pd *pd;
> >  	struct mana_ib_wq *wq;
> >  	struct ib_wq *ibwq;
> > -	int i;
> > +	int i, err;
> > +
> > +	err = ib_no_udata_io(udata);
> > +	if (err)
> > +		return err;
> >
> >  	ndev = mana_ib_get_netdev(qp->ibqp.device, qp->port);
> >  	mpc = netdev_priv(ndev);
> > @@ -872,6 +883,11 @@ static int mana_ib_destroy_qp_raw(struct
> mana_ib_qp *qp, struct ib_udata *udata)
> >  	struct mana_port_context *mpc;
> >  	struct net_device *ndev;
> >  	struct mana_ib_pd *pd;
> > +	int err;
> > +
> > +	err = ib_no_udata_io(udata);
> > +	if (err)
> > +		return err;
> >
> >  	ndev = mana_ib_get_netdev(qp->ibqp.device, qp->port);
> >  	mpc = netdev_priv(ndev);
> > @@ -890,7 +906,11 @@ static int mana_ib_destroy_rc_qp(struct
> > mana_ib_qp *qp, struct ib_udata *udata)  {
> >  	struct mana_ib_dev *mdev =
> >  		container_of(qp->ibqp.device, struct mana_ib_dev, ib_dev);
> > -	int i;
> > +	int i, err;
> > +
> > +	err = ib_no_udata_io(udata);
> > +	if (err)
> > +		return err;
> >
> >  	mana_table_remove_qp(mdev, qp);
> >
> > @@ -908,7 +928,11 @@ static int mana_ib_destroy_ud_qp(struct
> > mana_ib_qp *qp, struct ib_udata *udata)  {
> >  	struct mana_ib_dev *mdev =
> >  		container_of(qp->ibqp.device, struct mana_ib_dev, ib_dev);
> > -	int i;
> > +	int i, err;
> > +
> > +	err = ib_no_udata_io(udata);
> > +	if (err)
> > +		return err;
> >
> >  	mana_remove_qp_from_cqs(qp);
> >  	mana_table_remove_qp(mdev, qp);
> > diff --git a/drivers/infiniband/hw/mana/wq.c
> > b/drivers/infiniband/hw/mana/wq.c index 5c2134a0b..6b066d605 100644
> > --- a/drivers/infiniband/hw/mana/wq.c
> > +++ b/drivers/infiniband/hw/mana/wq.c
> > @@ -55,6 +55,11 @@ int mana_ib_destroy_wq(struct ib_wq *ibwq, struct
> ib_udata *udata)
> >  	struct mana_ib_wq *wq = container_of(ibwq, struct mana_ib_wq,
> ibwq);
> >  	struct ib_device *ib_dev = ibwq->device;
> >  	struct mana_ib_dev *mdev;
> > +	int err;
> > +
> > +	err = ib_no_udata_io(udata);
> > +	if (err)
> > +		return err;
> >
> >  	mdev = container_of(ib_dev, struct mana_ib_dev, ib_dev);
> >
> > @@ -69,10 +74,17 @@ int mana_ib_create_rwq_ind_table(struct
> ib_rwq_ind_table *ib_rwq_ind_table,
> >  				 struct ib_rwq_ind_table_init_attr *init_attr,
> >  				 struct ib_udata *udata)
> >  {
> > +	int err;
> > +
> > +	err = ib_no_udata_io(udata);
> > +	if (err)
> > +		return err;
> > +
> >  	/*
> >  	 * There is no additional data in ind_table to be maintained by this
> >  	 * driver, do nothing
> >  	 */
> > +
> >  	return 0;
> >  }
> >
> > diff --git a/include/uapi/rdma/mana-abi.h
> > b/include/uapi/rdma/mana-abi.h index a75bf32b8..8336bf51b 100644
> > --- a/include/uapi/rdma/mana-abi.h
> > +++ b/include/uapi/rdma/mana-abi.h
> > @@ -25,7 +25,7 @@ enum mana_ib_create_cq_flags {
> >
> >  struct mana_ib_create_cq {
> >  	__aligned_u64 buf_addr;
> > -	__u16	flags;
> > +	__u16	comp_mask;
> >  	__u16	reserved0;
> >  	__u32	reserved1;
> >  };
> > --
> > 2.43.0
> >

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [EXTERNAL] Re: [PATCH rdma-next v3] RDMA/mana_ib: Adopt robust udata
  2026-07-16  8:56   ` [EXTERNAL] " Konstantin Taranov
@ 2026-07-16  9:12     ` Leon Romanovsky
  0 siblings, 0 replies; 7+ messages in thread
From: Leon Romanovsky @ 2026-07-16  9:12 UTC (permalink / raw)
  To: Konstantin Taranov
  Cc: Konstantin Taranov, Long Li, jgg@ziepe.ca,
	linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org

On Thu, Jul 16, 2026 at 08:56:27AM +0000, Konstantin Taranov wrote:
> > From: Leon Romanovsky <leon@kernel.org>
> > On Tue, Jul 14, 2026 at 05:31:13AM -0700, Konstantin Taranov wrote:
> > > From: Konstantin Taranov <kotaranov@microsoft.com>
> > >
> > > Enable the uverbs robust udata interface in mana_ib by setting
> > > uverbs_robust_udata and converting the driver to the new udata
> > > handling model.
> > 
> > Why didn't you set ".uverbs_robust_udata = true" in this patch?
> 
> I did set. See the changes in drivers/infiniband/hw/mana/device.c

Thanks, it is unclear to me why grep didn't find it.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH rdma-next v3] RDMA/mana_ib: Adopt robust udata
  2026-07-14 12:31 [PATCH rdma-next v3] RDMA/mana_ib: Adopt robust udata Konstantin Taranov
  2026-07-15  8:07 ` Leon Romanovsky
  2026-07-16  8:48 ` Leon Romanovsky
@ 2026-07-16  9:16 ` Leon Romanovsky
  2 siblings, 0 replies; 7+ messages in thread
From: Leon Romanovsky @ 2026-07-16  9:16 UTC (permalink / raw)
  To: kotaranov, longli, jgg, Konstantin Taranov; +Cc: linux-rdma, linux-kernel


On Tue, 14 Jul 2026 05:31:13 -0700, Konstantin Taranov wrote:
> Enable the uverbs robust udata interface in mana_ib by setting
> uverbs_robust_udata and converting the driver to the new udata
> handling model.

Applied, thanks!

[1/1] RDMA/mana_ib: Adopt robust udata
      https://git.kernel.org/rdma/rdma/c/bf8b3f48878ed7

Best regards,
-- 
Leon Romanovsky <leon@kernel.org>


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-07-16  9:16 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-14 12:31 [PATCH rdma-next v3] RDMA/mana_ib: Adopt robust udata Konstantin Taranov
2026-07-15  8:07 ` Leon Romanovsky
2026-07-15  8:23   ` Konstantin Taranov
2026-07-16  8:48 ` Leon Romanovsky
2026-07-16  8:56   ` [EXTERNAL] " Konstantin Taranov
2026-07-16  9:12     ` Leon Romanovsky
2026-07-16  9:16 ` Leon Romanovsky

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.