[IB] mthca: detect SRQ overflow
The hardware relies on us keeping one extra work request that never gets used in SRQs. Add checks to the SRQ work request posting functions so that they fail when someone is about to use up that extra work request, rather than when someone uses the very last work request. Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
Родитель
90f104da22
Коммит
e23d6d2b09
|
@ -438,6 +438,14 @@ int mthca_tavor_post_srq_recv(struct ib_srq *ibsrq, struct ib_recv_wr *wr,
|
|||
|
||||
wqe = get_wqe(srq, ind);
|
||||
next_ind = *wqe_to_link(wqe);
|
||||
|
||||
if (next_ind < 0) {
|
||||
mthca_err(dev, "SRQ %06x full\n", srq->srqn);
|
||||
err = -ENOMEM;
|
||||
*bad_wr = wr;
|
||||
break;
|
||||
}
|
||||
|
||||
prev_wqe = srq->last;
|
||||
srq->last = wqe;
|
||||
|
||||
|
@ -529,6 +537,13 @@ int mthca_arbel_post_srq_recv(struct ib_srq *ibsrq, struct ib_recv_wr *wr,
|
|||
wqe = get_wqe(srq, ind);
|
||||
next_ind = *wqe_to_link(wqe);
|
||||
|
||||
if (next_ind < 0) {
|
||||
mthca_err(dev, "SRQ %06x full\n", srq->srqn);
|
||||
err = -ENOMEM;
|
||||
*bad_wr = wr;
|
||||
break;
|
||||
}
|
||||
|
||||
((struct mthca_next_seg *) wqe)->nda_op =
|
||||
cpu_to_be32((next_ind << srq->wqe_shift) | 1);
|
||||
((struct mthca_next_seg *) wqe)->ee_nds = 0;
|
||||
|
|
Загрузка…
Ссылка в новой задаче