On Mon, Nov 18, 2019 at 04:49:09PM -0500, Chuck Lever wrote: > @@ -65,11 +68,35 @@ static void rdma_dim_init(struct ib_cq *cq) > INIT_WORK(&dim->work, ib_cq_rdma_dim_work); > } > > +/** > + * ib_poll_cq - poll a CQ for completion(s) > + * @cq: the CQ being polled > + * @num_entries: maximum number of completions to return > + * @wc: array of at least @num_entries &struct ib_wc where completions > + * will be returned > + * > + * Poll a CQ for (possibly multiple) completions. If the return value > + * is < 0, an error occurred. If the return value is >= 0, it is the > + * number of completions returned. If the return value is > + * non-negative and < num_entries, then the CQ was emptied. > + */ > +int ib_poll_cq(struct ib_cq *cq, int num_entries, struct ib_wc *wc) > +{ > + int rc; > + > + rc = cq->device->ops.poll_cq(cq, num_entries, wc); > + trace_cq_poll(cq, num_entries, rc); > + return rc; > +} > +EXPORT_SYMBOL(ib_poll_cq); Back to the non-inlined function? Jason