diff mbox series

[rdma-next,v2,2/3] RDMA/mana_ib: support of the zero based MRs

Message ID 1744621234-26114-3-git-send-email-kotaranov@linux.microsoft.com (mailing list archive)
State New
Headers show
Series RDMA/mana_ib: extend MR support | expand

Commit Message

Konstantin Taranov April 14, 2025, 9 a.m. UTC
From: Konstantin Taranov <kotaranov@microsoft.com>

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

Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com>
---
 drivers/infiniband/hw/mana/mr.c | 24 +++++++++++++++++-------
 include/net/mana/gdma.h         | 11 ++++++++++-
 2 files changed, 27 insertions(+), 8 deletions(-)

Comments

Long Li April 16, 2025, 6:09 p.m. UTC | #1
> Subject: [PATCH rdma-next v2 2/3] RDMA/mana_ib: support of the zero based
> MRs
> 
> From: Konstantin Taranov <kotaranov@microsoft.com>
> 
> Add IB_ZERO_BASED to the valid flags and use the corresponding MR creation
> request for the zero based memory.
> 
> Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com>

Reviewed-by: Long Li <longli@microsoft.com>

> ---
>  drivers/infiniband/hw/mana/mr.c | 24 +++++++++++++++++-------
>  include/net/mana/gdma.h         | 11 ++++++++++-
>  2 files changed, 27 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/mana/mr.c b/drivers/infiniband/hw/mana/mr.c
> index e4a9f53..6d974d0 100644
> --- a/drivers/infiniband/hw/mana/mr.c
> +++ b/drivers/infiniband/hw/mana/mr.c
> @@ -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;
> -	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);
> +	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)
> diff --git a/include/net/mana/gdma.h b/include/net/mana/gdma.h index
> 50ffbc4..3db506d 100644
> --- a/include/net/mana/gdma.h
> +++ b/include/net/mana/gdma.h
> @@ -812,6 +812,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 {
> @@ -823,6 +825,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;
>  	};
>  };
> 
> @@ -838,7 +844,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 */
> --
> 2.43.0
diff mbox series

Patch

diff --git a/drivers/infiniband/hw/mana/mr.c b/drivers/infiniband/hw/mana/mr.c
index e4a9f53..6d974d0 100644
--- a/drivers/infiniband/hw/mana/mr.c
+++ b/drivers/infiniband/hw/mana/mr.c
@@ -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;
-	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);
+	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)
diff --git a/include/net/mana/gdma.h b/include/net/mana/gdma.h
index 50ffbc4..3db506d 100644
--- a/include/net/mana/gdma.h
+++ b/include/net/mana/gdma.h
@@ -812,6 +812,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 {
@@ -823,6 +825,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;
 	};
 };
 
@@ -838,7 +844,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 */