public inbox for linux-rdma@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH for-next] RDMA/efa: Expose new extended max inline buff size
@ 2026-02-11 11:33 Yonatan Nachum
  2026-02-12  6:32 ` Gal Pressman
  2026-02-13 11:35 ` Leon Romanovsky
  0 siblings, 2 replies; 3+ messages in thread
From: Yonatan Nachum @ 2026-02-11 11:33 UTC (permalink / raw)
  To: jgg, leon, linux-rdma
  Cc: mrgolin, sleybo, matua, gal.pressman, Yonatan Nachum,
	Firas Jahjah

Add new extended max inline query and report the new value to userspace.

Reviewed-by: Firas Jahjah <firasj@amazon.com>
Reviewed-by: Michael Margolin <mrgolin@amazon.com>
Signed-off-by: Yonatan Nachum <ynachum@amazon.com>
---
 .../infiniband/hw/efa/efa_admin_cmds_defs.h   | 22 ++++++--
 drivers/infiniband/hw/efa/efa_com_cmd.c       | 55 ++++++++++++-------
 drivers/infiniband/hw/efa/efa_com_cmd.h       |  3 +-
 drivers/infiniband/hw/efa/efa_verbs.c         |  3 +-
 include/uapi/rdma/efa-abi.h                   |  5 +-
 5 files changed, 59 insertions(+), 29 deletions(-)

diff --git a/drivers/infiniband/hw/efa/efa_admin_cmds_defs.h b/drivers/infiniband/hw/efa/efa_admin_cmds_defs.h
index 57178dad5eb7..93e5ffe900e9 100644
--- a/drivers/infiniband/hw/efa/efa_admin_cmds_defs.h
+++ b/drivers/infiniband/hw/efa/efa_admin_cmds_defs.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
 /*
- * Copyright 2018-2025 Amazon.com, Inc. or its affiliates. All rights reserved.
+ * Copyright 2018-2026 Amazon.com, Inc. or its affiliates. All rights reserved.
  */
 
 #ifndef _EFA_ADMIN_CMDS_H_
@@ -38,10 +38,11 @@ enum efa_admin_aq_feature_id {
 	EFA_ADMIN_DEVICE_ATTR                       = 1,
 	EFA_ADMIN_AENQ_CONFIG                       = 2,
 	EFA_ADMIN_NETWORK_ATTR                      = 3,
-	EFA_ADMIN_QUEUE_ATTR                        = 4,
+	EFA_ADMIN_QUEUE_ATTR_1                      = 4,
 	EFA_ADMIN_HW_HINTS                          = 5,
 	EFA_ADMIN_HOST_INFO                         = 6,
 	EFA_ADMIN_EVENT_QUEUE_ATTR                  = 7,
+	EFA_ADMIN_QUEUE_ATTR_2                      = 8,
 };
 
 /* QP transport type */
@@ -744,14 +745,18 @@ struct efa_admin_feature_device_attr_desc {
 	u32 reserved1;
 };
 
-struct efa_admin_feature_queue_attr_desc {
+struct efa_admin_feature_queue_attr_desc_1 {
 	/* The maximum number of queue pairs supported */
 	u32 max_qp;
 
 	/* Maximum number of WQEs per Send Queue */
 	u32 max_sq_depth;
 
-	/* Maximum size of data that can be sent inline in a Send WQE */
+	/*
+	 * Maximum size of data that can be sent inline in a Send WQE
+	 * (deprecated by
+	 * efa_admin_feature_queue_attr_desc_2::inline_buf_size_ex)
+	 */
 	u32 inline_buf_size;
 
 	/* Maximum number of buffer descriptors per Recv Queue */
@@ -805,6 +810,11 @@ struct efa_admin_feature_queue_attr_desc {
 	u16 max_tx_batch;
 };
 
+struct efa_admin_feature_queue_attr_desc_2 {
+	/* Maximum size of data that can be sent inline in a Send WQE */
+	u16 inline_buf_size_ex;
+};
+
 struct efa_admin_event_queue_attr_desc {
 	/* The maximum number of event queues supported */
 	u32 max_eq;
@@ -872,7 +882,9 @@ struct efa_admin_get_feature_resp {
 
 		struct efa_admin_feature_network_attr_desc network_attr;
 
-		struct efa_admin_feature_queue_attr_desc queue_attr;
+		struct efa_admin_feature_queue_attr_desc_1 queue_attr_1;
+
+		struct efa_admin_feature_queue_attr_desc_2 queue_attr_2;
 
 		struct efa_admin_event_queue_attr_desc event_queue_attr;
 
diff --git a/drivers/infiniband/hw/efa/efa_com_cmd.c b/drivers/infiniband/hw/efa/efa_com_cmd.c
index 9ead02800ac7..63c7f07806a8 100644
--- a/drivers/infiniband/hw/efa/efa_com_cmd.c
+++ b/drivers/infiniband/hw/efa/efa_com_cmd.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
 /*
- * Copyright 2018-2025 Amazon.com, Inc. or its affiliates. All rights reserved.
+ * Copyright 2018-2026 Amazon.com, Inc. or its affiliates. All rights reserved.
  */
 
 #include "efa_com.h"
@@ -479,31 +479,46 @@ int efa_com_get_device_attr(struct efa_com_dev *edev,
 
 	edev->supported_features = resp.u.device_attr.supported_features;
 	err = efa_com_get_feature(edev, &resp,
-				  EFA_ADMIN_QUEUE_ATTR);
+				  EFA_ADMIN_QUEUE_ATTR_1);
 	if (err) {
 		ibdev_err_ratelimited(edev->efa_dev,
-				      "Failed to get queue attributes %d\n",
+				      "Failed to get queue attributes1 %d\n",
 				      err);
 		return err;
 	}
 
-	result->max_qp = resp.u.queue_attr.max_qp;
-	result->max_sq_depth = resp.u.queue_attr.max_sq_depth;
-	result->max_rq_depth = resp.u.queue_attr.max_rq_depth;
-	result->max_cq = resp.u.queue_attr.max_cq;
-	result->max_cq_depth = resp.u.queue_attr.max_cq_depth;
-	result->inline_buf_size = resp.u.queue_attr.inline_buf_size;
-	result->max_sq_sge = resp.u.queue_attr.max_wr_send_sges;
-	result->max_rq_sge = resp.u.queue_attr.max_wr_recv_sges;
-	result->max_mr = resp.u.queue_attr.max_mr;
-	result->max_mr_pages = resp.u.queue_attr.max_mr_pages;
-	result->max_pd = resp.u.queue_attr.max_pd;
-	result->max_ah = resp.u.queue_attr.max_ah;
-	result->max_llq_size = resp.u.queue_attr.max_llq_size;
-	result->sub_cqs_per_cq = resp.u.queue_attr.sub_cqs_per_cq;
-	result->max_wr_rdma_sge = resp.u.queue_attr.max_wr_rdma_sges;
-	result->max_tx_batch = resp.u.queue_attr.max_tx_batch;
-	result->min_sq_depth = resp.u.queue_attr.min_sq_depth;
+	result->max_qp = resp.u.queue_attr_1.max_qp;
+	result->max_sq_depth = resp.u.queue_attr_1.max_sq_depth;
+	result->max_rq_depth = resp.u.queue_attr_1.max_rq_depth;
+	result->max_cq = resp.u.queue_attr_1.max_cq;
+	result->max_cq_depth = resp.u.queue_attr_1.max_cq_depth;
+	result->inline_buf_size = resp.u.queue_attr_1.inline_buf_size;
+	result->max_sq_sge = resp.u.queue_attr_1.max_wr_send_sges;
+	result->max_rq_sge = resp.u.queue_attr_1.max_wr_recv_sges;
+	result->max_mr = resp.u.queue_attr_1.max_mr;
+	result->max_mr_pages = resp.u.queue_attr_1.max_mr_pages;
+	result->max_pd = resp.u.queue_attr_1.max_pd;
+	result->max_ah = resp.u.queue_attr_1.max_ah;
+	result->max_llq_size = resp.u.queue_attr_1.max_llq_size;
+	result->sub_cqs_per_cq = resp.u.queue_attr_1.sub_cqs_per_cq;
+	result->max_wr_rdma_sge = resp.u.queue_attr_1.max_wr_rdma_sges;
+	result->max_tx_batch = resp.u.queue_attr_1.max_tx_batch;
+	result->min_sq_depth = resp.u.queue_attr_1.min_sq_depth;
+
+	if (efa_com_check_supported_feature_id(edev, EFA_ADMIN_QUEUE_ATTR_2)) {
+		err = efa_com_get_feature(edev, &resp,
+					  EFA_ADMIN_QUEUE_ATTR_2);
+		if (err) {
+			ibdev_err_ratelimited(
+				edev->efa_dev,
+				"Failed to get queue attributes2 %d\n", err);
+			return err;
+		}
+
+		result->inline_buf_size_ex = resp.u.queue_attr_2.inline_buf_size_ex;
+	} else {
+		result->inline_buf_size_ex = result->inline_buf_size;
+	}
 
 	err = efa_com_get_feature(edev, &resp, EFA_ADMIN_NETWORK_ATTR);
 	if (err) {
diff --git a/drivers/infiniband/hw/efa/efa_com_cmd.h b/drivers/infiniband/hw/efa/efa_com_cmd.h
index 3ac2686abba1..ef15b3c38429 100644
--- a/drivers/infiniband/hw/efa/efa_com_cmd.h
+++ b/drivers/infiniband/hw/efa/efa_com_cmd.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
 /*
- * Copyright 2018-2025 Amazon.com, Inc. or its affiliates. All rights reserved.
+ * Copyright 2018-2026 Amazon.com, Inc. or its affiliates. All rights reserved.
  */
 
 #ifndef _EFA_COM_CMD_H_
@@ -127,6 +127,7 @@ struct efa_com_get_device_attr_result {
 	u32 max_cq;
 	u32 max_cq_depth; /* cqes */
 	u32 inline_buf_size;
+	u32 inline_buf_size_ex;
 	u32 max_mr;
 	u32 max_pd;
 	u32 max_ah;
diff --git a/drivers/infiniband/hw/efa/efa_verbs.c b/drivers/infiniband/hw/efa/efa_verbs.c
index 22d3e25c3b9d..85c3a7dd4335 100644
--- a/drivers/infiniband/hw/efa/efa_verbs.c
+++ b/drivers/infiniband/hw/efa/efa_verbs.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
 /*
- * Copyright 2018-2024 Amazon.com, Inc. or its affiliates. All rights reserved.
+ * Copyright 2018-2026 Amazon.com, Inc. or its affiliates. All rights reserved.
  */
 
 #include <linux/dma-buf.h>
@@ -1994,6 +1994,7 @@ int efa_alloc_ucontext(struct ib_ucontext *ibucontext, struct ib_udata *udata)
 	resp.cmds_supp_udata_mask |= EFA_USER_CMDS_SUPP_UDATA_CREATE_AH;
 	resp.sub_cqs_per_cq = dev->dev_attr.sub_cqs_per_cq;
 	resp.inline_buf_size = dev->dev_attr.inline_buf_size;
+	resp.inline_buf_size_ex = dev->dev_attr.inline_buf_size_ex;
 	resp.max_llq_size = dev->dev_attr.max_llq_size;
 	resp.max_tx_batch = dev->dev_attr.max_tx_batch;
 	resp.min_sq_wr = dev->dev_attr.min_sq_depth;
diff --git a/include/uapi/rdma/efa-abi.h b/include/uapi/rdma/efa-abi.h
index 98b71b9979f8..13225b038124 100644
--- a/include/uapi/rdma/efa-abi.h
+++ b/include/uapi/rdma/efa-abi.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */
 /*
- * Copyright 2018-2025 Amazon.com, Inc. or its affiliates. All rights reserved.
+ * Copyright 2018-2026 Amazon.com, Inc. or its affiliates. All rights reserved.
  */
 
 #ifndef EFA_ABI_USER_H
@@ -44,7 +44,8 @@ struct efa_ibv_alloc_ucontext_resp {
 	__u32 max_llq_size; /* bytes */
 	__u16 max_tx_batch; /* units of 64 bytes */
 	__u16 min_sq_wr;
-	__u8 reserved_a0[4];
+	__u16 inline_buf_size_ex;
+	__u8 reserved_b0[2];
 };
 
 struct efa_ibv_alloc_pd_resp {
-- 
2.47.3


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

* Re: [PATCH for-next] RDMA/efa: Expose new extended max inline buff size
  2026-02-11 11:33 [PATCH for-next] RDMA/efa: Expose new extended max inline buff size Yonatan Nachum
@ 2026-02-12  6:32 ` Gal Pressman
  2026-02-13 11:35 ` Leon Romanovsky
  1 sibling, 0 replies; 3+ messages in thread
From: Gal Pressman @ 2026-02-12  6:32 UTC (permalink / raw)
  To: Yonatan Nachum, jgg, leon, linux-rdma
  Cc: mrgolin, sleybo, matua, Firas Jahjah

On 11/02/2026 13:33, Yonatan Nachum wrote:
> diff --git a/include/uapi/rdma/efa-abi.h b/include/uapi/rdma/efa-abi.h
> index 98b71b9979f8..13225b038124 100644
> --- a/include/uapi/rdma/efa-abi.h
> +++ b/include/uapi/rdma/efa-abi.h
> @@ -1,6 +1,6 @@
>  /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */
>  /*
> - * Copyright 2018-2025 Amazon.com, Inc. or its affiliates. All rights reserved.
> + * Copyright 2018-2026 Amazon.com, Inc. or its affiliates. All rights reserved.
>   */
>  
>  #ifndef EFA_ABI_USER_H
> @@ -44,7 +44,8 @@ struct efa_ibv_alloc_ucontext_resp {
>  	__u32 max_llq_size; /* bytes */
>  	__u16 max_tx_batch; /* units of 64 bytes */
>  	__u16 min_sq_wr;
> -	__u8 reserved_a0[4];
> +	__u16 inline_buf_size_ex;
> +	__u8 reserved_b0[2];

Do you need both values exposed to userspace?
Can't you reuse the same uapi field?

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

* Re: [PATCH for-next] RDMA/efa: Expose new extended max inline buff size
  2026-02-11 11:33 [PATCH for-next] RDMA/efa: Expose new extended max inline buff size Yonatan Nachum
  2026-02-12  6:32 ` Gal Pressman
@ 2026-02-13 11:35 ` Leon Romanovsky
  1 sibling, 0 replies; 3+ messages in thread
From: Leon Romanovsky @ 2026-02-13 11:35 UTC (permalink / raw)
  To: Yonatan Nachum
  Cc: jgg, linux-rdma, mrgolin, sleybo, matua, gal.pressman,
	Firas Jahjah

On Wed, Feb 11, 2026 at 11:33:46AM +0000, Yonatan Nachum wrote:
> Add new extended max inline query and report the new value to userspace.
> 
> Reviewed-by: Firas Jahjah <firasj@amazon.com>
> Reviewed-by: Michael Margolin <mrgolin@amazon.com>
> Signed-off-by: Yonatan Nachum <ynachum@amazon.com>
> ---
>  .../infiniband/hw/efa/efa_admin_cmds_defs.h   | 22 ++++++--
>  drivers/infiniband/hw/efa/efa_com_cmd.c       | 55 ++++++++++++-------
>  drivers/infiniband/hw/efa/efa_com_cmd.h       |  3 +-
>  drivers/infiniband/hw/efa/efa_verbs.c         |  3 +-
>  include/uapi/rdma/efa-abi.h                   |  5 +-
>  5 files changed, 59 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/efa/efa_admin_cmds_defs.h b/drivers/infiniband/hw/efa/efa_admin_cmds_defs.h
> index 57178dad5eb7..93e5ffe900e9 100644
> --- a/drivers/infiniband/hw/efa/efa_admin_cmds_defs.h
> +++ b/drivers/infiniband/hw/efa/efa_admin_cmds_defs.h
> @@ -1,6 +1,6 @@
>  /* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
>  /*
> - * Copyright 2018-2025 Amazon.com, Inc. or its affiliates. All rights reserved.
> + * Copyright 2018-2026 Amazon.com, Inc. or its affiliates. All rights reserved.
>   */
>  
>  #ifndef _EFA_ADMIN_CMDS_H_
> @@ -38,10 +38,11 @@ enum efa_admin_aq_feature_id {
>  	EFA_ADMIN_DEVICE_ATTR                       = 1,
>  	EFA_ADMIN_AENQ_CONFIG                       = 2,
>  	EFA_ADMIN_NETWORK_ATTR                      = 3,
> -	EFA_ADMIN_QUEUE_ATTR                        = 4,
> +	EFA_ADMIN_QUEUE_ATTR_1                      = 4,
>  	EFA_ADMIN_HW_HINTS                          = 5,
>  	EFA_ADMIN_HOST_INFO                         = 6,
>  	EFA_ADMIN_EVENT_QUEUE_ATTR                  = 7,
> +	EFA_ADMIN_QUEUE_ATTR_2                      = 8,
>  };

<...>

> -	result->max_qp = resp.u.queue_attr.max_qp;
> -	result->max_sq_depth = resp.u.queue_attr.max_sq_depth;
> -	result->max_rq_depth = resp.u.queue_attr.max_rq_depth;
> -	result->max_cq = resp.u.queue_attr.max_cq;
> -	result->max_cq_depth = resp.u.queue_attr.max_cq_depth;
> -	result->inline_buf_size = resp.u.queue_attr.inline_buf_size;
> -	result->max_sq_sge = resp.u.queue_attr.max_wr_send_sges;
> -	result->max_rq_sge = resp.u.queue_attr.max_wr_recv_sges;
> -	result->max_mr = resp.u.queue_attr.max_mr;
> -	result->max_mr_pages = resp.u.queue_attr.max_mr_pages;
> -	result->max_pd = resp.u.queue_attr.max_pd;
> -	result->max_ah = resp.u.queue_attr.max_ah;
> -	result->max_llq_size = resp.u.queue_attr.max_llq_size;
> -	result->sub_cqs_per_cq = resp.u.queue_attr.sub_cqs_per_cq;
> -	result->max_wr_rdma_sge = resp.u.queue_attr.max_wr_rdma_sges;
> -	result->max_tx_batch = resp.u.queue_attr.max_tx_batch;
> -	result->min_sq_depth = resp.u.queue_attr.min_sq_depth;
> +	result->max_qp = resp.u.queue_attr_1.max_qp;
> +	result->max_sq_depth = resp.u.queue_attr_1.max_sq_depth;
> +	result->max_rq_depth = resp.u.queue_attr_1.max_rq_depth;
> +	result->max_cq = resp.u.queue_attr_1.max_cq;
> +	result->max_cq_depth = resp.u.queue_attr_1.max_cq_depth;
> +	result->inline_buf_size = resp.u.queue_attr_1.inline_buf_size;
> +	result->max_sq_sge = resp.u.queue_attr_1.max_wr_send_sges;
> +	result->max_rq_sge = resp.u.queue_attr_1.max_wr_recv_sges;
> +	result->max_mr = resp.u.queue_attr_1.max_mr;
> +	result->max_mr_pages = resp.u.queue_attr_1.max_mr_pages;
> +	result->max_pd = resp.u.queue_attr_1.max_pd;
> +	result->max_ah = resp.u.queue_attr_1.max_ah;
> +	result->max_llq_size = resp.u.queue_attr_1.max_llq_size;
> +	result->sub_cqs_per_cq = resp.u.queue_attr_1.sub_cqs_per_cq;
> +	result->max_wr_rdma_sge = resp.u.queue_attr_1.max_wr_rdma_sges;
> +	result->max_tx_batch = resp.u.queue_attr_1.max_tx_batch;
> +	result->min_sq_depth = resp.u.queue_attr_1.min_sq_depth;

Please split this patch to two: first is rename and second one is
addition.

Thanks

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

end of thread, other threads:[~2026-02-13 11:35 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-11 11:33 [PATCH for-next] RDMA/efa: Expose new extended max inline buff size Yonatan Nachum
2026-02-12  6:32 ` Gal Pressman
2026-02-13 11:35 ` Leon Romanovsky

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox