From b280fc04ffb1d909962754f5ec464b2b02c70289 Mon Sep 17 00:00:00 2001 From: Jessie Yang Date: Wed, 22 Jan 2025 14:55:09 -0800 Subject: [PATCH] fabtests/efa: add rdma check for unsolicited write recv Signed-off-by: Jessie Yang --- fabtests/prov/efa/configure.m4 | 5 ++++ fabtests/prov/efa/src/efa_rdma_checker.c | 31 ++++++++++++++++++------ fabtests/pytest/efa/efa_common.py | 2 +- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/fabtests/prov/efa/configure.m4 b/fabtests/prov/efa/configure.m4 index bf0f3b624e9..b8252b209f5 100644 --- a/fabtests/prov/efa/configure.m4 +++ b/fabtests/prov/efa/configure.m4 @@ -28,5 +28,10 @@ AS_IF([test x"$have_efadv" = x"1"], [ [], [efa_rdma_checker_happy=0], [[#include ]]) + + AC_CHECK_DECL(EFADV_DEVICE_ATTR_CAPS_UNSOLICITED_WRITE_RECV, + [], + [efa_rdma_checker_happy=0], + [[#include ]]) ]) AM_CONDITIONAL([BUILD_EFA_RDMA_CHECKER], [test $efa_rdma_checker_happy -eq 1]) diff --git a/fabtests/prov/efa/src/efa_rdma_checker.c b/fabtests/prov/efa/src/efa_rdma_checker.c index b764bbba91b..9215cc63d91 100644 --- a/fabtests/prov/efa/src/efa_rdma_checker.c +++ b/fabtests/prov/efa/src/efa_rdma_checker.c @@ -14,6 +14,7 @@ enum rdma_op { READ, WRITE, + UNSOLICITED_WRITE_RECV, }; /* @@ -37,8 +38,10 @@ int main(int argc, char *argv[]) op = READ; } else if (!strcasecmp(optarg, "write")) { op = WRITE; + } else if (!strcasecmp(optarg, "writedata")) { + op = UNSOLICITED_WRITE_RECV; } else { - fprintf(stderr, "Unknown operation '%s. Allowed: read | write'\n", optarg); + fprintf(stderr, "Unknown operation '%s. Allowed: read | write | writedata '\n", optarg); return EXIT_FAILURE; } break; @@ -46,7 +49,7 @@ int main(int argc, char *argv[]) case 'h': default: fprintf(stderr, "Usage:\n"); - FT_PRINT_OPTS_USAGE("fi_efa_rdma_checker -o ", "rdma operation type: read|write"); + FT_PRINT_OPTS_USAGE("fi_efa_rdma_checker -o ", "rdma operation type: read | write | writedata"); return EXIT_FAILURE; } } @@ -86,11 +89,25 @@ int main(int argc, char *argv[]) if (op == READ) goto out; - if (efadv_attr.device_caps & EFADV_DEVICE_ATTR_CAPS_RDMA_WRITE) { - fprintf(stdout, "rdma write is enabled \n"); - } else { - fprintf(stderr, "rdma write is NOT enabled \n"); - err = op == WRITE ? 1 : 0; + if (op == WRITE) { + if (efadv_attr.device_caps & EFADV_DEVICE_ATTR_CAPS_RDMA_WRITE) { + fprintf(stdout, "rdma write is enabled \n"); + } else { + fprintf(stderr, "rdma write is NOT enabled \n"); + err = 1; + } + goto out; + } + + if (op == UNSOLICITED_WRITE_RECV) { + if (efadv_attr.device_caps & EFADV_DEVICE_ATTR_CAPS_UNSOLICITED_WRITE_RECV) { + fprintf(stdout, + "rdma unsolicited write recv is enabled \n"); + } else { + fprintf(stderr, "rdma unsolicited write recv is NOT " + "enabled \n"); + err = 1; + } } out: diff --git a/fabtests/pytest/efa/efa_common.py b/fabtests/pytest/efa/efa_common.py index d5f0eb959c0..6f5e311a97f 100644 --- a/fabtests/pytest/efa/efa_common.py +++ b/fabtests/pytest/efa/efa_common.py @@ -74,7 +74,7 @@ def has_rdma(cmdline_args, operation): operation: rdma operation name, allowed values are read and write return: a boolean """ - assert operation in ["read", "write"] + assert operation in ["read", "write", "writedata"] binpath = cmdline_args.binpath or "" cmd = "timeout " + str(cmdline_args.timeout) \ + " " + os.path.join(binpath, f"fi_efa_rdma_checker -o {operation}")