On Fri, Oct 25, 2019 at 08:16:15AM +0000, Bernard Metzler wrote: > > >To: bmt@xxxxxxxxxxxxxx > >From: "Dan Carpenter" <dan.carpenter@xxxxxxxxxx> > >Date: 10/24/2019 10:39PM > >Cc: linux-rdma@xxxxxxxxxxxxxxx > >Subject: [EXTERNAL] [bug report] RDMA/siw: Fix SQ/RQ drain logic > > > >Hello Bernard Metzler, > > > >The patch cf049bb31f71: "RDMA/siw: Fix SQ/RQ drain logic" from Oct 4, > >2019, leads to the following static checker warning: > > > > drivers/infiniband/sw/siw/siw_verbs.c:1079 siw_post_receive() > > error: locking inconsistency. We assume 'read_sem:&qp->state_lock' > >is both locked and unlocked at the start. > > > >drivers/infiniband/sw/siw/siw_verbs.c > > 978 int siw_post_receive(struct ib_qp *base_qp, const struct > >ib_recv_wr *wr, > > 979 const struct ib_recv_wr **bad_wr) > > 980 { > > 981 struct siw_qp *qp = to_siw_qp(base_qp); > > 982 unsigned long flags; > > 983 int rv = 0; > > 984 > > 985 if (qp->srq) { > > 986 *bad_wr = wr; > > 987 return -EOPNOTSUPP; /* what else from > >errno.h? */ > > 988 } > > 989 if (!qp->kernel_verbs) { > > 990 siw_dbg_qp(qp, "no kernel post_recv for user > >mapped sq\n"); > > 991 up_read(&qp->state_lock); > > ^^^^^^^^^^^^^^^^^^^^^^^^ > >The patch changes the locking so this isn't held here and should be > >released. Should it be held, though? > > Yes, this is a BUG. Thanks very much! There is no qp spinlock to > be held here. I moved that down to state checking. No need to > hold the qp lock before. > > Shall I re-send, or can we just amend the patch, > removing that single 'up_read()' line? You need to send a new patch against for-next to fix this Jason