From 3ea3b60db79bc71b6d3eb30af284a32e80b7163d Mon Sep 17 00:00:00 2001 From: Anas Mousa Date: Thu, 6 Nov 2025 19:21:41 +0000 Subject: [PATCH] Propagate the service level param to SRD QP attributes This is required for perftest to work with service levels other than the default one when using SRD. Signed-off-by: Anas Mousa --- configure.ac | 5 +++++ src/perftest_parameters.c | 7 +++++++ src/perftest_resources.c | 3 +++ 3 files changed, 15 insertions(+) diff --git a/configure.ac b/configure.ac index e5c85839..7b333443 100755 --- a/configure.ac +++ b/configure.ac @@ -524,6 +524,11 @@ if [test $HAVE_IBV_WR_API = yes]; then if [test $HAVE_UNSOLICITED_WRITE_RECV_SRD = yes]; then AC_DEFINE([HAVE_SRD_WITH_UNSOLICITED_WRITE_RECV], [1], [Have SRD with unsolicited RDMA write with imm. support]) fi + AC_TRY_LINK([#include ], + [struct efadv_qp_init_attr *efa_attr; int x = efa_attr->sl;], [HAVE_SRD_QP_SL_SUPPORT=yes], [HAVE_SRD_QP_SL_SUPPORT=no]) + if [test $HAVE_SRD_QP_SL_SUPPORT = yes]; then + AC_DEFINE([HAVE_SRD_QP_SL], [1], [Have SRD QP SL support]) + fi else AC_CHECK_LIB([efa], [efadv_create_driver_qp], [HAVE_SRD=yes], [HAVE_SRD=no]) fi diff --git a/src/perftest_parameters.c b/src/perftest_parameters.c index 85ace6c3..cb7f70aa 100755 --- a/src/perftest_parameters.c +++ b/src/perftest_parameters.c @@ -1801,6 +1801,13 @@ static void force_dependecies(struct perftest_parameters *user_param) fprintf(stderr, " SRD does not support RDMA_CM\n"); exit(1); } +#ifndef HAVE_SRD_QP_SL + if (user_param->sl != DEF_SL) { + printf(RESULT_LINE); + fprintf(stderr, " SRD does not support non-default SL\n"); + exit(1); + } +#endif user_param->cq_mod = 1; } diff --git a/src/perftest_resources.c b/src/perftest_resources.c index 94e95864..57ca3508 100755 --- a/src/perftest_resources.c +++ b/src/perftest_resources.c @@ -2889,6 +2889,9 @@ struct ibv_qp* ctx_qp_create(struct pingpong_context *ctx, if (user_param->use_unsolicited_write) efa_attr.flags |= EFADV_QP_FLAGS_UNSOLICITED_WRITE_RECV; #endif + #ifdef HAVE_SRD_QP_SL + efa_attr.sl = user_param->sl; + #endif qp = efadv_create_qp_ex(ctx->context, &attr_ex, &efa_attr, sizeof(efa_attr)); #else