diff mbox series

[net-next,v2] net: stmmac: dwmac4: Add ip payload error statistics

Message ID 20240930110205.44278-1-minda.chen@starfivetech.com (mailing list archive)
State Changes Requested
Delegated to: Netdev Maintainers
Headers show
Series [net-next,v2] net: stmmac: dwmac4: Add ip payload error statistics | expand

Checks

Context Check Description
netdev/series_format success Single patches do not need cover letters
netdev/tree_selection success Clearly marked for net-next
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 9 this patch: 9
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers warning 1 maintainers not CCed: linux-arm-kernel@lists.infradead.org
netdev/build_clang success Errors and warnings before: 9 this patch: 9
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn fail Errors and warnings before: 12 this patch: 12
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 16 lines checked
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Minda Chen Sept. 30, 2024, 11:02 a.m. UTC
Add dwmac4 ip payload error statistics, and rename discripter bit macro
because latest version descriptor IPCE bit claims ip checksum error or
l4 segment length error.

Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
---
 drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c | 2 ++
 drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.h | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

Comments

Simon Horman Sept. 30, 2024, 4:46 p.m. UTC | #1
On Mon, Sep 30, 2024 at 07:02:05PM +0800, Minda Chen wrote:
> Add dwmac4 ip payload error statistics, and rename discripter bit macro
> because latest version descriptor IPCE bit claims ip checksum error or
> l4 segment length error.
> 
> Signed-off-by: Minda Chen <minda.chen@starfivetech.com>

Reviewed-by: Simon Horman <horms@kernel.org>
Jakub Kicinski Oct. 2, 2024, 1:58 p.m. UTC | #2
On Mon, 30 Sep 2024 19:02:05 +0800 Minda Chen wrote:
> Add dwmac4 ip payload error statistics, and rename discripter bit macro

descriptor
        ^

> because latest version descriptor IPCE bit claims ip checksum error or
> l4 segment length error.

What is an L4 segment length error on Rx?
Seems to me that reusing ip_payload_err here will be confusing
Serge Semin Oct. 2, 2024, 6:21 p.m. UTC | #3
Hi Minda

On Mon, Sep 30, 2024 at 07:02:05PM GMT, Minda Chen wrote:

Since v3 is going to be required anyway, here are several nitpicks:

> Add dwmac4 ip payload error statistics, and rename discripter bit macro
> because latest version descriptor IPCE bit claims ip checksum error or
> l4 segment length error.

s/dwmac4/DW QoS Eth v4/v5
s/ip/IP

L4-segment is a too broad definition in this case. The doc says about
just three protocols: TCP, UDP, or ICMP, so

s/l4/TCP, UDP, or ICMP

Other than that the change looks good.

Reviewed-by: Serge Semin <fancer.lancer@gmail.com>

-Serge(y)

> 
> Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
> ---
>  drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c | 2 ++
>  drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.h | 2 +-
>  2 files changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
> index e99401bcc1f8..a5fb31eb0192 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
> @@ -118,6 +118,8 @@ static int dwmac4_wrback_get_rx_status(struct stmmac_extra_stats *x,
>  		x->ipv4_pkt_rcvd++;
>  	if (rdes1 & RDES1_IPV6_HEADER)
>  		x->ipv6_pkt_rcvd++;
> +	if (rdes1 & RDES1_IP_PAYLOAD_ERROR)
> +		x->ip_payload_err++;
>  
>  	if (message_type == RDES_EXT_NO_PTP)
>  		x->no_ptp_rx_msg_type_ext++;
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.h b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.h
> index 6da070ccd737..1ce6f43d545a 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.h
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.h
> @@ -95,7 +95,7 @@
>  #define RDES1_IPV4_HEADER		BIT(4)
>  #define RDES1_IPV6_HEADER		BIT(5)
>  #define RDES1_IP_CSUM_BYPASSED		BIT(6)
> -#define RDES1_IP_CSUM_ERROR		BIT(7)
> +#define RDES1_IP_PAYLOAD_ERROR		BIT(7)
>  #define RDES1_PTP_MSG_TYPE_MASK		GENMASK(11, 8)
>  #define RDES1_PTP_PACKET_TYPE		BIT(12)
>  #define RDES1_PTP_VER			BIT(13)
> -- 
> 2.17.1
> 
>
Serge Semin Oct. 2, 2024, 6:35 p.m. UTC | #4
Hi Jakub

On Wed, Oct 02, 2024 at 06:58:01AM GMT, Jakub Kicinski wrote:
> On Mon, 30 Sep 2024 19:02:05 +0800 Minda Chen wrote:
> > Add dwmac4 ip payload error statistics, and rename discripter bit macro
> 
> descriptor
>         ^
> 
> > because latest version descriptor IPCE bit claims ip checksum error or
> > l4 segment length error.
> 

> What is an L4 segment length error on Rx?
> Seems to me that reusing ip_payload_err here will be confusing

From the current "ip_payload_err" field semantics, Minda is correct to
use it for the Rx IP-payload error statistics. Here is the definition
of the IPCE flag (part of the RDES4 descriptor field) cited from the
Synopsys DW QoS Eth v5 HW-manual:

Bit  Name  Description
 7   IPCE  IP Payload Error
           When this bit is set, it indicates either of the following:
           ■ The 16-bit IP payload checksum (that is, the TCP, UDP, or ICMP checksum) calculated by the
             MAC does not match the corresponding checksum field in the received segment.
           ■ The TCP, UDP, or ICMP segment length does not match the payload length value in the IP Header
             field.
           ■ The TCP, UDP, or ICMP segment length is less than minimum allowed segment length for TCP,
             UDP, or ICMP.

It almost word-by-word matches to what is defined for the
ERDES4_IP_PAYLOAD_ERR flag (part of the Extended RDES4 descriptor
field) in DW GMAC v3.x HW-manual for which the
stmmac_stats::ip_payload_err field has been added in the first place.
Note the name of the flag in the descriptor matches to what is declared in
the stmmac_stats structure.

So based on that I don't see any problem with the patch except some
minor patch-log issues I mentioned in another message.

-Serge(y)

> -- 
> pw-bot: cr
>
Jakub Kicinski Oct. 2, 2024, 6:57 p.m. UTC | #5
On Wed, 2 Oct 2024 21:35:30 +0300 Serge Semin wrote:
> It almost word-by-word matches to what is defined for the
> ERDES4_IP_PAYLOAD_ERR flag (part of the Extended RDES4 descriptor
> field) in DW GMAC v3.x HW-manual for which the
> stmmac_stats::ip_payload_err field has been added in the first place.
> Note the name of the flag in the descriptor matches to what is declared in
> the stmmac_stats structure.

I misread the ERDES4_IP_PAYLOAD_ERR as a Tx flag, somehow. All good
then.
diff mbox series

Patch

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
index e99401bcc1f8..a5fb31eb0192 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
@@ -118,6 +118,8 @@  static int dwmac4_wrback_get_rx_status(struct stmmac_extra_stats *x,
 		x->ipv4_pkt_rcvd++;
 	if (rdes1 & RDES1_IPV6_HEADER)
 		x->ipv6_pkt_rcvd++;
+	if (rdes1 & RDES1_IP_PAYLOAD_ERROR)
+		x->ip_payload_err++;
 
 	if (message_type == RDES_EXT_NO_PTP)
 		x->no_ptp_rx_msg_type_ext++;
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.h b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.h
index 6da070ccd737..1ce6f43d545a 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.h
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.h
@@ -95,7 +95,7 @@ 
 #define RDES1_IPV4_HEADER		BIT(4)
 #define RDES1_IPV6_HEADER		BIT(5)
 #define RDES1_IP_CSUM_BYPASSED		BIT(6)
-#define RDES1_IP_CSUM_ERROR		BIT(7)
+#define RDES1_IP_PAYLOAD_ERROR		BIT(7)
 #define RDES1_PTP_MSG_TYPE_MASK		GENMASK(11, 8)
 #define RDES1_PTP_PACKET_TYPE		BIT(12)
 #define RDES1_PTP_VER			BIT(13)