Message ID | 20250109113706.1409149-1-paul.barker.ct@bp.renesas.com (mailing list archive) |
---|---|
State | New |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] net: ravb: Fix max TX frame size for RZ/V2M | expand |
Hi Paul, Nice catch. On 2025-01-09 11:37:06 +0000, Paul Barker wrote: > When tx_max_frame_size was added to struct ravb_hw_info, no value was > set in ravb_rzv2m_hw_info so the default value of zero was used. > > The maximum MTU is set by subtracting from tx_max_frame_size to allow > space for headers and frame checksums. As ndev->max_mtu is unsigned, > this subtraction wraps around leading to a ridiculously large positive > value that is obviously incorrect. > > Before tx_max_frame_size was introduced, the maximum MTU was based on > rx_max_frame_size. So, we can restore the correct maximum MTU by copying > the rx_max_frame_size value into tx_max_frame_size for RZ/V2M. > > Fixes: 1d63864299ca ("net: ravb: Fix maximum TX frame size for GbEth devices") > Signed-off-by: Paul Barker <paul.barker.ct@bp.renesas.com> Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> > --- > drivers/net/ethernet/renesas/ravb_main.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c > index ac0f093f647a..bc395294a32d 100644 > --- a/drivers/net/ethernet/renesas/ravb_main.c > +++ b/drivers/net/ethernet/renesas/ravb_main.c > @@ -2763,6 +2763,7 @@ static const struct ravb_hw_info ravb_rzv2m_hw_info = { > .net_features = NETIF_F_RXCSUM, > .stats_len = ARRAY_SIZE(ravb_gstrings_stats), > .tccr_mask = TCCR_TSRQ0 | TCCR_TSRQ1 | TCCR_TSRQ2 | TCCR_TSRQ3, > + .tx_max_frame_size = SZ_2K, > .rx_max_frame_size = SZ_2K, > .rx_buffer_size = SZ_2K + > SKB_DATA_ALIGN(sizeof(struct skb_shared_info)), > > base-commit: 2d2d4f60ed266a8f340a721102d035252606980b > -- > 2.39.5 >
On Thu, Jan 09, 2025 at 11:37:06AM +0000, Paul Barker wrote: > When tx_max_frame_size was added to struct ravb_hw_info, no value was > set in ravb_rzv2m_hw_info so the default value of zero was used. > > The maximum MTU is set by subtracting from tx_max_frame_size to allow > space for headers and frame checksums. As ndev->max_mtu is unsigned, > this subtraction wraps around leading to a ridiculously large positive > value that is obviously incorrect. > > Before tx_max_frame_size was introduced, the maximum MTU was based on > rx_max_frame_size. So, we can restore the correct maximum MTU by copying > the rx_max_frame_size value into tx_max_frame_size for RZ/V2M. > > Fixes: 1d63864299ca ("net: ravb: Fix maximum TX frame size for GbEth devices") > Signed-off-by: Paul Barker <paul.barker.ct@bp.renesas.com> Reviewed-by: Simon Horman <horms@kernel.org> ...
On 1/9/25 2:37 PM, Paul Barker wrote: > When tx_max_frame_size was added to struct ravb_hw_info, no value was > set in ravb_rzv2m_hw_info so the default value of zero was used. > > The maximum MTU is set by subtracting from tx_max_frame_size to allow > space for headers and frame checksums. As ndev->max_mtu is unsigned, > this subtraction wraps around leading to a ridiculously large positive > value that is obviously incorrect. > > Before tx_max_frame_size was introduced, the maximum MTU was based on > rx_max_frame_size. So, we can restore the correct maximum MTU by copying > the rx_max_frame_size value into tx_max_frame_size for RZ/V2M. Seems to be reviewers' fault as well? > Fixes: 1d63864299ca ("net: ravb: Fix maximum TX frame size for GbEth devices") > Signed-off-by: Paul Barker <paul.barker.ct@bp.renesas.com> Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru> MBR, Sergey
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c index ac0f093f647a..bc395294a32d 100644 --- a/drivers/net/ethernet/renesas/ravb_main.c +++ b/drivers/net/ethernet/renesas/ravb_main.c @@ -2763,6 +2763,7 @@ static const struct ravb_hw_info ravb_rzv2m_hw_info = { .net_features = NETIF_F_RXCSUM, .stats_len = ARRAY_SIZE(ravb_gstrings_stats), .tccr_mask = TCCR_TSRQ0 | TCCR_TSRQ1 | TCCR_TSRQ2 | TCCR_TSRQ3, + .tx_max_frame_size = SZ_2K, .rx_max_frame_size = SZ_2K, .rx_buffer_size = SZ_2K + SKB_DATA_ALIGN(sizeof(struct skb_shared_info)),
When tx_max_frame_size was added to struct ravb_hw_info, no value was set in ravb_rzv2m_hw_info so the default value of zero was used. The maximum MTU is set by subtracting from tx_max_frame_size to allow space for headers and frame checksums. As ndev->max_mtu is unsigned, this subtraction wraps around leading to a ridiculously large positive value that is obviously incorrect. Before tx_max_frame_size was introduced, the maximum MTU was based on rx_max_frame_size. So, we can restore the correct maximum MTU by copying the rx_max_frame_size value into tx_max_frame_size for RZ/V2M. Fixes: 1d63864299ca ("net: ravb: Fix maximum TX frame size for GbEth devices") Signed-off-by: Paul Barker <paul.barker.ct@bp.renesas.com> --- drivers/net/ethernet/renesas/ravb_main.c | 1 + 1 file changed, 1 insertion(+) base-commit: 2d2d4f60ed266a8f340a721102d035252606980b