i40iw: Optimize inline data copy
authorHenry Orosco <henry.orosco@intel.com>
Thu, 10 Nov 2016 03:28:02 +0000 (21:28 -0600)
committerDoug Ledford <dledford@redhat.com>
Mon, 5 Dec 2016 21:09:35 +0000 (16:09 -0500)
Use memcpy for inline data copy in sends
and writes instead of byte by byte copy.

Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com>
Signed-off-by: Henry Orosco <henry.orosco@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/i40iw/i40iw_uk.c

index 4d28c3cb03cc3b45bd198b2f52ed7a3507dd78b5..47cb2e063ee386788a4dd645bf5cc5752ac13bde 100644 (file)
@@ -430,7 +430,7 @@ static enum i40iw_status_code i40iw_inline_rdma_write(struct i40iw_qp_uk *qp,
        struct i40iw_inline_rdma_write *op_info;
        u64 *push;
        u64 header = 0;
-       u32 i, wqe_idx;
+       u32 wqe_idx;
        enum i40iw_status_code ret_code;
        bool read_fence = false;
        u8 wqe_size;
@@ -465,14 +465,12 @@ static enum i40iw_status_code i40iw_inline_rdma_write(struct i40iw_qp_uk *qp,
        src = (u8 *)(op_info->data);
 
        if (op_info->len <= 16) {
-               for (i = 0; i < op_info->len; i++, src++, dest++)
-                       *dest = *src;
+               memcpy(dest, src, op_info->len);
        } else {
-               for (i = 0; i < 16; i++, src++, dest++)
-                       *dest = *src;
+               memcpy(dest, src, 16);
+               src += 16;
                dest = (u8 *)wqe + 32;
-               for (; i < op_info->len; i++, src++, dest++)
-                       *dest = *src;
+               memcpy(dest, src, op_info->len - 16);
        }
 
        wmb(); /* make sure WQE is populated before valid bit is set */
@@ -507,7 +505,7 @@ static enum i40iw_status_code i40iw_inline_send(struct i40iw_qp_uk *qp,
        u8 *dest, *src;
        struct i40iw_post_inline_send *op_info;
        u64 header;
-       u32 wqe_idx, i;
+       u32 wqe_idx;
        enum i40iw_status_code ret_code;
        bool read_fence = false;
        u8 wqe_size;
@@ -540,14 +538,12 @@ static enum i40iw_status_code i40iw_inline_send(struct i40iw_qp_uk *qp,
        src = (u8 *)(op_info->data);
 
        if (op_info->len <= 16) {
-               for (i = 0; i < op_info->len; i++, src++, dest++)
-                       *dest = *src;
+               memcpy(dest, src, op_info->len);
        } else {
-               for (i = 0; i < 16; i++, src++, dest++)
-                       *dest = *src;
+               memcpy(dest, src, 16);
+               src += 16;
                dest = (u8 *)wqe + 32;
-               for (; i < op_info->len; i++, src++, dest++)
-                       *dest = *src;
+               memcpy(dest, src, op_info->len - 16);
        }
 
        wmb(); /* make sure WQE is populated before valid bit is set */