* [PATCH net-next] mlxsw: Enable Tx checksum offload
@ 2025-02-07 18:00 Petr Machata
2025-02-10 20:59 ` Simon Horman
2025-02-11 3:30 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 3+ messages in thread
From: Petr Machata @ 2025-02-07 18:00 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Andrew Lunn, netdev
Cc: Ido Schimmel, Petr Machata, mlxsw
From: Ido Schimmel <idosch@nvidia.com>
The device is able to checksum plain TCP / UDP packets over IPv4 / IPv6
when the 'ipcs' bit in the send descriptor is set. Advertise support for
the 'NETIF_F_IP{,6}_CSUM' features in net devices registered by the
driver and VLAN uppers and set the 'ipcs' bit when the stack requests Tx
checksum offload.
Note that the device also calculates the IPv4 checksum, but it first
zeroes the current checksum so there should not be any difference
compared to the checksum calculated by the kernel.
On SN5600 (Spectrum-4) there is about 10% improvement in Tx packet rate
with 1400 byte packets when using pktgen.
Tested on Spectrum-{1,2,3,4} with all the combinations of IPv4 / IPv6,
TCP / UDP, with and without VLAN.
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Signed-off-by: Petr Machata <petrm@nvidia.com>
---
drivers/net/ethernet/mellanox/mlxsw/pci.c | 2 ++
drivers/net/ethernet/mellanox/mlxsw/pci_hw.h | 5 +++++
drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 6 ++++--
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c
index 2c34c420af56..3488d6e4fbf1 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/pci.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c
@@ -2595,6 +2595,8 @@ static int mlxsw_pci_skb_transmit(void *bus_priv, struct sk_buff *skb,
for (i++; i < MLXSW_PCI_WQE_SG_ENTRIES; i++)
mlxsw_pci_wqe_byte_count_set(wqe, i, 0);
+ mlxsw_pci_wqe_ipcs_set(wqe, skb->ip_summed == CHECKSUM_PARTIAL);
+
/* Everything is set up, ring producer doorbell to get HW going */
q->producer_counter++;
mlxsw_pci_queue_doorbell_producer_ring(mlxsw_pci, q);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci_hw.h b/drivers/net/ethernet/mellanox/mlxsw/pci_hw.h
index e56da24e9e9e..882e01abd9c4 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/pci_hw.h
+++ b/drivers/net/ethernet/mellanox/mlxsw/pci_hw.h
@@ -96,6 +96,11 @@ MLXSW_ITEM32(pci, wqe, lp, 0x00, 30, 1);
*/
MLXSW_ITEM32(pci, wqe, type, 0x00, 23, 4);
+/* pci_wqe_ipcs
+ * Calculate IPv4 and TCP / UDP checksums.
+ */
+MLXSW_ITEM32(pci, wqe, ipcs, 0x00, 14, 1);
+
/* pci_wqe_byte_count
* Size of i-th scatter/gather entry, 0 if entry is unused.
*/
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index 98632c046170..2f4e14d2f2e2 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -1630,8 +1630,10 @@ static int mlxsw_sp_port_create(struct mlxsw_sp *mlxsw_sp, u16 local_port,
netif_carrier_off(dev);
dev->features |= NETIF_F_SG | NETIF_F_HW_VLAN_CTAG_FILTER |
- NETIF_F_HW_TC;
- dev->hw_features |= NETIF_F_HW_TC | NETIF_F_LOOPBACK;
+ NETIF_F_HW_TC | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
+ dev->hw_features |= NETIF_F_HW_TC | NETIF_F_LOOPBACK |
+ NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
+ dev->vlan_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
dev->lltx = true;
dev->netns_local = true;
--
2.47.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH net-next] mlxsw: Enable Tx checksum offload
2025-02-07 18:00 [PATCH net-next] mlxsw: Enable Tx checksum offload Petr Machata
@ 2025-02-10 20:59 ` Simon Horman
2025-02-11 3:30 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: Simon Horman @ 2025-02-10 20:59 UTC (permalink / raw)
To: Petr Machata
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Andrew Lunn, netdev, Ido Schimmel, mlxsw
On Fri, Feb 07, 2025 at 07:00:44PM +0100, Petr Machata wrote:
> From: Ido Schimmel <idosch@nvidia.com>
>
> The device is able to checksum plain TCP / UDP packets over IPv4 / IPv6
> when the 'ipcs' bit in the send descriptor is set. Advertise support for
> the 'NETIF_F_IP{,6}_CSUM' features in net devices registered by the
> driver and VLAN uppers and set the 'ipcs' bit when the stack requests Tx
> checksum offload.
>
> Note that the device also calculates the IPv4 checksum, but it first
> zeroes the current checksum so there should not be any difference
> compared to the checksum calculated by the kernel.
>
> On SN5600 (Spectrum-4) there is about 10% improvement in Tx packet rate
> with 1400 byte packets when using pktgen.
>
> Tested on Spectrum-{1,2,3,4} with all the combinations of IPv4 / IPv6,
> TCP / UDP, with and without VLAN.
>
> Signed-off-by: Ido Schimmel <idosch@nvidia.com>
> Reviewed-by: Petr Machata <petrm@nvidia.com>
> Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net-next] mlxsw: Enable Tx checksum offload
2025-02-07 18:00 [PATCH net-next] mlxsw: Enable Tx checksum offload Petr Machata
2025-02-10 20:59 ` Simon Horman
@ 2025-02-11 3:30 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-02-11 3:30 UTC (permalink / raw)
To: Petr Machata
Cc: davem, edumazet, kuba, pabeni, andrew+netdev, netdev, idosch,
mlxsw
Hello:
This patch was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Fri, 7 Feb 2025 19:00:44 +0100 you wrote:
> From: Ido Schimmel <idosch@nvidia.com>
>
> The device is able to checksum plain TCP / UDP packets over IPv4 / IPv6
> when the 'ipcs' bit in the send descriptor is set. Advertise support for
> the 'NETIF_F_IP{,6}_CSUM' features in net devices registered by the
> driver and VLAN uppers and set the 'ipcs' bit when the stack requests Tx
> checksum offload.
>
> [...]
Here is the summary with links:
- [net-next] mlxsw: Enable Tx checksum offload
https://git.kernel.org/netdev/net-next/c/907dd32b4a8a
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-02-11 3:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-07 18:00 [PATCH net-next] mlxsw: Enable Tx checksum offload Petr Machata
2025-02-10 20:59 ` Simon Horman
2025-02-11 3:30 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).