[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20201129102400.157786-1-jean.pihet@newoldbits.com>
Date: Sun, 29 Nov 2020 11:23:59 +0100
From: Jean Pihet <jean.pihet@...oldbits.com>
To: netdev@...r.kernel.org, linux-kernel@...r.kernel.org
Cc: Ryan Barnett <ryan.barnett@...kwellcollins.com>,
Conrad Ratschan <conrad.ratschan@...kwellcollins.com>,
Hugo Cornelis <hugo.cornelis@...ensium.com>,
Arnout Vandecappelle <arnout.vandecappelle@...ensium.com>,
Jean Pihet <jean.pihet@...oldbits.com>
Subject: [PATCH 1/2] net: dsa: ksz: pad frame to 64 bytes for transmission
Some ethernet controllers (e.g. TI CPSW) pad the frames to a minimum
of 64 bytes before the FCS is appended. This causes an issue with the
KSZ tail tag which could not be the last byte before the FCS.
Solve this by padding the frame to 64 bytes minus the tail tag size,
before the tail tag is added and the frame is passed for transmission.
Signed-off-by: Jean Pihet <jean.pihet@...oldbits.com>
---
net/dsa/tag_ksz.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/net/dsa/tag_ksz.c b/net/dsa/tag_ksz.c
index 0a5aa982c60d..0074702dcbbc 100644
--- a/net/dsa/tag_ksz.c
+++ b/net/dsa/tag_ksz.c
@@ -19,8 +19,13 @@ static struct sk_buff *ksz_common_xmit(struct sk_buff *skb,
{
struct sk_buff *nskb;
int padlen;
+ const int min_len = ETH_ZLEN + ETH_FCS_LEN;
- padlen = (skb->len >= ETH_ZLEN) ? 0 : ETH_ZLEN - skb->len;
+ /*
+ * Pad to the minimum ethernet frame size, minus the size of the
+ * tail tag which will be appended at the very end, before the FCS.
+ */
+ padlen = (skb->len >= min_len) ? 0 : min_len - skb->len - len;
if (skb_tailroom(skb) >= padlen + len) {
/* Let dsa_slave_xmit() free skb */
--
2.26.2
Powered by blists - more mailing lists