|
@@ -811,16 +811,24 @@ int c2_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr,
|
|
|
|
|
|
switch (ib_wr->opcode) {
|
|
switch (ib_wr->opcode) {
|
|
case IB_WR_SEND:
|
|
case IB_WR_SEND:
|
|
- if (ib_wr->send_flags & IB_SEND_SOLICITED) {
|
|
|
|
- c2_wr_set_id(&wr, C2_WR_TYPE_SEND_SE);
|
|
|
|
- msg_size = sizeof(struct c2wr_send_req);
|
|
|
|
|
|
+ case IB_WR_SEND_WITH_INV:
|
|
|
|
+ if (ib_wr->opcode == IB_WR_SEND) {
|
|
|
|
+ if (ib_wr->send_flags & IB_SEND_SOLICITED)
|
|
|
|
+ c2_wr_set_id(&wr, C2_WR_TYPE_SEND_SE);
|
|
|
|
+ else
|
|
|
|
+ c2_wr_set_id(&wr, C2_WR_TYPE_SEND);
|
|
|
|
+ wr.sqwr.send.remote_stag = 0;
|
|
} else {
|
|
} else {
|
|
- c2_wr_set_id(&wr, C2_WR_TYPE_SEND);
|
|
|
|
- msg_size = sizeof(struct c2wr_send_req);
|
|
|
|
|
|
+ if (ib_wr->send_flags & IB_SEND_SOLICITED)
|
|
|
|
+ c2_wr_set_id(&wr, C2_WR_TYPE_SEND_SE_INV);
|
|
|
|
+ else
|
|
|
|
+ c2_wr_set_id(&wr, C2_WR_TYPE_SEND_INV);
|
|
|
|
+ wr.sqwr.send.remote_stag =
|
|
|
|
+ cpu_to_be32(ib_wr->ex.invalidate_rkey);
|
|
}
|
|
}
|
|
|
|
|
|
- wr.sqwr.send.remote_stag = 0;
|
|
|
|
- msg_size += sizeof(struct c2_data_addr) * ib_wr->num_sge;
|
|
|
|
|
|
+ msg_size = sizeof(struct c2wr_send_req) +
|
|
|
|
+ sizeof(struct c2_data_addr) * ib_wr->num_sge;
|
|
if (ib_wr->num_sge > qp->send_sgl_depth) {
|
|
if (ib_wr->num_sge > qp->send_sgl_depth) {
|
|
err = -EINVAL;
|
|
err = -EINVAL;
|
|
break;
|
|
break;
|