On Wed, Mar 31, 2010 at 7:57 PM, Ralph Campbell <[email protected]> wrote: > > ib_req_notify_cq(IB_CQ_NEXT_COMP) is not guaranteed to generate > a callback for the next completion entered since there is a race > between arming the callback and another CQE being added to the queue. > The IB_CQ_REPORT_MISSED_EVENTS flag was added to detect this > race and allow the verbs consumer to call ib_poll_cq() and > ib_req_notify_cq() again to avoid delays in processing the CQE. > > Signed-off-by: Ralph Campbell <[email protected]> > --- > > drivers/infiniband/ulp/srp/ib_srp.c | 7 ++++++- > 1 files changed, 6 insertions(+), 1 deletions(-) > > diff --git a/drivers/infiniband/ulp/srp/ib_srp.c > b/drivers/infiniband/ulp/srp/ib_srp.c > index ed3f9eb..b0376f1 100644 > --- a/drivers/infiniband/ulp/srp/ib_srp.c > +++ b/drivers/infiniband/ulp/srp/ib_srp.c > @@ -921,8 +921,9 @@ static void srp_recv_completion(struct ib_cq *cq, void > *target_ptr) > { > struct srp_target_port *target = target_ptr; > struct ib_wc wc; > + int ret; > > - ib_req_notify_cq(cq, IB_CQ_NEXT_COMP); > +again: > while (ib_poll_cq(cq, 1, &wc) > 0) { > if (wc.status) { > shost_printk(KERN_ERR, target->scsi_host, > @@ -934,6 +935,10 @@ static void srp_recv_completion(struct ib_cq *cq, void > *target_ptr) > > srp_handle_recv(target, &wc); > } > + ret = ib_req_notify_cq(cq, IB_CQ_NEXT_COMP | > + IB_CQ_REPORT_MISSED_EVENTS); > + if (ret > 0) > + goto again; > } > > static void srp_send_completion(struct ib_cq *cq, void *target_ptr)
NAK. The SRP initiator works fine without this patch, and this patch slows down the SRP initiator. Bart. -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
