int iwch_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc) { struct iwch_dev *rhp; struct iwch_cq *chp; unsigned long flags; int npolled; int err = 0; chp = to_iwch_cq(ibcq); rhp = chp->rhp; spin_lock_irqsave(&chp->lock, flags); for (npolled = 0; npolled < num_entries; ++npolled) { #ifdef DEBUG int i=0; #endif do { err = iwch_poll_cq_one(rhp, chp, wc + npolled); #ifdef DEBUG BUG_ON(++i > 1000); #endif } while (err == -EAGAIN); if (err <= 0) break; } spin_unlock_irqrestore(&chp->lock, flags); if (err < 0) return err; else { return npolled; } }
int iwch_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc) { struct iwch_dev *rhp; struct iwch_cq *chp; int npolled; int err = 0; chp = to_iwch_cq(ibcq); rhp = chp->rhp; mtx_lock(&chp->lock); for (npolled = 0; npolled < num_entries; ++npolled) { #ifdef DEBUG int i=0; #endif /* * Because T3 can post CQEs that are _not_ associated * with a WR, we might have to poll again after removing * one of these. */ do { err = iwch_poll_cq_one(rhp, chp, wc + npolled); #ifdef DEBUG PANIC_IF(++i > 1000); #endif } while (err == -EAGAIN); if (err <= 0) break; } mtx_unlock(&chp->lock); if (err < 0) { return err; } else { return npolled; } }