|
@@ -706,12 +706,8 @@ static int build_memreg(struct t4_sq *sq, union t4_wr *wqe,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int build_inv_stag(struct c4iw_dev *dev, union t4_wr *wqe,
|
|
|
- struct ib_send_wr *wr, u8 *len16)
|
|
|
+static int build_inv_stag(union t4_wr *wqe, struct ib_send_wr *wr, u8 *len16)
|
|
|
{
|
|
|
- struct c4iw_mr *mhp = get_mhp(dev, wr->ex.invalidate_rkey >> 8);
|
|
|
-
|
|
|
- mhp->attr.state = 0;
|
|
|
wqe->inv.stag_inv = cpu_to_be32(wr->ex.invalidate_rkey);
|
|
|
wqe->inv.r2 = 0;
|
|
|
*len16 = DIV_ROUND_UP(sizeof wqe->inv, 16);
|
|
@@ -842,10 +838,13 @@ int c4iw_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
|
|
|
case IB_WR_RDMA_READ_WITH_INV:
|
|
|
fw_opcode = FW_RI_RDMA_READ_WR;
|
|
|
swsqe->opcode = FW_RI_READ_REQ;
|
|
|
- if (wr->opcode == IB_WR_RDMA_READ_WITH_INV)
|
|
|
+ if (wr->opcode == IB_WR_RDMA_READ_WITH_INV) {
|
|
|
+ c4iw_invalidate_mr(qhp->rhp,
|
|
|
+ wr->sg_list[0].lkey);
|
|
|
fw_flags = FW_RI_RDMA_READ_INVALIDATE;
|
|
|
- else
|
|
|
+ } else {
|
|
|
fw_flags = 0;
|
|
|
+ }
|
|
|
err = build_rdma_read(wqe, wr, &len16);
|
|
|
if (err)
|
|
|
break;
|
|
@@ -878,7 +877,8 @@ int c4iw_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
|
|
|
fw_flags |= FW_RI_LOCAL_FENCE_FLAG;
|
|
|
fw_opcode = FW_RI_INV_LSTAG_WR;
|
|
|
swsqe->opcode = FW_RI_LOCAL_INV;
|
|
|
- err = build_inv_stag(qhp->rhp, wqe, wr, &len16);
|
|
|
+ err = build_inv_stag(wqe, wr, &len16);
|
|
|
+ c4iw_invalidate_mr(qhp->rhp, wr->ex.invalidate_rkey);
|
|
|
break;
|
|
|
default:
|
|
|
PDBG("%s post of type=%d TBD!\n", __func__,
|