[20/22] RDMA/irdma: Add ABI definitions

Message ID 20210122234827.1353-21-shiraz.saleem@intel.com
State New
Headers show
Series
  • Add Intel Ethernet Protocol Driver for RDMA (irdma)
Related show

Commit Message

Saleem, Shiraz Jan. 22, 2021, 11:48 p.m.
From: Mustafa Ismail <mustafa.ismail@intel.com>

Add ABI definitions for irdma.

Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com>
Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com>
---
 include/uapi/rdma/irdma-abi.h | 140 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 140 insertions(+)
 create mode 100644 include/uapi/rdma/irdma-abi.h

Comments

Jason Gunthorpe Jan. 25, 2021, 7:45 p.m. | #1
On Fri, Jan 22, 2021 at 05:48:25PM -0600, Shiraz Saleem wrote:
> From: Mustafa Ismail <mustafa.ismail@intel.com>

> 

> Add ABI definitions for irdma.

> 

> Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com>

> Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com>

>  include/uapi/rdma/irdma-abi.h | 140 ++++++++++++++++++++++++++++++++++++++++++

>  1 file changed, 140 insertions(+)

>  create mode 100644 include/uapi/rdma/irdma-abi.h

> 

> diff --git a/include/uapi/rdma/irdma-abi.h b/include/uapi/rdma/irdma-abi.h

> new file mode 100644

> index 0000000..d9c8ce1

> +++ b/include/uapi/rdma/irdma-abi.h

> @@ -0,0 +1,140 @@

> +/* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */

> +/*

> + * Copyright (c) 2006 - 2021 Intel Corporation.  All rights reserved.

> + * Copyright (c) 2005 Topspin Communications.  All rights reserved.

> + * Copyright (c) 2005 Cisco Systems.  All rights reserved.

> + * Copyright (c) 2005 Open Grid Computing, Inc. All rights reserved.

> + */

> +

> +#ifndef IRDMA_ABI_H

> +#define IRDMA_ABI_H

> +

> +#include <linux/types.h>

> +

> +/* irdma must support legacy GEN_1 i40iw kernel

> + * and user-space whose last ABI ver is 5

> + */

> +#define IRDMA_ABI_VER 6


I don't want to see this value increase, either this is ABI compatible
with i40iw or it is not and should be a new driver_id.

This should have a small diff against include/uapi/rdma/i40iw-abi.h
that is obviously compatible

> +struct irdma_create_qp_resp {

> +	__u32 qp_id;

> +	__u32 actual_sq_size;

> +	__u32 actual_rq_size;

> +	__u32 irdma_drv_opt;

> +	__u32 qp_caps;

> +	__u16 rsvd1;

> +	__u8 lsmm;

> +	__u8 rsvd2;

> +};


> +struct i40iw_create_qp_resp {

> +	__u32 qp_id;

> +	__u32 actual_sq_size;

> +	__u32 actual_rq_size;

> +	__u32 i40iw_drv_opt;

> +	__u16 push_idx;

> +	__u8 lsmm;

> +	__u8 rsvd;

> +};


For instance these are almost the same, why put qp_caps in the middle?
Add it to the end so the whole thing is properly compatible with a
single structure.

Jason
Saleem, Shiraz Jan. 30, 2021, 1:18 a.m. | #2
> Subject: Re: [PATCH 20/22] RDMA/irdma: Add ABI definitions

> 

> On Fri, Jan 22, 2021 at 05:48:25PM -0600, Shiraz Saleem wrote:

> > From: Mustafa Ismail <mustafa.ismail@intel.com>

> >

> > Add ABI definitions for irdma.

> >

> > Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com>

> > Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com>

> > include/uapi/rdma/irdma-abi.h | 140

> > ++++++++++++++++++++++++++++++++++++++++++

> >  1 file changed, 140 insertions(+)

> >  create mode 100644 include/uapi/rdma/irdma-abi.h

> >

> > diff --git a/include/uapi/rdma/irdma-abi.h

> > b/include/uapi/rdma/irdma-abi.h new file mode 100644 index

> > 0000000..d9c8ce1

> > +++ b/include/uapi/rdma/irdma-abi.h

> > @@ -0,0 +1,140 @@

> > +/* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR

> > +Linux-OpenIB) */

> > +/*

> > + * Copyright (c) 2006 - 2021 Intel Corporation.  All rights reserved.

> > + * Copyright (c) 2005 Topspin Communications.  All rights reserved.

> > + * Copyright (c) 2005 Cisco Systems.  All rights reserved.

> > + * Copyright (c) 2005 Open Grid Computing, Inc. All rights reserved.

> > + */

> > +

> > +#ifndef IRDMA_ABI_H

> > +#define IRDMA_ABI_H

> > +

> > +#include <linux/types.h>

> > +

> > +/* irdma must support legacy GEN_1 i40iw kernel

> > + * and user-space whose last ABI ver is 5  */ #define IRDMA_ABI_VER 6

> 

> I don't want to see this value increase, either this is ABI compatible with i40iw or it

> is not and should be a new driver_id.


I am not sure I understand how it's possible without a ver. bump.
We support user-space libirdma with this driver as well as libi40iw. 

libi40iw - legacy support which is ABIv 4 & 5. GEN_1 devices only
libirdma - replaces libi40iw; supports i40iw (GEN1) driver and irdma

> 

> This should have a small diff against include/uapi/rdma/i40iw-abi.h that is

> obviously compatible

> 

> > +struct irdma_create_qp_resp {

> > +	__u32 qp_id;

> > +	__u32 actual_sq_size;

> > +	__u32 actual_rq_size;

> > +	__u32 irdma_drv_opt;

> > +	__u32 qp_caps;

> > +	__u16 rsvd1;

> > +	__u8 lsmm;

> > +	__u8 rsvd2;

> > +};

> 

> > +struct i40iw_create_qp_resp {

> > +	__u32 qp_id;

> > +	__u32 actual_sq_size;

> > +	__u32 actual_rq_size;

> > +	__u32 i40iw_drv_opt;

> > +	__u16 push_idx;

> > +	__u8 lsmm;

> > +	__u8 rsvd;

> > +};

> 

> For instance these are almost the same, why put qp_caps in the middle?

> Add it to the end so the whole thing is properly compatible with a single structure.

> 

> Jason
Jason Gunthorpe Feb. 1, 2021, 7:21 p.m. | #3
On Sat, Jan 30, 2021 at 01:18:36AM +0000, Saleem, Shiraz wrote:
> > Subject: Re: [PATCH 20/22] RDMA/irdma: Add ABI definitions

> > 

> > On Fri, Jan 22, 2021 at 05:48:25PM -0600, Shiraz Saleem wrote:

> > > From: Mustafa Ismail <mustafa.ismail@intel.com>

> > >

> > > Add ABI definitions for irdma.

> > >

> > > Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com>

> > > Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com>

> > > include/uapi/rdma/irdma-abi.h | 140

> > > ++++++++++++++++++++++++++++++++++++++++++

> > >  1 file changed, 140 insertions(+)

> > >  create mode 100644 include/uapi/rdma/irdma-abi.h

> > >

> > > diff --git a/include/uapi/rdma/irdma-abi.h

> > > b/include/uapi/rdma/irdma-abi.h new file mode 100644 index

> > > 0000000..d9c8ce1

> > > +++ b/include/uapi/rdma/irdma-abi.h

> > > @@ -0,0 +1,140 @@

> > > +/* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR

> > > +Linux-OpenIB) */

> > > +/*

> > > + * Copyright (c) 2006 - 2021 Intel Corporation.  All rights reserved.

> > > + * Copyright (c) 2005 Topspin Communications.  All rights reserved.

> > > + * Copyright (c) 2005 Cisco Systems.  All rights reserved.

> > > + * Copyright (c) 2005 Open Grid Computing, Inc. All rights reserved.

> > > + */

> > > +

> > > +#ifndef IRDMA_ABI_H

> > > +#define IRDMA_ABI_H

> > > +

> > > +#include <linux/types.h>

> > > +

> > > +/* irdma must support legacy GEN_1 i40iw kernel

> > > + * and user-space whose last ABI ver is 5  */ #define IRDMA_ABI_VER 6

> > 

> > I don't want to see this value increase, either this is ABI compatible with i40iw or it

> > is not and should be a new driver_id.

> 

> I am not sure I understand how it's possible without a ver. bump.

> We support user-space libirdma with this driver as well as libi40iw. 


Well, start by not making gratuitous changes to the structure layouts
and then ask how to handle what you have left over.

It looks like nothing hard, where is the problem?

Jason
Saleem, Shiraz Feb. 5, 2021, 8:12 p.m. | #4
> Subject: Re: [PATCH 20/22] RDMA/irdma: Add ABI definitions

> 

> On Sat, Jan 30, 2021 at 01:18:36AM +0000, Saleem, Shiraz wrote:

> > > Subject: Re: [PATCH 20/22] RDMA/irdma: Add ABI definitions

> > >

> > > On Fri, Jan 22, 2021 at 05:48:25PM -0600, Shiraz Saleem wrote:

> > > > From: Mustafa Ismail <mustafa.ismail@intel.com>

> > > >

> > > > Add ABI definitions for irdma.

> > > >

> > > > Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com>

> > > > Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com>

> > > > include/uapi/rdma/irdma-abi.h | 140

> > > > ++++++++++++++++++++++++++++++++++++++++++

> > > >  1 file changed, 140 insertions(+)  create mode 100644

> > > > include/uapi/rdma/irdma-abi.h

> > > >

> > > > diff --git a/include/uapi/rdma/irdma-abi.h

> > > > b/include/uapi/rdma/irdma-abi.h new file mode 100644 index

> > > > 0000000..d9c8ce1

> > > > +++ b/include/uapi/rdma/irdma-abi.h

> > > > @@ -0,0 +1,140 @@

> > > > +/* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR

> > > > +Linux-OpenIB) */

> > > > +/*

> > > > + * Copyright (c) 2006 - 2021 Intel Corporation.  All rights reserved.

> > > > + * Copyright (c) 2005 Topspin Communications.  All rights reserved.

> > > > + * Copyright (c) 2005 Cisco Systems.  All rights reserved.

> > > > + * Copyright (c) 2005 Open Grid Computing, Inc. All rights reserved.

> > > > + */

> > > > +

> > > > +#ifndef IRDMA_ABI_H

> > > > +#define IRDMA_ABI_H

> > > > +

> > > > +#include <linux/types.h>

> > > > +

> > > > +/* irdma must support legacy GEN_1 i40iw kernel

> > > > + * and user-space whose last ABI ver is 5  */ #define

> > > > +IRDMA_ABI_VER 6

> > >

> > > I don't want to see this value increase, either this is ABI

> > > compatible with i40iw or it is not and should be a new driver_id.

> >

> > I am not sure I understand how it's possible without a ver. bump.

> > We support user-space libirdma with this driver as well as libi40iw.

> 

> Well, start by not making gratuitous changes to the structure layouts and then ask

> how to handle what you have left over.

> 


Took a while but following now. We ll PoC and see how this shapes out. Thanks!

Patch

diff --git a/include/uapi/rdma/irdma-abi.h b/include/uapi/rdma/irdma-abi.h
new file mode 100644
index 0000000..d9c8ce1
--- /dev/null
+++ b/include/uapi/rdma/irdma-abi.h
@@ -0,0 +1,140 @@ 
+/* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */
+/*
+ * Copyright (c) 2006 - 2021 Intel Corporation.  All rights reserved.
+ * Copyright (c) 2005 Topspin Communications.  All rights reserved.
+ * Copyright (c) 2005 Cisco Systems.  All rights reserved.
+ * Copyright (c) 2005 Open Grid Computing, Inc. All rights reserved.
+ */
+
+#ifndef IRDMA_ABI_H
+#define IRDMA_ABI_H
+
+#include <linux/types.h>
+
+/* irdma must support legacy GEN_1 i40iw kernel
+ * and user-space whose last ABI ver is 5
+ */
+#define IRDMA_ABI_VER 6
+
+enum irdma_memreg_type {
+	IW_MEMREG_TYPE_MEM  = 0,
+	IW_MEMREG_TYPE_QP   = 1,
+	IW_MEMREG_TYPE_CQ   = 2,
+	IW_MEMREG_TYPE_RSVD = 3,
+	IW_MEMREG_TYPE_MW   = 4,
+};
+
+struct irdma_alloc_ucontext_req {
+	__u32 rsvd32;
+	__u8 userspace_ver;
+	__u8 rsvd8[3];
+};
+
+struct i40iw_alloc_ucontext_req {
+	__u32 rsvd32;
+	__u8 userspace_ver;
+	__u8 rsvd8[3];
+};
+
+struct irdma_alloc_ucontext_resp {
+	__aligned_u64 feature_flags;
+	__aligned_u64 db_mmap_key;
+	__u32 max_hw_wq_frags;
+	__u32 max_hw_read_sges;
+	__u32 max_hw_inline;
+	__u32 max_hw_rq_quanta;
+	__u32 max_hw_wq_quanta;
+	__u32 min_hw_cq_size;
+	__u32 max_hw_cq_size;
+	__u32 rsvd1[7];
+	__u16 max_hw_sq_chunk;
+	__u16 rsvd2[11];
+	__u8 kernel_ver;
+	__u8 hw_rev;
+	__u8 rsvd3[6];
+};
+
+struct i40iw_alloc_ucontext_resp {
+	__u32 max_pds;
+	__u32 max_qps;
+	__u32 wq_size; /* size of the WQs (SQ+RQ) in the mmaped area */
+	__u8 kernel_ver;
+	__u8 rsvd[3];
+};
+
+struct irdma_alloc_pd_resp {
+	__u32 pd_id;
+	__u8 rsvd[4];
+};
+
+struct irdma_resize_cq_req {
+	__aligned_u64 user_cq_buffer;
+};
+
+struct irdma_create_cq_req {
+	__aligned_u64 user_cq_buf;
+	__aligned_u64 user_shadow_area;
+};
+
+struct irdma_create_qp_req {
+	__aligned_u64 user_wqe_bufs;
+	__aligned_u64 user_compl_ctx;
+};
+
+struct i40iw_create_qp_req {
+	__aligned_u64 user_wqe_bufs;
+	__aligned_u64 user_compl_ctx;
+};
+
+struct irdma_mem_reg_req {
+	__u16 reg_type; /* Memory, QP or CQ */
+	__u16 cq_pages;
+	__u16 rq_pages;
+	__u16 sq_pages;
+};
+
+struct irdma_modify_qp_req {
+	__u8 sq_flush;
+	__u8 rq_flush;
+	__u8 rsvd[6];
+};
+
+struct irdma_create_cq_resp {
+	__u32 cq_id;
+	__u32 cq_size;
+};
+
+struct irdma_create_qp_resp {
+	__u32 qp_id;
+	__u32 actual_sq_size;
+	__u32 actual_rq_size;
+	__u32 irdma_drv_opt;
+	__u32 qp_caps;
+	__u16 rsvd1;
+	__u8 lsmm;
+	__u8 rsvd2;
+};
+
+struct i40iw_create_qp_resp {
+	__u32 qp_id;
+	__u32 actual_sq_size;
+	__u32 actual_rq_size;
+	__u32 i40iw_drv_opt;
+	__u16 push_idx;
+	__u8 lsmm;
+	__u8 rsvd;
+};
+
+struct irdma_modify_qp_resp {
+	__aligned_u64 push_wqe_mmap_key;
+	__aligned_u64 push_db_mmap_key;
+	__u16 push_offset;
+	__u8 push_valid;
+	__u8 rsvd[5];
+};
+
+struct irdma_create_ah_resp {
+	__u32 ah_id;
+	__u8 rsvd[4];
+};
+#endif /* IRDMA_ABI_H */