Commit 8f49682d authored by Konstantin Taranov's avatar Konstantin Taranov Committed by Leon Romanovsky
Browse files

RDMA/mana_ib: support of the zero based MRs



Add IB_ZERO_BASED to the valid flags and use
the corresponding MR creation request for the zero
based memory.

Signed-off-by: default avatarKonstantin Taranov <kotaranov@microsoft.com>
Link: https://patch.msgid.link/1744621234-26114-3-git-send-email-kotaranov@linux.microsoft.com


Reviewed-by: default avatarLong Li <longli@microsoft.com>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent 7d40ccf0
Loading
Loading
Loading
Loading
+17 −7
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@
#include "mana_ib.h"

#define VALID_MR_FLAGS (IB_ACCESS_LOCAL_WRITE | IB_ACCESS_REMOTE_WRITE | IB_ACCESS_REMOTE_READ |\
			IB_ACCESS_REMOTE_ATOMIC)
			IB_ACCESS_REMOTE_ATOMIC | IB_ZERO_BASED)

#define VALID_DMA_MR_FLAGS (IB_ACCESS_LOCAL_WRITE)

@@ -51,7 +51,10 @@ static int mana_ib_gd_create_mr(struct mana_ib_dev *dev, struct mana_ib_mr *mr,
		req.gva.virtual_address = mr_params->gva.virtual_address;
		req.gva.access_flags = mr_params->gva.access_flags;
		break;

	case GDMA_MR_TYPE_ZBVA:
		req.zbva.dma_region_handle = mr_params->zbva.dma_region_handle;
		req.zbva.access_flags = mr_params->zbva.access_flags;
		break;
	default:
		ibdev_dbg(&dev->ib_dev,
			  "invalid param (GDMA_MR_TYPE) passed, type %d\n",
@@ -147,11 +150,18 @@ struct ib_mr *mana_ib_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 length,
		  dma_region_handle);

	mr_params.pd_handle = pd->pd_handle;
	if (access_flags & IB_ZERO_BASED) {
		mr_params.mr_type = GDMA_MR_TYPE_ZBVA;
		mr_params.zbva.dma_region_handle = dma_region_handle;
		mr_params.zbva.access_flags =
			mana_ib_verbs_to_gdma_access_flags(access_flags);
	} else {
		mr_params.mr_type = GDMA_MR_TYPE_GVA;
		mr_params.gva.dma_region_handle = dma_region_handle;
		mr_params.gva.virtual_address = iova;
		mr_params.gva.access_flags =
			mana_ib_verbs_to_gdma_access_flags(access_flags);
	}

	err = mana_ib_gd_create_mr(dev, mr, &mr_params);
	if (err)
+10 −1
Original line number Diff line number Diff line
@@ -815,6 +815,8 @@ enum gdma_mr_type {
	 * address that is set up in the MST
	 */
	GDMA_MR_TYPE_GVA = 2,
	/* Guest zero-based address MRs */
	GDMA_MR_TYPE_ZBVA = 4,
};

struct gdma_create_mr_params {
@@ -826,6 +828,10 @@ struct gdma_create_mr_params {
			u64 virtual_address;
			enum gdma_mr_access_flags access_flags;
		} gva;
		struct {
			u64 dma_region_handle;
			enum gdma_mr_access_flags access_flags;
		} zbva;
	};
};

@@ -841,7 +847,10 @@ struct gdma_create_mr_request {
			u64 virtual_address;
			enum gdma_mr_access_flags access_flags;
		} gva;

		struct {
			u64 dma_region_handle;
			enum gdma_mr_access_flags access_flags;
		} zbva;
	};
	u32 reserved_2;
};/* HW DATA */