Extract the code which converts skb csum fields to WQE fields into a helper. This helper will be used by a follow-up series implementing software USO, to reduce code duplication. Signed-off-by: Joe Damato --- drivers/net/ethernet/mellanox/mlx4/en_tx.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c index 00210dbae1c3..f6059b533eac 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c @@ -861,6 +861,16 @@ static bool mlx4_en_build_dma_wqe(struct mlx4_en_priv *priv, return false; } +static __be32 mlx4_en_csum_flags(const struct sk_buff *skb) +{ + if (unlikely(skb->ip_summed != CHECKSUM_PARTIAL)) + return 0; + if (skb->encapsulation) + return cpu_to_be32(MLX4_WQE_CTRL_IP_CSUM); + + return cpu_to_be32(MLX4_WQE_CTRL_IP_CSUM | MLX4_WQE_CTRL_TCP_UDP_CSUM); +} + static bool mlx4_en_prep_vlan(const struct sk_buff *skb, union mlx4_wqe_qpn_vlan *qpn_vlan) { @@ -891,12 +901,12 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) struct mlx4_wqe_data_seg *data; struct mlx4_en_tx_info *tx_info; u32 __maybe_unused ring_cons; + __be32 op_own, csum_flags; int tx_ind; int nr_txbb; int desc_size; int real_size; u32 index, bf_index; - __be32 op_own; int lso_header_size; void *fragptr = NULL; bool bounce = false; @@ -991,12 +1001,10 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) /* Prepare ctrl segment apart opcode+ownership, which depends on * whether LSO is used */ tx_desc->ctrl.srcrb_flags = priv->ctrl_flags; - if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) { - if (!skb->encapsulation) - tx_desc->ctrl.srcrb_flags |= cpu_to_be32(MLX4_WQE_CTRL_IP_CSUM | - MLX4_WQE_CTRL_TCP_UDP_CSUM); - else - tx_desc->ctrl.srcrb_flags |= cpu_to_be32(MLX4_WQE_CTRL_IP_CSUM); + + csum_flags = mlx4_en_csum_flags(skb); + if (csum_flags) { + tx_desc->ctrl.srcrb_flags |= csum_flags; ring->tx_csum++; } -- 2.53.0-Meta