diff options
Diffstat (limited to 'drivers/infiniband/hw/mlx4/srq.c')
-rw-r--r-- | drivers/infiniband/hw/mlx4/srq.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/mlx4/srq.c b/drivers/infiniband/hw/mlx4/srq.c index 62d9285300af..dce5dfe3a70e 100644 --- a/drivers/infiniband/hw/mlx4/srq.c +++ b/drivers/infiniband/hw/mlx4/srq.c | |||
@@ -316,8 +316,15 @@ int mlx4_ib_post_srq_recv(struct ib_srq *ibsrq, struct ib_recv_wr *wr, | |||
316 | int err = 0; | 316 | int err = 0; |
317 | int nreq; | 317 | int nreq; |
318 | int i; | 318 | int i; |
319 | struct mlx4_ib_dev *mdev = to_mdev(ibsrq->device); | ||
319 | 320 | ||
320 | spin_lock_irqsave(&srq->lock, flags); | 321 | spin_lock_irqsave(&srq->lock, flags); |
322 | if (mdev->dev->persist->state & MLX4_DEVICE_STATE_INTERNAL_ERROR) { | ||
323 | err = -EIO; | ||
324 | *bad_wr = wr; | ||
325 | nreq = 0; | ||
326 | goto out; | ||
327 | } | ||
321 | 328 | ||
322 | for (nreq = 0; wr; ++nreq, wr = wr->next) { | 329 | for (nreq = 0; wr; ++nreq, wr = wr->next) { |
323 | if (unlikely(wr->num_sge > srq->msrq.max_gs)) { | 330 | if (unlikely(wr->num_sge > srq->msrq.max_gs)) { |
@@ -362,6 +369,7 @@ int mlx4_ib_post_srq_recv(struct ib_srq *ibsrq, struct ib_recv_wr *wr, | |||
362 | 369 | ||
363 | *srq->db.db = cpu_to_be32(srq->wqe_ctr); | 370 | *srq->db.db = cpu_to_be32(srq->wqe_ctr); |
364 | } | 371 | } |
372 | out: | ||
365 | 373 | ||
366 | spin_unlock_irqrestore(&srq->lock, flags); | 374 | spin_unlock_irqrestore(&srq->lock, flags); |
367 | 375 | ||