[PATCH net v4 0/3] Fix large frames in the Gemini ethernet driver
Linus Walleij
linus.walleij at linaro.org
Thu Nov 9 01:03:11 PST 2023
This is the result of a bug hunt for a problem with the
RTL8366RB DSA switch leading me wrong all over the place.
I am indebted to Vladimir Oltean who as usual pointed
out where the real problem was, many thanks!
Tryig to actually use big ("jumbo") frames on this
hardware uncovered the real bugs. Then I tested it on
the DSA switch and it indeed fixes the issue.
To make sure it also works fine with big frames on
non-DSA devices I also copied a large video file over
scp to a device with maximum frame size, the data
was transported in large TCP packets ending up in
0x7ff sized frames using software checksumming at
~2.0 MB/s.
If I set down the MTU to the standard 1500 bytes so
that hardware checksumming is used, the scp transfer
of the same file was slightly lower, ~1.8-1.9 MB/s.
Despite this not being the best test it shows that
we can now stress the hardware with large frames
and that software checksum works fine.
Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
---
Changes in v4:
- Strip stray v1-related comment from the commit message on patch 1
- Move the hunks deleting gmac_fix_features() from patch
"net: ethernet: cortina: Handle large frames" to
"net: ethernet: cortina: Fix MTU max setting" as it is
perfectly motivated by the MTU change, then move this patch
later in the series.
- Drop the last patch only activating the checksum engine for
TCP and UDP explicitly. It's not fixing a regression,
so let's reconsider it for net-next rather than net.
- Link to v3: https://lore.kernel.org/r/20231107-gemini-largeframe-fix-v3-0-e3803c080b75@linaro.org
Changes in v3:
- Do not reimplement the existing oversize check (sigh what is
wrong with me). Drop that patch.
- Drop the gmac_fix_features() since we are better off falling
back to software checksums dynamically per-frame.
- Add a new patch to bypass the checksumming engine if we are not
handling TCP or UDP.
- Link to v2: https://lore.kernel.org/r/20231105-gemini-largeframe-fix-v2-0-cd3a5aa6c496@linaro.org
Changes in v2:
- Don't check for oversized MTU request: the framework makes sure it doesn't
happen.
- Drop unrelated BIT() macro cleanups (I might send these later for net-next)
- Use a special error code if the skbuff is too big and fail gracefully
is this happens.
- Do proper checksum of the frame using a software fallback when the frame
is too long for hardware checksumming.
- Link to v1: https://lore.kernel.org/r/20231104-gemini-largeframe-fix-v1-0-9c5513f22f33@linaro.org
---
Linus Walleij (3):
net: ethernet: cortina: Fix max RX frame define
net: ethernet: cortina: Handle large frames
net: ethernet: cortina: Fix MTU max setting
drivers/net/ethernet/cortina/gemini.c | 45 ++++++++++++++++++++++-------------
drivers/net/ethernet/cortina/gemini.h | 4 ++--
2 files changed, 31 insertions(+), 18 deletions(-)
---
base-commit: ffc253263a1375a65fa6c9f62a893e9767fbebfa
change-id: 20231104-gemini-largeframe-fix-c143d2c781b5
Best regards,
--
Linus Walleij <linus.walleij at linaro.org>
More information about the linux-arm-kernel
mailing list