From: Michal Schmidt <hidden> Date: 2012-09-13 22:59:54
Commit d6cb3e41 "bnx2x: fix checksum validation" caused a performance
regression for IPv6. Rx checksum offload does not work. IPv6 packets
are passed to the stack with CHECKSUM_NONE.
The hardware obviously cannot perform IP checksum validation for IPv6,
because there is no checksum in the IPv6 header. This should not prevent
us from setting CHECKSUM_UNNECESSARY.
Tested on BCM57711.
Signed-off-by: Michal Schmidt <redacted>
---
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
@@ -662,14 +662,16 @@ void bnx2x_csum_validate(struct sk_buff *skb, union eth_rx_cqe *cqe,structbnx2x_fastpath*fp,structbnx2x_eth_q_stats*qstats){-/* Do nothing if no IP/L4 csum validation was done */-+/* Do nothing if no L4 csum validation was done.+*WedonotcheckwhetherIPcsumwasvalidated.ForIPv4weassume+*thatifthecardgotasfarasvalidatingtheL4csum,italso+*validatedtheIPcsum.IPv6hasnoIPcsum.+*/if(cqe->fast_path_cqe.status_flags&-(ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG|-ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG))+ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG)return;-/* If both IP/L4 validation were done, check if an error was found. */+/* If L4 validation was done, check if an error was found. */if(cqe->fast_path_cqe.type_error_flags&(ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG|
From: Eric Dumazet <hidden> Date: 2012-09-13 23:14:45
On Fri, 2012-09-14 at 00:59 +0200, Michal Schmidt wrote:
quoted hunk
Commit d6cb3e41 "bnx2x: fix checksum validation" caused a performance
regression for IPv6. Rx checksum offload does not work. IPv6 packets
are passed to the stack with CHECKSUM_NONE.
The hardware obviously cannot perform IP checksum validation for IPv6,
because there is no checksum in the IPv6 header. This should not prevent
us from setting CHECKSUM_UNNECESSARY.
Tested on BCM57711.
Signed-off-by: Michal Schmidt <redacted>
---
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
@@ -662,14 +662,16 @@ void bnx2x_csum_validate(struct sk_buff *skb, union eth_rx_cqe *cqe,structbnx2x_fastpath*fp,structbnx2x_eth_q_stats*qstats){-/* Do nothing if no IP/L4 csum validation was done */-+/* Do nothing if no L4 csum validation was done.+*WedonotcheckwhetherIPcsumwasvalidated.ForIPv4weassume+*thatifthecardgotasfarasvalidatingtheL4csum,italso+*validatedtheIPcsum.IPv6hasnoIPcsum.+*/if(cqe->fast_path_cqe.status_flags&-(ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG|-ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG))+ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG)return;-/* If both IP/L4 validation were done, check if an error was found. */+/* If L4 validation was done, check if an error was found. */if(cqe->fast_path_cqe.type_error_flags&(ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG|
Thanks for fixing this bug !
Acked-by: Eric Dumazet <edumazet@google.com>
On Fri, 2012-09-14 at 01:14 +0200, Eric Dumazet wrote:
On Fri, 2012-09-14 at 00:59 +0200, Michal Schmidt wrote:
quoted
Commit d6cb3e41 "bnx2x: fix checksum validation" caused a performance
regression for IPv6. Rx checksum offload does not work. IPv6 packets
are passed to the stack with CHECKSUM_NONE.
The hardware obviously cannot perform IP checksum validation for IPv6,
because there is no checksum in the IPv6 header. This should not prevent
us from setting CHECKSUM_UNNECESSARY.
Tested on BCM57711.
Signed-off-by: Michal Schmidt <redacted>
---
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
@@ -662,14 +662,16 @@ void bnx2x_csum_validate(struct sk_buff *skb, union eth_rx_cqe *cqe,structbnx2x_fastpath*fp,structbnx2x_eth_q_stats*qstats){-/* Do nothing if no IP/L4 csum validation was done */-+/* Do nothing if no L4 csum validation was done.+*WedonotcheckwhetherIPcsumwasvalidated.ForIPv4weassume+*thatifthecardgotasfarasvalidatingtheL4csum,italso+*validatedtheIPcsum.IPv6hasnoIPcsum.+*/if(cqe->fast_path_cqe.status_flags&-(ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG|-ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG))+ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG)return;-/* If both IP/L4 validation were done, check if an error was found. */+/* If L4 validation was done, check if an error was found. */if(cqe->fast_path_cqe.type_error_flags&(ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG|
Thanks for fixing this bug !
Acked-by: Eric Dumazet <edumazet@google.com>
On Fri, 2012-09-14 at 08:20 +0300, Eilon Greenstein wrote:
On Fri, 2012-09-14 at 01:14 +0200, Eric Dumazet wrote:
quoted
On Fri, 2012-09-14 at 00:59 +0200, Michal Schmidt wrote:
quoted
Commit d6cb3e41 "bnx2x: fix checksum validation" caused a performance
regression for IPv6. Rx checksum offload does not work. IPv6 packets
are passed to the stack with CHECKSUM_NONE.
The hardware obviously cannot perform IP checksum validation for IPv6,
because there is no checksum in the IPv6 header. This should not prevent
us from setting CHECKSUM_UNNECESSARY.
Tested on BCM57711.
Signed-off-by: Michal Schmidt <redacted>
---
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
@@ -662,14 +662,16 @@ void bnx2x_csum_validate(struct sk_buff *skb, union eth_rx_cqe *cqe,structbnx2x_fastpath*fp,structbnx2x_eth_q_stats*qstats){-/* Do nothing if no IP/L4 csum validation was done */-+/* Do nothing if no L4 csum validation was done.+*WedonotcheckwhetherIPcsumwasvalidated.ForIPv4weassume+*thatifthecardgotasfarasvalidatingtheL4csum,italso+*validatedtheIPcsum.IPv6hasnoIPcsum.+*/if(cqe->fast_path_cqe.status_flags&-(ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG|-ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG))+ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG)return;-/* If both IP/L4 validation were done, check if an error was found. */+/* If L4 validation was done, check if an error was found. */if(cqe->fast_path_cqe.type_error_flags&(ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG|
Thanks for fixing this bug !
Acked-by: Eric Dumazet <edumazet@google.com>
Just in case someone will look up this thread in the future, I’m adding
some details: the comment is almost right, the HW does not verify the
IPv6 header in case it contains extension headers this is why this
patch is required (though some users with IPv6 that does not use any
extension headers will not see the issue).
In other words: Eric this is how we both missed it…
On Fri, 2012-09-14 at 00:59 +0200, Michal Schmidt wrote:
quoted
Commit d6cb3e41 "bnx2x: fix checksum validation" caused a performance
regression for IPv6. Rx checksum offload does not work. IPv6 packets
are passed to the stack with CHECKSUM_NONE.
The hardware obviously cannot perform IP checksum validation for IPv6,
because there is no checksum in the IPv6 header. This should not prevent
us from setting CHECKSUM_UNNECESSARY.
Tested on BCM57711.
Signed-off-by: Michal Schmidt <redacted>
...
Thanks for fixing this bug !
Acked-by: Eric Dumazet <edumazet@google.com>