Message ID | 1729065346-1364-3-git-send-email-selvin.xavier@broadcom.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | RDMA/bnxt_re: Fix access flags for MR and QP modify | expand |
Hi Leon/Jason, Ignore this patch. This patch is sent by mistake. It is available as 4/4 patch in the previous series. Sorry for the confusion. Thanks, Selvin On Wed, Oct 16, 2024 at 1:46 PM Selvin Xavier <selvin.xavier@broadcom.com> wrote: > > From: Hongguang Gao <hongguang.gao@broadcom.com> > > Access flag definition in MR and QP is different > in FW. Currently both reg/bind MR and modify/query QP uses > the same flags. Add a different function to map > the QP access flags for newer adapters. > > Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com> > Signed-off-by: Hongguang Gao <hongguang.gao@broadcom.com> > Reviewed-by: Damodharam Ammepalli <damodharam.ammepalli@broadcom.com> > Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com> > --- > drivers/infiniband/hw/bnxt_re/ib_verbs.c | 59 +++++++++++++++++++++++++++----- > 1 file changed, 50 insertions(+), 9 deletions(-) > > diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c > index 2a21a90..e610807 100644 > --- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c > +++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c > @@ -94,9 +94,9 @@ static int __from_ib_access_flags(int iflags) > return qflags; > }; > > -static enum ib_access_flags __to_ib_access_flags(int qflags) > +static int __to_ib_access_flags(int qflags) > { > - enum ib_access_flags iflags = 0; > + int iflags = 0; > > if (qflags & BNXT_QPLIB_ACCESS_LOCAL_WRITE) > iflags |= IB_ACCESS_LOCAL_WRITE; > @@ -113,7 +113,49 @@ static enum ib_access_flags __to_ib_access_flags(int qflags) > if (qflags & BNXT_QPLIB_ACCESS_ON_DEMAND) > iflags |= IB_ACCESS_ON_DEMAND; > return iflags; > -}; > +} > + > +static u8 __qp_access_flags_from_ib(struct bnxt_qplib_chip_ctx *cctx, int iflags) > +{ > + u8 qflags = 0; > + > + if (!bnxt_qplib_is_chip_gen_p5_p7(cctx)) > + /* For Wh+ */ > + return (u8)__from_ib_access_flags(iflags); > + > + /* For P5, P7 and later chips */ > + if (iflags & IB_ACCESS_LOCAL_WRITE) > + qflags |= CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE; > + if (iflags & IB_ACCESS_REMOTE_WRITE) > + qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE; > + if (iflags & IB_ACCESS_REMOTE_READ) > + qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_READ; > + if (iflags & IB_ACCESS_REMOTE_ATOMIC) > + qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_ATOMIC; > + > + return qflags; > +} > + > +static int __qp_access_flags_to_ib(struct bnxt_qplib_chip_ctx *cctx, u8 qflags) > +{ > + int iflags = 0; > + > + if (!bnxt_qplib_is_chip_gen_p5_p7(cctx)) > + /* For Wh+ */ > + return __to_ib_access_flags(qflags); > + > + /* For P5, P7 and later chips */ > + if (qflags & CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE) > + iflags |= IB_ACCESS_LOCAL_WRITE; > + if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE) > + iflags |= IB_ACCESS_REMOTE_WRITE; > + if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_READ) > + iflags |= IB_ACCESS_REMOTE_READ; > + if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_ATOMIC) > + iflags |= IB_ACCESS_REMOTE_ATOMIC; > + > + return iflags; > +} > > static void bnxt_re_check_and_set_relaxed_ordering(struct bnxt_re_dev *rdev, > struct bnxt_qplib_mrw *qplib_mr) > @@ -2053,12 +2095,10 @@ int bnxt_re_modify_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr, > if (qp_attr_mask & IB_QP_ACCESS_FLAGS) { > qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_ACCESS; > qp->qplib_qp.access = > - __from_ib_access_flags(qp_attr->qp_access_flags); > + __qp_access_flags_from_ib(qp->qplib_qp.cctx, > + qp_attr->qp_access_flags); > /* LOCAL_WRITE access must be set to allow RC receive */ > - qp->qplib_qp.access |= BNXT_QPLIB_ACCESS_LOCAL_WRITE; > - /* Temp: Set all params on QP as of now */ > - qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE; > - qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_REMOTE_READ; > + qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE; > } > if (qp_attr_mask & IB_QP_PKEY_INDEX) { > qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_PKEY; > @@ -2263,7 +2303,8 @@ int bnxt_re_query_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr, > qp_attr->qp_state = __to_ib_qp_state(qplib_qp->state); > qp_attr->cur_qp_state = __to_ib_qp_state(qplib_qp->cur_qp_state); > qp_attr->en_sqd_async_notify = qplib_qp->en_sqd_async_notify ? 1 : 0; > - qp_attr->qp_access_flags = __to_ib_access_flags(qplib_qp->access); > + qp_attr->qp_access_flags = __qp_access_flags_to_ib(qp->qplib_qp.cctx, > + qplib_qp->access); > qp_attr->pkey_index = qplib_qp->pkey_index; > qp_attr->qkey = qplib_qp->qkey; > qp_attr->ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE; > -- > 2.5.5 >
diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c index 2a21a90..e610807 100644 --- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c +++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c @@ -94,9 +94,9 @@ static int __from_ib_access_flags(int iflags) return qflags; }; -static enum ib_access_flags __to_ib_access_flags(int qflags) +static int __to_ib_access_flags(int qflags) { - enum ib_access_flags iflags = 0; + int iflags = 0; if (qflags & BNXT_QPLIB_ACCESS_LOCAL_WRITE) iflags |= IB_ACCESS_LOCAL_WRITE; @@ -113,7 +113,49 @@ static enum ib_access_flags __to_ib_access_flags(int qflags) if (qflags & BNXT_QPLIB_ACCESS_ON_DEMAND) iflags |= IB_ACCESS_ON_DEMAND; return iflags; -}; +} + +static u8 __qp_access_flags_from_ib(struct bnxt_qplib_chip_ctx *cctx, int iflags) +{ + u8 qflags = 0; + + if (!bnxt_qplib_is_chip_gen_p5_p7(cctx)) + /* For Wh+ */ + return (u8)__from_ib_access_flags(iflags); + + /* For P5, P7 and later chips */ + if (iflags & IB_ACCESS_LOCAL_WRITE) + qflags |= CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE; + if (iflags & IB_ACCESS_REMOTE_WRITE) + qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE; + if (iflags & IB_ACCESS_REMOTE_READ) + qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_READ; + if (iflags & IB_ACCESS_REMOTE_ATOMIC) + qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_ATOMIC; + + return qflags; +} + +static int __qp_access_flags_to_ib(struct bnxt_qplib_chip_ctx *cctx, u8 qflags) +{ + int iflags = 0; + + if (!bnxt_qplib_is_chip_gen_p5_p7(cctx)) + /* For Wh+ */ + return __to_ib_access_flags(qflags); + + /* For P5, P7 and later chips */ + if (qflags & CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE) + iflags |= IB_ACCESS_LOCAL_WRITE; + if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE) + iflags |= IB_ACCESS_REMOTE_WRITE; + if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_READ) + iflags |= IB_ACCESS_REMOTE_READ; + if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_ATOMIC) + iflags |= IB_ACCESS_REMOTE_ATOMIC; + + return iflags; +} static void bnxt_re_check_and_set_relaxed_ordering(struct bnxt_re_dev *rdev, struct bnxt_qplib_mrw *qplib_mr) @@ -2053,12 +2095,10 @@ int bnxt_re_modify_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr, if (qp_attr_mask & IB_QP_ACCESS_FLAGS) { qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_ACCESS; qp->qplib_qp.access = - __from_ib_access_flags(qp_attr->qp_access_flags); + __qp_access_flags_from_ib(qp->qplib_qp.cctx, + qp_attr->qp_access_flags); /* LOCAL_WRITE access must be set to allow RC receive */ - qp->qplib_qp.access |= BNXT_QPLIB_ACCESS_LOCAL_WRITE; - /* Temp: Set all params on QP as of now */ - qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE; - qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_REMOTE_READ; + qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE; } if (qp_attr_mask & IB_QP_PKEY_INDEX) { qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_PKEY; @@ -2263,7 +2303,8 @@ int bnxt_re_query_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr, qp_attr->qp_state = __to_ib_qp_state(qplib_qp->state); qp_attr->cur_qp_state = __to_ib_qp_state(qplib_qp->cur_qp_state); qp_attr->en_sqd_async_notify = qplib_qp->en_sqd_async_notify ? 1 : 0; - qp_attr->qp_access_flags = __to_ib_access_flags(qplib_qp->access); + qp_attr->qp_access_flags = __qp_access_flags_to_ib(qp->qplib_qp.cctx, + qplib_qp->access); qp_attr->pkey_index = qplib_qp->pkey_index; qp_attr->qkey = qplib_qp->qkey; qp_attr->ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE;