Skip to content

Commit 05ca71b

Browse files
mrgolinshijin-aws
authored andcommitted
[v2.3.x] prov/efa: Use IBV_QUERY_QP_DATA_IN_ORDER_DEVICE_ONLY flag when available
Add configure check and use the flag in ibv_query_qp_data_in_order() calls when available. This flag queries device-only data ordering capabilities without considering CPU architecture, needed for GPU polling scenarios. Reviewed-by: Daniel Kranzdorf <[email protected]> Signed-off-by: Michael Margolin <[email protected]> (cherry picked from commit 146b839)
1 parent a7d5798 commit 05ca71b

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

prov/efa/configure.m4

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ AC_DEFUN([FI_EFA_CONFIGURE],[
8181
have_caps_cq_with_ext_mem_dmabuf=0
8282
have_ibv_is_fork_initialized=0
8383
efa_support_data_in_order_aligned_128_byte=0
84+
have_ibv_query_qp_data_in_order_device_only=0
8485
efadv_support_extended_cq=0
8586
have_efa_dmabuf_mr=0
8687
have_efadv_query_mr=0
@@ -130,6 +131,11 @@ AC_DEFUN([FI_EFA_CONFIGURE],[
130131
[efa_support_data_in_order_aligned_128_byte=0],
131132
[[#include <infiniband/verbs.h>]])
132133
134+
AC_CHECK_DECL([IBV_QUERY_QP_DATA_IN_ORDER_DEVICE_ONLY],
135+
[have_ibv_query_qp_data_in_order_device_only=1],
136+
[have_ibv_query_qp_data_in_order_device_only=0],
137+
[[#include <infiniband/verbs.h>]])
138+
133139
AC_CHECK_DECL([ibv_reg_dmabuf_mr],
134140
[have_efa_dmabuf_mr=1],
135141
[have_efa_dmabuf_mr=0],
@@ -236,6 +242,9 @@ AC_DEFUN([FI_EFA_CONFIGURE],[
236242
AC_DEFINE_UNQUOTED([HAVE_EFA_DATA_IN_ORDER_ALIGNED_128_BYTES],
237243
[$efa_support_data_in_order_aligned_128_byte],
238244
[Indicates if EFA supports 128 bytes in-order in writing.])
245+
AC_DEFINE_UNQUOTED([HAVE_IBV_QUERY_QP_DATA_IN_ORDER_DEVICE_ONLY],
246+
[$have_ibv_query_qp_data_in_order_device_only],
247+
[Indicates if IBV_QUERY_QP_DATA_IN_ORDER_DEVICE_ONLY flag is available.])
239248
AC_DEFINE_UNQUOTED([HAVE_EFA_DMABUF_MR],
240249
[$have_efa_dmabuf_mr],
241250
[Indicates if ibv_reg_dmabuf_mr verbs is available])

prov/efa/src/efa_base_ep.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,9 +542,13 @@ int efa_base_ep_getname(fid_t fid, void *addr, size_t *addrlen)
542542
bool efa_qp_support_op_in_order_aligned_128_bytes(struct efa_qp *qp, enum ibv_wr_opcode op)
543543
{
544544
int caps;
545+
uint32_t flags = IBV_QUERY_QP_DATA_IN_ORDER_RETURN_CAPS;
545546

546-
caps = ibv_query_qp_data_in_order(qp->ibv_qp, op,
547-
IBV_QUERY_QP_DATA_IN_ORDER_RETURN_CAPS);
547+
#if HAVE_IBV_QUERY_QP_DATA_IN_ORDER_DEVICE_ONLY
548+
flags |= IBV_QUERY_QP_DATA_IN_ORDER_DEVICE_ONLY;
549+
#endif
550+
551+
caps = ibv_query_qp_data_in_order(qp->ibv_qp, op, flags);
548552

549553
return !!(caps & IBV_QUERY_QP_DATA_IN_ORDER_ALIGNED_128_BYTES);
550554
}

0 commit comments

Comments
 (0)