Message ID | 20180706172827.20488-1-bart.vanassche@wdc.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Jason Gunthorpe |
Headers | show |
On 7/6/2018 12:28 PM, Bart Van Assche wrote: > Introduce the function __c4iw_poll_cq_one() such that c4iw_poll_cq_one() > becomes easier to analyze for static source code analyzers. This patch > avoids that sparse reports the following: > > drivers/infiniband/hw/cxgb4/cq.c:401:36: warning: context imbalance in 'c4iw_flush_hw_cq' - unexpected unlock > drivers/infiniband/hw/cxgb4/cq.c:824:9: warning: context imbalance in 'c4iw_poll_cq_one' - different lock contexts for basic block > > Compile-tested only. > > Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> > Cc: Steve Wise <swise@chelsio.com> > --- > drivers/infiniband/hw/cxgb4/cq.c | 62 ++++++++++++++++++-------------- > 1 file changed, 35 insertions(+), 27 deletions(-) Acked-by: Steve Wise <swise@opengridcomputing.com> -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Jul 06, 2018 at 10:28:27AM -0700, Bart Van Assche wrote: > Introduce the function __c4iw_poll_cq_one() such that c4iw_poll_cq_one() > becomes easier to analyze for static source code analyzers. This patch > avoids that sparse reports the following: > > drivers/infiniband/hw/cxgb4/cq.c:401:36: warning: context imbalance in 'c4iw_flush_hw_cq' - unexpected unlock > drivers/infiniband/hw/cxgb4/cq.c:824:9: warning: context imbalance in 'c4iw_poll_cq_one' - different lock contexts for basic block > > Compile-tested only. > > Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> > Cc: Steve Wise <swise@chelsio.com> > drivers/infiniband/hw/cxgb4/cq.c | 62 ++++++++++++++++++-------------- > 1 file changed, 35 insertions(+), 27 deletions(-) > > diff --git a/drivers/infiniband/hw/cxgb4/cq.c b/drivers/infiniband/hw/cxgb4/cq.c > index 2be2e1ac1b5f..8426e74c6964 100644 > +++ b/drivers/infiniband/hw/cxgb4/cq.c > @@ -668,43 +668,22 @@ static int poll_cq(struct t4_wq *wq, struct t4_cq *cq, struct t4_cqe *cqe, > return ret; > } > > -/* > - * Get one cq entry from c4iw and map it to openib. > - * > - * Returns: > - * 0 cqe returned > - * -ENODATA EMPTY; > - * -EAGAIN caller must try again > - * any other -errno fatal error > - */ > -static int c4iw_poll_cq_one(struct c4iw_cq *chp, struct ib_wc *wc) > +static int __c4iw_poll_cq_one(struct c4iw_cq *chp, struct c4iw_qp *qhp, > + struct ib_wc *wc) > { > - struct c4iw_qp *qhp = NULL; > - struct t4_cqe uninitialized_var(cqe), *rd_cqe; > - struct t4_wq *wq; > + struct t4_cqe uninitialized_var(cqe); This uninitialized_var isn't needed these days > > @@ -819,8 +798,37 @@ static int c4iw_poll_cq_one(struct c4iw_cq *chp, struct ib_wc *wc) > } > } > out: > - if (wq) > + return ret; > +} > + > +/* > + * Get one cq entry from c4iw and map it to openib. > + * > + * Returns: > + * 0 cqe returned > + * -ENODATA EMPTY; > + * -EAGAIN caller must try again > + * any other -errno fatal error > + */ > +static int c4iw_poll_cq_one(struct c4iw_cq *chp, struct ib_wc *wc) > +{ > + struct c4iw_qp *qhp = NULL; > + struct t4_cqe uninitialized_var(cqe), *rd_cqe; > + int ret; 'cqe' is not used in the function. I made these two changes and applied it to for-next Jason -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/infiniband/hw/cxgb4/cq.c b/drivers/infiniband/hw/cxgb4/cq.c index 2be2e1ac1b5f..8426e74c6964 100644 --- a/drivers/infiniband/hw/cxgb4/cq.c +++ b/drivers/infiniband/hw/cxgb4/cq.c @@ -668,43 +668,22 @@ static int poll_cq(struct t4_wq *wq, struct t4_cq *cq, struct t4_cqe *cqe, return ret; } -/* - * Get one cq entry from c4iw and map it to openib. - * - * Returns: - * 0 cqe returned - * -ENODATA EMPTY; - * -EAGAIN caller must try again - * any other -errno fatal error - */ -static int c4iw_poll_cq_one(struct c4iw_cq *chp, struct ib_wc *wc) +static int __c4iw_poll_cq_one(struct c4iw_cq *chp, struct c4iw_qp *qhp, + struct ib_wc *wc) { - struct c4iw_qp *qhp = NULL; - struct t4_cqe uninitialized_var(cqe), *rd_cqe; - struct t4_wq *wq; + struct t4_cqe uninitialized_var(cqe); + struct t4_wq *wq = qhp ? &qhp->wq : NULL; u32 credit = 0; u8 cqe_flushed; u64 cookie = 0; int ret; - ret = t4_next_cqe(&chp->cq, &rd_cqe); - - if (ret) - return ret; - - qhp = get_qhp(chp->rhp, CQE_QPID(rd_cqe)); - if (!qhp) - wq = NULL; - else { - spin_lock(&qhp->lock); - wq = &(qhp->wq); - } ret = poll_cq(wq, &(chp->cq), &cqe, &cqe_flushed, &cookie, &credit); if (ret) goto out; wc->wr_id = cookie; - wc->qp = &qhp->ibqp; + wc->qp = qhp ? &qhp->ibqp : NULL; wc->vendor_err = CQE_STATUS(&cqe); wc->wc_flags = 0; @@ -819,8 +798,37 @@ static int c4iw_poll_cq_one(struct c4iw_cq *chp, struct ib_wc *wc) } } out: - if (wq) + return ret; +} + +/* + * Get one cq entry from c4iw and map it to openib. + * + * Returns: + * 0 cqe returned + * -ENODATA EMPTY; + * -EAGAIN caller must try again + * any other -errno fatal error + */ +static int c4iw_poll_cq_one(struct c4iw_cq *chp, struct ib_wc *wc) +{ + struct c4iw_qp *qhp = NULL; + struct t4_cqe uninitialized_var(cqe), *rd_cqe; + int ret; + + ret = t4_next_cqe(&chp->cq, &rd_cqe); + + if (ret) + return ret; + + qhp = get_qhp(chp->rhp, CQE_QPID(rd_cqe)); + if (qhp) { + spin_lock(&qhp->lock); + ret = __c4iw_poll_cq_one(chp, qhp, wc); spin_unlock(&qhp->lock); + } else { + ret = __c4iw_poll_cq_one(chp, NULL, wc); + } return ret; }
Introduce the function __c4iw_poll_cq_one() such that c4iw_poll_cq_one() becomes easier to analyze for static source code analyzers. This patch avoids that sparse reports the following: drivers/infiniband/hw/cxgb4/cq.c:401:36: warning: context imbalance in 'c4iw_flush_hw_cq' - unexpected unlock drivers/infiniband/hw/cxgb4/cq.c:824:9: warning: context imbalance in 'c4iw_poll_cq_one' - different lock contexts for basic block Compile-tested only. Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> Cc: Steve Wise <swise@chelsio.com> --- drivers/infiniband/hw/cxgb4/cq.c | 62 ++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 27 deletions(-)