Thanks, this patch works for me too. I have one comments: in the IB spec it is written: "Enable or disable Send Queue Drained, Asynchronous Affiliated Event Notification. This modifier is only applicable when the next QP state chosen is SQD."
I think that the following transitions should support this event: SQD->RTS, SQD->SQD. what do you think? Dotan > -----Original Message----- > From: Roland Dreier [mailto:[EMAIL PROTECTED] > Sent: Saturday, February 04, 2006 12:51 AM > To: Dotan Barak > Cc: [email protected] > Subject: Re: [openib-general] Re: does the mthca driver > support RTS->SQD > event request? > > > I tested the previous patch, and I found that I forgot to add the > chunk to allow the IB_QP_EN_SQD_ASYNC_NOTIFY attribute to the allowed > mask for RTS->SQD transitions. > > With the patch below (already committed, queued for 2.6.17) a simple > test of the SQ drained event works for me. > > - R. > > Index: infiniband/hw/mthca/mthca_cmd.c > =================================================================== > --- infiniband/hw/mthca/mthca_cmd.c (revision 5292) > +++ infiniband/hw/mthca/mthca_cmd.c (working copy) > @@ -1638,7 +1638,8 @@ int mthca_MODIFY_QP(struct mthca_dev *de > } > > } else > - err = mthca_cmd(dev, mailbox->dma, (!!is_ee << > 24) | num, > + err = mthca_cmd(dev, mailbox->dma, > + optmask | (!!is_ee << 24) | num, > op_mod, op[trans], > CMD_TIME_CLASS_C, status); > > if (my_mailbox) > Index: infiniband/hw/mthca/mthca_qp.c > =================================================================== > --- infiniband/hw/mthca/mthca_qp.c (revision 5292) > +++ infiniband/hw/mthca/mthca_qp.c (working copy) > @@ -413,6 +413,12 @@ static const struct { > }, > [IB_QPS_SQD] = { > .trans = MTHCA_TRANS_RTS2SQD, > + .opt_param = { > + [UD] = IB_QP_EN_SQD_ASYNC_NOTIFY, > + [UC] = IB_QP_EN_SQD_ASYNC_NOTIFY, > + [RC] = IB_QP_EN_SQD_ASYNC_NOTIFY, > + [MLX] = IB_QP_EN_SQD_ASYNC_NOTIFY > + } > }, > }, > [IB_QPS_SQD] = { > @@ -575,6 +581,7 @@ int mthca_modify_qp(struct ib_qp *ibqp, > struct mthca_qp_param *qp_param; > struct mthca_qp_context *qp_context; > u32 req_param, opt_param; > + u32 sqd_event = 0; > u8 status; > int err; > > @@ -839,8 +846,13 @@ int mthca_modify_qp(struct ib_qp *ibqp, > qp_context->srqn = cpu_to_be32(1 << 24 | > > to_msrq(ibqp->srq)->srqn); > > + if (cur_state == IB_QPS_RTS && new_state == IB_QPS_SQD && > + attr_mask & IB_QP_EN_SQD_ASYNC_NOTIFY && > + attr->en_sqd_async_notify) > + sqd_event = 1 << 31; > + > err = mthca_MODIFY_QP(dev, > state_table[cur_state][new_state].trans, > - qp->qpn, 0, mailbox, 0, &status); > + qp->qpn, 0, mailbox, sqd_event, &status); > if (status) { > mthca_warn(dev, "modify QP %d returned status %02x.\n", > > state_table[cur_state][new_state].trans, status); > _______________________________________________ openib-general mailing list [email protected] http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
