Allocate the per-port Q counter
Subsystems (5)
cover Allocate the per-port Q counter
From: Leon Romanovsky <[email protected]>
Hi
See commit message for the patch description.
Thanks
Leon Romanovsky (1):
net/mlx5: Add shared Q counter bits
Yishai Hadas (1):
IB/mlx5: Allocate the per-port Q counter shared when DEVX is supported
drivers/infiniband/hw/mlx5/cmd.c | 17 +++++++++++++++++ drivers/infiniband/hw/mlx5/cmd.h | 2 ++ drivers/infiniband/hw/mlx5/main.c | 10 ++++++++-- include/linux/mlx5/mlx5_ifc.h | 6 +++++- 4 files changed, 32 insertions(+), 3 deletions(-)
PATCH 1/2 net/mlx5: Add shared Q counter bits
From: Leon Romanovsky <[email protected]>
Updated HW specification file with needed bits to allow sharing of Q counters between DEVX contexts and kernel.
--- include/linux/mlx5/mlx5_ifc.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
include/linux/mlx5/mlx5_ifc.h +5 -1
@@ -85,6 +85,10 @@ enum { MLX5_OBJ_TYPE_UMEM = 0x0005, }; +enum { +MLX5_SHARED_RESOURCE_UID =0xffff , +}; +enum {MLX5_CMD_OP_QUERY_HCA_CAP =0x100 ,MLX5_CMD_OP_QUERY_ADAPTER =0x101 ,
@@ -7464,7 +7468,7 @@ struct mlx5_ifc_alloc_q_counter_out_bits {struct mlx5_ifc_alloc_q_counter_in_bits {u8 opcode[0x10 ]; -u8 reserved_at_10[0x10 ]; +u8 uid[0x10 ];u8 reserved_at_20[0x10 ];u8 op_mod[0x10 ];
Signature · 1 line
2.19.1
PATCH 2/2 IB/mlx5: Allocate the per-port Q counter shared when DEVX is supported
In reply to Leon RomanovskyFrom: Yishai Hadas <[email protected]>
The per-port Q counter is some kernel resource and as such may be used by few UID(s) upon DEVX usage.
To enable using it for QP/RQ when DEVX context is used need to allocate it with a sharing mode indication to let firmware allows its usage.
The UID = 0xffff was chosen to mark it.
--- drivers/infiniband/hw/mlx5/cmd.c | 17 +++++++++++++++++ drivers/infiniband/hw/mlx5/cmd.h | 2 ++ drivers/infiniband/hw/mlx5/main.c | 10 ++++++++-- 3 files changed, 27 insertions(+), 2 deletions(-)
drivers/infiniband/hw/mlx5/cmd.c +17 -0
@@ -326,3 +326,20 @@ int mlx5_cmd_xrcd_dealloc(struct mlx5_core_dev *dev, u32 xrcdn, u16 uid)MLX5_SET (dealloc_xrcd_in, in, uid, uid);return mlx5_cmd_exec (dev, in,sizeof (in), out,sizeof (out)); } + +int mlx5_cmd_alloc_q_counter (struct mlx5_core_dev *dev,u16 *counter_id, +u16 uid) +{ +u32 in[MLX5_ST_SZ_DW (alloc_q_counter_in)] = {0 }; +u32 out[MLX5_ST_SZ_DW (alloc_q_counter_out)] = {0 }; +int err; + +MLX5_SET (alloc_q_counter_in, in, opcode,MLX5_CMD_OP_ALLOC_Q_COUNTER ); +MLX5_SET (alloc_q_counter_in, in, uid, uid); + + err =mlx5_cmd_exec (dev, in,sizeof (in), out,sizeof (out)); +if (!err) + *counter_id =MLX5_GET (alloc_q_counter_out, out, + counter_set_id); +return err; +}
drivers/infiniband/hw/mlx5/cmd.h +2 -0
@@ -61,4 +61,6 @@ int mlx5_cmd_detach_mcg(struct mlx5_core_dev *dev, union ib_gid *mgid, u32 qpn, u16 uid);int mlx5_cmd_xrcd_alloc (struct mlx5_core_dev *dev,u32 *xrcdn,u16 uid);int mlx5_cmd_xrcd_dealloc (struct mlx5_core_dev *dev,u32 xrcdn,u16 uid); +int mlx5_cmd_alloc_q_counter (struct mlx5_core_dev *dev,u16 *counter_id, +u16 uid);#endif /* MLX5_IB_CMD_H */
drivers/infiniband/hw/mlx5/main.c +8 -2
@@ -5114,6 +5114,10 @@ static int mlx5_ib_alloc_counters(struct mlx5_ib_dev *dev) {int err =0 ;int i; +bool is_shared; + + is_shared =MLX5_CAP_GEN_64 (dev->mdev, general_obj_types) & +MLX5_GENERAL_OBJ_TYPES_CAP_UCTX ;for (i =0 ; i < dev->num_ports; i++) { err =__mlx5_ib_alloc_counters (dev, &dev->port[i].cnts);
@@ -5123,8 +5127,10 @@ static int mlx5_ib_alloc_counters(struct mlx5_ib_dev *dev)mlx5_ib_fill_counters (dev, dev->port[i].cnts.names, dev->port[i].cnts.offsets); - err =mlx5_core_alloc_q_counter (dev->mdev, - &dev->port[i].cnts.set_id); + err =mlx5_cmd_alloc_q_counter (dev->mdev, + &dev->port[i].cnts.set_id, + is_shared ? +MLX5_SHARED_RESOURCE_UID :0 );if (err) { mlx5_ib_warn(dev, "couldn't allocate queue counter for port %d, err %d\n",
Signature · 1 line
2.19.1
Quoted 6 lines · Leon Romanovsky
From: Leon Romanovsky <[email protected]>
Hi
See commit message for the patch description.
Quoted 7 lines
Thanks
Leon Romanovsky (1):
net/mlx5: Add shared Q counter bitsYishai Hadas (1):
IB/mlx5: Allocate the per-port Q counter shared when DEVX is supported
This seems fine, please update the shared branch
Thanks,
Jason
Quoted 9 lines · Jason Gunthorpe
Quoted 8 lines · Leon Romanovsky
From: Leon Romanovsky <[email protected]>
Hi
See commit message for the patch description.
Thanks
Quoted 7 lines
Quoted 5 lines
Leon Romanovsky (1):
net/mlx5: Add shared Q counter bitsYishai Hadas (1):
IB/mlx5: Allocate the per-port Q counter shared when DEVX is supportedThis seems fine, please update the shared branch
Done,2acc7957dbc3 net/mlx5: Add shared Q counter bits
Thanks
Quoted 3 lines
Thanks,
Jason
Jason Gunthorpe
AppliedQuoted 6 lines · Leon Romanovsky
From: Leon Romanovsky <[email protected]>
Hi
See commit message for the patch description.
Quoted 7 lines
Thanks
Leon Romanovsky (1):
net/mlx5: Add shared Q counter bitsYishai Hadas (1):
IB/mlx5: Allocate the per-port Q counter shared when DEVX is supported
Applied to for-next
Thanks,
Jason