mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-14 06:24:53 +08:00
[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:
parent
90f104da22
commit
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;
|
||||
|
Loading…
Reference in New Issue
Block a user