All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH rdma-next v1 0/3] ODP support for mlx5 DC QPs
@ 2019-08-04 10:00 Leon Romanovsky
  2019-08-04 10:00 ` [PATCH mlx5-next v1 1/3] IB/mlx5: Query ODP capabilities for DC Leon Romanovsky
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Leon Romanovsky @ 2019-08-04 10:00 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, RDMA mailing list, Michael Guralnik, Moni Shoua,
	Saeed Mahameed, linux-netdev

From: Leon Romanovsky <leonro@mellanox.com>

Changelog
 v1:
 * Fixed alignment to u64 in mlx5-abi.h (Gal P.)
 v0:
 * https://lore.kernel.org/linux-rdma/20190801122139.25224-1-leon@kernel.org

---------------------------------------------------------------------------------
From Michael,

The series adds support for on-demand paging for DC transport.
Adding handling of DC WQE parsing upon page faults and exposing
capabilities.

As DC is mlx-only transport, the capabilities are exposed to the user
using the direct-verbs mechanism. Namely through the
mlx5dv_query_device.

Thanks

Thanks

Michael Guralnik (3):
  IB/mlx5: Query ODP capabilities for DC
  IB/mlx5: Expose ODP for DC capabilities to user
  IB/mlx5: Add page fault handler for DC initiator WQE

 drivers/infiniband/hw/mlx5/main.c             |  6 +++++
 drivers/infiniband/hw/mlx5/mlx5_ib.h          |  1 +
 drivers/infiniband/hw/mlx5/odp.c              | 27 ++++++++++++++++++-
 .../net/ethernet/mellanox/mlx5/core/main.c    |  6 +++++
 include/linux/mlx5/mlx5_ifc.h                 |  4 ++-
 include/uapi/rdma/mlx5-abi.h                  |  3 +++
 6 files changed, 45 insertions(+), 2 deletions(-)

--
2.20.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH mlx5-next v1 1/3] IB/mlx5: Query ODP capabilities for DC
  2019-08-04 10:00 [PATCH rdma-next v1 0/3] ODP support for mlx5 DC QPs Leon Romanovsky
@ 2019-08-04 10:00 ` Leon Romanovsky
  2019-08-05 18:23   ` Saeed Mahameed
  2019-08-04 10:00 ` [PATCH rdma-next v1 2/3] IB/mlx5: Expose ODP for DC capabilities to user Leon Romanovsky
  2019-08-04 10:00 ` [PATCH rdma-next v1 3/3] IB/mlx5: Add page fault handler for DC initiator WQE Leon Romanovsky
  2 siblings, 1 reply; 6+ messages in thread
From: Leon Romanovsky @ 2019-08-04 10:00 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, RDMA mailing list, Michael Guralnik, Moni Shoua,
	Saeed Mahameed, linux-netdev

From: Michael Guralnik <michaelgur@mellanox.com>

Set current capabilities of ODP for DC to max capabilities and cache
them in mlx5_ib.

Signed-off-by: Michael Guralnik <michaelgur@mellanox.com>
Reviewed-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/hw/mlx5/mlx5_ib.h           |  1 +
 drivers/infiniband/hw/mlx5/odp.c               | 18 ++++++++++++++++++
 drivers/net/ethernet/mellanox/mlx5/core/main.c |  6 ++++++
 include/linux/mlx5/mlx5_ifc.h                  |  4 +++-
 4 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h
index cb41a7e6255a..f99c71b3c876 100644
--- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
+++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
@@ -967,6 +967,7 @@ struct mlx5_ib_dev {
 	struct mutex			slow_path_mutex;
 	int				fill_delay;
 	struct ib_odp_caps	odp_caps;
+	uint32_t		dc_odp_caps;
 	u64			odp_max_size;
 	struct mlx5_ib_pf_eq	odp_pf_eq;
 
diff --git a/drivers/infiniband/hw/mlx5/odp.c b/drivers/infiniband/hw/mlx5/odp.c
index b0c5de39d186..5e87a5e25574 100644
--- a/drivers/infiniband/hw/mlx5/odp.c
+++ b/drivers/infiniband/hw/mlx5/odp.c
@@ -353,6 +353,24 @@ void mlx5_ib_internal_fill_odp_caps(struct mlx5_ib_dev *dev)
 	if (MLX5_CAP_ODP(dev->mdev, xrc_odp_caps.srq_receive))
 		caps->per_transport_caps.xrc_odp_caps |= IB_ODP_SUPPORT_SRQ_RECV;
 
+	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.send))
+		dev->dc_odp_caps |= IB_ODP_SUPPORT_SEND;
+
+	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.receive))
+		dev->dc_odp_caps |= IB_ODP_SUPPORT_RECV;
+
+	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.write))
+		dev->dc_odp_caps |= IB_ODP_SUPPORT_WRITE;
+
+	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.read))
+		dev->dc_odp_caps |= IB_ODP_SUPPORT_READ;
+
+	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.atomic))
+		dev->dc_odp_caps |= IB_ODP_SUPPORT_ATOMIC;
+
+	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.srq_receive))
+		dev->dc_odp_caps |= IB_ODP_SUPPORT_SRQ_RECV;
+
 	if (MLX5_CAP_GEN(dev->mdev, fixed_buffer_size) &&
 	    MLX5_CAP_GEN(dev->mdev, null_mkey) &&
 	    MLX5_CAP_GEN(dev->mdev, umr_extended_translation_offset))
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
index b15b27a497fc..3995fc6d4d34 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
@@ -495,6 +495,12 @@ static int handle_hca_cap_odp(struct mlx5_core_dev *dev)
 	ODP_CAP_SET_MAX(dev, xrc_odp_caps.write);
 	ODP_CAP_SET_MAX(dev, xrc_odp_caps.read);
 	ODP_CAP_SET_MAX(dev, xrc_odp_caps.atomic);
+	ODP_CAP_SET_MAX(dev, dc_odp_caps.srq_receive);
+	ODP_CAP_SET_MAX(dev, dc_odp_caps.send);
+	ODP_CAP_SET_MAX(dev, dc_odp_caps.receive);
+	ODP_CAP_SET_MAX(dev, dc_odp_caps.write);
+	ODP_CAP_SET_MAX(dev, dc_odp_caps.read);
+	ODP_CAP_SET_MAX(dev, dc_odp_caps.atomic);
 
 	if (do_set)
 		err = set_caps(dev, set_ctx, set_sz,
diff --git a/include/linux/mlx5/mlx5_ifc.h b/include/linux/mlx5/mlx5_ifc.h
index ec571fd7fcf8..5eae8d734435 100644
--- a/include/linux/mlx5/mlx5_ifc.h
+++ b/include/linux/mlx5/mlx5_ifc.h
@@ -944,7 +944,9 @@ struct mlx5_ifc_odp_cap_bits {
 
 	struct mlx5_ifc_odp_per_transport_service_cap_bits xrc_odp_caps;
 
-	u8         reserved_at_100[0x700];
+	struct mlx5_ifc_odp_per_transport_service_cap_bits dc_odp_caps;
+
+	u8         reserved_at_100[0x6E0];
 };
 
 struct mlx5_ifc_calc_op {
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH rdma-next v1 2/3] IB/mlx5: Expose ODP for DC capabilities to user
  2019-08-04 10:00 [PATCH rdma-next v1 0/3] ODP support for mlx5 DC QPs Leon Romanovsky
  2019-08-04 10:00 ` [PATCH mlx5-next v1 1/3] IB/mlx5: Query ODP capabilities for DC Leon Romanovsky
@ 2019-08-04 10:00 ` Leon Romanovsky
  2019-08-04 10:00 ` [PATCH rdma-next v1 3/3] IB/mlx5: Add page fault handler for DC initiator WQE Leon Romanovsky
  2 siblings, 0 replies; 6+ messages in thread
From: Leon Romanovsky @ 2019-08-04 10:00 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, RDMA mailing list, Michael Guralnik, Moni Shoua,
	Saeed Mahameed, linux-netdev

From: Michael Guralnik <michaelgur@mellanox.com>

Return ODP capabilities for DC to user in alloc_context.

Signed-off-by: Michael Guralnik <michaelgur@mellanox.com>
Reviewed-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/hw/mlx5/main.c | 6 ++++++
 include/uapi/rdma/mlx5-abi.h      | 3 +++
 2 files changed, 9 insertions(+)

diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 4a3d700cd783..a53e0dc7c17f 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -1954,6 +1954,12 @@ static int mlx5_ib_alloc_ucontext(struct ib_ucontext *uctx,
 		resp.response_length += sizeof(resp.dump_fill_mkey);
 	}
 
+	if (field_avail(typeof(resp), dc_odp_caps, udata->outlen)) {
+		resp.dc_odp_caps = dev->dc_odp_caps;
+		resp.comp_mask |= MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_DC_ODP_CAPS;
+		resp.response_length += sizeof(resp.dc_odp_caps);
+	}
+
 	err = ib_copy_to_udata(udata, &resp, resp.response_length);
 	if (err)
 		goto out_mdev;
diff --git a/include/uapi/rdma/mlx5-abi.h b/include/uapi/rdma/mlx5-abi.h
index 624f5b53eb1f..7cab806d7fa7 100644
--- a/include/uapi/rdma/mlx5-abi.h
+++ b/include/uapi/rdma/mlx5-abi.h
@@ -98,6 +98,7 @@ struct mlx5_ib_alloc_ucontext_req_v2 {
 enum mlx5_ib_alloc_ucontext_resp_mask {
 	MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_CORE_CLOCK_OFFSET = 1UL << 0,
 	MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_DUMP_FILL_MKEY    = 1UL << 1,
+	MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_DC_ODP_CAPS	   = 1UL << 2,
 };
 
 enum mlx5_user_cmds_supp_uhw {
@@ -147,6 +148,8 @@ struct mlx5_ib_alloc_ucontext_resp {
 	__u32	num_uars_per_page;
 	__u32	num_dyn_bfregs;
 	__u32	dump_fill_mkey;
+	__u32	dc_odp_caps;
+	__u32   reserved;
 };
 
 struct mlx5_ib_alloc_pd_resp {
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH rdma-next v1 3/3] IB/mlx5: Add page fault handler for DC initiator WQE
  2019-08-04 10:00 [PATCH rdma-next v1 0/3] ODP support for mlx5 DC QPs Leon Romanovsky
  2019-08-04 10:00 ` [PATCH mlx5-next v1 1/3] IB/mlx5: Query ODP capabilities for DC Leon Romanovsky
  2019-08-04 10:00 ` [PATCH rdma-next v1 2/3] IB/mlx5: Expose ODP for DC capabilities to user Leon Romanovsky
@ 2019-08-04 10:00 ` Leon Romanovsky
  2 siblings, 0 replies; 6+ messages in thread
From: Leon Romanovsky @ 2019-08-04 10:00 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, RDMA mailing list, Michael Guralnik, Moni Shoua,
	Saeed Mahameed, linux-netdev

From: Michael Guralnik <michaelgur@mellanox.com>

Parsing DC initiator WQEs upon page fault requires skipping an address
vector segment, as in UD WQEs.

Signed-off-by: Michael Guralnik <michaelgur@mellanox.com>
Reviewed-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/hw/mlx5/odp.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/mlx5/odp.c b/drivers/infiniband/hw/mlx5/odp.c
index 5e87a5e25574..6f1de5edbe8e 100644
--- a/drivers/infiniband/hw/mlx5/odp.c
+++ b/drivers/infiniband/hw/mlx5/odp.c
@@ -1065,6 +1065,12 @@ static int mlx5_ib_mr_initiator_pfault_handler(
 	case IB_QPT_UD:
 		transport_caps = dev->odp_caps.per_transport_caps.ud_odp_caps;
 		break;
+	case IB_QPT_DRIVER:
+		if (qp->qp_sub_type == MLX5_IB_QPT_DCI) {
+			transport_caps = dev->dc_odp_caps;
+			break;
+		}
+		/* fall through */
 	default:
 		mlx5_ib_err(dev, "ODP fault on QP of an unsupported transport 0x%x\n",
 			    qp->ibqp.qp_type);
@@ -1078,7 +1084,8 @@ static int mlx5_ib_mr_initiator_pfault_handler(
 		return -EFAULT;
 	}
 
-	if (qp->ibqp.qp_type == IB_QPT_UD) {
+	if (qp->ibqp.qp_type == IB_QPT_UD ||
+	    qp->qp_sub_type == MLX5_IB_QPT_DCI) {
 		av = *wqe;
 		if (av->dqp_dct & cpu_to_be32(MLX5_EXTENDED_UD_AV))
 			*wqe += sizeof(struct mlx5_av);
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH mlx5-next v1 1/3] IB/mlx5: Query ODP capabilities for DC
  2019-08-04 10:00 ` [PATCH mlx5-next v1 1/3] IB/mlx5: Query ODP capabilities for DC Leon Romanovsky
@ 2019-08-05 18:23   ` Saeed Mahameed
  2019-08-06  7:02     ` Leon Romanovsky
  0 siblings, 1 reply; 6+ messages in thread
From: Saeed Mahameed @ 2019-08-05 18:23 UTC (permalink / raw)
  To: Jason Gunthorpe, leon@kernel.org, dledford@redhat.com
  Cc: Michael Guralnik, Moni Shoua, netdev@vger.kernel.org,
	Leon Romanovsky, linux-rdma@vger.kernel.org

On Sun, 2019-08-04 at 13:00 +0300, Leon Romanovsky wrote:
> From: Michael Guralnik <michaelgur@mellanox.com>
> 
> Set current capabilities of ODP for DC to max capabilities and cache
> them in mlx5_ib.
> 
> Signed-off-by: Michael Guralnik <michaelgur@mellanox.com>
> Reviewed-by: Moni Shoua <monis@mellanox.com>
> Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
> ---
>  drivers/infiniband/hw/mlx5/mlx5_ib.h           |  1 +
>  drivers/infiniband/hw/mlx5/odp.c               | 18 
> ++++++++++++++++++
>  drivers/net/ethernet/mellanox/mlx5/core/main.c |  6 ++++++
>  include/linux/mlx5/mlx5_ifc.h                  |  4 +++-

Please avoid cross tree changes when you can.. 
Here you do can avoid it, so please separate to two stage patches,
mlx5_ifc and core, then mlx5_ib.


>  4 files changed, 28 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h
> b/drivers/infiniband/hw/mlx5/mlx5_ib.h
> index cb41a7e6255a..f99c71b3c876 100644
> --- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
> +++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
> @@ -967,6 +967,7 @@ struct mlx5_ib_dev {
>  	struct mutex			slow_path_mutex;
>  	int				fill_delay;
>  	struct ib_odp_caps	odp_caps;
> +	uint32_t		dc_odp_caps;
>  	u64			odp_max_size;
>  	struct mlx5_ib_pf_eq	odp_pf_eq;
>  
> diff --git a/drivers/infiniband/hw/mlx5/odp.c
> b/drivers/infiniband/hw/mlx5/odp.c
> index b0c5de39d186..5e87a5e25574 100644
> --- a/drivers/infiniband/hw/mlx5/odp.c
> +++ b/drivers/infiniband/hw/mlx5/odp.c
> @@ -353,6 +353,24 @@ void mlx5_ib_internal_fill_odp_caps(struct
> mlx5_ib_dev *dev)
>  	if (MLX5_CAP_ODP(dev->mdev, xrc_odp_caps.srq_receive))
>  		caps->per_transport_caps.xrc_odp_caps |=
> IB_ODP_SUPPORT_SRQ_RECV;
>  
> +	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.send))
> +		dev->dc_odp_caps |= IB_ODP_SUPPORT_SEND;
> +
> +	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.receive))
> +		dev->dc_odp_caps |= IB_ODP_SUPPORT_RECV;
> +
> +	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.write))
> +		dev->dc_odp_caps |= IB_ODP_SUPPORT_WRITE;
> +
> +	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.read))
> +		dev->dc_odp_caps |= IB_ODP_SUPPORT_READ;
> +
> +	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.atomic))
> +		dev->dc_odp_caps |= IB_ODP_SUPPORT_ATOMIC;
> +
> +	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.srq_receive))
> +		dev->dc_odp_caps |= IB_ODP_SUPPORT_SRQ_RECV;
> +
>  	if (MLX5_CAP_GEN(dev->mdev, fixed_buffer_size) &&
>  	    MLX5_CAP_GEN(dev->mdev, null_mkey) &&
>  	    MLX5_CAP_GEN(dev->mdev, umr_extended_translation_offset))
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c
> b/drivers/net/ethernet/mellanox/mlx5/core/main.c
> index b15b27a497fc..3995fc6d4d34 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
> @@ -495,6 +495,12 @@ static int handle_hca_cap_odp(struct
> mlx5_core_dev *dev)
>  	ODP_CAP_SET_MAX(dev, xrc_odp_caps.write);
>  	ODP_CAP_SET_MAX(dev, xrc_odp_caps.read);
>  	ODP_CAP_SET_MAX(dev, xrc_odp_caps.atomic);
> +	ODP_CAP_SET_MAX(dev, dc_odp_caps.srq_receive);
> +	ODP_CAP_SET_MAX(dev, dc_odp_caps.send);
> +	ODP_CAP_SET_MAX(dev, dc_odp_caps.receive);
> +	ODP_CAP_SET_MAX(dev, dc_odp_caps.write);
> +	ODP_CAP_SET_MAX(dev, dc_odp_caps.read);
> +	ODP_CAP_SET_MAX(dev, dc_odp_caps.atomic);
>  
>  	if (do_set)
>  		err = set_caps(dev, set_ctx, set_sz,
> diff --git a/include/linux/mlx5/mlx5_ifc.h
> b/include/linux/mlx5/mlx5_ifc.h
> index ec571fd7fcf8..5eae8d734435 100644
> --- a/include/linux/mlx5/mlx5_ifc.h
> +++ b/include/linux/mlx5/mlx5_ifc.h
> @@ -944,7 +944,9 @@ struct mlx5_ifc_odp_cap_bits {
>  
>  	struct mlx5_ifc_odp_per_transport_service_cap_bits
> xrc_odp_caps;
>  
> -	u8         reserved_at_100[0x700];
> +	struct mlx5_ifc_odp_per_transport_service_cap_bits dc_odp_caps;
> +
> +	u8         reserved_at_100[0x6E0];

reserved_at_100 should move 20 bit forward. i.e reserved_at_120



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH mlx5-next v1 1/3] IB/mlx5: Query ODP capabilities for DC
  2019-08-05 18:23   ` Saeed Mahameed
@ 2019-08-06  7:02     ` Leon Romanovsky
  0 siblings, 0 replies; 6+ messages in thread
From: Leon Romanovsky @ 2019-08-06  7:02 UTC (permalink / raw)
  To: Saeed Mahameed
  Cc: Jason Gunthorpe, dledford@redhat.com, Michael Guralnik,
	Moni Shoua, netdev@vger.kernel.org, linux-rdma@vger.kernel.org

On Mon, Aug 05, 2019 at 06:23:04PM +0000, Saeed Mahameed wrote:
> On Sun, 2019-08-04 at 13:00 +0300, Leon Romanovsky wrote:
> > From: Michael Guralnik <michaelgur@mellanox.com>
> >
> > Set current capabilities of ODP for DC to max capabilities and cache
> > them in mlx5_ib.
> >
> > Signed-off-by: Michael Guralnik <michaelgur@mellanox.com>
> > Reviewed-by: Moni Shoua <monis@mellanox.com>
> > Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
> > ---
> >  drivers/infiniband/hw/mlx5/mlx5_ib.h           |  1 +
> >  drivers/infiniband/hw/mlx5/odp.c               | 18
> > ++++++++++++++++++
> >  drivers/net/ethernet/mellanox/mlx5/core/main.c |  6 ++++++
> >  include/linux/mlx5/mlx5_ifc.h                  |  4 +++-
>
> Please avoid cross tree changes when you can..
> Here you do can avoid it, so please separate to two stage patches,
> mlx5_ifc and core, then mlx5_ib.
>
>
> >  4 files changed, 28 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h
> > b/drivers/infiniband/hw/mlx5/mlx5_ib.h
> > index cb41a7e6255a..f99c71b3c876 100644
> > --- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
> > +++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
> > @@ -967,6 +967,7 @@ struct mlx5_ib_dev {
> >  	struct mutex			slow_path_mutex;
> >  	int				fill_delay;
> >  	struct ib_odp_caps	odp_caps;
> > +	uint32_t		dc_odp_caps;
> >  	u64			odp_max_size;
> >  	struct mlx5_ib_pf_eq	odp_pf_eq;
> >
> > diff --git a/drivers/infiniband/hw/mlx5/odp.c
> > b/drivers/infiniband/hw/mlx5/odp.c
> > index b0c5de39d186..5e87a5e25574 100644
> > --- a/drivers/infiniband/hw/mlx5/odp.c
> > +++ b/drivers/infiniband/hw/mlx5/odp.c
> > @@ -353,6 +353,24 @@ void mlx5_ib_internal_fill_odp_caps(struct
> > mlx5_ib_dev *dev)
> >  	if (MLX5_CAP_ODP(dev->mdev, xrc_odp_caps.srq_receive))
> >  		caps->per_transport_caps.xrc_odp_caps |=
> > IB_ODP_SUPPORT_SRQ_RECV;
> >
> > +	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.send))
> > +		dev->dc_odp_caps |= IB_ODP_SUPPORT_SEND;
> > +
> > +	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.receive))
> > +		dev->dc_odp_caps |= IB_ODP_SUPPORT_RECV;
> > +
> > +	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.write))
> > +		dev->dc_odp_caps |= IB_ODP_SUPPORT_WRITE;
> > +
> > +	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.read))
> > +		dev->dc_odp_caps |= IB_ODP_SUPPORT_READ;
> > +
> > +	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.atomic))
> > +		dev->dc_odp_caps |= IB_ODP_SUPPORT_ATOMIC;
> > +
> > +	if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.srq_receive))
> > +		dev->dc_odp_caps |= IB_ODP_SUPPORT_SRQ_RECV;
> > +
> >  	if (MLX5_CAP_GEN(dev->mdev, fixed_buffer_size) &&
> >  	    MLX5_CAP_GEN(dev->mdev, null_mkey) &&
> >  	    MLX5_CAP_GEN(dev->mdev, umr_extended_translation_offset))
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c
> > b/drivers/net/ethernet/mellanox/mlx5/core/main.c
> > index b15b27a497fc..3995fc6d4d34 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
> > @@ -495,6 +495,12 @@ static int handle_hca_cap_odp(struct
> > mlx5_core_dev *dev)
> >  	ODP_CAP_SET_MAX(dev, xrc_odp_caps.write);
> >  	ODP_CAP_SET_MAX(dev, xrc_odp_caps.read);
> >  	ODP_CAP_SET_MAX(dev, xrc_odp_caps.atomic);
> > +	ODP_CAP_SET_MAX(dev, dc_odp_caps.srq_receive);
> > +	ODP_CAP_SET_MAX(dev, dc_odp_caps.send);
> > +	ODP_CAP_SET_MAX(dev, dc_odp_caps.receive);
> > +	ODP_CAP_SET_MAX(dev, dc_odp_caps.write);
> > +	ODP_CAP_SET_MAX(dev, dc_odp_caps.read);
> > +	ODP_CAP_SET_MAX(dev, dc_odp_caps.atomic);
> >
> >  	if (do_set)
> >  		err = set_caps(dev, set_ctx, set_sz,
> > diff --git a/include/linux/mlx5/mlx5_ifc.h
> > b/include/linux/mlx5/mlx5_ifc.h
> > index ec571fd7fcf8..5eae8d734435 100644
> > --- a/include/linux/mlx5/mlx5_ifc.h
> > +++ b/include/linux/mlx5/mlx5_ifc.h
> > @@ -944,7 +944,9 @@ struct mlx5_ifc_odp_cap_bits {
> >
> >  	struct mlx5_ifc_odp_per_transport_service_cap_bits
> > xrc_odp_caps;
> >
> > -	u8         reserved_at_100[0x700];
> > +	struct mlx5_ifc_odp_per_transport_service_cap_bits dc_odp_caps;
> > +
> > +	u8         reserved_at_100[0x6E0];
>
> reserved_at_100 should move 20 bit forward. i.e reserved_at_120

Thanks for pointing it, I'm sending new version now.

>
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-08-06  7:02 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-08-04 10:00 [PATCH rdma-next v1 0/3] ODP support for mlx5 DC QPs Leon Romanovsky
2019-08-04 10:00 ` [PATCH mlx5-next v1 1/3] IB/mlx5: Query ODP capabilities for DC Leon Romanovsky
2019-08-05 18:23   ` Saeed Mahameed
2019-08-06  7:02     ` Leon Romanovsky
2019-08-04 10:00 ` [PATCH rdma-next v1 2/3] IB/mlx5: Expose ODP for DC capabilities to user Leon Romanovsky
2019-08-04 10:00 ` [PATCH rdma-next v1 3/3] IB/mlx5: Add page fault handler for DC initiator WQE Leon Romanovsky

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.