linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net] net: thunderx: Fix TCP/UDP checksum offload for IPv6 pkts
@ 2017-11-22 12:37 Aleksey Makarov
  2017-11-22 15:57 ` Eric Dumazet
  0 siblings, 1 reply; 3+ messages in thread
From: Aleksey Makarov @ 2017-11-22 12:37 UTC (permalink / raw)
  To: linux-arm-kernel

From: Sunil Goutham <sgoutham@cavium.com>

This fixes a previous patch which missed some changes
and due to which L3 checksum offload was getting enabled
for IPv6 pkts. And HW is dropping these pkts as it assumes
the pkt is IPv4 when IP csum offload is set in the SQ
descriptor.

Fixes: bbbb494fd005 ("net: thunderx: Enable TSO and checksum offloads for ipv6")
Signed-off-by: Sunil Goutham <sgoutham@cavium.com>
Signed-off-by: Aleksey Makarov <aleksey.makarov@auriga.com>
---
 drivers/net/ethernet/cavium/thunder/nicvf_queues.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
index d4496e9afcdf..184d5bdbe7e0 100644
--- a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
+++ b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
@@ -1355,10 +1355,11 @@ nicvf_sq_add_hdr_subdesc(struct nicvf *nic, struct snd_queue *sq, int qentry,
 
 	/* Offload checksum calculation to HW */
 	if (skb->ip_summed == CHECKSUM_PARTIAL) {
-		hdr->csum_l3 = 1; /* Enable IP csum calculation */
 		hdr->l3_offset = skb_network_offset(skb);
 		hdr->l4_offset = skb_transport_offset(skb);
 
+		/* Enable IP HDR csum calculation for V4 pkts */
+		hdr->csum_l3 = (ip.v4->version == 4) ? 1 : 0;
 		proto = (ip.v4->version == 4) ? ip.v4->protocol :
 			ip.v6->nexthdr;
 
-- 
2.15.0

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH net] net: thunderx: Fix TCP/UDP checksum offload for IPv6 pkts
  2017-11-22 12:37 [PATCH net] net: thunderx: Fix TCP/UDP checksum offload for IPv6 pkts Aleksey Makarov
@ 2017-11-22 15:57 ` Eric Dumazet
  2017-11-23  4:19   ` Sunil Kovvuri
  0 siblings, 1 reply; 3+ messages in thread
From: Eric Dumazet @ 2017-11-22 15:57 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, 2017-11-22 at 15:37 +0300, Aleksey Makarov wrote:
> From: Sunil Goutham <sgoutham@cavium.com>
> 
> This fixes a previous patch which missed some changes
> and due to which L3 checksum offload was getting enabled
> for IPv6 pkts. And HW is dropping these pkts as it assumes
> the pkt is IPv4 when IP csum offload is set in the SQ
> descriptor.
> 
> Fixes: bbbb494fd005 ("net: thunderx: Enable TSO and checksum offloads
> for ipv6")
> Signed-off-by: Sunil Goutham <sgoutham@cavium.com>
> Signed-off-by: Aleksey Makarov <aleksey.makarov@auriga.com>
> ---
> ?drivers/net/ethernet/cavium/thunder/nicvf_queues.c | 3 ++-
> ?1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
> b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
> index d4496e9afcdf..184d5bdbe7e0 100644
> --- a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
> +++ b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
> @@ -1355,10 +1355,11 @@ nicvf_sq_add_hdr_subdesc(struct nicvf *nic,
> struct snd_queue *sq, int qentry,
> ?
> ?	/* Offload checksum calculation to HW */
> ?	if (skb->ip_summed == CHECKSUM_PARTIAL) {
> -		hdr->csum_l3 = 1; /* Enable IP csum calculation */
> ?		hdr->l3_offset = skb_network_offset(skb);
> ?		hdr->l4_offset = skb_transport_offset(skb);
> ?
> +		/* Enable IP HDR csum calculation for V4 pkts */
> +		hdr->csum_l3 = (ip.v4->version == 4) ? 1 : 0;

Have you tried to set hdr->csum_l3 to 0 regardless of version being 4
or 6 ?

This would remove the need for yet another conditional.

AFAIK, linux does not offload IPv4 header checksums to NIC, it is not
worth the trouble.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH net] net: thunderx: Fix TCP/UDP checksum offload for IPv6 pkts
  2017-11-22 15:57 ` Eric Dumazet
@ 2017-11-23  4:19   ` Sunil Kovvuri
  0 siblings, 0 replies; 3+ messages in thread
From: Sunil Kovvuri @ 2017-11-23  4:19 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, Nov 22, 2017 at 9:27 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> On Wed, 2017-11-22 at 15:37 +0300, Aleksey Makarov wrote:
>> From: Sunil Goutham <sgoutham@cavium.com>
>>
>> This fixes a previous patch which missed some changes
>> and due to which L3 checksum offload was getting enabled
>> for IPv6 pkts. And HW is dropping these pkts as it assumes
>> the pkt is IPv4 when IP csum offload is set in the SQ
>> descriptor.
>>
>> Fixes: bbbb494fd005 ("net: thunderx: Enable TSO and checksum offloads
>> for ipv6")
>> Signed-off-by: Sunil Goutham <sgoutham@cavium.com>
>> Signed-off-by: Aleksey Makarov <aleksey.makarov@auriga.com>
>> ---
>>  drivers/net/ethernet/cavium/thunder/nicvf_queues.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
>> b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
>> index d4496e9afcdf..184d5bdbe7e0 100644
>> --- a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
>> +++ b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
>> @@ -1355,10 +1355,11 @@ nicvf_sq_add_hdr_subdesc(struct nicvf *nic,
>> struct snd_queue *sq, int qentry,
>>
>>       /* Offload checksum calculation to HW */
>>       if (skb->ip_summed == CHECKSUM_PARTIAL) {
>> -             hdr->csum_l3 = 1; /* Enable IP csum calculation */
>>               hdr->l3_offset = skb_network_offset(skb);
>>               hdr->l4_offset = skb_transport_offset(skb);
>>
>> +             /* Enable IP HDR csum calculation for V4 pkts */
>> +             hdr->csum_l3 = (ip.v4->version == 4) ? 1 : 0;
>
> Have you tried to set hdr->csum_l3 to 0 regardless of version being 4
> or 6 ?
>
> This would remove the need for yet another conditional.
>
> AFAIK, linux does not offload IPv4 header checksums to NIC, it is not
> worth the trouble.

Looks like I misunderstood the IPSUM netdev feature flag.
Thanks, will check.

Sunil.

>
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-11-23  4:19 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-22 12:37 [PATCH net] net: thunderx: Fix TCP/UDP checksum offload for IPv6 pkts Aleksey Makarov
2017-11-22 15:57 ` Eric Dumazet
2017-11-23  4:19   ` Sunil Kovvuri

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).