On Tue, Jun 22, 2021 at 03:45:56PM -0300, Jason Gunthorpe wrote: > On Mon, Jun 21, 2021 at 10:06:15AM +0300, Leon Romanovsky wrote: > > From: Lior Nahmanson <liorna@xxxxxxxxxx> > > > > This patch isolates DCI QP creation logic to separate function, so this > > change will reduce complexity when adding new features to DCI QP without > > interfering with other QP types. > > > > The code was copied from create_user_qp() while taking only DCI relevant bits. > > > > Reviewed-by: Meir Lichtinger <meirl@xxxxxxxxxx> > > Signed-off-by: Lior Nahmanson <liorna@xxxxxxxxxx> > > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxx> > > drivers/infiniband/hw/mlx5/qp.c | 157 ++++++++++++++++++++++++++++++++ > > 1 file changed, 157 insertions(+) > > > > diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c > > index 7a5f1eba60e3..65a380543f5a 100644 > > +++ b/drivers/infiniband/hw/mlx5/qp.c > > @@ -1974,6 +1974,160 @@ static int create_xrc_tgt_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp, > > return 0; > > } > > > > +static int create_dci(struct mlx5_ib_dev *dev, struct ib_pd *pd, > > + struct mlx5_ib_qp *qp, > > + struct mlx5_create_qp_params *params) > > +{ > > This is a huge amount of copying just to add 4 lines, why? > > There must be a better way to do this qp stuff. > > Why not put more stuff in _create_user_qp()? Lior proposed it in original patch, but I didn't like it. It caused to mix of various QP types and maze of "if () else ()" that are not applicable one to another. The huge _create_user_qp() is the reason why create_dci() is not small, we simply had hard time to understand if specific HW bit is needed or not in DCI flow. My goal is to have small per-QP type specific functions that calls to simple functions for very narrow scope. Something like that: static int create_dci(...) { ... configure_send_cq(..) configure_recv_sq(..) configure_srq(...) ... } static int create_user_qp(...) { ... configure_send_cq(..) configure_recv_sq(..) configure_srq(...) ... } Thanks > > Jason