IB/mthca: reset QP's last pointers when transitioning to reset state
authorMichael S. Tsirkin <mst@mellanox.co.il>
Mon, 28 Nov 2005 19:19:43 +0000 (11:19 -0800)
committerRoland Dreier <rolandd@cisco.com>
Mon, 28 Nov 2005 19:19:43 +0000 (11:19 -0800)
last pointer is not updated when QP is modified to reset state.  This
causes data corruption if WQEs are already posted on the queue.

Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/mthca/mthca_qp.c

index dd4e13303e96e8f470e50c37e6d2a35377f1a373..f9c8eb9845c908660429cb03c296f417ad89c94d 100644 (file)
@@ -871,7 +871,10 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask)
                                       qp->ibqp.srq ? to_msrq(qp->ibqp.srq) : NULL);
 
                mthca_wq_init(&qp->sq);
+               qp->sq.last = get_send_wqe(qp, qp->sq.max - 1);
+
                mthca_wq_init(&qp->rq);
+               qp->rq.last = get_recv_wqe(qp, qp->rq.max - 1);
 
                if (mthca_is_memfree(dev)) {
                        *qp->sq.db = 0;