mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 08:44:21 +08:00
RDMA/amso1100: Add support for "send with invalidate" work requests
Handle IB_WR_SEND_WITH_INV work requests. This resurrects a patch sent long ago by Mikkel Hagen <mhagen@iol.unh.edu>. Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
0f39cf3d54
commit
139b2db795
@ -811,16 +811,24 @@ int c2_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr,
|
||||
|
||||
switch (ib_wr->opcode) {
|
||||
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 {
|
||||
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) {
|
||||
err = -EINVAL;
|
||||
break;
|
||||
|
@ -455,7 +455,8 @@ int __devinit c2_rnic_init(struct c2_dev *c2dev)
|
||||
IB_DEVICE_CURR_QP_STATE_MOD |
|
||||
IB_DEVICE_SYS_IMAGE_GUID |
|
||||
IB_DEVICE_ZERO_STAG |
|
||||
IB_DEVICE_MEM_WINDOW);
|
||||
IB_DEVICE_MEM_WINDOW |
|
||||
IB_DEVICE_SEND_W_INV);
|
||||
|
||||
/* Allocate the qptr_array */
|
||||
c2dev->qptr_array = vmalloc(C2_MAX_CQS * sizeof(void *));
|
||||
|
Loading…
Reference in New Issue
Block a user