]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/infiniband/hw/cxgb4/qp.c
iw_cxgb4: don't use WR keys/addrs for 0 byte reads
[karo-tx-linux.git] / drivers / infiniband / hw / cxgb4 / qp.c
index 8e4154b4253e1719fbcf039f6a21052ecb612abb..cb7fc0d35d1d14efff512c2ef9101304532121ad 100644 (file)
@@ -293,8 +293,7 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
        }
        set_wr_txq(skb, CPL_PRIORITY_CONTROL, 0);
 
-       res_wr = (struct fw_ri_res_wr *)__skb_put(skb, wr_len);
-       memset(res_wr, 0, wr_len);
+       res_wr = __skb_put_zero(skb, wr_len);
        res_wr->op_nres = cpu_to_be32(
                        FW_WR_OP_V(FW_RI_RES_WR) |
                        FW_RI_RES_WR_NRES_V(2) |
@@ -570,7 +569,7 @@ static int build_rdma_read(union t4_wr *wqe, struct ib_send_wr *wr, u8 *len16)
 {
        if (wr->num_sge > 1)
                return -EINVAL;
-       if (wr->num_sge) {
+       if (wr->num_sge && wr->sg_list[0].length) {
                wqe->read.stag_src = cpu_to_be32(rdma_wr(wr)->rkey);
                wqe->read.to_src_hi = cpu_to_be32((u32)(rdma_wr(wr)->remote_addr
                                                        >> 32));
@@ -1228,7 +1227,7 @@ static void post_terminate(struct c4iw_qp *qhp, struct t4_cqe *err_cqe,
 
        set_wr_txq(skb, CPL_PRIORITY_DATA, qhp->ep->txq_idx);
 
-       wqe = (struct fw_ri_wr *)__skb_put(skb, sizeof(*wqe));
+       wqe = __skb_put(skb, sizeof(*wqe));
        memset(wqe, 0, sizeof *wqe);
        wqe->op_compl = cpu_to_be32(FW_WR_OP_V(FW_RI_INIT_WR));
        wqe->flowid_len16 = cpu_to_be32(
@@ -1350,7 +1349,7 @@ static int rdma_fini(struct c4iw_dev *rhp, struct c4iw_qp *qhp,
 
        set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx);
 
-       wqe = (struct fw_ri_wr *)__skb_put(skb, sizeof(*wqe));
+       wqe = __skb_put(skb, sizeof(*wqe));
        memset(wqe, 0, sizeof *wqe);
        wqe->op_compl = cpu_to_be32(
                FW_WR_OP_V(FW_RI_INIT_WR) |
@@ -1419,7 +1418,7 @@ static int rdma_init(struct c4iw_dev *rhp, struct c4iw_qp *qhp)
        }
        set_wr_txq(skb, CPL_PRIORITY_DATA, qhp->ep->txq_idx);
 
-       wqe = (struct fw_ri_wr *)__skb_put(skb, sizeof(*wqe));
+       wqe = __skb_put(skb, sizeof(*wqe));
        memset(wqe, 0, sizeof *wqe);
        wqe->op_compl = cpu_to_be32(
                FW_WR_OP_V(FW_RI_INIT_WR) |