Commit 02f272e4 authored by Alexey Marchuk's avatar Alexey Marchuk Committed by Tomasz Zawadzki
Browse files

test/dma: Fix ibv_reg_mr usage



Translate_cb might be called for part of
the payload, but we must register MR for the
entrire buffer

Signed-off-by: default avatarAlexey Marchuk <alexeymar@nvidia.com>
Change-Id: I2876ad6aa19df380acf37ecab87d8ce1b8352546
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/23100


Reviewed-by: default avatarBen Walker <ben@nvidia.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 3f657ddb
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
/*   SPDX-License-Identifier: BSD-3-Clause
 *   Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
 *   Copyright (c) 2021, 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
 */

#include "spdk/stdinc.h"
@@ -349,8 +349,15 @@ dma_test_translate_memory_cb(struct spdk_memory_domain *src_domain, void *src_do
	struct dma_test_req *req = src_domain_ctx;
	struct ibv_qp *dst_domain_qp = (struct ibv_qp *)dst_domain_ctx->rdma.ibv_qp;

	if (spdk_unlikely(addr < req->iov.iov_base ||
			  (uint8_t *)addr + len > (uint8_t *)req->iov.iov_base + req->iov.iov_len)) {
		fprintf(stderr, "incorrect data %p, len %zu\n", addr, len);
		return -1;
	}

	if (spdk_unlikely(!req->mr)) {
		req->mr = ibv_reg_mr(dst_domain_qp->pd, addr, len, IBV_ACCESS_LOCAL_WRITE |
		req->mr = ibv_reg_mr(dst_domain_qp->pd, req->iov.iov_base, req->iov.iov_len,
				     IBV_ACCESS_LOCAL_WRITE |
				     IBV_ACCESS_REMOTE_READ |
				     IBV_ACCESS_REMOTE_WRITE);
		if (!req->mr) {