From: Moshe Lazer <mos...@mellanox.com>

Add support for IBV_SEND_IP_CSUM for posted send work-requests.

When this flag is set, enable the HW checksum calculation by setting
MLX4_WQE_CTRL_IP_CSUM and MLX4_WQE_CTRL_TCP_UDP_CSUM flags in the WQE
control segment.

Signed-off-by: Eyal Perry <eya...@mellanox.com>
Signed-off-by: Moshe Lazer <mos...@mellanox.com>
Signed-off-by: Or Gerlitz <ogerl...@mellanox.com>
---
 src/qp.c  |   11 ++++++++++-
 src/wqe.h |    2 ++
 2 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/src/qp.c b/src/qp.c
index 721bed4..5b800e7 100644
--- a/src/qp.c
+++ b/src/qp.c
@@ -286,6 +286,10 @@ int mlx4_post_send(struct ibv_qp *ibqp, struct ibv_send_wr 
*wr,
                        break;
 
                case IBV_QPT_UD:
+                       ctrl->srcrb_flags |=
+                               wr->send_flags & IBV_SEND_IP_CSUM ?
+                               htonl(MLX4_WQE_CTRL_IP_CSUM |
+                                     MLX4_WQE_CTRL_TCP_UDP_CSUM) : 0;
                        set_datagram_seg(wqe, wr);
                        wqe  += sizeof (struct mlx4_wqe_datagram_seg);
                        size += sizeof (struct mlx4_wqe_datagram_seg) / 16;
@@ -294,7 +298,12 @@ int mlx4_post_send(struct ibv_qp *ibqp, struct ibv_send_wr 
*wr,
                case IBV_QPT_RAW_PACKET:
                        /* For raw eth, the MLX4_WQE_CTRL_SOLICIT flag is used
                         * to indicate that no icrc should be calculated */
-                       ctrl->srcrb_flags |= htonl(MLX4_WQE_CTRL_SOLICIT);
+                       ctrl->srcrb_flags |=
+                               wr->send_flags & IBV_SEND_IP_CSUM ?
+                               htonl(MLX4_WQE_CTRL_IP_CSUM |
+                                     MLX4_WQE_CTRL_TCP_UDP_CSUM |
+                                     MLX4_WQE_CTRL_SOLICIT) :
+                               htonl(MLX4_WQE_CTRL_SOLICIT);
                        break;
 
                default:
diff --git a/src/wqe.h b/src/wqe.h
index bbd22ba..ebd5167 100644
--- a/src/wqe.h
+++ b/src/wqe.h
@@ -41,6 +41,8 @@ enum {
        MLX4_WQE_CTRL_FENCE     = 1 << 6,
        MLX4_WQE_CTRL_CQ_UPDATE = 3 << 2,
        MLX4_WQE_CTRL_SOLICIT   = 1 << 1,
+       MLX4_WQE_CTRL_IP_CSUM   = 1 << 4,
+       MLX4_WQE_CTRL_TCP_UDP_CSUM = 1 << 5
 };
 
 enum {
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to