diff mbox series

[rdma-next] IB/mlx5: Add CREATE_PSV/DESTROY_PSV for devx interface

Message ID 20190723070412.6385-1-leon@kernel.org (mailing list archive)
State Mainlined
Commit 8b38c538d460f46680d0fb8524efa15a8652b2d1
Delegated to: Jason Gunthorpe
Headers show
Series [rdma-next] IB/mlx5: Add CREATE_PSV/DESTROY_PSV for devx interface | expand

Commit Message

Leon Romanovsky July 23, 2019, 7:04 a.m. UTC
From: Max Gurtovoy <maxg@mellanox.com>

Limit the number of PSV's created through devx to 1, to create a symmetry
between create/destroy cmds. In the kernel, one can create up to 4 PSV's
using CREATE_PSV cmd but the destruction is one by one. Add a protection
for this a-symmetric definition for devx.

Signed-off-by: Max Gurtovoy <maxg@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/hw/mlx5/devx.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

--
2.20.1

Comments

Jason Gunthorpe July 25, 2019, 5:25 p.m. UTC | #1
On Tue, Jul 23, 2019 at 10:04:12AM +0300, Leon Romanovsky wrote:
> From: Max Gurtovoy <maxg@mellanox.com>
> 
> Limit the number of PSV's created through devx to 1, to create a symmetry
> between create/destroy cmds. In the kernel, one can create up to 4 PSV's
> using CREATE_PSV cmd but the destruction is one by one. Add a protection
> for this a-symmetric definition for devx.
> 
> Signed-off-by: Max Gurtovoy <maxg@mellanox.com>
> Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
> ---
>  drivers/infiniband/hw/mlx5/devx.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
 
Applied to for-next, thanks

Jason
diff mbox series

Patch

diff --git a/drivers/infiniband/hw/mlx5/devx.c b/drivers/infiniband/hw/mlx5/devx.c
index ec4370f99381..a527cf7f01ac 100644
--- a/drivers/infiniband/hw/mlx5/devx.c
+++ b/drivers/infiniband/hw/mlx5/devx.c
@@ -776,6 +776,14 @@  static bool devx_is_obj_create_cmd(const void *in, u16 *opcode)
 			return true;
 		return false;
 	}
+	case MLX5_CMD_OP_CREATE_PSV:
+	{
+		u8 num_psv = MLX5_GET(create_psv_in, in, num_psv);
+
+		if (num_psv == 1)
+			return true;
+		return false;
+	}
 	default:
 		return false;
 	}
@@ -1215,6 +1223,12 @@  static void devx_obj_build_destroy_cmd(void *in, void *out, void *din,
 	case MLX5_CMD_OP_ALLOC_XRCD:
 		MLX5_SET(general_obj_in_cmd_hdr, din, opcode, MLX5_CMD_OP_DEALLOC_XRCD);
 		break;
+	case MLX5_CMD_OP_CREATE_PSV:
+		MLX5_SET(general_obj_in_cmd_hdr, din, opcode,
+			 MLX5_CMD_OP_DESTROY_PSV);
+		MLX5_SET(destroy_psv_in, din, psvn,
+			 MLX5_GET(create_psv_out, out, psv0_index));
+		break;
 	default:
 		/* The entry must match to one of the devx_is_obj_create_cmd */
 		WARN_ON(true);