diff options
| author | Ralph Campbell <ralph.campbell@qlogic.com> | 2008-10-27 18:31:25 -0400 |
|---|---|---|
| committer | Roland Dreier <rolandd@cisco.com> | 2008-10-27 18:31:25 -0400 |
| commit | a8b56f296d7d977fea2512e353a131f8da490aa5 (patch) | |
| tree | b40928bd5bb7f77df0671bf8842c6cd69dc6d069 /drivers | |
| parent | 332edc2f7fa58b818dfed1cede60272eecc27c0a (diff) | |
IB/ipath: Fix RDMA write with immediate copy of last packet
When the last packet of a RDMA write with immediate is received, the
next receive work queue entry ID should be used to generate a completion
entry. The code was incorrectly resetting part of the state used to copy
the last packet.
Signed-off-by: Ralph Campbell <ralph.campbell@qlogic.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_ruc.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_ruc.c b/drivers/infiniband/hw/ipath/ipath_ruc.c index fc0f6d9e6030..2296832f94da 100644 --- a/drivers/infiniband/hw/ipath/ipath_ruc.c +++ b/drivers/infiniband/hw/ipath/ipath_ruc.c | |||
| @@ -156,7 +156,7 @@ bail: | |||
| 156 | /** | 156 | /** |
| 157 | * ipath_get_rwqe - copy the next RWQE into the QP's RWQE | 157 | * ipath_get_rwqe - copy the next RWQE into the QP's RWQE |
| 158 | * @qp: the QP | 158 | * @qp: the QP |
| 159 | * @wr_id_only: update wr_id only, not SGEs | 159 | * @wr_id_only: update qp->r_wr_id only, not qp->r_sge |
| 160 | * | 160 | * |
| 161 | * Return 0 if no RWQE is available, otherwise return 1. | 161 | * Return 0 if no RWQE is available, otherwise return 1. |
| 162 | * | 162 | * |
| @@ -173,8 +173,6 @@ int ipath_get_rwqe(struct ipath_qp *qp, int wr_id_only) | |||
| 173 | u32 tail; | 173 | u32 tail; |
| 174 | int ret; | 174 | int ret; |
| 175 | 175 | ||
| 176 | qp->r_sge.sg_list = qp->r_sg_list; | ||
| 177 | |||
| 178 | if (qp->ibqp.srq) { | 176 | if (qp->ibqp.srq) { |
| 179 | srq = to_isrq(qp->ibqp.srq); | 177 | srq = to_isrq(qp->ibqp.srq); |
| 180 | handler = srq->ibsrq.event_handler; | 178 | handler = srq->ibsrq.event_handler; |
| @@ -206,8 +204,10 @@ int ipath_get_rwqe(struct ipath_qp *qp, int wr_id_only) | |||
| 206 | wqe = get_rwqe_ptr(rq, tail); | 204 | wqe = get_rwqe_ptr(rq, tail); |
| 207 | if (++tail >= rq->size) | 205 | if (++tail >= rq->size) |
| 208 | tail = 0; | 206 | tail = 0; |
| 209 | } while (!wr_id_only && !ipath_init_sge(qp, wqe, &qp->r_len, | 207 | if (wr_id_only) |
| 210 | &qp->r_sge)); | 208 | break; |
| 209 | qp->r_sge.sg_list = qp->r_sg_list; | ||
| 210 | } while (!ipath_init_sge(qp, wqe, &qp->r_len, &qp->r_sge)); | ||
| 211 | qp->r_wr_id = wqe->wr_id; | 211 | qp->r_wr_id = wqe->wr_id; |
| 212 | wq->tail = tail; | 212 | wq->tail = tail; |
| 213 | 213 | ||
