mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-18 21:28:02 +00:00
kernel: bump 6.6 to 6.6.57
1. Update target/linux/generic/config-6.6 for new ksym 2. Refresh patches Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.57 Added: generic/backport-6.6/777-netfilter-xtables-fix-typo-causing-some-targets-to-not-load-on-IPv6.patch[1] Manually rebased: generic/hack-6.6/645-netfilter-connmark-introduce-set-dscpmark.patch Removed upstreamed: gemini/patches-6.6/0001-net-ethernet-cortina-Drop-TSO-support.patch[2] gemini/patches-6.6/0004-net-ethernet-cortina-Restore-TSO-support.patch[3] All other patches automatically rebased. 1. https://lore.kernel.org/all/20241019-xtables-typos-v2-1-6b8b1735dc8e@0upti.me/ 2 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.57&id=452c0740d72c6a77a41f6ddc318a48f18c3d2346 3. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.57&id=611f74b0e7fb93ee2366d9d7edca546806b220e9 Build system: x86/64 Build-tested: x86/64/AMD Cezanne, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3 Run-tested: x86/64/AMD Cezanne, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3 Signed-off-by: John Audia <therealgraysky@proton.me> Link: https://github.com/openwrt/openwrt/pull/16726 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
3c76bed6a9
commit
51bbc8114b
@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-6.6 = .56
|
||||
LINUX_KERNEL_HASH-6.6.56 = f74812f78e88992c416434cb107639e13a551dbaff36bb90d6346ab16ab71a95
|
||||
LINUX_VERSION-6.6 = .57
|
||||
LINUX_KERNEL_HASH-6.6.57 = 66ce426ef96f99b8e1ef7ac72e780c730ef8b970f7aa5708501c4274d7abb7b3
|
||||
|
@ -751,7 +751,7 @@ SVN-Revision: 35130
|
||||
EXPORT_SYMBOL(xfrm_parse_spi);
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -4221,14 +4221,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
@@ -4262,14 +4262,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
{
|
||||
const __be32 *ptr = (const __be32 *)(th + 1);
|
||||
|
||||
|
@ -14,7 +14,7 @@ We don't agree with upstream revert so undo it.
|
||||
|
||||
--- a/drivers/usb/host/xhci-pci.c
|
||||
+++ b/drivers/usb/host/xhci-pci.c
|
||||
@@ -489,8 +489,10 @@ static void xhci_pci_quirks(struct devic
|
||||
@@ -490,8 +490,10 @@ static void xhci_pci_quirks(struct devic
|
||||
pdev->device == 0x3432)
|
||||
xhci->quirks |= XHCI_BROKEN_STREAMS;
|
||||
|
||||
|
@ -23,7 +23,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
|
||||
--- a/drivers/hid/hid-ids.h
|
||||
+++ b/drivers/hid/hid-ids.h
|
||||
@@ -239,6 +239,9 @@
|
||||
@@ -242,6 +242,9 @@
|
||||
#define USB_VENDOR_ID_BAANTO 0x2453
|
||||
#define USB_DEVICE_ID_BAANTO_MT_190W2 0x0100
|
||||
|
||||
@ -33,7 +33,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
#define USB_VENDOR_ID_BELKIN 0x050d
|
||||
#define USB_DEVICE_ID_FLIP_KVM 0x3201
|
||||
|
||||
@@ -1394,6 +1397,9 @@
|
||||
@@ -1404,6 +1407,9 @@
|
||||
#define USB_VENDOR_ID_XIAOMI 0x2717
|
||||
#define USB_DEVICE_ID_MI_SILENT_MOUSE 0x5014
|
||||
|
||||
|
@ -24,7 +24,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
|
||||
--- a/drivers/usb/host/xhci-pci.c
|
||||
+++ b/drivers/usb/host/xhci-pci.c
|
||||
@@ -492,6 +492,7 @@ static void xhci_pci_quirks(struct devic
|
||||
@@ -493,6 +493,7 @@ static void xhci_pci_quirks(struct devic
|
||||
if (pdev->vendor == PCI_VENDOR_ID_VIA && pdev->device == 0x3483) {
|
||||
xhci->quirks |= XHCI_LPM_SUPPORT;
|
||||
xhci->quirks |= XHCI_EP_CTX_BROKEN_DCS;
|
||||
|
@ -22,7 +22,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
|
||||
--- a/drivers/usb/host/xhci-pci.c
|
||||
+++ b/drivers/usb/host/xhci-pci.c
|
||||
@@ -493,6 +493,7 @@ static void xhci_pci_quirks(struct devic
|
||||
@@ -494,6 +494,7 @@ static void xhci_pci_quirks(struct devic
|
||||
xhci->quirks |= XHCI_LPM_SUPPORT;
|
||||
xhci->quirks |= XHCI_EP_CTX_BROKEN_DCS;
|
||||
xhci->quirks |= XHCI_AVOID_DQ_ON_LINK;
|
||||
|
@ -90,7 +90,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
/* Allow 3 retries for everything but isoc, set CErr = 3 */
|
||||
--- a/drivers/usb/host/xhci-pci.c
|
||||
+++ b/drivers/usb/host/xhci-pci.c
|
||||
@@ -494,6 +494,7 @@ static void xhci_pci_quirks(struct devic
|
||||
@@ -495,6 +495,7 @@ static void xhci_pci_quirks(struct devic
|
||||
xhci->quirks |= XHCI_EP_CTX_BROKEN_DCS;
|
||||
xhci->quirks |= XHCI_AVOID_DQ_ON_LINK;
|
||||
xhci->quirks |= XHCI_ZHAOXIN_TRB_FETCH;
|
||||
|
@ -47,7 +47,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
/* Device for a quirk */
|
||||
#define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73
|
||||
#define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000
|
||||
@@ -294,6 +296,16 @@ static int xhci_pci_reinit(struct xhci_h
|
||||
@@ -295,6 +297,16 @@ static int xhci_pci_reinit(struct xhci_h
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -64,7 +64,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
@@ -495,6 +507,8 @@ static void xhci_pci_quirks(struct devic
|
||||
@@ -496,6 +508,8 @@ static void xhci_pci_quirks(struct devic
|
||||
xhci->quirks |= XHCI_AVOID_DQ_ON_LINK;
|
||||
xhci->quirks |= XHCI_ZHAOXIN_TRB_FETCH;
|
||||
xhci->quirks |= XHCI_VLI_SS_BULK_OUT_BUG;
|
||||
|
@ -212,7 +212,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
},
|
||||
--- a/drivers/usb/dwc3/core.c
|
||||
+++ b/drivers/usb/dwc3/core.c
|
||||
@@ -1202,6 +1202,24 @@ static void dwc3_config_threshold(struct
|
||||
@@ -1208,6 +1208,24 @@ static void dwc3_config_threshold(struct
|
||||
}
|
||||
}
|
||||
|
||||
@ -237,7 +237,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
/**
|
||||
* dwc3_core_init - Low-level initialization of DWC3 Core
|
||||
* @dwc: Pointer to our controller context structure
|
||||
@@ -1267,6 +1285,8 @@ static int dwc3_core_init(struct dwc3 *d
|
||||
@@ -1273,6 +1291,8 @@ static int dwc3_core_init(struct dwc3 *d
|
||||
|
||||
dwc3_set_incr_burst_type(dwc);
|
||||
|
||||
@ -246,7 +246,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
ret = dwc3_phy_power_on(dwc);
|
||||
if (ret)
|
||||
goto err_exit_phy;
|
||||
@@ -1356,6 +1376,24 @@ static int dwc3_core_init(struct dwc3 *d
|
||||
@@ -1362,6 +1382,24 @@ static int dwc3_core_init(struct dwc3 *d
|
||||
|
||||
dwc3_config_threshold(dwc);
|
||||
|
||||
@ -271,7 +271,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
return 0;
|
||||
|
||||
err_power_off_phy:
|
||||
@@ -1499,6 +1537,7 @@ static void dwc3_get_properties(struct d
|
||||
@@ -1505,6 +1543,7 @@ static void dwc3_get_properties(struct d
|
||||
u8 tx_thr_num_pkt_prd = 0;
|
||||
u8 tx_max_burst_prd = 0;
|
||||
u8 tx_fifo_resize_max_num;
|
||||
@ -279,7 +279,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
const char *usb_psy_name;
|
||||
int ret;
|
||||
|
||||
@@ -1521,6 +1560,9 @@ static void dwc3_get_properties(struct d
|
||||
@@ -1527,6 +1566,9 @@ static void dwc3_get_properties(struct d
|
||||
*/
|
||||
tx_fifo_resize_max_num = 6;
|
||||
|
||||
@ -289,7 +289,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
dwc->maximum_speed = usb_get_maximum_speed(dev);
|
||||
dwc->max_ssp_rate = usb_get_maximum_ssp_rate(dev);
|
||||
dwc->dr_mode = usb_get_dr_mode(dev);
|
||||
@@ -1642,6 +1684,9 @@ static void dwc3_get_properties(struct d
|
||||
@@ -1648,6 +1690,9 @@ static void dwc3_get_properties(struct d
|
||||
dwc->dis_split_quirk = device_property_read_bool(dev,
|
||||
"snps,dis-split-quirk");
|
||||
|
||||
@ -299,7 +299,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
dwc->lpm_nyet_threshold = lpm_nyet_threshold;
|
||||
dwc->tx_de_emphasis = tx_de_emphasis;
|
||||
|
||||
@@ -1659,6 +1704,8 @@ static void dwc3_get_properties(struct d
|
||||
@@ -1665,6 +1710,8 @@ static void dwc3_get_properties(struct d
|
||||
dwc->tx_thr_num_pkt_prd = tx_thr_num_pkt_prd;
|
||||
dwc->tx_max_burst_prd = tx_max_burst_prd;
|
||||
|
||||
@ -308,7 +308,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
dwc->imod_interval = 0;
|
||||
|
||||
dwc->tx_fifo_resize_max_num = tx_fifo_resize_max_num;
|
||||
@@ -1934,6 +1981,12 @@ static int dwc3_probe(struct platform_de
|
||||
@@ -1940,6 +1987,12 @@ static int dwc3_probe(struct platform_de
|
||||
|
||||
dwc3_get_properties(dwc);
|
||||
|
||||
|
@ -13,7 +13,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/drivers/hwmon/Kconfig
|
||||
+++ b/drivers/hwmon/Kconfig
|
||||
@@ -2367,6 +2367,13 @@ config SENSORS_INTEL_M10_BMC_HWMON
|
||||
@@ -2371,6 +2371,13 @@ config SENSORS_INTEL_M10_BMC_HWMON
|
||||
sensors monitor various telemetry data of different components on the
|
||||
card, e.g. board temperature, FPGA core temperature/voltage/current.
|
||||
|
||||
|
@ -832,7 +832,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
return;
|
||||
|
||||
mutex_init(&vc4file->perfmon.lock);
|
||||
@@ -126,7 +126,7 @@ void vc4_perfmon_close_file(struct vc4_f
|
||||
@@ -131,7 +131,7 @@ void vc4_perfmon_close_file(struct vc4_f
|
||||
{
|
||||
struct vc4_dev *vc4 = vc4file->dev;
|
||||
|
||||
@ -841,7 +841,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
return;
|
||||
|
||||
mutex_lock(&vc4file->perfmon.lock);
|
||||
@@ -146,7 +146,7 @@ int vc4_perfmon_create_ioctl(struct drm_
|
||||
@@ -151,7 +151,7 @@ int vc4_perfmon_create_ioctl(struct drm_
|
||||
unsigned int i;
|
||||
int ret;
|
||||
|
||||
@ -850,7 +850,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
return -ENODEV;
|
||||
|
||||
if (!vc4->v3d) {
|
||||
@@ -200,7 +200,7 @@ int vc4_perfmon_destroy_ioctl(struct drm
|
||||
@@ -205,7 +205,7 @@ int vc4_perfmon_destroy_ioctl(struct drm
|
||||
struct drm_vc4_perfmon_destroy *req = data;
|
||||
struct vc4_perfmon *perfmon;
|
||||
|
||||
@ -859,7 +859,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
return -ENODEV;
|
||||
|
||||
if (!vc4->v3d) {
|
||||
@@ -228,7 +228,7 @@ int vc4_perfmon_get_values_ioctl(struct
|
||||
@@ -233,7 +233,7 @@ int vc4_perfmon_get_values_ioctl(struct
|
||||
struct vc4_perfmon *perfmon;
|
||||
int ret;
|
||||
|
||||
|
@ -432,7 +432,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
return;
|
||||
|
||||
mutex_init(&vc4file->perfmon.lock);
|
||||
@@ -126,7 +126,7 @@ void vc4_perfmon_close_file(struct vc4_f
|
||||
@@ -131,7 +131,7 @@ void vc4_perfmon_close_file(struct vc4_f
|
||||
{
|
||||
struct vc4_dev *vc4 = vc4file->dev;
|
||||
|
||||
@ -441,7 +441,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
return;
|
||||
|
||||
mutex_lock(&vc4file->perfmon.lock);
|
||||
@@ -146,7 +146,7 @@ int vc4_perfmon_create_ioctl(struct drm_
|
||||
@@ -151,7 +151,7 @@ int vc4_perfmon_create_ioctl(struct drm_
|
||||
unsigned int i;
|
||||
int ret;
|
||||
|
||||
@ -450,7 +450,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
return -ENODEV;
|
||||
|
||||
if (!vc4->v3d) {
|
||||
@@ -200,7 +200,7 @@ int vc4_perfmon_destroy_ioctl(struct drm
|
||||
@@ -205,7 +205,7 @@ int vc4_perfmon_destroy_ioctl(struct drm
|
||||
struct drm_vc4_perfmon_destroy *req = data;
|
||||
struct vc4_perfmon *perfmon;
|
||||
|
||||
@ -459,7 +459,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
return -ENODEV;
|
||||
|
||||
if (!vc4->v3d) {
|
||||
@@ -228,7 +228,7 @@ int vc4_perfmon_get_values_ioctl(struct
|
||||
@@ -233,7 +233,7 @@ int vc4_perfmon_get_values_ioctl(struct
|
||||
struct vc4_perfmon *perfmon;
|
||||
int ret;
|
||||
|
||||
|
@ -16,7 +16,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
|
||||
--- a/drivers/usb/dwc3/core.c
|
||||
+++ b/drivers/usb/dwc3/core.c
|
||||
@@ -1366,6 +1366,9 @@ static int dwc3_core_init(struct dwc3 *d
|
||||
@@ -1372,6 +1372,9 @@ static int dwc3_core_init(struct dwc3 *d
|
||||
if (dwc->parkmode_disable_hs_quirk)
|
||||
reg |= DWC3_GUCTL1_PARKMODE_DISABLE_HS;
|
||||
|
||||
@ -26,7 +26,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
if (DWC3_VER_IS_WITHIN(DWC3, 290A, ANY) &&
|
||||
(dwc->maximum_speed == USB_SPEED_HIGH ||
|
||||
dwc->maximum_speed == USB_SPEED_FULL))
|
||||
@@ -1664,6 +1667,8 @@ static void dwc3_get_properties(struct d
|
||||
@@ -1670,6 +1673,8 @@ static void dwc3_get_properties(struct d
|
||||
"snps,parkmode-disable-ss-quirk");
|
||||
dwc->parkmode_disable_hs_quirk = device_property_read_bool(dev,
|
||||
"snps,parkmode-disable-hs-quirk");
|
||||
|
@ -25,7 +25,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
|
||||
|
||||
--- a/fs/ntfs3/fslog.c
|
||||
+++ b/fs/ntfs3/fslog.c
|
||||
@@ -3914,6 +3914,8 @@ check_restart_area:
|
||||
@@ -3929,6 +3929,8 @@ check_restart_area:
|
||||
log->l_size = log->orig_file_size;
|
||||
log->page_size = norm_file_page(t32, &log->l_size,
|
||||
t32 == DefaultLogPageSize);
|
||||
|
@ -1,78 +0,0 @@
|
||||
From f8001196455311eb128fcafd98cb2050a70218df Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linus.walleij@linaro.org>
|
||||
Date: Sat, 6 Jan 2024 01:12:22 +0100
|
||||
Subject: [PATCH 4/4] net: ethernet: cortina: Drop TSO support
|
||||
|
||||
The recent change to allow large frames without hardware checksumming
|
||||
slotted in software checksumming in the driver if hardware could not
|
||||
do it.
|
||||
|
||||
This will however upset TSO (TCP Segment Offloading). Typical
|
||||
error dumps includes this:
|
||||
|
||||
skb len=2961 headroom=222 headlen=66 tailroom=0
|
||||
(...)
|
||||
WARNING: CPU: 0 PID: 956 at net/core/dev.c:3259 skb_warn_bad_offload+0x7c/0x108
|
||||
gemini-ethernet-port: caps=(0x0000010000154813, 0x00002007ffdd7889)
|
||||
|
||||
And the packets do not go through.
|
||||
|
||||
The TSO implementation is bogus: a TSO enabled driver must propagate
|
||||
the skb_shinfo(skb)->gso_size value to the TSO engine on the NIC.
|
||||
|
||||
Drop the size check and TSO offloading features for now: this
|
||||
needs to be fixed up properly.
|
||||
|
||||
After this ethernet works fine on Gemini devices with a direct connected
|
||||
PHY such as D-Link DNS-313.
|
||||
|
||||
Also tested to still be working with a DSA switch using the Gemini
|
||||
ethernet as conduit interface.
|
||||
|
||||
Link: https://lore.kernel.org/netdev/CANn89iJLfxng1sYL5Zk0mknXpyYQPCp83m3KgD2KJ2_hKCpEUg@mail.gmail.com/
|
||||
Suggested-by: Eric Dumazet <edumazet@google.com>
|
||||
Fixes: d4d0c5b4d279 ("net: ethernet: cortina: Handle large frames")
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
Reviewed-by: Eric Dumazet <edumazet@google.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/cortina/gemini.c | 15 ++-------------
|
||||
1 file changed, 2 insertions(+), 13 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/cortina/gemini.c
|
||||
+++ b/drivers/net/ethernet/cortina/gemini.c
|
||||
@@ -79,8 +79,7 @@ MODULE_PARM_DESC(debug, "Debug level (0=
|
||||
#define GMAC0_IRQ4_8 (GMAC0_MIB_INT_BIT | GMAC0_RX_OVERRUN_INT_BIT)
|
||||
|
||||
#define GMAC_OFFLOAD_FEATURES (NETIF_F_SG | NETIF_F_IP_CSUM | \
|
||||
- NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM | \
|
||||
- NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6)
|
||||
+ NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM)
|
||||
|
||||
/**
|
||||
* struct gmac_queue_page - page buffer per-page info
|
||||
@@ -1148,23 +1147,13 @@ static int gmac_map_tx_bufs(struct net_d
|
||||
struct gmac_txdesc *txd;
|
||||
skb_frag_t *skb_frag;
|
||||
dma_addr_t mapping;
|
||||
- unsigned short mtu;
|
||||
void *buffer;
|
||||
int ret;
|
||||
|
||||
- mtu = ETH_HLEN;
|
||||
- mtu += netdev->mtu;
|
||||
- if (skb->protocol == htons(ETH_P_8021Q))
|
||||
- mtu += VLAN_HLEN;
|
||||
-
|
||||
+ /* TODO: implement proper TSO using MTU in word3 */
|
||||
word1 = skb->len;
|
||||
word3 = SOF_BIT;
|
||||
|
||||
- if (word1 > mtu) {
|
||||
- word1 |= TSS_MTU_ENABLE_BIT;
|
||||
- word3 |= mtu;
|
||||
- }
|
||||
-
|
||||
if (skb->len >= ETH_FRAME_LEN) {
|
||||
/* Hardware offloaded checksumming isn't working on frames
|
||||
* bigger than 1514 bytes. A hypothesis about this is that the
|
@ -1,124 +0,0 @@
|
||||
From 30fcba19ed88997a2909e4a68b4d39ff371357c3 Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linus.walleij@linaro.org>
|
||||
Date: Wed, 1 May 2024 21:46:31 +0200
|
||||
Subject: [PATCH 1/5] net: ethernet: cortina: Restore TSO support
|
||||
|
||||
An earlier commit deleted the TSO support in the Cortina Gemini
|
||||
driver because the driver was confusing gso_size and MTU,
|
||||
probably because what the Linux kernel calls "gso_size" was
|
||||
called "MTU" in the datasheet.
|
||||
|
||||
Restore the functionality properly reading the gso_size from
|
||||
the skbuff.
|
||||
|
||||
Tested with iperf3, running a server on a different machine
|
||||
and client on the device with the cortina gemini ethernet:
|
||||
|
||||
Connecting to host 192.168.1.2, port 5201
|
||||
60008000.ethernet-port eth0: segment offloading mss = 05ea len=1c8a
|
||||
60008000.ethernet-port eth0: segment offloading mss = 05ea len=1c8a
|
||||
60008000.ethernet-port eth0: segment offloading mss = 05ea len=27da
|
||||
60008000.ethernet-port eth0: segment offloading mss = 05ea len=0b92
|
||||
60008000.ethernet-port eth0: segment offloading mss = 05ea len=2bda
|
||||
(...)
|
||||
|
||||
(The hardware MSS 0x05ea here includes the ethernet headers.)
|
||||
|
||||
If I disable all segment offloading on the receiving host and
|
||||
dump packets using tcpdump -xx like this:
|
||||
|
||||
ethtool -K enp2s0 gro off gso off tso off
|
||||
tcpdump -xx -i enp2s0 host 192.168.1.136
|
||||
|
||||
I get segmented packages such as this when running iperf3:
|
||||
|
||||
23:16:54.024139 IP OpenWrt.lan.59168 > Fecusia.targus-getdata1:
|
||||
Flags [.], seq 1486:2934, ack 1, win 4198,
|
||||
options [nop,nop,TS val 3886192908 ecr 3601341877], length 1448
|
||||
0x0000: fc34 9701 a0c6 14d6 4da8 3c4f 0800 4500
|
||||
0x0010: 05dc 16a0 4000 4006 9aa1 c0a8 0188 c0a8
|
||||
0x0020: 0102 e720 1451 ff25 9822 4c52 29cf 8010
|
||||
0x0030: 1066 ac8c 0000 0101 080a e7a2 990c d6a8
|
||||
(...)
|
||||
0x05c0: 5e49 e109 fe8c 4617 5e18 7a82 7eae d647
|
||||
0x05d0: e8ee ae64 dc88 c897 3f8a 07a4 3a33 6b1b
|
||||
0x05e0: 3501 a30f 2758 cc44 4b4a
|
||||
|
||||
Several such packets often follow after each other verifying
|
||||
the segmentation into 0x05a8 (1448) byte packages also on the
|
||||
reveiving end. As can be seen, the ethernet frames are
|
||||
0x05ea (1514) in size.
|
||||
|
||||
Performance with iperf3 before this patch: ~15.5 Mbit/s
|
||||
Performance with iperf3 after this patch: ~175 Mbit/s
|
||||
|
||||
This was running a 60 second test (twice) the best measurement
|
||||
was 179 Mbit/s.
|
||||
|
||||
For comparison if I run iperf3 with UDP I get around 1.05 Mbit/s
|
||||
both before and after this patch.
|
||||
|
||||
While this is a gigabit ethernet interface, the CPU is a cheap
|
||||
D-Link DIR-685 router (based on the ARMv5 Faraday FA526 at
|
||||
~50 MHz), and the software is not supposed to drive traffic,
|
||||
as the device has a DSA chip, so this kind of numbers can be
|
||||
expected.
|
||||
|
||||
Fixes: ac631873c9e7 ("net: ethernet: cortina: Drop TSO support")
|
||||
Reviewed-by: Eric Dumazet <edumazet@google.com>
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
drivers/net/ethernet/cortina/gemini.c | 23 +++++++++++++++++++----
|
||||
1 file changed, 19 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/cortina/gemini.c
|
||||
+++ b/drivers/net/ethernet/cortina/gemini.c
|
||||
@@ -79,7 +79,8 @@ MODULE_PARM_DESC(debug, "Debug level (0=
|
||||
#define GMAC0_IRQ4_8 (GMAC0_MIB_INT_BIT | GMAC0_RX_OVERRUN_INT_BIT)
|
||||
|
||||
#define GMAC_OFFLOAD_FEATURES (NETIF_F_SG | NETIF_F_IP_CSUM | \
|
||||
- NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM)
|
||||
+ NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM | \
|
||||
+ NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6)
|
||||
|
||||
/**
|
||||
* struct gmac_queue_page - page buffer per-page info
|
||||
@@ -1148,13 +1149,25 @@ static int gmac_map_tx_bufs(struct net_d
|
||||
skb_frag_t *skb_frag;
|
||||
dma_addr_t mapping;
|
||||
void *buffer;
|
||||
+ u16 mss;
|
||||
int ret;
|
||||
|
||||
- /* TODO: implement proper TSO using MTU in word3 */
|
||||
word1 = skb->len;
|
||||
word3 = SOF_BIT;
|
||||
|
||||
- if (skb->len >= ETH_FRAME_LEN) {
|
||||
+ mss = skb_shinfo(skb)->gso_size;
|
||||
+ if (mss) {
|
||||
+ /* This means we are dealing with TCP and skb->len is the
|
||||
+ * sum total of all the segments. The TSO will deal with
|
||||
+ * chopping this up for us.
|
||||
+ */
|
||||
+ /* The accelerator needs the full frame size here */
|
||||
+ mss += skb_tcp_all_headers(skb);
|
||||
+ netdev_dbg(netdev, "segment offloading mss = %04x len=%04x\n",
|
||||
+ mss, skb->len);
|
||||
+ word1 |= TSS_MTU_ENABLE_BIT;
|
||||
+ word3 |= mss;
|
||||
+ } else if (skb->len >= ETH_FRAME_LEN) {
|
||||
/* Hardware offloaded checksumming isn't working on frames
|
||||
* bigger than 1514 bytes. A hypothesis about this is that the
|
||||
* checksum buffer is only 1518 bytes, so when the frames get
|
||||
@@ -1169,7 +1182,9 @@ static int gmac_map_tx_bufs(struct net_d
|
||||
return ret;
|
||||
}
|
||||
word1 |= TSS_BYPASS_BIT;
|
||||
- } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
|
||||
+ }
|
||||
+
|
||||
+ if (skb->ip_summed == CHECKSUM_PARTIAL) {
|
||||
int tcp = 0;
|
||||
|
||||
/* We do not switch off the checksumming on non TCP/UDP
|
@ -0,0 +1,43 @@
|
||||
Subject: [PATCH v2] netfilter: xtables: fix typo causing some targets to not load on IPv6
|
||||
Date: Sat, 19 Oct 2024 08:05:07 +0300 [thread overview]
|
||||
Message-ID: <20241019-xtables-typos-v2-1-6b8b1735dc8e@0upti.me> (raw)
|
||||
|
||||
These were added with the wrong family in 4cdc55e, which seems
|
||||
to just have been a typo, but now ip6tables rules with --set-mark
|
||||
don't work anymore, which is pretty bad.
|
||||
|
||||
Fixes: 0bfcb7b71e73 ("netfilter: xtables: avoid NFPROTO_UNSPEC where needed")
|
||||
Reviewed-by: Phil Sutter <phil@nwl.cc>
|
||||
Signed-off-by: Ilya Katsnelson <me@0upti.me>
|
||||
---
|
||||
Changes in v2:
|
||||
- Fixed a typo in the commit message (that's karma).
|
||||
- Replaced a reference to backport commit.
|
||||
- Link to v1: https://lore.kernel.org/r/20241018-xtables-typos-v1-1-02a51789c0ec@0upti.me
|
||||
---
|
||||
net/netfilter/xt_NFLOG.c | 2 +-
|
||||
net/netfilter/xt_mark.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/net/netfilter/xt_NFLOG.c
|
||||
+++ b/net/netfilter/xt_NFLOG.c
|
||||
@@ -79,7 +79,7 @@ static struct xt_target nflog_tg_reg[] _
|
||||
{
|
||||
.name = "NFLOG",
|
||||
.revision = 0,
|
||||
- .family = NFPROTO_IPV4,
|
||||
+ .family = NFPROTO_IPV6,
|
||||
.checkentry = nflog_tg_check,
|
||||
.destroy = nflog_tg_destroy,
|
||||
.target = nflog_tg,
|
||||
--- a/net/netfilter/xt_mark.c
|
||||
+++ b/net/netfilter/xt_mark.c
|
||||
@@ -62,7 +62,7 @@ static struct xt_target mark_tg_reg[] __
|
||||
{
|
||||
.name = "MARK",
|
||||
.revision = 2,
|
||||
- .family = NFPROTO_IPV4,
|
||||
+ .family = NFPROTO_IPV6,
|
||||
.target = mark_tg,
|
||||
.targetsize = sizeof(struct xt_mark_tginfo2),
|
||||
.me = THIS_MODULE,
|
@ -28,7 +28,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/phy/phy_device.c
|
||||
+++ b/drivers/net/phy/phy_device.c
|
||||
@@ -3201,6 +3201,7 @@ static int of_phy_led(struct phy_device
|
||||
@@ -3202,6 +3202,7 @@ static int of_phy_led(struct phy_device
|
||||
struct device *dev = &phydev->mdio.dev;
|
||||
struct led_init_data init_data = {};
|
||||
struct led_classdev *cdev;
|
||||
@ -36,7 +36,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct phy_led *phyled;
|
||||
u32 index;
|
||||
int err;
|
||||
@@ -3218,6 +3219,21 @@ static int of_phy_led(struct phy_device
|
||||
@@ -3219,6 +3220,21 @@ static int of_phy_led(struct phy_device
|
||||
if (index > U8_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -19,7 +19,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/phy/phy_device.c
|
||||
+++ b/drivers/net/phy/phy_device.c
|
||||
@@ -3219,11 +3219,17 @@ static int of_phy_led(struct phy_device
|
||||
@@ -3220,11 +3220,17 @@ static int of_phy_led(struct phy_device
|
||||
if (index > U8_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -2288,6 +2288,7 @@ CONFIG_HARDEN_BRANCH_HISTORY=y
|
||||
# CONFIG_HID_MAGICMOUSE is not set
|
||||
# CONFIG_HID_MALTRON is not set
|
||||
# CONFIG_HID_MAYFLASH is not set
|
||||
# CONFIG_HID_MCP2200 is not set
|
||||
# CONFIG_HID_MCP2221 is not set
|
||||
# CONFIG_HID_MEGAWORLD_FF is not set
|
||||
# CONFIG_HID_MICROSOFT is not set
|
||||
|
@ -195,20 +195,37 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
|
||||
return connmark_tg_shift(skb, info);
|
||||
}
|
||||
@@ -167,6 +194,16 @@ static struct xt_target connmark_tg_reg[
|
||||
.targetsize = sizeof(struct xt_connmark_tginfo2),
|
||||
@@ -168,6 +195,16 @@ static struct xt_target connmark_tg_reg[
|
||||
.destroy = connmark_tg_destroy,
|
||||
.me = THIS_MODULE,
|
||||
+ },
|
||||
},
|
||||
+ {
|
||||
+ .name = "CONNMARK",
|
||||
+ .revision = 3,
|
||||
+ .family = NFPROTO_UNSPEC,
|
||||
+ .family = NFPROTO_IPV4,
|
||||
+ .checkentry = connmark_tg_check,
|
||||
+ .target = connmark_tg_v3,
|
||||
+ .targetsize = sizeof(struct xt_connmark_tginfo3),
|
||||
+ .destroy = connmark_tg_destroy,
|
||||
+ .me = THIS_MODULE,
|
||||
}
|
||||
+ },
|
||||
#if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
|
||||
{
|
||||
.name = "CONNMARK",
|
||||
@@ -189,6 +226,16 @@ static struct xt_target connmark_tg_reg[
|
||||
.destroy = connmark_tg_destroy,
|
||||
.me = THIS_MODULE,
|
||||
},
|
||||
+ {
|
||||
+ .name = "CONNMARK",
|
||||
+ .revision = 3,
|
||||
+ .family = NFPROTO_IPV6,
|
||||
+ .checkentry = connmark_tg_check,
|
||||
+ .target = connmark_tg_v3,
|
||||
+ .targetsize = sizeof(struct xt_connmark_tginfo3),
|
||||
+ .destroy = connmark_tg_destroy,
|
||||
+ .me = THIS_MODULE,
|
||||
+ },
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -161,7 +161,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
struct rtnl_link {
|
||||
rtnl_doit_func doit;
|
||||
@@ -4949,7 +4949,9 @@ int ndo_dflt_bridge_getlink(struct sk_bu
|
||||
@@ -4978,7 +4978,9 @@ int ndo_dflt_bridge_getlink(struct sk_bu
|
||||
brport_nla_put_flag(skb, flags, mask,
|
||||
IFLA_BRPORT_MCAST_FLOOD, BR_MCAST_FLOOD) ||
|
||||
brport_nla_put_flag(skb, flags, mask,
|
||||
|
@ -5535,7 +5535,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
unsigned long type);
|
||||
--- a/include/linux/pci_ids.h
|
||||
+++ b/include/linux/pci_ids.h
|
||||
@@ -1108,6 +1108,12 @@
|
||||
@@ -1110,6 +1110,12 @@
|
||||
#define PCI_DEVICE_ID_SGI_IOC3 0x0003
|
||||
#define PCI_DEVICE_ID_SGI_LITHIUM 0x1002
|
||||
|
||||
|
@ -26,7 +26,7 @@ Cc: Robert Marko <robert.marko@sartura.hr>
|
||||
|
||||
--- a/drivers/hwmon/Kconfig
|
||||
+++ b/drivers/hwmon/Kconfig
|
||||
@@ -783,6 +783,14 @@ config SENSORS_IBMPOWERNV
|
||||
@@ -785,6 +785,14 @@ config SENSORS_IBMPOWERNV
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called ibmpowernv.
|
||||
|
||||
|
@ -10,7 +10,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
|
||||
--- a/drivers/tty/serial/serial_core.c
|
||||
+++ b/drivers/tty/serial/serial_core.c
|
||||
@@ -480,6 +480,9 @@ uart_get_baud_rate(struct uart_port *por
|
||||
@@ -482,6 +482,9 @@ uart_get_baud_rate(struct uart_port *por
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- a/drivers/usb/dwc2/platform.c
|
||||
+++ b/drivers/usb/dwc2/platform.c
|
||||
@@ -493,6 +493,12 @@ static int dwc2_driver_probe(struct plat
|
||||
@@ -481,6 +481,12 @@ static int dwc2_driver_probe(struct plat
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
|
@ -18,7 +18,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
--- a/drivers/usb/dwc3/core.c
|
||||
+++ b/drivers/usb/dwc3/core.c
|
||||
@@ -839,8 +839,20 @@ static int dwc3_clk_enable(struct dwc3 *
|
||||
@@ -845,8 +845,20 @@ static int dwc3_clk_enable(struct dwc3 *
|
||||
if (ret)
|
||||
goto disable_ref_clk;
|
||||
|
||||
@ -39,7 +39,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
disable_ref_clk:
|
||||
clk_disable_unprepare(dwc->ref_clk);
|
||||
disable_bus_clk:
|
||||
@@ -850,6 +862,8 @@ disable_bus_clk:
|
||||
@@ -856,6 +868,8 @@ disable_bus_clk:
|
||||
|
||||
static void dwc3_clk_disable(struct dwc3 *dwc)
|
||||
{
|
||||
@ -48,7 +48,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
clk_disable_unprepare(dwc->susp_clk);
|
||||
clk_disable_unprepare(dwc->ref_clk);
|
||||
clk_disable_unprepare(dwc->bus_clk);
|
||||
@@ -1878,6 +1892,20 @@ static int dwc3_get_clocks(struct dwc3 *
|
||||
@@ -1884,6 +1898,20 @@ static int dwc3_get_clocks(struct dwc3 *
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user