RDMA/qedr: Fix endian problems around imm_data
authorJason Gunthorpe <jgg@mellanox.com>
Thu, 11 Jan 2018 21:43:07 +0000 (14:43 -0700)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 15 Jan 2018 22:33:21 +0000 (15:33 -0700)
The double swap matches what user space rdma-core does to imm_data.

wc->imm_data is not used in the kernel so this change has no practical
impact.

Acked-by: Michal Kalderon <michal.kalderon@cavium.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/qedr/verbs.c

index 3b9c89848d66988ec18d8946acbb2ab817d51c0a..5551120ac6ea528d9fe4f7289c47215d594707f1 100644 (file)
@@ -3039,7 +3039,7 @@ static int __qedr_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
                swqe->wqe_size = 2;
                swqe2 = qed_chain_produce(&qp->sq.pbl);
 
-               swqe->inv_key_or_imm_data = cpu_to_le32(wr->ex.imm_data);
+               swqe->inv_key_or_imm_data = cpu_to_le32(be32_to_cpu(wr->ex.imm_data));
                length = qedr_prepare_sq_send_data(dev, qp, swqe, swqe2,
                                                   wr, bad_wr);
                swqe->length = cpu_to_le32(length);
@@ -3590,7 +3590,7 @@ static inline int qedr_set_ok_cqe_resp_wc(struct rdma_cqe_responder *resp,
        wc->byte_len = le32_to_cpu(resp->length);
 
        if (resp->flags & QEDR_RESP_IMM) {
-               wc->ex.imm_data = le32_to_cpu(resp->imm_data_or_inv_r_Key);
+               wc->ex.imm_data = cpu_to_be32(le32_to_cpu(resp->imm_data_or_inv_r_Key));
                wc->wc_flags |= IB_WC_WITH_IMM;
 
                if (resp->flags & QEDR_RESP_RDMA)