diff options
author | Steve Wise <swise@opengridcomputing.com> | 2008-05-13 14:52:55 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2008-05-13 14:52:55 -0400 |
commit | a58e58fafdff4c25949221e46132e86f709d0b79 (patch) | |
tree | 09ee58e05c6600d6ecb4c195357678afff5aea5e /drivers | |
parent | f018c7e177a50390f6fcb137f1a28a6027d8ba50 (diff) |
RDMA/cxgb3: Wrap the software send queue pointer as needed on flush
cxio_flush_sq() was failing to wrap around the software send queue
causing garbage completion entries on a flush operation.
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/infiniband/hw/cxgb3/cxio_hal.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.c b/drivers/infiniband/hw/cxgb3/cxio_hal.c index ebf9d3043f80..3f441fc57c17 100644 --- a/drivers/infiniband/hw/cxgb3/cxio_hal.c +++ b/drivers/infiniband/hw/cxgb3/cxio_hal.c | |||
@@ -405,11 +405,11 @@ int cxio_flush_sq(struct t3_wq *wq, struct t3_cq *cq, int count) | |||
405 | struct t3_swsq *sqp = wq->sq + Q_PTR2IDX(wq->sq_rptr, wq->sq_size_log2); | 405 | struct t3_swsq *sqp = wq->sq + Q_PTR2IDX(wq->sq_rptr, wq->sq_size_log2); |
406 | 406 | ||
407 | ptr = wq->sq_rptr + count; | 407 | ptr = wq->sq_rptr + count; |
408 | sqp += count; | 408 | sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2); |
409 | while (ptr != wq->sq_wptr) { | 409 | while (ptr != wq->sq_wptr) { |
410 | insert_sq_cqe(wq, cq, sqp); | 410 | insert_sq_cqe(wq, cq, sqp); |
411 | sqp++; | ||
412 | ptr++; | 411 | ptr++; |
412 | sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2); | ||
413 | flushed++; | 413 | flushed++; |
414 | } | 414 | } |
415 | return flushed; | 415 | return flushed; |