net/mlx5e: Add TX stateless offloads for tunneling
Add support for TSO and TX checksum when using hw assisted, tunneled offloads. Signed-off-by: Matthew Finlay <matt@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b3f63c3d5e
commit
9879515895
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, Mellanox Technologies. All rights reserved.
|
* Copyright (c) 2015-2016, Mellanox Technologies. All rights reserved.
|
||||||
*
|
*
|
||||||
* This software is available to you under a choice of one of two
|
* This software is available to you under a choice of one of two
|
||||||
* licenses. You may choose to be licensed under the terms of the GNU
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
|
@ -185,9 +185,14 @@ static netdev_tx_t mlx5e_sq_xmit(struct mlx5e_sq *sq, struct sk_buff *skb)
|
||||||
|
|
||||||
memset(wqe, 0, sizeof(*wqe));
|
memset(wqe, 0, sizeof(*wqe));
|
||||||
|
|
||||||
if (likely(skb->ip_summed == CHECKSUM_PARTIAL))
|
if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) {
|
||||||
eseg->cs_flags = MLX5_ETH_WQE_L3_CSUM | MLX5_ETH_WQE_L4_CSUM;
|
eseg->cs_flags = MLX5_ETH_WQE_L3_CSUM;
|
||||||
else
|
if (skb->encapsulation)
|
||||||
|
eseg->cs_flags |= MLX5_ETH_WQE_L3_INNER_CSUM |
|
||||||
|
MLX5_ETH_WQE_L4_INNER_CSUM;
|
||||||
|
else
|
||||||
|
eseg->cs_flags |= MLX5_ETH_WQE_L4_CSUM;
|
||||||
|
} else
|
||||||
sq->stats.csum_offload_none++;
|
sq->stats.csum_offload_none++;
|
||||||
|
|
||||||
if (sq->cc != sq->prev_cc) {
|
if (sq->cc != sq->prev_cc) {
|
||||||
|
@ -200,8 +205,13 @@ static netdev_tx_t mlx5e_sq_xmit(struct mlx5e_sq *sq, struct sk_buff *skb)
|
||||||
|
|
||||||
eseg->mss = cpu_to_be16(skb_shinfo(skb)->gso_size);
|
eseg->mss = cpu_to_be16(skb_shinfo(skb)->gso_size);
|
||||||
opcode = MLX5_OPCODE_LSO;
|
opcode = MLX5_OPCODE_LSO;
|
||||||
ihs = skb_transport_offset(skb) + tcp_hdrlen(skb);
|
|
||||||
payload_len = skb->len - ihs;
|
if (skb->encapsulation)
|
||||||
|
ihs = skb_inner_transport_offset(skb) + inner_tcp_hdrlen(skb);
|
||||||
|
else
|
||||||
|
ihs = skb_transport_offset(skb) + tcp_hdrlen(skb);
|
||||||
|
|
||||||
|
payload_len = skb->len - ihs;
|
||||||
wi->num_bytes = skb->len +
|
wi->num_bytes = skb->len +
|
||||||
(skb_shinfo(skb)->gso_segs - 1) * ihs;
|
(skb_shinfo(skb)->gso_segs - 1) * ihs;
|
||||||
sq->stats.tso_packets++;
|
sq->stats.tso_packets++;
|
||||||
|
|
Loading…
Reference in New Issue