Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0434d271fddaabd65aaa4dbd0145112d6e8aa388
Commit:     0434d271fddaabd65aaa4dbd0145112d6e8aa388
Parent:     39c0d0b919ae5080163bd2d41c0271cda250d382
Author:     Ralph Campbell <[EMAIL PROTECTED]>
AuthorDate: Thu Mar 15 14:44:53 2007 -0700
Committer:  Roland Dreier <[EMAIL PROTECTED]>
CommitDate: Wed Apr 18 20:20:55 2007 -0700

    IB/ipath: Fix QP error completion queue entries
    
    When switching to the QP error state, the completion queue entries
    (error or flush) were not being generated correctly.
    
    Signed-off-by: Bryan O'Sullivan <[EMAIL PROTECTED]>
    Signed-off-by: Roland Dreier <[EMAIL PROTECTED]>
---
 drivers/infiniband/hw/ipath/ipath_qp.c |    8 +++++---
 drivers/infiniband/hw/ipath/ipath_rc.c |    2 ++
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/hw/ipath/ipath_qp.c 
b/drivers/infiniband/hw/ipath/ipath_qp.c
index f119f00..64ea807 100644
--- a/drivers/infiniband/hw/ipath/ipath_qp.c
+++ b/drivers/infiniband/hw/ipath/ipath_qp.c
@@ -361,7 +361,7 @@ static void ipath_reset_qp(struct ipath_qp *qp)
  * @err: the receive completion error to signal if a RWQE is active
  *
  * Flushes both send and receive work queues.
- * QP s_lock should be held and interrupts disabled.
+ * The QP s_lock should be held and interrupts disabled.
  */
 
 void ipath_error_qp(struct ipath_qp *qp, enum ib_wc_status err)
@@ -393,6 +393,8 @@ void ipath_error_qp(struct ipath_qp *qp, enum ib_wc_status 
err)
        wc.port_num = 0;
        if (qp->r_wrid_valid) {
                qp->r_wrid_valid = 0;
+               wc.wr_id = qp->r_wr_id;
+               wc.opcode = IB_WC_RECV;
                wc.status = err;
                ipath_cq_enter(to_icq(qp->ibqp.send_cq), &wc, 1);
        }
@@ -972,7 +974,7 @@ bail:
  * @wc: the WC responsible for putting the QP in this state
  *
  * Flushes the send work queue.
- * The QP s_lock should be held.
+ * The QP s_lock should be held and interrupts disabled.
  */
 
 void ipath_sqerror_qp(struct ipath_qp *qp, struct ib_wc *wc)
@@ -998,12 +1000,12 @@ void ipath_sqerror_qp(struct ipath_qp *qp, struct ib_wc 
*wc)
        wc->status = IB_WC_WR_FLUSH_ERR;
 
        while (qp->s_last != qp->s_head) {
+               wqe = get_swqe_ptr(qp, qp->s_last);
                wc->wr_id = wqe->wr.wr_id;
                wc->opcode = ib_ipath_wc_opcode[wqe->wr.opcode];
                ipath_cq_enter(to_icq(qp->ibqp.send_cq), wc, 1);
                if (++qp->s_last >= qp->s_size)
                        qp->s_last = 0;
-               wqe = get_swqe_ptr(qp, qp->s_last);
        }
        qp->s_cur = qp->s_tail = qp->s_head;
        qp->state = IB_QPS_SQE;
diff --git a/drivers/infiniband/hw/ipath/ipath_rc.c 
b/drivers/infiniband/hw/ipath/ipath_rc.c
index c9c3d7c..2e4d544 100644
--- a/drivers/infiniband/hw/ipath/ipath_rc.c
+++ b/drivers/infiniband/hw/ipath/ipath_rc.c
@@ -895,8 +895,10 @@ static int do_rc_ack(struct ipath_qp *qp, u32 aeth, u32 
psn, int opcode)
                        wc.opcode = ib_ipath_wc_opcode[wqe->wr.opcode];
                        wc.vendor_err = 0;
                        wc.byte_len = wqe->length;
+                       wc.imm_data = 0;
                        wc.qp = &qp->ibqp;
                        wc.src_qp = qp->remote_qpn;
+                       wc.wc_flags = 0;
                        wc.pkey_index = 0;
                        wc.slid = qp->remote_ah_attr.dlid;
                        wc.sl = qp->remote_ah_attr.sl;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to