diff --git a/blacklist.conf b/blacklist.conf index 2ffd884..507d9f9 100644 --- a/blacklist.conf +++ b/blacklist.conf @@ -2268,3 +2268,5 @@ c57094a6e1ed5dd2d6401f79b8e6da34dd28f959 # Doesn't apply, not needed. Fixes a m 81fb55e500a82a070da20f02b2e252d6a09a34c3 # rejected for complexity: drm/vc4: hdmi: Add a spinlock to protect register access 82cb88af12d29eaa5350d9ba83f9c376f65b7fec # rejected for complexity: drm/vc4: hdmi: Use a mutex to prevent concurrent framework access 633be8c3c0c5e0cf176ce904083a4728ae8e4025 # rejected for complexity: drm/vc4: hdmi: Prevent access to crtc->state outside of KMS +b06ca3d5a43ca2dd806f7688a17e8e7e0619a80a # doesn't apply +8ffe20d08f2c95d702c453020d03a4c568a988f0 # duplicate of b4a64ed6e7b857317070fcb9d87ff5d4a73be3e8 diff --git a/patches.suse/Input-gscps2-check-return-value-of-ioremap-in-gscps2.patch b/patches.suse/Input-gscps2-check-return-value-of-ioremap-in-gscps2.patch new file mode 100644 index 0000000..fe742e0 --- /dev/null +++ b/patches.suse/Input-gscps2-check-return-value-of-ioremap-in-gscps2.patch @@ -0,0 +1,35 @@ +From e61b3125a4f036b3c6b87ffd656fc1ab00440ae9 Mon Sep 17 00:00:00 2001 +From: Xie Shaowen +Date: Tue, 2 Aug 2022 15:20:33 +0800 +Subject: [PATCH] Input: gscps2 - check return value of ioremap() in + gscps2_probe() +Git-commit: e61b3125a4f036b3c6b87ffd656fc1ab00440ae9 +References: git-fixes +Patch-mainline: v6.0-rc1 + +The function ioremap() in gscps2_probe() can fail, so +its return value should be checked. + +Fixes: 4bdc0d676a643 ("remove ioremap_nocache and devm_ioremap_nocache") +Cc: # v5.6+ +Reported-by: Hacash Robot +Signed-off-by: Xie Shaowen +Signed-off-by: Helge Deller +Signed-off-by: Oliver Neukum +--- + drivers/input/serio/gscps2.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/input/serio/gscps2.c ++++ b/drivers/input/serio/gscps2.c +@@ -351,6 +351,10 @@ static int gscps2_probe(struct parisc_de + ps2port->port = serio; + ps2port->padev = dev; + ps2port->addr = ioremap_nocache(hpa, GSC_STATUS + 4); ++ if (!ps2port->addr) { ++ ret = -ENOMEM; ++ goto fail_nomem; ++ } + spin_lock_init(&ps2port->lock); + + gscps2_reset(ps2port); diff --git a/patches.suse/Input-xpad-add-supported-devices-as-contributed-on-g.patch b/patches.suse/Input-xpad-add-supported-devices-as-contributed-on-g.patch new file mode 100644 index 0000000..e8dc31c --- /dev/null +++ b/patches.suse/Input-xpad-add-supported-devices-as-contributed-on-g.patch @@ -0,0 +1,103 @@ +From b382c5e37344883dc97525d05f1f6b788f549985 Mon Sep 17 00:00:00 2001 +From: Pavel Rojtberg +Date: Thu, 18 Aug 2022 17:44:08 +0200 +Subject: [PATCH] Input: xpad - add supported devices as contributed on github +Git-commit: b382c5e37344883dc97525d05f1f6b788f549985 +References: git-fixes +Patch-mainline: v6.1-rc1 + +This is based on multiple commits at https://github.com/paroj/xpad + +Cc: stable@vger.kernel.org +Signed-off-by: Jasper Poppe +Signed-off-by: Jeremy Palmer +Signed-off-by: Ruineka +Signed-off-by: Cleber de Mattos Casali +Signed-off-by: Kyle Gospodnetich +Signed-off-by: Pavel Rojtberg +Link: https://lore.kernel.org/r/20220818154411.510308-2-rojtberg@gmail.com +Signed-off-by: Dmitry Torokhov +Signed-off-by: Oliver Neukum +--- + drivers/input/joystick/xpad.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +--- a/drivers/input/joystick/xpad.c ++++ b/drivers/input/joystick/xpad.c +@@ -129,6 +129,8 @@ static const struct xpad_device { + u8 xtype; + } xpad_device[] = { + { 0x0079, 0x18d4, "GPD Win 2 X-Box Controller", 0, XTYPE_XBOX360 }, ++ { 0x03eb, 0xff01, "Wooting One (Legacy)", 0, XTYPE_XBOX360 }, ++ { 0x03eb, 0xff02, "Wooting Two (Legacy)", 0, XTYPE_XBOX360 }, + { 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX }, + { 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX }, + { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX }, +@@ -259,6 +261,7 @@ static const struct xpad_device { + { 0x0f0d, 0x0063, "Hori Real Arcade Pro Hayabusa (USA) Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, + { 0x0f0d, 0x0067, "HORIPAD ONE", 0, XTYPE_XBOXONE }, + { 0x0f0d, 0x0078, "Hori Real Arcade Pro V Kai Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, ++ { 0x0f0d, 0x00c5, "Hori Fighting Commander ONE", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, + { 0x0f30, 0x010b, "Philips Recoil", 0, XTYPE_XBOX }, + { 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX }, + { 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX }, +@@ -275,6 +278,7 @@ static const struct xpad_device { + { 0x1430, 0x8888, "TX6500+ Dance Pad (first generation)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX }, + { 0x1430, 0xf801, "RedOctane Controller", 0, XTYPE_XBOX360 }, + { 0x146b, 0x0601, "BigBen Interactive XBOX 360 Controller", 0, XTYPE_XBOX360 }, ++ { 0x146b, 0x0604, "Bigben Interactive DAIJA Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, + { 0x1532, 0x0037, "Razer Sabertooth", 0, XTYPE_XBOX360 }, + { 0x1532, 0x0a00, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, + { 0x1532, 0x0a03, "Razer Wildcat", 0, XTYPE_XBOXONE }, +@@ -339,6 +343,7 @@ static const struct xpad_device { + { 0x24c6, 0x5502, "Hori Fighting Stick VX Alt", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, + { 0x24c6, 0x5503, "Hori Fighting Edge", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, + { 0x24c6, 0x5506, "Hori SOULCALIBUR V Stick", 0, XTYPE_XBOX360 }, ++ { 0x24c6, 0x5510, "Hori Fighting Commander ONE (Xbox 360/PC Mode)", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, + { 0x24c6, 0x550d, "Hori GEM Xbox controller", 0, XTYPE_XBOX360 }, + { 0x24c6, 0x550e, "Hori Real Arcade Pro V Kai 360", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, + { 0x24c6, 0x551a, "PowerA FUSION Pro Controller", 0, XTYPE_XBOXONE }, +@@ -348,6 +353,14 @@ static const struct xpad_device { + { 0x24c6, 0x5b03, "Thrustmaster Ferrari 458 Racing Wheel", 0, XTYPE_XBOX360 }, + { 0x24c6, 0x5d04, "Razer Sabertooth", 0, XTYPE_XBOX360 }, + { 0x24c6, 0xfafe, "Rock Candy Gamepad for Xbox 360", 0, XTYPE_XBOX360 }, ++ { 0x2563, 0x058d, "OneXPlayer Gamepad", 0, XTYPE_XBOX360 }, ++ { 0x2dc8, 0x2000, "8BitDo Pro 2 Wired Controller fox Xbox", 0, XTYPE_XBOXONE }, ++ { 0x31e3, 0x1100, "Wooting One", 0, XTYPE_XBOX360 }, ++ { 0x31e3, 0x1200, "Wooting Two", 0, XTYPE_XBOX360 }, ++ { 0x31e3, 0x1210, "Wooting Lekker", 0, XTYPE_XBOX360 }, ++ { 0x31e3, 0x1220, "Wooting Two HE", 0, XTYPE_XBOX360 }, ++ { 0x31e3, 0x1300, "Wooting 60HE (AVR)", 0, XTYPE_XBOX360 }, ++ { 0x31e3, 0x1310, "Wooting 60HE (ARM)", 0, XTYPE_XBOX360 }, + { 0x3285, 0x0607, "Nacon GC-100", 0, XTYPE_XBOX360 }, + { 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX }, + { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX }, +@@ -433,6 +446,7 @@ static const signed short xpad_abs_trigg + static struct usb_device_id xpad_table[] = { + { USB_INTERFACE_INFO('X', 'B', 0) }, /* X-Box USB-IF not approved class */ + XPAD_XBOX360_VENDOR(0x0079), /* GPD Win 2 Controller */ ++ XPAD_XBOX360_VENDOR(0x03eb), /* Wooting Keyboards (Legacy) */ + XPAD_XBOX360_VENDOR(0x044f), /* Thrustmaster X-Box 360 controllers */ + XPAD_XBOX360_VENDOR(0x045e), /* Microsoft X-Box 360 controllers */ + XPAD_XBOXONE_VENDOR(0x045e), /* Microsoft X-Box One controllers */ +@@ -443,6 +457,7 @@ static struct usb_device_id xpad_table[] + { USB_DEVICE(0x0738, 0x4540) }, /* Mad Catz Beat Pad */ + XPAD_XBOXONE_VENDOR(0x0738), /* Mad Catz FightStick TE 2 */ + XPAD_XBOX360_VENDOR(0x07ff), /* Mad Catz GamePad */ ++ XPAD_XBOX360_VENDOR(0x0c12), /* Zeroplus X-Box 360 controllers */ + XPAD_XBOX360_VENDOR(0x0e6f), /* 0x0e6f X-Box 360 controllers */ + XPAD_XBOXONE_VENDOR(0x0e6f), /* 0x0e6f X-Box One controllers */ + XPAD_XBOX360_VENDOR(0x0f0d), /* Hori Controllers */ +@@ -463,8 +478,12 @@ static struct usb_device_id xpad_table[] + XPAD_XBOXONE_VENDOR(0x20d6), /* PowerA Controllers */ + XPAD_XBOX360_VENDOR(0x24c6), /* PowerA Controllers */ + XPAD_XBOXONE_VENDOR(0x24c6), /* PowerA Controllers */ ++ XPAD_XBOX360_VENDOR(0x2563), /* OneXPlayer Gamepad */ ++ XPAD_XBOX360_VENDOR(0x260d), /* Dareu H101 */ ++ XPAD_XBOXONE_VENDOR(0x2dc8), /* 8BitDo Pro 2 Wired Controller for Xbox */ + XPAD_XBOXONE_VENDOR(0x2e24), /* Hyperkin Duke X-Box One pad */ + XPAD_XBOX360_VENDOR(0x2f24), /* GameSir Controllers */ ++ XPAD_XBOX360_VENDOR(0x31e3), /* Wooting Keyboards */ + XPAD_XBOX360_VENDOR(0x3285), /* Nacon GC-100 */ + { } + }; diff --git a/patches.suse/Revert-USB-serial-ch341-add-new-Product-ID-for-CH341.patch b/patches.suse/Revert-USB-serial-ch341-add-new-Product-ID-for-CH341.patch index a838b63..3207252 100644 --- a/patches.suse/Revert-USB-serial-ch341-add-new-Product-ID-for-CH341.patch +++ b/patches.suse/Revert-USB-serial-ch341-add-new-Product-ID-for-CH341.patch @@ -26,8 +26,8 @@ Signed-off-by: Oliver Neukum --- a/drivers/usb/serial/ch341.c +++ b/drivers/usb/serial/ch341.c -@@ -83,7 +83,6 @@ - #define CH341_LCR_CS5 0x00 +@@ -79,7 +79,6 @@ + #define CH341_QUIRK_LIMITED_PRESCALER BIT(0) static const struct usb_device_id id_table[] = { - { USB_DEVICE(0x1a86, 0x5512) }, diff --git a/patches.suse/Revert-niu-fix-missing-checks-of-niu_pci_eeprom_read.patch b/patches.suse/Revert-niu-fix-missing-checks-of-niu_pci_eeprom_read.patch new file mode 100644 index 0000000..1adcb05 --- /dev/null +++ b/patches.suse/Revert-niu-fix-missing-checks-of-niu_pci_eeprom_read.patch @@ -0,0 +1,68 @@ +From b896d6e6e524451d3912eb83c57e1cb952d8f84b Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Mon, 3 May 2021 13:56:49 +0200 +Subject: [PATCH 14/19] Revert "niu: fix missing checks of niu_pci_eeprom_read" +Git-commit: 7930742d6a0ff091c85b92ef4e076432d8d8cb79 +Patch-mainline: v5.13-rc3 +References: git-fixes + +This reverts commit 26fd962bde0b15e54234fe762d86bc0349df1de4. + +Because of recent interactions with developers from @umn.edu, all +commits from them have been recently re-reviewed to ensure if they were +correct or not. + +Upon review, this commit was found to be incorrect for the reasons +below, so it must be reverted. It will be fixed up "correctly" in a +later kernel change. + +The change here was incorrect. While it is nice to check if +niu_pci_eeprom_read() succeeded or not when using the data, any error +that might have happened was not propagated upwards properly, causing +the kernel to assume that these reads were successful, which results in +invalid data in the buffer that was to contain the successfully read +data. + +Cc: Kangjie Lu +Cc: Shannon Nelson +Cc: David S. Miller +Fixes: 26fd962bde0b ("niu: fix missing checks of niu_pci_eeprom_read") +Cc: stable +Link: https://lore.kernel.org/r/20210503115736.2104747-23-gregkh@linuxfoundation.org +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/sun/niu.c | 10 ++-------- + 1 file changed, 2 insertions(+), 8 deletions(-) + +diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c +index 3f0e34bdf772..1c0aee4ada92 100644 +--- a/drivers/net/ethernet/sun/niu.c ++++ b/drivers/net/ethernet/sun/niu.c +@@ -8119,8 +8119,6 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end) + start += 3; + + prop_len = niu_pci_eeprom_read(np, start + 4); +- if (prop_len < 0) +- return prop_len; + err = niu_pci_vpd_get_propname(np, start + 5, namebuf, 64); + if (err < 0) + return err; +@@ -8165,12 +8163,8 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end) + netif_printk(np, probe, KERN_DEBUG, np->dev, + "VPD_SCAN: Reading in property [%s] len[%d]\n", + namebuf, prop_len); +- for (i = 0; i < prop_len; i++) { +- err = niu_pci_eeprom_read(np, off + i); +- if (err >= 0) +- *prop_buf = err; +- ++prop_buf; +- } ++ for (i = 0; i < prop_len; i++) ++ *prop_buf++ = niu_pci_eeprom_read(np, off + i); + } + + start += len; +-- +2.16.4 + diff --git a/patches.suse/USB-serial-ch341-add-basis-for-quirk-detection.patch b/patches.suse/USB-serial-ch341-add-basis-for-quirk-detection.patch new file mode 100644 index 0000000..7994d75 --- /dev/null +++ b/patches.suse/USB-serial-ch341-add-basis-for-quirk-detection.patch @@ -0,0 +1,109 @@ +From c404bf4aa9236cb4d1068e499ae42acf48a6ff97 Mon Sep 17 00:00:00 2001 +From: Michael Hanselmann +Date: Tue, 31 Mar 2020 23:37:18 +0000 +Subject: [PATCH] USB: serial: ch341: add basis for quirk detection +Git-commit: c404bf4aa9236cb4d1068e499ae42acf48a6ff97 +References: git-fixes +Patch-mainline: v5.8-rc1 + +A subset of CH341 devices does not support all features, namely the +prescaler is limited to a reduced precision and there is no support for +sending a RS232 break condition. This patch adds a detection function +which will be extended to set quirk flags as they're implemented. + +The author's affected device has an imprint of "340" on the +turquoise-colored plug, but not all such devices appear to be affected. + +Signed-off-by: Michael Hanselmann +Link: https://lore.kernel.org/r/1e1ae0da6082bb528a44ef323d4e1d3733d38858.1585697281.git.public@hansmi.ch +[ johan: use long type for quirks; rephrase and use port device for + messages; handle short reads; set quirk flags directly in + helper function ] +Cc: stable # 5.5 +Signed-off-by: Johan Hovold +Signed-off-by: Oliver Neukum +--- + drivers/usb/serial/ch341.c | 53 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 53 insertions(+) + +diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c +index c5ecdcd51ffc..f2b93f4554a7 100644 +--- a/drivers/usb/serial/ch341.c ++++ b/drivers/usb/serial/ch341.c +@@ -87,6 +87,7 @@ struct ch341_private { + u8 mcr; + u8 msr; + u8 lcr; ++ unsigned long quirks; + }; + + static void ch341_set_termios(struct tty_struct *tty, +@@ -308,6 +309,53 @@ out: kfree(buffer); + return r; + } + ++static int ch341_detect_quirks(struct usb_serial_port *port) ++{ ++ struct ch341_private *priv = usb_get_serial_port_data(port); ++ struct usb_device *udev = port->serial->dev; ++ const unsigned int size = 2; ++ unsigned long quirks = 0; ++ char *buffer; ++ int r; ++ ++ buffer = kmalloc(size, GFP_KERNEL); ++ if (!buffer) ++ return -ENOMEM; ++ ++ /* ++ * A subset of CH34x devices does not support all features. The ++ * prescaler is limited and there is no support for sending a RS232 ++ * break condition. A read failure when trying to set up the latter is ++ * used to detect these devices. ++ */ ++ r = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), CH341_REQ_READ_REG, ++ USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, ++ CH341_REG_BREAK, 0, buffer, size, DEFAULT_TIMEOUT); ++ if (r == -EPIPE) { ++ dev_dbg(&port->dev, "break control not supported\n"); ++ r = 0; ++ goto out; ++ } ++ ++ if (r != size) { ++ if (r >= 0) ++ r = -EIO; ++ dev_err(&port->dev, "failed to read break control: %d\n", r); ++ goto out; ++ } ++ ++ r = 0; ++out: ++ kfree(buffer); ++ ++ if (quirks) { ++ dev_dbg(&port->dev, "enabling quirk flags: 0x%02lx\n", quirks); ++ priv->quirks |= quirks; ++ } ++ ++ return r; ++} ++ + static int ch341_port_probe(struct usb_serial_port *port) + { + struct ch341_private *priv; +@@ -330,6 +378,11 @@ static int ch341_port_probe(struct usb_serial_port *port) + goto error; + + usb_set_serial_port_data(port, priv); ++ ++ r = ch341_detect_quirks(port); ++ if (r < 0) ++ goto error; ++ + return 0; + + error: kfree(priv); +-- +2.35.3 + diff --git a/patches.suse/USB-serial-ch341-fix-lockup-of-devices-with-limited-.patch b/patches.suse/USB-serial-ch341-fix-lockup-of-devices-with-limited-.patch new file mode 100644 index 0000000..d3e1d3a --- /dev/null +++ b/patches.suse/USB-serial-ch341-fix-lockup-of-devices-with-limited-.patch @@ -0,0 +1,91 @@ +From c432df155919582a3cefa35a8f86256c830fa9a4 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Thu, 14 May 2020 11:36:45 +0200 +Subject: [PATCH] USB: serial: ch341: fix lockup of devices with limited + prescaler +Git-commit: c432df155919582a3cefa35a8f86256c830fa9a4 +References: git-fixes +Patch-mainline: v5.8-rc1 + +Michael Hanselmann reports that + + [a] subset of all CH341 devices stop responding to bulk + transfers, usually after the third byte, when the highest + prescaler bit (0b100) is set. There is one exception, namely a + prescaler of exactly 0b111 (fact=1, ps=3). + +Fix this by forcing a lower base clock (fact = 0) whenever needed. + +This specifically makes the standard rates 110, 134 and 200 bps work +again with these devices. + +Fixes: 35714565089e ("USB: serial: ch341: reimplement line-speed handling") +Cc: stable # 5.5 +Reported-by: Michael Hanselmann +Link: https://lore.kernel.org/r/20200514141743.GE25962@localhost +Signed-off-by: Johan Hovold +Signed-off-by: Oliver Neukum +--- + drivers/usb/serial/ch341.c | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) + +diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c +index f2b93f4554a7..89675ee29645 100644 +--- a/drivers/usb/serial/ch341.c ++++ b/drivers/usb/serial/ch341.c +@@ -73,6 +73,8 @@ + #define CH341_LCR_CS6 0x01 + #define CH341_LCR_CS5 0x00 + ++#define CH341_QUIRK_LIMITED_PRESCALER BIT(0) ++ + static const struct usb_device_id id_table[] = { + { USB_DEVICE(0x4348, 0x5523) }, + { USB_DEVICE(0x1a86, 0x7523) }, +@@ -160,9 +162,11 @@ static const speed_t ch341_min_rates[] = { + * 2 <= div <= 256 if fact = 0, or + * 9 <= div <= 256 if fact = 1 + */ +-static int ch341_get_divisor(speed_t speed) ++static int ch341_get_divisor(struct ch341_private *priv) + { + unsigned int fact, div, clk_div; ++ speed_t speed = priv->baud_rate; ++ bool force_fact0 = false; + int ps; + + /* +@@ -188,8 +192,12 @@ static int ch341_get_divisor(speed_t speed) + clk_div = CH341_CLK_DIV(ps, fact); + div = CH341_CLKRATE / (clk_div * speed); + ++ /* Some devices require a lower base clock if ps < 3. */ ++ if (ps < 3 && (priv->quirks & CH341_QUIRK_LIMITED_PRESCALER)) ++ force_fact0 = true; ++ + /* Halve base clock (fact = 0) if required. */ +- if (div < 9 || div > 255) { ++ if (div < 9 || div > 255 || force_fact0) { + div /= 2; + clk_div *= 2; + fact = 0; +@@ -228,7 +236,7 @@ static int ch341_set_baudrate_lcr(struct usb_device *dev, + if (!priv->baud_rate) + return -EINVAL; + +- val = ch341_get_divisor(priv->baud_rate); ++ val = ch341_get_divisor(priv); + if (val < 0) + return -EINVAL; + +@@ -333,6 +341,7 @@ static int ch341_detect_quirks(struct usb_serial_port *port) + CH341_REG_BREAK, 0, buffer, size, DEFAULT_TIMEOUT); + if (r == -EPIPE) { + dev_dbg(&port->dev, "break control not supported\n"); ++ quirks = CH341_QUIRK_LIMITED_PRESCALER; + r = 0; + goto out; + } +-- +2.35.3 + diff --git a/patches.suse/USB-serial-ch341-fix-lost-character-on-LCR-updates.patch b/patches.suse/USB-serial-ch341-fix-lost-character-on-LCR-updates.patch new file mode 100644 index 0000000..62ae47d --- /dev/null +++ b/patches.suse/USB-serial-ch341-fix-lost-character-on-LCR-updates.patch @@ -0,0 +1,59 @@ +From 8e83622ae7ca481c76c8fd9579877f6abae64ca2 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Wed, 31 Aug 2022 10:15:24 +0200 +Subject: [PATCH] USB: serial: ch341: fix lost character on LCR updates +Git-commit: 8e83622ae7ca481c76c8fd9579877f6abae64ca2 +References: git-fixes +Patch-mainline: v6.0-rc4 + +Disable LCR updates for pre-0x30 devices which use a different (unknown) +protocol for line control and where the current register write causes +the next received character to be lost. + +Note that updating LCR using the INIT command has no effect on these +devices either. + +Reported-by: Jonathan Woithe +Tested-by: Jonathan Woithe +Link: https://lore.kernel.org/r/Ys1iPTfiZRWj2gXs@marvin.atrad.com.au +Fixes: 4e46c410e050 ("USB: serial: ch341: reinitialize chip on reconfiguration") +Fixes: 55fa15b5987d ("USB: serial: ch341: fix baud rate and line-control handling") +Cc: stable@vger.kernel.org # 4.10 +Signed-off-by: Johan Hovold +Signed-off-by: Oliver Neukum +--- + drivers/usb/serial/ch341.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +--- a/drivers/usb/serial/ch341.c ++++ b/drivers/usb/serial/ch341.c +@@ -96,6 +96,7 @@ struct ch341_private { + u8 msr; + u8 lcr; + unsigned long quirks; ++ u8 version; + }; + + static void ch341_set_termios(struct tty_struct *tty, +@@ -250,6 +251,10 @@ static int ch341_set_baudrate_lcr(struct + * CH341A buffers data until a full endpoint-size packet (32 bytes) + * has been received unless bit 7 is set. + */ ++ ++ if (priv->version < 0x30) ++ return 0; ++ + val |= BIT(7); + + r = ch341_control_out(dev, CH341_REQ_WRITE_REG, 0x1312, val); +@@ -307,7 +312,9 @@ static int ch341_configure(struct usb_de + r = ch341_control_in(dev, CH341_REQ_READ_VERSION, 0, 0, buffer, size); + if (r < 0) + goto out; +- dev_dbg(&dev->dev, "Chip version: 0x%02x\n", buffer[0]); ++ ++ priv->version = buffer[0]; ++ dev_dbg(&dev->dev, "Chip version: 0x%02x\n", priv->version); + + r = ch341_control_out(dev, CH341_REQ_SERIAL_INIT, 0, 0); + if (r < 0) diff --git a/patches.suse/USB-serial-ch341-fix-receiver-regression.patch b/patches.suse/USB-serial-ch341-fix-receiver-regression.patch new file mode 100644 index 0000000..784bdcc --- /dev/null +++ b/patches.suse/USB-serial-ch341-fix-receiver-regression.patch @@ -0,0 +1,55 @@ +From 7c3d02285ad558691f27fde760bcd841baa27eab Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Thu, 6 Feb 2020 12:18:19 +0100 +Subject: [PATCH] USB: serial: ch341: fix receiver regression +Git-commit: 7c3d02285ad558691f27fde760bcd841baa27eab +References: git-fixes +Patch-mainline: v5.6-rc3 + +While assumed not to make a difference, not using the factor-2 prescaler +makes the receiver more susceptible to errors. + +Specifically, there have been reports of problems with devices that +cannot generate a 115200 rate with a smaller error than 2.1% (e.g. +117647 bps). But this can also be reproduced with a low-speed RS232 +tranceiver at 115200 when the input rate matches the nominal rate. + +So whenever possible, enable the factor-2 prescaler and halve the +divisor in order to use settings closer to that of the previous +algorithm. + +Fixes: 35714565089e ("USB: serial: ch341: reimplement line-speed handling") +Cc: stable # 5.5 +Reported-by: Jakub Nantl +Tested-by: Jakub Nantl +Reviewed-by: Greg Kroah-Hartman +Signed-off-by: Johan Hovold +Signed-off-by: Oliver Neukum +--- + drivers/usb/serial/ch341.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c +index d3f420f3a083..c5ecdcd51ffc 100644 +--- a/drivers/usb/serial/ch341.c ++++ b/drivers/usb/serial/ch341.c +@@ -205,6 +205,16 @@ static int ch341_get_divisor(speed_t speed) + 16 * speed - 16 * CH341_CLKRATE / (clk_div * (div + 1))) + div++; + ++ /* ++ * Prefer lower base clock (fact = 0) if even divisor. ++ * ++ * Note that this makes the receiver more tolerant to errors. ++ */ ++ if (fact == 1 && div % 2 == 0) { ++ div /= 2; ++ fact = 0; ++ } ++ + return (0x100 - div) << 8 | fact << 2 | ps; + } + +-- +2.35.3 + diff --git a/patches.suse/USB-serial-ch341-reimplement-line-speed-handling.patch b/patches.suse/USB-serial-ch341-reimplement-line-speed-handling.patch new file mode 100644 index 0000000..d773ad2 --- /dev/null +++ b/patches.suse/USB-serial-ch341-reimplement-line-speed-handling.patch @@ -0,0 +1,193 @@ +From 35714565089e5e8b091c1155517b67e29118f09d Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Fri, 1 Nov 2019 18:24:10 +0100 +Subject: [PATCH] USB: serial: ch341: reimplement line-speed handling +Git-commit: 35714565089e5e8b091c1155517b67e29118f09d +References: git-fixes +Patch-mainline: v5.5-rc1 + +The current ch341 divisor algorithm was known to give inaccurate results +for certain higher line speeds. Jonathan Olds +investigated this, determined the basic equations used to derive the +divisors and confirmed them experimentally [1]. + +The equations Jonathan used could be generalised further to: + + baudrate = 48000000 / (2^(12 - 3 * ps - fact) * div), where + + 0 <= ps <= 3, + 0 <= fact <= 1, + 2 <= div <= 256 if fact = 0, or + 9 <= div <= 256 if fact = 1 + +which will also give better results for lower rates. + +Notably the error is reduced for the following standard rates: + + 1152000 (4.0% instead of 15% error) + 921600 (0.16% instead of -7.5% error) + 576000 (-0.80% instead of -5.6% error) + 200 (0.16% instead of -0.69% error) + 134 (-0.05% instead of -0.63% error) + 110 (0.03% instead of -0.44% error) + +but also for many non-standard ones. + +The current algorithm also suffered from rounding issues (e.g. +requesting 2950000 Bd resulted in a rate of 2 MBd instead of 3 MBd and +thus a -32% instead of 1.7% error). + +The new algorithm was inspired by the current vendor driver even if that +one only handles two higher rates that require fact=1 by hard coding the +corresponding divisors [2]. + +Michael Dreher also did a similar generalisation of +Jonathan's work and has published his results with a very good summary +that provides further insights into how this device works [3]. + +[1] https://lkml.kernel.org/r/000001d51f34$bad6afd0$30840f70$@co.nz +[2] http://www.wch.cn/download/CH341SER_LINUX_ZIP.html +[3] https://github.com/nospam2000/ch341-baudrate-calculation + +Reported-by: Jonathan Olds +Tested-by: Jonathan Olds +Cc: Michael Dreher +Signed-off-by: Johan Hovold +Signed-off-by: Oliver Neukum +--- + drivers/usb/serial/ch341.c | 97 +++++++++++++++++++++++++++++--------- + 1 file changed, 75 insertions(+), 22 deletions(-) + +diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c +index 3bb1fff02bed..df582fe855f0 100644 +--- a/drivers/usb/serial/ch341.c ++++ b/drivers/usb/serial/ch341.c +@@ -48,12 +48,6 @@ + #define CH341_BIT_DCD 0x08 + #define CH341_BITS_MODEM_STAT 0x0f /* all bits */ + +-/*******************************/ +-/* baudrate calculation factor */ +-/*******************************/ +-#define CH341_BAUDBASE_FACTOR 1532620800 +-#define CH341_BAUDBASE_DIVMAX 3 +- + /* Break support - the information used to implement this was gleaned from + * the Net/FreeBSD uchcom.c driver by Takanori Watanabe. Domo arigato. + */ +@@ -144,37 +138,96 @@ static int ch341_control_in(struct usb_device *dev, + return 0; + } + ++#define CH341_CLKRATE 48000000 ++#define CH341_CLK_DIV(ps, fact) (1 << (12 - 3 * (ps) - (fact))) ++#define CH341_MIN_RATE(ps) (CH341_CLKRATE / (CH341_CLK_DIV((ps), 1) * 512)) ++ ++static const speed_t ch341_min_rates[] = { ++ CH341_MIN_RATE(0), ++ CH341_MIN_RATE(1), ++ CH341_MIN_RATE(2), ++ CH341_MIN_RATE(3), ++}; ++ ++/* ++ * The device line speed is given by the following equation: ++ * ++ * baudrate = 48000000 / (2^(12 - 3 * ps - fact) * div), where ++ * ++ * 0 <= ps <= 3, ++ * 0 <= fact <= 1, ++ * 2 <= div <= 256 if fact = 0, or ++ * 9 <= div <= 256 if fact = 1 ++ */ ++static int ch341_get_divisor(speed_t speed) ++{ ++ unsigned int fact, div, clk_div; ++ int ps; ++ ++ /* ++ * Clamp to supported range, this makes the (ps < 0) and (div < 2) ++ * sanity checks below redundant. ++ */ ++ speed = clamp(speed, 46U, 3000000U); ++ ++ /* ++ * Start with highest possible base clock (fact = 1) that will give a ++ * divisor strictly less than 512. ++ */ ++ fact = 1; ++ for (ps = 3; ps >= 0; ps--) { ++ if (speed > ch341_min_rates[ps]) ++ break; ++ } ++ ++ if (ps < 0) ++ return -EINVAL; ++ ++ /* Determine corresponding divisor, rounding down. */ ++ clk_div = CH341_CLK_DIV(ps, fact); ++ div = CH341_CLKRATE / (clk_div * speed); ++ ++ /* Halve base clock (fact = 0) if required. */ ++ if (div < 9 || div > 255) { ++ div /= 2; ++ clk_div *= 2; ++ fact = 0; ++ } ++ ++ if (div < 2) ++ return -EINVAL; ++ ++ /* ++ * Pick next divisor if resulting rate is closer to the requested one, ++ * scale up to avoid rounding errors on low rates. ++ */ ++ if (16 * CH341_CLKRATE / (clk_div * div) - 16 * speed >= ++ 16 * speed - 16 * CH341_CLKRATE / (clk_div * (div + 1))) ++ div++; ++ ++ return (0x100 - div) << 8 | fact << 2 | ps; ++} ++ + static int ch341_set_baudrate_lcr(struct usb_device *dev, + struct ch341_private *priv, u8 lcr) + { +- short a; ++ int val; + int r; +- unsigned long factor; +- short divisor; + + if (!priv->baud_rate) + return -EINVAL; +- factor = (CH341_BAUDBASE_FACTOR / priv->baud_rate); +- divisor = CH341_BAUDBASE_DIVMAX; +- +- while ((factor > 0xfff0) && divisor) { +- factor >>= 3; +- divisor--; +- } + +- if (factor > 0xfff0) ++ val = ch341_get_divisor(priv->baud_rate); ++ if (val < 0) + return -EINVAL; + +- factor = 0x10000 - factor; +- a = (factor & 0xff00) | divisor; +- + /* + * CH341A buffers data until a full endpoint-size packet (32 bytes) + * has been received unless bit 7 is set. + */ +- a |= BIT(7); ++ val |= BIT(7); + +- r = ch341_control_out(dev, CH341_REQ_WRITE_REG, 0x1312, a); ++ r = ch341_control_out(dev, CH341_REQ_WRITE_REG, 0x1312, val); + if (r) + return r; + +-- +2.35.3 + diff --git a/patches.suse/USB-serial-ch341-sort-device-id-entries.patch b/patches.suse/USB-serial-ch341-sort-device-id-entries.patch index 8802d5d..c00275b 100644 --- a/patches.suse/USB-serial-ch341-sort-device-id-entries.patch +++ b/patches.suse/USB-serial-ch341-sort-device-id-entries.patch @@ -19,8 +19,8 @@ Signed-off-by: Oliver Neukum --- a/drivers/usb/serial/ch341.c +++ b/drivers/usb/serial/ch341.c -@@ -83,11 +83,11 @@ - #define CH341_LCR_CS5 0x00 +@@ -79,11 +79,11 @@ + #define CH341_QUIRK_LIMITED_PRESCALER BIT(0) static const struct usb_device_id id_table[] = { - { USB_DEVICE(0x4348, 0x5523) }, diff --git a/patches.suse/amd-xgbe-Update-DMA-coherency-values.patch b/patches.suse/amd-xgbe-Update-DMA-coherency-values.patch new file mode 100644 index 0000000..256fb1d --- /dev/null +++ b/patches.suse/amd-xgbe-Update-DMA-coherency-values.patch @@ -0,0 +1,41 @@ +From 72fb2f96fb6883f8e51d56c0b707015e8ac8ebb6 Mon Sep 17 00:00:00 2001 +From: Shyam Sundar S K +Date: Thu, 25 Mar 2021 08:39:12 +0530 +Subject: [PATCH 11/19] amd-xgbe: Update DMA coherency values +Git-commit: d75135082698140a26a56defe1bbc1b06f26a41f +Patch-mainline: v5.12-rc7 +References: git-fixes + +Based on the IOMMU configuration, the current cache control settings can +result in possible coherency issues. The hardware team has recommended +new settings for the PCI device path to eliminate the issue. + +Fixes: 6f595959c095 ("amd-xgbe: Adjust register settings to improve performance") +Signed-off-by: Shyam Sundar S K +Acked-by: Tom Lendacky +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/amd/xgbe/xgbe.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h +index 5897e46faca5..95b590f1efae 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe.h ++++ b/drivers/net/ethernet/amd/xgbe/xgbe.h +@@ -180,9 +180,9 @@ + #define XGBE_DMA_SYS_AWCR 0x30303030 + + /* DMA cache settings - PCI device */ +-#define XGBE_DMA_PCI_ARCR 0x00000003 +-#define XGBE_DMA_PCI_AWCR 0x13131313 +-#define XGBE_DMA_PCI_AWARCR 0x00000313 ++#define XGBE_DMA_PCI_ARCR 0x000f0f0f ++#define XGBE_DMA_PCI_AWCR 0x0f0f0f0f ++#define XGBE_DMA_PCI_AWARCR 0x00000f0f + + /* DMA channel interrupt modes */ + #define XGBE_IRQ_MODE_EDGE 0 +-- +2.16.4 + diff --git a/patches.suse/bnxt-don-t-lock-the-tx-queue-from-napi-poll.patch b/patches.suse/bnxt-don-t-lock-the-tx-queue-from-napi-poll.patch new file mode 100644 index 0000000..60d639e --- /dev/null +++ b/patches.suse/bnxt-don-t-lock-the-tx-queue-from-napi-poll.patch @@ -0,0 +1,140 @@ +From ff179fe46f0f819fed05494930c495f67089db6f Mon Sep 17 00:00:00 2001 +From: Jakub Kicinski +Date: Thu, 12 Aug 2021 14:42:39 -0700 +Subject: [PATCH 5/7] bnxt: don't lock the tx queue from napi poll +Git-commit: 3c603136c9f82833813af77185618de5af67676c +Patch-mainline: v5.14-rc7 +References: git-fixes + +We can't take the tx lock from the napi poll routine, because +netpoll can poll napi at any moment, including with the tx lock +already held. + +The tx lock is protecting against two paths - the disable +path, and (as Michael points out) the NETDEV_TX_BUSY case +which may occur if NAPI completions race with start_xmit +and both decide to re-enable the queue. + +For the disable/ifdown path use synchronize_net() to make sure +closing the device does not race we restarting the queues. +Annotate accesses to dev_state against data races. + +For the NAPI cleanup vs start_xmit path - appropriate barriers +are already in place in the main spot where Tx queue is stopped +but we need to do the same careful dance in the TX_BUSY case. + +Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.") +Reviewed-by: Michael Chan +Reviewed-by: Edwin Peer +Signed-off-by: Jakub Kicinski +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 54 ++++++++++++++++++------------- + 1 file changed, 32 insertions(+), 22 deletions(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 391682cdba9b..a076a7e67d7f 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -338,6 +338,26 @@ static u16 bnxt_xmit_get_cfa_action(struct sk_buff *skb) + return md_dst->u.port_info.port_id; + } + ++static bool bnxt_txr_netif_try_stop_queue(struct bnxt *bp, ++ struct bnxt_tx_ring_info *txr, ++ struct netdev_queue *txq) ++{ ++ netif_tx_stop_queue(txq); ++ ++ /* netif_tx_stop_queue() must be done before checking ++ * tx index in bnxt_tx_avail() below, because in ++ * bnxt_tx_int(), we update tx index before checking for ++ * netif_tx_queue_stopped(). ++ */ ++ smp_mb(); ++ if (bnxt_tx_avail(bp, txr) > bp->tx_wake_thresh) { ++ netif_tx_wake_queue(txq); ++ return false; ++ } ++ ++ return true; ++} ++ + static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev) + { + struct bnxt *bp = netdev_priv(dev); +@@ -365,8 +385,8 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev) + + free_size = bnxt_tx_avail(bp, txr); + if (unlikely(free_size < skb_shinfo(skb)->nr_frags + 2)) { +- netif_tx_stop_queue(txq); +- return NETDEV_TX_BUSY; ++ if (bnxt_txr_netif_try_stop_queue(bp, txr, txq)) ++ return NETDEV_TX_BUSY; + } + + length = skb->len; +@@ -577,16 +597,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev) + if (skb->xmit_more && !tx_buf->is_push) + bnxt_db_write(bp, &txr->tx_db, prod); + +- netif_tx_stop_queue(txq); +- +- /* netif_tx_stop_queue() must be done before checking +- * tx index in bnxt_tx_avail() below, because in +- * bnxt_tx_int(), we update tx index before checking for +- * netif_tx_queue_stopped(). +- */ +- smp_mb(); +- if (bnxt_tx_avail(bp, txr) > bp->tx_wake_thresh) +- netif_tx_wake_queue(txq); ++ bnxt_txr_netif_try_stop_queue(bp, txr, txq); + } + return NETDEV_TX_OK; + +@@ -670,14 +681,9 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int nr_pkts) + smp_mb(); + + if (unlikely(netif_tx_queue_stopped(txq)) && +- (bnxt_tx_avail(bp, txr) > bp->tx_wake_thresh)) { +- __netif_tx_lock(txq, smp_processor_id()); +- if (netif_tx_queue_stopped(txq) && +- bnxt_tx_avail(bp, txr) > bp->tx_wake_thresh && +- txr->dev_state != BNXT_DEV_STATE_CLOSING) +- netif_tx_wake_queue(txq); +- __netif_tx_unlock(txq); +- } ++ bnxt_tx_avail(bp, txr) > bp->tx_wake_thresh && ++ READ_ONCE(txr->dev_state) != BNXT_DEV_STATE_CLOSING) ++ netif_tx_wake_queue(txq); + } + + static struct page *__bnxt_alloc_rx_page(struct bnxt *bp, dma_addr_t *mapping, +@@ -7775,9 +7781,11 @@ void bnxt_tx_disable(struct bnxt *bp) + if (bp->tx_ring) { + for (i = 0; i < bp->tx_nr_rings; i++) { + txr = &bp->tx_ring[i]; +- txr->dev_state = BNXT_DEV_STATE_CLOSING; ++ WRITE_ONCE(txr->dev_state, BNXT_DEV_STATE_CLOSING); + } + } ++ /* Make sure napi polls see @dev_state change */ ++ synchronize_net(); + /* Drop carrier first to prevent TX timeout */ + netif_carrier_off(bp->dev); + /* Stop all TX queues */ +@@ -7791,8 +7799,10 @@ void bnxt_tx_enable(struct bnxt *bp) + + for (i = 0; i < bp->tx_nr_rings; i++) { + txr = &bp->tx_ring[i]; +- txr->dev_state = 0; ++ WRITE_ONCE(txr->dev_state, 0); + } ++ /* Make sure napi polls see @dev_state change */ ++ synchronize_net(); + netif_tx_wake_all_queues(bp->dev); + if (bp->link_info.link_up) + netif_carrier_on(bp->dev); +-- +2.16.4 + diff --git a/patches.suse/bnxt_en-Fix-RX-consumer-index-logic-in-the-error-pat.patch b/patches.suse/bnxt_en-Fix-RX-consumer-index-logic-in-the-error-pat.patch new file mode 100644 index 0000000..9172381 --- /dev/null +++ b/patches.suse/bnxt_en-Fix-RX-consumer-index-logic-in-the-error-pat.patch @@ -0,0 +1,70 @@ +From 6bc19876924f48964182659b14322c165c3c99d0 Mon Sep 17 00:00:00 2001 +From: Michael Chan +Date: Fri, 23 Apr 2021 18:13:19 -0400 +Subject: [PATCH 13/19] bnxt_en: Fix RX consumer index logic in the error path. +Git-commit: bbd6f0a948139970f4a615dff189d9a503681a39 +Patch-mainline: v5.13-rc1 +References: git-fixes + +In bnxt_rx_pkt(), the RX buffers are expected to complete in order. +If the RX consumer index indicates an out of order buffer completion, +it means we are hitting a hardware bug and the driver will abort all +remaining RX packets and reset the RX ring. The RX consumer index +that we pass to bnxt_discard_rx() is not correct. We should be +passing the current index (tmp_raw_cons) instead of the old index +(raw_cons). This bug can cause us to be at the wrong index when +trying to abort the next RX packet. It can crash like this: + + #0 [ffff9bbcdf5c39a8] machine_kexec at ffffffff9b05e007 + #1 [ffff9bbcdf5c3a00] __crash_kexec at ffffffff9b111232 + #2 [ffff9bbcdf5c3ad0] panic at ffffffff9b07d61e + #3 [ffff9bbcdf5c3b50] oops_end at ffffffff9b030978 + #4 [ffff9bbcdf5c3b78] no_context at ffffffff9b06aaf0 + #5 [ffff9bbcdf5c3bd8] __bad_area_nosemaphore at ffffffff9b06ae2e + #6 [ffff9bbcdf5c3c28] bad_area_nosemaphore at ffffffff9b06af24 + #7 [ffff9bbcdf5c3c38] __do_page_fault at ffffffff9b06b67e + #8 [ffff9bbcdf5c3cb0] do_page_fault at ffffffff9b06bb12 + #9 [ffff9bbcdf5c3ce0] page_fault at ffffffff9bc015c5 + [exception RIP: bnxt_rx_pkt+237] + RIP: ffffffffc0259cdd RSP: ffff9bbcdf5c3d98 RFLAGS: 00010213 + RAX: 000000005dd8097f RBX: ffff9ba4cb11b7e0 RCX: ffffa923cf6e9000 + RDX: 0000000000000fff RSI: 0000000000000627 RDI: 0000000000001000 + RBP: ffff9bbcdf5c3e60 R8: 0000000000420003 R9: 000000000000020d + R10: ffffa923cf6ec138 R11: ffff9bbcdf5c3e83 R12: ffff9ba4d6f928c0 + R13: ffff9ba4cac28080 R14: ffff9ba4cb11b7f0 R15: ffff9ba4d5a30000 + ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018 + +Fixes: a1b0e4e684e9 ("bnxt_en: Improve RX consumer index validity check.") +Reviewed-by: Pavan Chebbi +Reviewed-by: Andy Gospodarek +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index 3c14d1a2efaa..391682cdba9b 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -1607,12 +1607,14 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, + + cons = rxcmp->rx_cmp_opaque; + if (unlikely(cons != rxr->rx_next_cons)) { +- int rc1 = bnxt_discard_rx(bp, cpr, raw_cons, rxcmp); ++ int rc1 = bnxt_discard_rx(bp, cpr, &tmp_raw_cons, rxcmp); + + netdev_warn(bp->dev, "RX cons %x != expected cons %x\n", + cons, rxr->rx_next_cons); + bnxt_sched_reset(bp, rxr); +- return rc1; ++ if (rc1) ++ return rc1; ++ goto next_rx_no_prod_no_len; + } + rx_buf = &rxr->rx_buf_ring[cons]; + data = rx_buf->data; +-- +2.16.4 + diff --git a/patches.suse/bnxt_en-reverse-order-of-TX-disable-and-carrier-off.patch b/patches.suse/bnxt_en-reverse-order-of-TX-disable-and-carrier-off.patch new file mode 100644 index 0000000..ec614fb --- /dev/null +++ b/patches.suse/bnxt_en-reverse-order-of-TX-disable-and-carrier-off.patch @@ -0,0 +1,41 @@ +From 0fe91559d9999183757c74e720ee48501f1e8b85 Mon Sep 17 00:00:00 2001 +From: Edwin Peer +Date: Thu, 11 Feb 2021 02:24:23 -0500 +Subject: [PATCH 01/19] bnxt_en: reverse order of TX disable and carrier off +Git-commit: 132e0b65dc2b8bfa9721bfce834191f24fd1d7ed +Patch-mainline: v5.12-rc1 +References: git-fixes + +A TX queue can potentially immediately timeout after it is stopped +and the last TX timestamp on that queue was more than 5 seconds ago with +carrier still up. Prevent these intermittent false TX timeouts +by bringing down carrier first before calling netif_tx_disable(). + +Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.") +Signed-off-by: Edwin Peer +Signed-off-by: Michael Chan +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +index b1ba6df8911d..3c14d1a2efaa 100644 +--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c ++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c +@@ -7776,9 +7776,10 @@ void bnxt_tx_disable(struct bnxt *bp) + txr->dev_state = BNXT_DEV_STATE_CLOSING; + } + } ++ /* Drop carrier first to prevent TX timeout */ ++ netif_carrier_off(bp->dev); + /* Stop all TX queues */ + netif_tx_disable(bp->dev); +- netif_carrier_off(bp->dev); + } + + void bnxt_tx_enable(struct bnxt *bp) +-- +2.16.4 + diff --git a/patches.suse/ethernet-sun-niu-fix-missing-checks-of-niu_pci_eepro.patch b/patches.suse/ethernet-sun-niu-fix-missing-checks-of-niu_pci_eepro.patch new file mode 100644 index 0000000..e243c1e --- /dev/null +++ b/patches.suse/ethernet-sun-niu-fix-missing-checks-of-niu_pci_eepro.patch @@ -0,0 +1,127 @@ +From fc532203ac4548cac5bc093d56e34fa8a7e28459 Mon Sep 17 00:00:00 2001 +From: Du Cheng +Date: Mon, 3 May 2021 13:56:50 +0200 +Subject: [PATCH 15/19] ethernet: sun: niu: fix missing checks of + niu_pci_eeprom_read() +Git-commit: e6e337708c22f80824b82d4af645f20715730ad0 +Patch-mainline: v5.13-rc3 +References: git-fixes + +niu_pci_eeprom_read() may fail, so add checks to its return value and +propagate the error up the callstack. + +An examination of the callstack up to niu_pci_eeprom_read shows that: + +niu_pci_eeprom_read() // returns int + niu_pci_vpd_scan_props() // returns int + niu_pci_vpd_fetch() // returns *void* + niu_get_invariants() // returns int + +since niu_pci_vpd_fetch() returns void which breaks the bubbling up, +change its return type to int so that error is propagated upwards. + +Signed-off-by: Du Cheng +Cc: Shannon Nelson +Cc: David S. Miller +Cc: stable +Link: https://lore.kernel.org/r/20210503115736.2104747-24-gregkh@linuxfoundation.org +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/sun/niu.c | 34 ++++++++++++++++++++++++---------- + 1 file changed, 24 insertions(+), 10 deletions(-) + +diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c +index 1c0aee4ada92..8a9a175e3c92 100644 +--- a/drivers/net/ethernet/sun/niu.c ++++ b/drivers/net/ethernet/sun/niu.c +@@ -8119,6 +8119,8 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end) + start += 3; + + prop_len = niu_pci_eeprom_read(np, start + 4); ++ if (prop_len < 0) ++ return prop_len; + err = niu_pci_vpd_get_propname(np, start + 5, namebuf, 64); + if (err < 0) + return err; +@@ -8163,8 +8165,12 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end) + netif_printk(np, probe, KERN_DEBUG, np->dev, + "VPD_SCAN: Reading in property [%s] len[%d]\n", + namebuf, prop_len); +- for (i = 0; i < prop_len; i++) +- *prop_buf++ = niu_pci_eeprom_read(np, off + i); ++ for (i = 0; i < prop_len; i++) { ++ err = niu_pci_eeprom_read(np, off + i); ++ if (err < 0) ++ return err; ++ *prop_buf++ = err; ++ } + } + + start += len; +@@ -8174,14 +8180,14 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end) + } + + /* ESPC_PIO_EN_ENABLE must be set */ +-static void niu_pci_vpd_fetch(struct niu *np, u32 start) ++static int niu_pci_vpd_fetch(struct niu *np, u32 start) + { + u32 offset; + int err; + + err = niu_pci_eeprom_read16_swp(np, start + 1); + if (err < 0) +- return; ++ return err; + + offset = err + 3; + +@@ -8190,12 +8196,14 @@ static void niu_pci_vpd_fetch(struct niu *np, u32 start) + u32 end; + + err = niu_pci_eeprom_read(np, here); ++ if (err < 0) ++ return err; + if (err != 0x90) +- return; ++ return -EINVAL; + + err = niu_pci_eeprom_read16_swp(np, here + 1); + if (err < 0) +- return; ++ return err; + + here = start + offset + 3; + end = start + offset + err; +@@ -8203,9 +8211,12 @@ static void niu_pci_vpd_fetch(struct niu *np, u32 start) + offset += err; + + err = niu_pci_vpd_scan_props(np, here, end); +- if (err < 0 || err == 1) +- return; ++ if (err < 0) ++ return err; ++ if (err == 1) ++ return -EINVAL; + } ++ return 0; + } + + /* ESPC_PIO_EN_ENABLE must be set */ +@@ -9298,8 +9309,11 @@ static int niu_get_invariants(struct niu *np) + offset = niu_pci_vpd_offset(np); + netif_printk(np, probe, KERN_DEBUG, np->dev, + "%s() VPD offset [%08x]\n", __func__, offset); +- if (offset) +- niu_pci_vpd_fetch(np, offset); ++ if (offset) { ++ err = niu_pci_vpd_fetch(np, offset); ++ if (err < 0) ++ return err; ++ } + nw64(ESPC_PIO_EN, 0); + + if (np->flags & NIU_FLAGS_VPD_VALID) { +-- +2.16.4 + diff --git a/patches.suse/i40e-Fix-flow-for-IPv6-next-header-extension-header.patch b/patches.suse/i40e-Fix-flow-for-IPv6-next-header-extension-header.patch new file mode 100644 index 0000000..1787e0a --- /dev/null +++ b/patches.suse/i40e-Fix-flow-for-IPv6-next-header-extension-header.patch @@ -0,0 +1,62 @@ +From fab2bdc84727620e644e637bed88c512b9c05266 Mon Sep 17 00:00:00 2001 +From: Slawomir Laba +Date: Thu, 10 Sep 2020 07:57:04 +0000 +Subject: [PATCH 06/19] i40e: Fix flow for IPv6 next header (extension header) +Git-commit: 92c6058024e87087cf1b99b0389d67c0a886360e +Patch-mainline: v5.12-rc1 +References: git-fixes + +When a packet contains an IPv6 header with next header which is +an extension header and not a protocol one, the kernel function +skb_transport_header called with such sk_buff will return a +pointer to the extension header and not to the TCP one. + +The above explained call caused a problem with packet processing +for skb with encapsulation for tunnel with I40E_TX_CTX_EXT_IP_IPV6. +The extension header was not skipped at all. + +The ipv6_skip_exthdr function does check if next header of the IPV6 +header is an extension header and doesn't modify the l4_proto pointer +if it points to a protocol header value so its safe to omit the +comparison of exthdr and l4.hdr pointers. The ipv6_skip_exthdr can +return value -1. This means that the skipping process failed +and there is something wrong with the packet so it will be dropped. + +Fixes: a3fd9d8876a5 ("i40e/i40evf: Handle IPv6 extension headers in checksum offload") +Signed-off-by: Slawomir Laba +Signed-off-by: Przemyslaw Patynowski +Reviewed-by: Aleksandr Loktionov +Tested-by: Tony Brelinski +Signed-off-by: Tony Nguyen +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/intel/i40e/i40e_txrx.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c +index 734d95943967..4cb16178adb9 100644 +--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c ++++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c +@@ -3109,13 +3109,16 @@ static int i40e_tx_enable_csum(struct sk_buff *skb, u32 *tx_flags, + + l4_proto = ip.v4->protocol; + } else if (*tx_flags & I40E_TX_FLAGS_IPV6) { ++ int ret; ++ + tunnel |= I40E_TX_CTX_EXT_IP_IPV6; + + exthdr = ip.hdr + sizeof(*ip.v6); + l4_proto = ip.v6->nexthdr; +- if (l4.hdr != exthdr) +- ipv6_skip_exthdr(skb, exthdr - skb->data, +- &l4_proto, &frag_off); ++ ret = ipv6_skip_exthdr(skb, exthdr - skb->data, ++ &l4_proto, &frag_off); ++ if (ret < 0) ++ return -1; + } + + /* define outer transport */ +-- +2.16.4 + diff --git a/patches.suse/i40e-Fix-overwriting-flow-control-settings-during-dr.patch b/patches.suse/i40e-Fix-overwriting-flow-control-settings-during-dr.patch new file mode 100644 index 0000000..8ee74a5 --- /dev/null +++ b/patches.suse/i40e-Fix-overwriting-flow-control-settings-during-dr.patch @@ -0,0 +1,87 @@ +From 8914049573a85f410cb230f7155bf45e41a5e54b Mon Sep 17 00:00:00 2001 +From: Mateusz Palczewski +Date: Tue, 24 Nov 2020 15:08:27 +0000 +Subject: [PATCH 07/19] i40e: Fix overwriting flow control settings during + driver loading +Git-commit: 4cdb9f80dcd46aab3c0020b4a6920c22735c5d6e +Patch-mainline: v5.12-rc1 +References: git-fixes + +During driver loading flow control settings were written to FW +using a variable which was always zero, since it was being set +only by ethtool. This behavior has been corrected and driver +no longer overwrites the default FW/NVM settings. + +Fixes: 373149fc99a0 ("i40e: Decrease the scope of rtnl lock") +Signed-off-by: Dawid Lukwinski +Signed-off-by: Mateusz Palczewski +Reviewed-by: Aleksandr Loktionov +Tested-by: Tony Brelinski +Signed-off-by: Tony Nguyen +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/intel/i40e/i40e_main.c | 27 --------------------------- + 1 file changed, 27 deletions(-) + +diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c +index 682b9b342c4f..2a7697c4c935 100644 +--- a/drivers/net/ethernet/intel/i40e/i40e_main.c ++++ b/drivers/net/ethernet/intel/i40e/i40e_main.c +@@ -9617,7 +9617,6 @@ static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired) + int old_recovery_mode_bit = test_bit(__I40E_RECOVERY_MODE, pf->state); + struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi]; + struct i40e_hw *hw = &pf->hw; +- u8 set_fc_aq_fail = 0; + i40e_status ret; + u32 val; + int v; +@@ -9737,13 +9736,6 @@ static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired) + i40e_stat_str(&pf->hw, ret), + i40e_aq_str(&pf->hw, pf->hw.aq.asq_last_status)); + +- /* make sure our flow control settings are restored */ +- ret = i40e_set_fc(&pf->hw, &set_fc_aq_fail, true); +- if (ret) +- dev_dbg(&pf->pdev->dev, "setting flow control: ret = %s last_status = %s\n", +- i40e_stat_str(&pf->hw, ret), +- i40e_aq_str(&pf->hw, pf->hw.aq.asq_last_status)); +- + /* Rebuild the VSIs and VEBs that existed before reset. + * They are still in our local switch element arrays, so only + * need to rebuild the switch model in the HW. +@@ -14354,7 +14346,6 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent) + int err; + u32 val; + u32 i; +- u8 set_fc_aq_fail; + + err = pci_enable_device_mem(pdev); + if (err) +@@ -14653,24 +14644,6 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent) + } + INIT_LIST_HEAD(&pf->vsi[pf->lan_vsi]->ch_list); + +- /* Make sure flow control is set according to current settings */ +- err = i40e_set_fc(hw, &set_fc_aq_fail, true); +- if (set_fc_aq_fail & I40E_SET_FC_AQ_FAIL_GET) +- dev_dbg(&pf->pdev->dev, +- "Set fc with err %s aq_err %s on get_phy_cap\n", +- i40e_stat_str(hw, err), +- i40e_aq_str(hw, hw->aq.asq_last_status)); +- if (set_fc_aq_fail & I40E_SET_FC_AQ_FAIL_SET) +- dev_dbg(&pf->pdev->dev, +- "Set fc with err %s aq_err %s on set_phy_config\n", +- i40e_stat_str(hw, err), +- i40e_aq_str(hw, hw->aq.asq_last_status)); +- if (set_fc_aq_fail & I40E_SET_FC_AQ_FAIL_UPDATE) +- dev_dbg(&pf->pdev->dev, +- "Set fc with err %s aq_err %s on get_link_info\n", +- i40e_stat_str(hw, err), +- i40e_aq_str(hw, hw->aq.asq_last_status)); +- + /* if FDIR VSI was set up, start it now */ + for (i = 0; i < pf->num_alloc_vsi; i++) { + if (pf->vsi[i] && pf->vsi[i]->type == I40E_VSI_FDIR) { +-- +2.16.4 + diff --git a/patches.suse/i40e-improve-locking-of-mac_filter_hash.patch b/patches.suse/i40e-improve-locking-of-mac_filter_hash.patch new file mode 100644 index 0000000..62b91c0 --- /dev/null +++ b/patches.suse/i40e-improve-locking-of-mac_filter_hash.patch @@ -0,0 +1,85 @@ +From b0706e5a21bb73b6e5c858ccc24eab53ee450a8b Mon Sep 17 00:00:00 2001 +From: Stefan Assmann +Date: Thu, 4 Mar 2021 10:34:30 +0100 +Subject: [PATCH 7/7] i40e: improve locking of mac_filter_hash +Git-commit: 8b4b06919fd66caf49fdf4fe59f9d6312cf7956d +Patch-mainline: v5.15-rc1 +References: git-fixes + +i40e_config_vf_promiscuous_mode() calls +i40e_getnum_vf_vsi_vlan_filters() without acquiring the +mac_filter_hash_lock spinlock. + +This is unsafe because mac_filter_hash may get altered in another thread +while i40e_getnum_vf_vsi_vlan_filters() traverses the hashes. + +Simply adding the spinlock in i40e_getnum_vf_vsi_vlan_filters() is not +possible as it already gets called in i40e_get_vlan_list_sync() with the +spinlock held. Therefore adding a wrapper that acquires the spinlock and +call the correct function where appropriate. + +Fixes: 37d318d7805f ("i40e: Remove scheduling while atomic possibility") +Fix-suggested-by: Paolo Abeni +Signed-off-by: Stefan Assmann +Tested-by: Konrad Jankowski +Signed-off-by: Tony Nguyen +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 23 +++++++++++++++++++--- + 1 file changed, 20 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +index ec133b017f6b..a166494d249a 100644 +--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c ++++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +@@ -1133,12 +1133,12 @@ static int i40e_quiesce_vf_pci(struct i40e_vf *vf) + } + + /** +- * i40e_getnum_vf_vsi_vlan_filters ++ * __i40e_getnum_vf_vsi_vlan_filters + * @vsi: pointer to the vsi + * + * called to get the number of VLANs offloaded on this VF + **/ +-static int i40e_getnum_vf_vsi_vlan_filters(struct i40e_vsi *vsi) ++static int __i40e_getnum_vf_vsi_vlan_filters(struct i40e_vsi *vsi) + { + struct i40e_mac_filter *f; + u16 num_vlans = 0, bkt; +@@ -1151,6 +1151,23 @@ static int i40e_getnum_vf_vsi_vlan_filters(struct i40e_vsi *vsi) + return num_vlans; + } + ++/** ++ * i40e_getnum_vf_vsi_vlan_filters ++ * @vsi: pointer to the vsi ++ * ++ * wrapper for __i40e_getnum_vf_vsi_vlan_filters() with spinlock held ++ **/ ++static int i40e_getnum_vf_vsi_vlan_filters(struct i40e_vsi *vsi) ++{ ++ int num_vlans; ++ ++ spin_lock_bh(&vsi->mac_filter_hash_lock); ++ num_vlans = __i40e_getnum_vf_vsi_vlan_filters(vsi); ++ spin_unlock_bh(&vsi->mac_filter_hash_lock); ++ ++ return num_vlans; ++} ++ + /** + * i40e_get_vlan_list_sync + * @vsi: pointer to the VSI +@@ -1168,7 +1185,7 @@ static void i40e_get_vlan_list_sync(struct i40e_vsi *vsi, u16 *num_vlans, + int bkt; + + spin_lock_bh(&vsi->mac_filter_hash_lock); +- *num_vlans = i40e_getnum_vf_vsi_vlan_filters(vsi); ++ *num_vlans = __i40e_getnum_vf_vsi_vlan_filters(vsi); + *vlan_list = kcalloc(*num_vlans, sizeof(**vlan_list), GFP_ATOMIC); + if (!(*vlan_list)) + goto err; +-- +2.16.4 + diff --git a/patches.suse/net-amd-xgbe-Fix-NETDEV-WATCHDOG-transmit-queue-time.patch b/patches.suse/net-amd-xgbe-Fix-NETDEV-WATCHDOG-transmit-queue-time.patch new file mode 100644 index 0000000..f53ee39 --- /dev/null +++ b/patches.suse/net-amd-xgbe-Fix-NETDEV-WATCHDOG-transmit-queue-time.patch @@ -0,0 +1,78 @@ +From 7f63d423ecb449dd00ded989b740328775e27e9a Mon Sep 17 00:00:00 2001 +From: Shyam Sundar S K +Date: Wed, 17 Feb 2021 00:37:08 +0530 +Subject: [PATCH 02/19] net: amd-xgbe: Fix NETDEV WATCHDOG transmit queue + timeout warning +Git-commit: 186edbb510bd60e748f93975989ccba25ee99c50 +Patch-mainline: v5.12-rc1 +References: git-fixes + +The current driver calls netif_carrier_off() late in the link tear down +which can result in a netdev watchdog timeout. + +Calling netif_carrier_off() immediately after netif_tx_stop_all_queues() +avoids the warning. + + ------------[ cut here ]------------ + NETDEV WATCHDOG: enp3s0f2 (amd-xgbe): transmit queue 0 timed out + WARNING: CPU: 3 PID: 0 at net/sched/sch_generic.c:461 dev_watchdog+0x20d/0x220 + Modules linked in: amd_xgbe(E) amd-xgbe 0000:03:00.2 enp3s0f2: Link is Down + CPU: 3 PID: 0 Comm: swapper/3 Tainted: G E + Hardware name: AMD Bilby-RV2/Bilby-RV2, BIOS RBB1202A 10/18/2019 + RIP: 0010:dev_watchdog+0x20d/0x220 + Code: 00 49 63 4e e0 eb 92 4c 89 e7 c6 05 c6 e2 c1 00 01 e8 e7 ce fc ff 89 d9 48 + RSP: 0018:ffff90cfc28c3e88 EFLAGS: 00010286 + RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000006 + RDX: 0000000000000007 RSI: 0000000000000086 RDI: ffff90cfc28d63c0 + RBP: ffff90cfb977845c R08: 0000000000000050 R09: 0000000000196018 + R10: ffff90cfc28c3ef8 R11: 0000000000000000 R12: ffff90cfb9778000 + R13: 0000000000000003 R14: ffff90cfb9778480 R15: 0000000000000010 + FS: 0000000000000000(0000) GS:ffff90cfc28c0000(0000) knlGS:0000000000000000 + CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 + CR2: 00007f240ff2d9d0 CR3: 00000001e3e0a000 CR4: 00000000003406e0 + Call Trace: + + ? pfifo_fast_reset+0x100/0x100 + call_timer_fn+0x2b/0x130 + run_timer_softirq+0x3e8/0x440 + ? enqueue_hrtimer+0x39/0x90 + +Fixes: e722ec82374b ("amd-xgbe: Update the BelFuse quirk to support SGMII") +Co-developed-by: Sudheesh Mavila +Signed-off-by: Sudheesh Mavila +Signed-off-by: Shyam Sundar S K +Acked-by: Tom Lendacky +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 1 + + drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 1 - + 2 files changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +index 4f12e5232650..a1067c881053 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +@@ -1445,6 +1445,7 @@ static void xgbe_stop(struct xgbe_prv_data *pdata) + return; + + netif_tx_stop_all_queues(netdev); ++ netif_carrier_off(pdata->netdev); + + xgbe_stop_timers(pdata); + flush_workqueue(pdata->dev_workqueue); +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +index 8a3a60bb2688..4d5506d92897 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +@@ -1396,7 +1396,6 @@ static void xgbe_phy_stop(struct xgbe_prv_data *pdata) + pdata->phy_if.phy_impl.stop(pdata); + + pdata->phy.link = 0; +- netif_carrier_off(pdata->netdev); + + xgbe_phy_adjust_link(pdata); + } +-- +2.16.4 + diff --git a/patches.suse/net-amd-xgbe-Fix-network-fluctuations-when-using-1G-.patch b/patches.suse/net-amd-xgbe-Fix-network-fluctuations-when-using-1G-.patch new file mode 100644 index 0000000..b2b288d --- /dev/null +++ b/patches.suse/net-amd-xgbe-Fix-network-fluctuations-when-using-1G-.patch @@ -0,0 +1,41 @@ +From ae92baa40e56fd2d6dabf451fa6a2289f0d10c36 Mon Sep 17 00:00:00 2001 +From: Shyam Sundar S K +Date: Wed, 17 Feb 2021 00:37:10 +0530 +Subject: [PATCH 04/19] net: amd-xgbe: Fix network fluctuations when using 1G + BELFUSE SFP +Git-commit: 9eab3fdb419916f66a72d1572f68d82cd9b3f963 +Patch-mainline: v5.12-rc1 +References: git-fixes + +Frequent link up/down events can happen when a Bel Fuse SFP part is +connected to the amd-xgbe device. Try to avoid the frequent link +issues by resetting the PHY as documented in Bel Fuse SFP datasheets. + +Fixes: e722ec82374b ("amd-xgbe: Update the BelFuse quirk to support SGMII") +Co-developed-by: Sudheesh Mavila +Signed-off-by: Sudheesh Mavila +Signed-off-by: Shyam Sundar S K +Acked-by: Tom Lendacky +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +index ee6c92eb2fda..726f4cbd6846 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +@@ -912,6 +912,9 @@ static bool xgbe_phy_belfuse_phy_quirks(struct xgbe_prv_data *pdata) + if ((phy_id & 0xfffffff0) != 0x03625d10) + return false; + ++ /* Reset PHY - wait for self-clearing reset bit to clear */ ++ genphy_soft_reset(phy_data->phydev); ++ + /* Disable RGMII mode */ + phy_write(phy_data->phydev, 0x18, 0x7007); + reg = phy_read(phy_data->phydev, 0x18); +-- +2.16.4 + diff --git a/patches.suse/net-amd-xgbe-Reset-link-when-the-link-never-comes-ba.patch b/patches.suse/net-amd-xgbe-Reset-link-when-the-link-never-comes-ba.patch new file mode 100644 index 0000000..1977193 --- /dev/null +++ b/patches.suse/net-amd-xgbe-Reset-link-when-the-link-never-comes-ba.patch @@ -0,0 +1,66 @@ +From d6bec23f35940b40ad19ebf7684ab8991a43823f Mon Sep 17 00:00:00 2001 +From: Shyam Sundar S K +Date: Wed, 17 Feb 2021 00:37:09 +0530 +Subject: [PATCH 03/19] net: amd-xgbe: Reset link when the link never comes + back +Git-commit: 84fe68eb67f9499309cffd97c1ba269de125ff14 +Patch-mainline: v5.12-rc1 +References: git-fixes + +Normally, auto negotiation and reconnect should be automatically done by +the hardware. But there seems to be an issue where auto negotiation has +to be restarted manually. This happens because of link training and so +even though still connected to the partner the link never "comes back". +This needs an auto-negotiation restart. + +Also, a change in xgbe-mdio is needed to get ethtool to recognize the +link down and get the link change message. This change is only +required in a backplane connection mode. + +Fixes: abf0a1c2b26a ("amd-xgbe: Add support for SFP+ modules") +Co-developed-by: Sudheesh Mavila +Signed-off-by: Sudheesh Mavila +Signed-off-by: Shyam Sundar S K +Acked-by: Tom Lendacky +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 2 +- + drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 8 ++++++++ + 2 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +index 4d5506d92897..156a0bc8ab01 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +@@ -1345,7 +1345,7 @@ static void xgbe_phy_status(struct xgbe_prv_data *pdata) + &an_restart); + if (an_restart) { + xgbe_phy_config_aneg(pdata); +- return; ++ goto adjust_link; + } + + if (pdata->phy.link) { +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +index b2e98e83639c..ee6c92eb2fda 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +@@ -2666,6 +2666,14 @@ static int xgbe_phy_link_status(struct xgbe_prv_data *pdata, int *an_restart) + if (reg & MDIO_STAT1_LSTATUS) + return 1; + ++ if (pdata->phy.autoneg == AUTONEG_ENABLE && ++ phy_data->port_mode == XGBE_PORT_MODE_BACKPLANE) { ++ if (!test_bit(XGBE_LINK_INIT, &pdata->dev_state)) { ++ netif_carrier_off(pdata->netdev); ++ *an_restart = 1; ++ } ++ } ++ + /* No link, attempt a receiver reset cycle */ + if (phy_data->rrc_count++ > XGBE_RRC_FREQUENCY) { + phy_data->rrc_count = 0; +-- +2.16.4 + diff --git a/patches.suse/net-dsa-mt7530-add-the-missing-RxUnicast-MIB-counter.patch b/patches.suse/net-dsa-mt7530-add-the-missing-RxUnicast-MIB-counter.patch new file mode 100644 index 0000000..3501a40 --- /dev/null +++ b/patches.suse/net-dsa-mt7530-add-the-missing-RxUnicast-MIB-counter.patch @@ -0,0 +1,33 @@ +From 96a4580d5377c02a157efd6d74466353bb81dcac Mon Sep 17 00:00:00 2001 +From: DENG Qingfang +Date: Fri, 6 Aug 2021 12:05:27 +0800 +Subject: [PATCH 2/7] net: dsa: mt7530: add the missing RxUnicast MIB counter +Git-commit: aff51c5da3208bd164381e1488998667269c6cf4 +Patch-mainline: v5.14-rc6 +References: git-fixes + +Add the missing RxUnicast counter. + +Fixes: b8f126a8d543 ("net-next: dsa: add dsa support for Mediatek MT7530 switch") +Signed-off-by: DENG Qingfang +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/dsa/mt7530.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c +index b968bc8e2b58..10bc0f3082a7 100644 +--- a/drivers/net/dsa/mt7530.c ++++ b/drivers/net/dsa/mt7530.c +@@ -55,6 +55,7 @@ static const struct mt7530_mib_desc mt7530_mib[] = { + MIB_DESC(2, 0x48, "TxBytes"), + MIB_DESC(1, 0x60, "RxDrop"), + MIB_DESC(1, 0x64, "RxFiltering"), ++ MIB_DESC(1, 0x68, "RxUnicast"), + MIB_DESC(1, 0x6c, "RxMulticast"), + MIB_DESC(1, 0x70, "RxBroadcast"), + MIB_DESC(1, 0x74, "RxAlignErr"), +-- +2.16.4 + diff --git a/patches.suse/net-ethernet-ezchip-fix-UAF-in-nps_enet_remove.patch b/patches.suse/net-ethernet-ezchip-fix-UAF-in-nps_enet_remove.patch new file mode 100644 index 0000000..2a9991f --- /dev/null +++ b/patches.suse/net-ethernet-ezchip-fix-UAF-in-nps_enet_remove.patch @@ -0,0 +1,38 @@ +From 873725cfa035a170cbdf7ecc80f6ec72850950a1 Mon Sep 17 00:00:00 2001 +From: Pavel Skripkin +Date: Fri, 18 Jun 2021 19:14:31 +0300 +Subject: [PATCH 19/19] net: ethernet: ezchip: fix UAF in nps_enet_remove +Git-commit: e4b8700e07a86e8eab6916aa5c5ba99042c34089 +Patch-mainline: v5.14-rc1 +References: git-fixes + +priv is netdev private data, but it is used +after free_netdev(). It can cause use-after-free when accessing priv +pointer. So, fix it by moving free_netdev() after netif_napi_del() +call. + +Fixes: 0dd077093636 ("NET: Add ezchip ethernet driver") +Signed-off-by: Pavel Skripkin +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/ezchip/nps_enet.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/ezchip/nps_enet.c b/drivers/net/ethernet/ezchip/nps_enet.c +index 659f1ad37e96..fbadf08b7c5d 100644 +--- a/drivers/net/ethernet/ezchip/nps_enet.c ++++ b/drivers/net/ethernet/ezchip/nps_enet.c +@@ -658,8 +658,8 @@ static s32 nps_enet_remove(struct platform_device *pdev) + struct nps_enet_priv *priv = netdev_priv(ndev); + + unregister_netdev(ndev); +- free_netdev(ndev); + netif_napi_del(&priv->napi); ++ free_netdev(ndev); + + return 0; + } +-- +2.16.4 + diff --git a/patches.suse/net-lapbether-Prevent-racing-when-checking-whether-t.patch b/patches.suse/net-lapbether-Prevent-racing-when-checking-whether-t.patch new file mode 100644 index 0000000..56811bb --- /dev/null +++ b/patches.suse/net-lapbether-Prevent-racing-when-checking-whether-t.patch @@ -0,0 +1,139 @@ +From 788115e0096a2ed4a47293f0484438b5b17f5b0b Mon Sep 17 00:00:00 2001 +From: Xie He +Date: Wed, 10 Mar 2021 23:23:09 -0800 +Subject: [PATCH 12/19] net: lapbether: Prevent racing when checking whether + the netif is running +Git-commit: 5acd0cfbfbb5a688da1bfb1a2152b0c855115a35 +Patch-mainline: v5.13-rc1 +References: git-fixes + +There are two "netif_running" checks in this driver. One is in +"lapbeth_xmit" and the other is in "lapbeth_rcv". They serve to make +sure that the LAPB APIs called in these functions are called before +"lapb_unregister" is called by the "ndo_stop" function. + +However, these "netif_running" checks are unreliable, because it's +possible that immediately after "netif_running" returns true, "ndo_stop" +is called (which causes "lapb_unregister" to be called). + +This patch adds locking to make sure "lapbeth_xmit" and "lapbeth_rcv" can +reliably check and ensure the netif is running while doing their work. + +Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") +Signed-off-by: Xie He +Acked-by: Martin Schiller +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/wan/lapbether.c | 32 +++++++++++++++++++++++++------- + 1 file changed, 25 insertions(+), 7 deletions(-) + +diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c +index fd6acf0dcec3..91cfcb98051f 100644 +--- a/drivers/net/wan/lapbether.c ++++ b/drivers/net/wan/lapbether.c +@@ -56,6 +56,8 @@ struct lapbethdev { + struct list_head node; + struct net_device *ethdev; /* link to ethernet device */ + struct net_device *axdev; /* lapbeth device (lapb#) */ ++ bool up; ++ spinlock_t up_lock; /* Protects "up" */ + }; + + static LIST_HEAD(lapbeth_devices); +@@ -103,8 +105,9 @@ static int lapbeth_rcv(struct sk_buff *skb, struct net_device *dev, struct packe + rcu_read_lock(); + lapbeth = lapbeth_get_x25_dev(dev); + if (!lapbeth) +- goto drop_unlock; +- if (!netif_running(lapbeth->axdev)) ++ goto drop_unlock_rcu; ++ spin_lock_bh(&lapbeth->up_lock); ++ if (!lapbeth->up) + goto drop_unlock; + + len = skb->data[0] + skb->data[1] * 256; +@@ -119,11 +122,14 @@ static int lapbeth_rcv(struct sk_buff *skb, struct net_device *dev, struct packe + goto drop_unlock; + } + out: ++ spin_unlock_bh(&lapbeth->up_lock); + rcu_read_unlock(); + return 0; + drop_unlock: + kfree_skb(skb); + goto out; ++drop_unlock_rcu: ++ rcu_read_unlock(); + drop: + kfree_skb(skb); + return 0; +@@ -151,13 +157,11 @@ static int lapbeth_data_indication(struct net_device *dev, struct sk_buff *skb) + static netdev_tx_t lapbeth_xmit(struct sk_buff *skb, + struct net_device *dev) + { ++ struct lapbethdev *lapbeth = netdev_priv(dev); + int err; + +- /* +- * Just to be *really* sure not to send anything if the interface +- * is down, the ethernet device may have gone. +- */ +- if (!netif_running(dev)) ++ spin_lock_bh(&lapbeth->up_lock); ++ if (!lapbeth->up) + goto drop; + + switch (skb->data[0]) { +@@ -182,6 +186,7 @@ static netdev_tx_t lapbeth_xmit(struct sk_buff *skb, + goto drop; + } + out: ++ spin_unlock_bh(&lapbeth->up_lock); + return NETDEV_TX_OK; + drop: + kfree_skb(skb); +@@ -271,6 +276,7 @@ static const struct lapb_register_struct lapbeth_callbacks = { + */ + static int lapbeth_open(struct net_device *dev) + { ++ struct lapbethdev *lapbeth = netdev_priv(dev); + int err; + + if ((err = lapb_register(dev, &lapbeth_callbacks)) != LAPB_OK) { +@@ -278,13 +284,22 @@ static int lapbeth_open(struct net_device *dev) + return -ENODEV; + } + ++ spin_lock_bh(&lapbeth->up_lock); ++ lapbeth->up = true; ++ spin_unlock_bh(&lapbeth->up_lock); ++ + return 0; + } + + static int lapbeth_close(struct net_device *dev) + { ++ struct lapbethdev *lapbeth = netdev_priv(dev); + int err; + ++ spin_lock_bh(&lapbeth->up_lock); ++ lapbeth->up = false; ++ spin_unlock_bh(&lapbeth->up_lock); ++ + if ((err = lapb_unregister(dev)) != LAPB_OK) + pr_err("lapb_unregister error: %d\n", err); + +@@ -332,6 +347,9 @@ static int lapbeth_new_device(struct net_device *dev) + dev_hold(dev); + lapbeth->ethdev = dev; + ++ lapbeth->up = false; ++ spin_lock_init(&lapbeth->up_lock); ++ + rc = -EIO; + if (register_netdevice(ndev)) + goto fail; +-- +2.16.4 + diff --git a/patches.suse/net-marvell-fix-MVNETA_TX_IN_PRGRS-bit-number.patch b/patches.suse/net-marvell-fix-MVNETA_TX_IN_PRGRS-bit-number.patch new file mode 100644 index 0000000..0ad3096 --- /dev/null +++ b/patches.suse/net-marvell-fix-MVNETA_TX_IN_PRGRS-bit-number.patch @@ -0,0 +1,35 @@ +From ade3c482e7398a61604a9c9549d5f854d9dd9486 Mon Sep 17 00:00:00 2001 +From: Maxim Kiselev +Date: Fri, 20 Aug 2021 18:39:51 +0300 +Subject: [PATCH 6/7] net: marvell: fix MVNETA_TX_IN_PRGRS bit number +Git-commit: 359f4cdd7d78fdf8c098713b05fee950a730f131 +Patch-mainline: v5.14 +References: git-fixes + +According to Armada XP datasheet bit at 0 position is corresponding for +TxInProg indication. + +Fixes: c5aff18204da ("net: mvneta: driver for Marvell Armada 370/XP network unit") +Signed-off-by: Maxim Kiselev +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/marvell/mvneta.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c +index b7e0dc3693eb..10fbd54eafbb 100644 +--- a/drivers/net/ethernet/marvell/mvneta.c ++++ b/drivers/net/ethernet/marvell/mvneta.c +@@ -100,7 +100,7 @@ + #define MVNETA_DESC_SWAP BIT(6) + #define MVNETA_TX_BRST_SZ_MASK(burst) ((burst) << 22) + #define MVNETA_PORT_STATUS 0x2444 +-#define MVNETA_TX_IN_PRGRS BIT(1) ++#define MVNETA_TX_IN_PRGRS BIT(0) + #define MVNETA_TX_FIFO_EMPTY BIT(8) + #define MVNETA_RX_MIN_FRAME_SIZE 0x247c + #define MVNETA_SERDES_CFG 0x24A0 +-- +2.16.4 + diff --git a/patches.suse/net-mlx4-Fix-EEPROM-dump-support.patch b/patches.suse/net-mlx4-Fix-EEPROM-dump-support.patch new file mode 100644 index 0000000..886bd2e --- /dev/null +++ b/patches.suse/net-mlx4-Fix-EEPROM-dump-support.patch @@ -0,0 +1,204 @@ +From 2f7126038cc52b506702bdc7056f36298b8a28ce Mon Sep 17 00:00:00 2001 +From: Vladyslav Tarasiuk +Date: Sun, 9 May 2021 09:43:18 +0300 +Subject: [PATCH 16/19] net/mlx4: Fix EEPROM dump support +Git-commit: db825feefc6868896fed5e361787ba3bee2fd906 +Patch-mainline: v5.13-rc4 +References: git-fixes + +Fix SFP and QSFP* EEPROM queries by setting i2c_address, offset and page +number correctly. For SFP set the following params: +- I2C address for offsets 0-255 is 0x50. For 256-511 - 0x51. +- Page number is zero. +- Offset is 0-255. + +At the same time, QSFP* parameters are different: +- I2C address is always 0x50. +- Page number is not limited to zero. +- Offset is 0-255 for page zero and 128-255 for others. + +To set parameters accordingly to cable used, implement function to query +module ID and implement respective helper functions to set parameters +correctly. + +Fixes: 135dd9594f12 ("net/mlx4_en: ethtool, Remove unsupported SFP EEPROM high pages query") +Signed-off-by: Vladyslav Tarasiuk +Signed-off-by: Tariq Toukan +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 4 +- + drivers/net/ethernet/mellanox/mlx4/port.c | 107 +++++++++++++++++++++++- + 2 files changed, 104 insertions(+), 7 deletions(-) + +diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +index 7a99eb1572fd..6a005014d46a 100644 +--- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c ++++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +@@ -2011,8 +2011,6 @@ static int mlx4_en_set_tunable(struct net_device *dev, + return ret; + } + +-#define MLX4_EEPROM_PAGE_LEN 256 +- + static int mlx4_en_get_module_info(struct net_device *dev, + struct ethtool_modinfo *modinfo) + { +@@ -2047,7 +2045,7 @@ static int mlx4_en_get_module_info(struct net_device *dev, + break; + case MLX4_MODULE_ID_SFP: + modinfo->type = ETH_MODULE_SFF_8472; +- modinfo->eeprom_len = MLX4_EEPROM_PAGE_LEN; ++ modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN; + break; + default: + return -EINVAL; +diff --git a/drivers/net/ethernet/mellanox/mlx4/port.c b/drivers/net/ethernet/mellanox/mlx4/port.c +index ba6ac31a339d..256a06b3c096 100644 +--- a/drivers/net/ethernet/mellanox/mlx4/port.c ++++ b/drivers/net/ethernet/mellanox/mlx4/port.c +@@ -1973,6 +1973,7 @@ EXPORT_SYMBOL(mlx4_get_roce_gid_from_slave); + #define I2C_ADDR_LOW 0x50 + #define I2C_ADDR_HIGH 0x51 + #define I2C_PAGE_SIZE 256 ++#define I2C_HIGH_PAGE_SIZE 128 + + /* Module Info Data */ + struct mlx4_cable_info { +@@ -2026,6 +2027,88 @@ static inline const char *cable_info_mad_err_str(u16 mad_status) + return "Unknown Error"; + } + ++static int mlx4_get_module_id(struct mlx4_dev *dev, u8 port, u8 *module_id) ++{ ++ struct mlx4_cmd_mailbox *inbox, *outbox; ++ struct mlx4_mad_ifc *inmad, *outmad; ++ struct mlx4_cable_info *cable_info; ++ int ret; ++ ++ inbox = mlx4_alloc_cmd_mailbox(dev); ++ if (IS_ERR(inbox)) ++ return PTR_ERR(inbox); ++ ++ outbox = mlx4_alloc_cmd_mailbox(dev); ++ if (IS_ERR(outbox)) { ++ mlx4_free_cmd_mailbox(dev, inbox); ++ return PTR_ERR(outbox); ++ } ++ ++ inmad = (struct mlx4_mad_ifc *)(inbox->buf); ++ outmad = (struct mlx4_mad_ifc *)(outbox->buf); ++ ++ inmad->method = 0x1; /* Get */ ++ inmad->class_version = 0x1; ++ inmad->mgmt_class = 0x1; ++ inmad->base_version = 0x1; ++ inmad->attr_id = cpu_to_be16(0xFF60); /* Module Info */ ++ ++ cable_info = (struct mlx4_cable_info *)inmad->data; ++ cable_info->dev_mem_address = 0; ++ cable_info->page_num = 0; ++ cable_info->i2c_addr = I2C_ADDR_LOW; ++ cable_info->size = cpu_to_be16(1); ++ ++ ret = mlx4_cmd_box(dev, inbox->dma, outbox->dma, port, 3, ++ MLX4_CMD_MAD_IFC, MLX4_CMD_TIME_CLASS_C, ++ MLX4_CMD_NATIVE); ++ if (ret) ++ goto out; ++ ++ if (be16_to_cpu(outmad->status)) { ++ /* Mad returned with bad status */ ++ ret = be16_to_cpu(outmad->status); ++ mlx4_warn(dev, ++ "MLX4_CMD_MAD_IFC Get Module ID attr(%x) port(%d) i2c_addr(%x) offset(%d) size(%d): Response Mad Status(%x) - %s\n", ++ 0xFF60, port, I2C_ADDR_LOW, 0, 1, ret, ++ cable_info_mad_err_str(ret)); ++ ret = -ret; ++ goto out; ++ } ++ cable_info = (struct mlx4_cable_info *)outmad->data; ++ *module_id = cable_info->data[0]; ++out: ++ mlx4_free_cmd_mailbox(dev, inbox); ++ mlx4_free_cmd_mailbox(dev, outbox); ++ return ret; ++} ++ ++static void mlx4_sfp_eeprom_params_set(u8 *i2c_addr, u8 *page_num, u16 *offset) ++{ ++ *i2c_addr = I2C_ADDR_LOW; ++ *page_num = 0; ++ ++ if (*offset < I2C_PAGE_SIZE) ++ return; ++ ++ *i2c_addr = I2C_ADDR_HIGH; ++ *offset -= I2C_PAGE_SIZE; ++} ++ ++static void mlx4_qsfp_eeprom_params_set(u8 *i2c_addr, u8 *page_num, u16 *offset) ++{ ++ /* Offsets 0-255 belong to page 0. ++ * Offsets 256-639 belong to pages 01, 02, 03. ++ * For example, offset 400 is page 02: 1 + (400 - 256) / 128 = 2 ++ */ ++ if (*offset < I2C_PAGE_SIZE) ++ *page_num = 0; ++ else ++ *page_num = 1 + (*offset - I2C_PAGE_SIZE) / I2C_HIGH_PAGE_SIZE; ++ *i2c_addr = I2C_ADDR_LOW; ++ *offset -= *page_num * I2C_HIGH_PAGE_SIZE; ++} ++ + /** + * mlx4_get_module_info - Read cable module eeprom data + * @dev: mlx4_dev. +@@ -2045,12 +2128,30 @@ int mlx4_get_module_info(struct mlx4_dev *dev, u8 port, + struct mlx4_cmd_mailbox *inbox, *outbox; + struct mlx4_mad_ifc *inmad, *outmad; + struct mlx4_cable_info *cable_info; +- u16 i2c_addr; ++ u8 module_id, i2c_addr, page_num; + int ret; + + if (size > MODULE_INFO_MAX_READ) + size = MODULE_INFO_MAX_READ; + ++ ret = mlx4_get_module_id(dev, port, &module_id); ++ if (ret) ++ return ret; ++ ++ switch (module_id) { ++ case MLX4_MODULE_ID_SFP: ++ mlx4_sfp_eeprom_params_set(&i2c_addr, &page_num, &offset); ++ break; ++ case MLX4_MODULE_ID_QSFP: ++ case MLX4_MODULE_ID_QSFP_PLUS: ++ case MLX4_MODULE_ID_QSFP28: ++ mlx4_qsfp_eeprom_params_set(&i2c_addr, &page_num, &offset); ++ break; ++ default: ++ mlx4_err(dev, "Module ID not recognized: %#x\n", module_id); ++ return -EINVAL; ++ } ++ + inbox = mlx4_alloc_cmd_mailbox(dev); + if (IS_ERR(inbox)) + return PTR_ERR(inbox); +@@ -2076,11 +2177,9 @@ int mlx4_get_module_info(struct mlx4_dev *dev, u8 port, + */ + size -= offset + size - I2C_PAGE_SIZE; + +- i2c_addr = I2C_ADDR_LOW; +- + cable_info = (struct mlx4_cable_info *)inmad->data; + cable_info->dev_mem_address = cpu_to_be16(offset); +- cable_info->page_num = 0; ++ cable_info->page_num = page_num; + cable_info->i2c_addr = i2c_addr; + cable_info->size = cpu_to_be16(size); + +-- +2.16.4 + diff --git a/patches.suse/net-mlx4_core-Add-missed-mlx4_free_cmd_mailbox.patch b/patches.suse/net-mlx4_core-Add-missed-mlx4_free_cmd_mailbox.patch new file mode 100644 index 0000000..1685a0c --- /dev/null +++ b/patches.suse/net-mlx4_core-Add-missed-mlx4_free_cmd_mailbox.patch @@ -0,0 +1,38 @@ +From 9e4b3cf0c3b6e5b3a23693e53366e8386001ecb7 Mon Sep 17 00:00:00 2001 +From: Chuhong Yuan +Date: Sun, 21 Feb 2021 22:35:59 +0800 +Subject: [PATCH 05/19] net/mlx4_core: Add missed mlx4_free_cmd_mailbox() +Git-commit: 8eb65fda4a6dbd59cd5de24b106a10b6ee0d2176 +Patch-mainline: v5.12-rc1 +References: git-fixes + +mlx4_do_mirror_rule() forgets to call mlx4_free_cmd_mailbox() to +free the memory region allocated by mlx4_alloc_cmd_mailbox() before +an exit. +Add the missed call to fix it. + +Fixes: 78efed275117 ("net/mlx4_core: Support mirroring VF DMFS rules on both ports") +Signed-off-by: Chuhong Yuan +Reviewed-by: Tariq Toukan +Link: https://lore.kernel.org/r/20210221143559.390277-1-hslester96@gmail.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c +index cfa13729152b..4c7bb728f674 100644 +--- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c ++++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c +@@ -4984,6 +4984,7 @@ static int mlx4_do_mirror_rule(struct mlx4_dev *dev, struct res_fs_rule *fs_rule + + if (!fs_rule->mirr_mbox) { + mlx4_err(dev, "rule mirroring mailbox is null\n"); ++ mlx4_free_cmd_mailbox(dev, mailbox); + return -EINVAL; + } + memcpy(mailbox->buf, fs_rule->mirr_mbox, fs_rule->mirr_mbox_size); +-- +2.16.4 + diff --git a/patches.suse/net-mlx5e-Remove-dependency-in-IPsec-initialization-.patch b/patches.suse/net-mlx5e-Remove-dependency-in-IPsec-initialization-.patch new file mode 100644 index 0000000..d9eedfd --- /dev/null +++ b/patches.suse/net-mlx5e-Remove-dependency-in-IPsec-initialization-.patch @@ -0,0 +1,43 @@ +From 7e94b078557cfc06ba5c574fb4567ae305499589 Mon Sep 17 00:00:00 2001 +From: Huy Nguyen +Date: Fri, 28 May 2021 13:20:32 -0500 +Subject: [PATCH 17/19] net/mlx5e: Remove dependency in IPsec initialization + flows +Git-commit: 8ad893e516a77209a1818a2072d2027d87db809f +Patch-mainline: v5.13-rc7 +References: git-fixes + +Currently, IPsec feature is disabled because mlx5e_build_nic_netdev +is required to be called after mlx5e_ipsec_init. This requirement is +invalid as mlx5e_build_nic_netdev and mlx5e_ipsec_init initialize +independent resources. + +Remove ipsec pointer check in mlx5e_build_nic_netdev so that the +two functions can be called at any order. + +Fixes: 547eede070eb ("net/mlx5e: IPSec, Innova IPSec offload infrastructure") +Signed-off-by: Huy Nguyen +Reviewed-by: Raed Salem +Signed-off-by: Saeed Mahameed +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c +index cf58c9637904..c467f5e981f6 100644 +--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c ++++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c +@@ -515,9 +515,6 @@ void mlx5e_ipsec_build_netdev(struct mlx5e_priv *priv) + struct mlx5_core_dev *mdev = priv->mdev; + struct net_device *netdev = priv->netdev; + +- if (!priv->ipsec) +- return; +- + if (!(mlx5_accel_ipsec_device_caps(mdev) & MLX5_ACCEL_IPSEC_CAP_ESP) || + !MLX5_CAP_ETH(mdev, swp)) { + mlx5_core_dbg(mdev, "mlx5e: ESP and SWP offload not supported\n"); +-- +2.16.4 + diff --git a/patches.suse/net-mvpp2-Put-fwnode-in-error-case-during-probe.patch b/patches.suse/net-mvpp2-Put-fwnode-in-error-case-during-probe.patch new file mode 100644 index 0000000..c1552ca --- /dev/null +++ b/patches.suse/net-mvpp2-Put-fwnode-in-error-case-during-probe.patch @@ -0,0 +1,39 @@ +From 1f9f11b5c0bb6ed67e8263bcb9dc7e836ac78d2d Mon Sep 17 00:00:00 2001 +From: Andy Shevchenko +Date: Mon, 10 May 2021 12:58:05 +0300 +Subject: [PATCH 18/19] net: mvpp2: Put fwnode in error case during ->probe() +Git-commit: 71f0891c84dfdc448736082ab0a00acd29853896 +Patch-mainline: v5.14-rc1 +References: git-fixes + +In each iteration fwnode_for_each_available_child_node() bumps a reference +counting of a loop variable followed by dropping in on a next iteration, + +Since in error case the loop is broken, we have to drop a reference count +by ourselves. Do it for port_fwnode in error case during ->probe(). + +Fixes: 248122212f68 ("net: mvpp2: use device_*/fwnode_* APIs instead of of_*") +Cc: Marcin Wojtas +Signed-off-by: Andy Shevchenko +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +index f54316fa2bf0..8f77fe7800c6 100644 +--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c ++++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +@@ -5448,6 +5448,8 @@ static int mvpp2_probe(struct platform_device *pdev) + return 0; + + err_port_probe: ++ fwnode_handle_put(port_fwnode); ++ + i = 0; + fwnode_for_each_available_child_node(fwnode, port_fwnode) { + if (priv->port_list[i]) +-- +2.16.4 + diff --git a/patches.suse/net-stmmac-fix-watchdog-timeout-during-suspend-resum.patch b/patches.suse/net-stmmac-fix-watchdog-timeout-during-suspend-resum.patch new file mode 100644 index 0000000..5b9f1c7 --- /dev/null +++ b/patches.suse/net-stmmac-fix-watchdog-timeout-during-suspend-resum.patch @@ -0,0 +1,48 @@ +From 0411e3d3435ad66957c2e3d08f6356e9ce7b470f Mon Sep 17 00:00:00 2001 +From: Joakim Zhang +Date: Thu, 25 Feb 2021 17:01:11 +0800 +Subject: [PATCH 10/19] net: stmmac: fix watchdog timeout during suspend/resume + stress test +Git-commit: c511819d138de38e1637eedb645c207e09680d0f +Patch-mainline: v5.12-rc3 +References: git-fixes + +stmmac_xmit() call stmmac_tx_timer_arm() at the end to modify tx timer to +do the transmission cleanup work. Imagine such a situation, stmmac enters +suspend immediately after tx timer modified, it's expire callback +stmmac_tx_clean() would not be invoked. This could affect BQL, since +netdev_tx_sent_queue() has been called, but netdev_tx_completed_queue() +have not been involved, as a result, dql_avail(&dev_queue->dql) finally +always return a negative value. + +__dev_queue_xmit->__dev_xmit_skb->qdisc_run->__qdisc_run->qdisc_restart->dequeue_skb: + if ((q->flags & TCQ_F_ONETXQUEUE) && + netif_xmit_frozen_or_stopped(txq)) // __QUEUE_STATE_STACK_XOFF is set + +Net core will stop transmitting any more. Finillay, net watchdong would timeout. +To fix this issue, we should call netdev_tx_reset_queue() in stmmac_resume(). + +Fixes: 54139cf3bb33 ("net: stmmac: adding multiple buffers for rx") +Signed-off-by: Joakim Zhang +Signed-off-by: Jakub Kicinski +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +index b2a313ef33ec..3df7cd7a2216 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +@@ -4450,6 +4450,8 @@ static void stmmac_reset_queues_param(struct stmmac_priv *priv) + tx_q->cur_tx = 0; + tx_q->dirty_tx = 0; + tx_q->mss = 0; ++ ++ netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, queue)); + } + } + +-- +2.16.4 + diff --git a/patches.suse/net-stmmac-stop-each-tx-channel-independently.patch b/patches.suse/net-stmmac-stop-each-tx-channel-independently.patch new file mode 100644 index 0000000..d0124ff --- /dev/null +++ b/patches.suse/net-stmmac-stop-each-tx-channel-independently.patch @@ -0,0 +1,37 @@ +From 653dea74cd3812d4ca602dae9fe913a60bcf542e Mon Sep 17 00:00:00 2001 +From: Joakim Zhang +Date: Thu, 25 Feb 2021 17:01:10 +0800 +Subject: [PATCH 09/19] net: stmmac: stop each tx channel independently +Git-commit: a3e860a83397bf761ec1128a3f0ba186445992c6 +Patch-mainline: v5.12-rc3 +References: git-fixes + +If clear GMAC_CONFIG_TE bit, it would stop all tx channels, but users +may only want to stop specific tx channel. + +Fixes: 48863ce5940f ("stmmac: add DMA support for GMAC 4.xx") +Signed-off-by: Joakim Zhang +Signed-off-by: Jakub Kicinski +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c +index 49f5687879df..32461909264a 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c ++++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c +@@ -63,10 +63,6 @@ void dwmac4_dma_stop_tx(void __iomem *ioaddr, u32 chan) + + value &= ~DMA_CONTROL_ST; + writel(value, ioaddr + DMA_CHAN_TX_CONTROL(chan)); +- +- value = readl(ioaddr + GMAC_CONFIG); +- value &= ~GMAC_CONFIG_TE; +- writel(value, ioaddr + GMAC_CONFIG); + } + + void dwmac4_dma_start_rx(void __iomem *ioaddr, u32 chan) +-- +2.16.4 + diff --git a/patches.suse/net-usb-qmi_wwan-Add-new-usb-id-for-Dell-branded-EM7.patch b/patches.suse/net-usb-qmi_wwan-Add-new-usb-id-for-Dell-branded-EM7.patch new file mode 100644 index 0000000..25a62f4 --- /dev/null +++ b/patches.suse/net-usb-qmi_wwan-Add-new-usb-id-for-Dell-branded-EM7.patch @@ -0,0 +1,38 @@ +From 797666cd5af041ffb66642fff62f7389f08566a2 Mon Sep 17 00:00:00 2001 +From: Frank Wunderlich +Date: Mon, 26 Sep 2022 17:07:40 +0200 +Subject: [PATCH] net: usb: qmi_wwan: Add new usb-id for Dell branded EM7455 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Git-commit: 797666cd5af041ffb66642fff62f7389f08566a2 +References: git-fixes +Patch-mainline: v6.1-rc1 + +Add support for Dell 5811e (EM7455) with USB-id 0x413c:0x81c2. + +Signed-off-by: Frank Wunderlich +Cc: stable@vger.kernel.org +Acked-by: Bjørn Mork +Link: https://lore.kernel.org/r/20220926150740.6684-3-linux@fw-web.de +Signed-off-by: Jakub Kicinski +Signed-off-by: Oliver Neukum +--- + drivers/net/usb/qmi_wwan.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c +index 0cb187def5bc..26c34a7c21bd 100644 +--- a/drivers/net/usb/qmi_wwan.c ++++ b/drivers/net/usb/qmi_wwan.c +@@ -1402,6 +1402,7 @@ static const struct usb_device_id products[] = { + {QMI_FIXED_INTF(0x413c, 0x81b3, 8)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */ + {QMI_FIXED_INTF(0x413c, 0x81b6, 8)}, /* Dell Wireless 5811e */ + {QMI_FIXED_INTF(0x413c, 0x81b6, 10)}, /* Dell Wireless 5811e */ ++ {QMI_FIXED_INTF(0x413c, 0x81c2, 8)}, /* Dell Wireless 5811e */ + {QMI_FIXED_INTF(0x413c, 0x81cc, 8)}, /* Dell Wireless 5816e */ + {QMI_FIXED_INTF(0x413c, 0x81d7, 0)}, /* Dell Wireless 5821e */ + {QMI_FIXED_INTF(0x413c, 0x81d7, 1)}, /* Dell Wireless 5821e preproduction config */ +-- +2.35.3 + diff --git a/patches.suse/net-vxge-fix-use-after-free-in-vxge_device_unregiste.patch b/patches.suse/net-vxge-fix-use-after-free-in-vxge_device_unregiste.patch new file mode 100644 index 0000000..515869e --- /dev/null +++ b/patches.suse/net-vxge-fix-use-after-free-in-vxge_device_unregiste.patch @@ -0,0 +1,52 @@ +From bae88e3798dae246872a03c43ad4cfa6d9317717 Mon Sep 17 00:00:00 2001 +From: Pavel Skripkin +Date: Wed, 4 Aug 2021 18:52:20 +0300 +Subject: [PATCH 1/7] net: vxge: fix use-after-free in vxge_device_unregister +Git-commit: 942e560a3d3862dd5dee1411dbdd7097d29b8416 +Patch-mainline: v5.14-rc5 +References: git-fixes + +Smatch says: +drivers/net/ethernet/neterion/vxge/vxge-main.c:3518 vxge_device_unregister() error: Using vdev after free_{netdev,candev}(dev); +drivers/net/ethernet/neterion/vxge/vxge-main.c:3518 vxge_device_unregister() error: Using vdev after free_{netdev,candev}(dev); +drivers/net/ethernet/neterion/vxge/vxge-main.c:3520 vxge_device_unregister() error: Using vdev after free_{netdev,candev}(dev); +drivers/net/ethernet/neterion/vxge/vxge-main.c:3520 vxge_device_unregister() error: Using vdev after free_{netdev,candev}(dev); + +Since vdev pointer is netdev private data accessing it after free_netdev() +call can cause use-after-free bug. Fix it by moving free_netdev() call at +the end of the function + +Fixes: 6cca200362b4 ("vxge: cleanup probe error paths") +Reported-by: Dan Carpenter +Signed-off-by: Pavel Skripkin +Reviewed-by: Jesse Brandeburg +Signed-off-by: Jakub Kicinski +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/neterion/vxge/vxge-main.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/ethernet/neterion/vxge/vxge-main.c b/drivers/net/ethernet/neterion/vxge/vxge-main.c +index 5dd5f61e1114..683b1ab8fd6e 100644 +--- a/drivers/net/ethernet/neterion/vxge/vxge-main.c ++++ b/drivers/net/ethernet/neterion/vxge/vxge-main.c +@@ -3537,13 +3537,13 @@ static void vxge_device_unregister(struct __vxge_hw_device *hldev) + + kfree(vdev->vpaths); + +- /* we are safe to free it now */ +- free_netdev(dev); +- + vxge_debug_init(vdev->level_trace, "%s: ethernet device unregistered", + buf); + vxge_debug_entryexit(vdev->level_trace, "%s: %s:%d Exiting...", buf, + __func__, __LINE__); ++ ++ /* we are safe to free it now */ ++ free_netdev(dev); + } + + /* +-- +2.16.4 + diff --git a/patches.suse/nvmem-core-Check-input-parameter-for-NULL-in-nvmem_u.patch b/patches.suse/nvmem-core-Check-input-parameter-for-NULL-in-nvmem_u.patch new file mode 100644 index 0000000..a851d68 --- /dev/null +++ b/patches.suse/nvmem-core-Check-input-parameter-for-NULL-in-nvmem_u.patch @@ -0,0 +1,33 @@ +From 8c751e0d9a5264376935a84429a2d468c8877d99 Mon Sep 17 00:00:00 2001 +From: Andy Shevchenko +Date: Sun, 20 Feb 2022 15:15:17 +0000 +Subject: [PATCH] nvmem: core: Check input parameter for NULL in + nvmem_unregister() +Git-commit: 8c751e0d9a5264376935a84429a2d468c8877d99 +References: bsc#1204241 +Patch-mainline: v5.18-rc1 + +nvmem_unregister() frees resources and standard pattern is to allow +caller to not care if it's NULL or not. This will reduce burden on +the callers to perform this check. + +Signed-off-by: Andy Shevchenko +Signed-off-by: Srinivas Kandagatla +Link: https://lore.kernel.org/r/20220220151527.17216-4-srinivas.kandagatla@linaro.org +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Oliver Neukum +--- + drivers/nvmem/core.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/nvmem/core.c ++++ b/drivers/nvmem/core.c +@@ -527,6 +527,8 @@ EXPORT_SYMBOL_GPL(nvmem_register); + */ + int nvmem_unregister(struct nvmem_device *nvmem) + { ++ if (!nvmem) ++ return 0; + mutex_lock(&nvmem_mutex); + if (nvmem->users) { + mutex_unlock(&nvmem_mutex); diff --git a/patches.suse/ppp-Fix-generating-ifname-when-empty-IFLA_IFNAME-is-.patch b/patches.suse/ppp-Fix-generating-ifname-when-empty-IFLA_IFNAME-is-.patch new file mode 100644 index 0000000..dff1b53 --- /dev/null +++ b/patches.suse/ppp-Fix-generating-ifname-when-empty-IFLA_IFNAME-is-.patch @@ -0,0 +1,55 @@ +From a33f669662b9a96da36c48b703eb5672209249d0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Pali=20Roh=C3=A1r?= +Date: Sat, 7 Aug 2021 15:27:03 +0200 +Subject: [PATCH 3/7] ppp: Fix generating ifname when empty IFLA_IFNAME is + specified +Git-commit: 2459dcb96bcba94c08d6861f8a050185ff301672 +Patch-mainline: v5.14-rc6 +References: git-fixes + +IFLA_IFNAME is nul-term string which means that IFLA_IFNAME buffer can be +larger than length of string which contains. + +Function __rtnl_newlink() generates new own ifname if either IFLA_IFNAME +was not specified at all or userspace passed empty nul-term string. + +It is expected that if userspace does not specify ifname for new ppp netdev +then kernel generates one in format "ppp" where id matches to the ppp +unit id which can be later obtained by PPPIOCGUNIT ioctl. + +And it works in this way if IFLA_IFNAME is not specified at all. But it +does not work when IFLA_IFNAME is specified with empty string. + +So fix this logic also for empty IFLA_IFNAME in ppp_nl_newlink() function +and correctly generates ifname based on ppp unit identifier if userspace +did not provided preferred ifname. + +Without this patch when IFLA_IFNAME was specified with empty string then +kernel created a new ppp interface in format "ppp" but id did not +match ppp unit id returned by PPPIOCGUNIT ioctl. In this case id was some +number generated by __rtnl_newlink() function. + +Signed-off-by: Pali Rohár +Fixes: bb8082f69138 ("ppp: build ifname using unit identifier for rtnl based devices") +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/ppp/ppp_generic.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c +index 352e751125fb..56b0bd90a9fb 100644 +--- a/drivers/net/ppp/ppp_generic.c ++++ b/drivers/net/ppp/ppp_generic.c +@@ -1116,7 +1116,7 @@ static int ppp_nl_newlink(struct net *src_net, struct net_device *dev, + * the PPP unit identifer as suffix (i.e. ppp). This allows + * userspace to infer the device name using to the PPPIOCGUNIT ioctl. + */ +- if (!tb[IFLA_IFNAME]) ++ if (!tb[IFLA_IFNAME] || !nla_len(tb[IFLA_IFNAME]) || !*(char *)nla_data(tb[IFLA_IFNAME])) + conf.ifname_is_set = false; + + err = ppp_dev_configure(src_net, dev, &conf); +-- +2.16.4 + diff --git a/patches.suse/ppp-Fix-generating-ppp-unit-id-when-ifname-is-not-sp.patch b/patches.suse/ppp-Fix-generating-ppp-unit-id-when-ifname-is-not-sp.patch new file mode 100644 index 0000000..a6852c1 --- /dev/null +++ b/patches.suse/ppp-Fix-generating-ppp-unit-id-when-ifname-is-not-sp.patch @@ -0,0 +1,111 @@ +From d4027a91b06857d69b29bd05ea79ec61b1d96950 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Pali=20Roh=C3=A1r?= +Date: Sat, 7 Aug 2021 18:00:50 +0200 +Subject: [PATCH 4/7] ppp: Fix generating ppp unit id when ifname is not + specified +Git-commit: 3125f26c514826077f2a4490b75e9b1c7a644c42 +Patch-mainline: v5.14-rc6 +References: git-fixes + +When registering new ppp interface via PPPIOCNEWUNIT ioctl then kernel has +to choose interface name as this ioctl API does not support specifying it. + +Kernel in this case register new interface with name "ppp" where +is the ppp unit id, which can be obtained via PPPIOCGUNIT ioctl. This +applies also in the case when registering new ppp interface via rtnl +without supplying IFLA_IFNAME. + +PPPIOCNEWUNIT ioctl allows to specify own ppp unit id which will kernel +assign to ppp interface, in case this ppp id is not already used by other +ppp interface. + +In case user does not specify ppp unit id then kernel choose the first free +ppp unit id. This applies also for case when creating ppp interface via +rtnl method as it does not provide a way for specifying own ppp unit id. + +If some network interface (does not have to be ppp) has name "ppp" +with this first free ppp id then PPPIOCNEWUNIT ioctl or rtnl call fails. + +And registering new ppp interface is not possible anymore, until interface +which holds conflicting name is renamed. Or when using rtnl method with +custom interface name in IFLA_IFNAME. + +As list of allocated / used ppp unit ids is not possible to retrieve from +kernel to userspace, userspace has no idea what happens nor which interface +is doing this conflict. + +So change the algorithm how ppp unit id is generated. And choose the first +number which is not neither used as ppp unit id nor in some network +interface with pattern "ppp". + +This issue can be simply reproduced by following pppd call when there is no +ppp interface registered and also no interface with name pattern "ppp": + + pppd ifname ppp1 +ipv6 noip noauth nolock local nodetach pty "pppd +ipv6 noip noauth nolock local nodetach notty" + +Or by creating the one ppp interface (which gets assigned ppp unit id 0), +renaming it to "ppp1" and then trying to create a new ppp interface (which +will always fails as next free ppp unit id is 1, but network interface with +name "ppp1" exists). + +This patch fixes above described issue by generating new and new ppp unit +id until some non-conflicting id with network interfaces is generated. + +Signed-off-by: Pali Rohár +Cc: stable@vger.kernel.org +Signed-off-by: David S. Miller +Signed-off-by: Denis Kirjanov +--- + drivers/net/ppp/ppp_generic.c | 19 +++++++++++++++---- + 1 file changed, 15 insertions(+), 4 deletions(-) + +diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c +index 56b0bd90a9fb..95314906f0e0 100644 +--- a/drivers/net/ppp/ppp_generic.c ++++ b/drivers/net/ppp/ppp_generic.c +@@ -288,7 +288,7 @@ static struct channel *ppp_find_channel(struct ppp_net *pn, int unit); + static int ppp_connect_channel(struct channel *pch, int unit); + static int ppp_disconnect_channel(struct channel *pch); + static void ppp_destroy_channel(struct channel *pch); +-static int unit_get(struct idr *p, void *ptr); ++static int unit_get(struct idr *p, void *ptr, int min); + static int unit_set(struct idr *p, void *ptr, int n); + static void unit_put(struct idr *p, int n); + static void *unit_find(struct idr *p, int n); +@@ -965,9 +965,20 @@ static int ppp_unit_register(struct ppp *ppp, int unit, bool ifname_is_set) + mutex_lock(&pn->all_ppp_mutex); + + if (unit < 0) { +- ret = unit_get(&pn->units_idr, ppp); ++ ret = unit_get(&pn->units_idr, ppp, 0); + if (ret < 0) + goto err; ++ if (!ifname_is_set) { ++ while (1) { ++ snprintf(ppp->dev->name, IFNAMSIZ, "ppp%i", ret); ++ if (!__dev_get_by_name(ppp->ppp_net, ppp->dev->name)) ++ break; ++ unit_put(&pn->units_idr, ret); ++ ret = unit_get(&pn->units_idr, ppp, ret + 1); ++ if (ret < 0) ++ goto err; ++ } ++ } + } else { + /* Caller asked for a specific unit number. Fail with -EEXIST + * if unavailable. For backward compatibility, return -EEXIST +@@ -3254,9 +3265,9 @@ static int unit_set(struct idr *p, void *ptr, int n) + } + + /* get new free unit number and associate pointer with it */ +-static int unit_get(struct idr *p, void *ptr) ++static int unit_get(struct idr *p, void *ptr, int min) + { +- return idr_alloc(p, ptr, 0, 0, GFP_KERNEL); ++ return idr_alloc(p, ptr, min, 0, GFP_KERNEL); + } + + /* put unit number back to a pool */ +-- +2.16.4 + diff --git a/patches.suse/r8169-fix-jumbo-packet-handling-on-RTL8168e.patch b/patches.suse/r8169-fix-jumbo-packet-handling-on-RTL8168e.patch new file mode 100644 index 0000000..f65c076 --- /dev/null +++ b/patches.suse/r8169-fix-jumbo-packet-handling-on-RTL8168e.patch @@ -0,0 +1,50 @@ +From f99ae312b20809b1e0f96ce9db2218bcbc066cd6 Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Thu, 25 Feb 2021 16:05:19 +0100 +Subject: [PATCH 08/19] r8169: fix jumbo packet handling on RTL8168e +Git-commit: 6cf739131a15e4177e58a1b4f2bede9d5da78552 +Patch-mainline: v5.12-rc1 +References: git-fixes + +Josef reported [0] that using jumbo packets fails on RTL8168e. +Aligning the values for register MaxTxPacketSize with the +vendor driver fixes the problem. + +[0] https://bugzilla.kernel.org/show_bug.cgi?id=211827 + +Fixes: d58d46b5d851 ("r8169: jumbo fixes.") +Reported-by: Josef Oškera +Tested-by: Josef Oškera +Signed-off-by: Heiner Kallweit +Link: https://lore.kernel.org/r/b15ddef7-0d50-4320-18f4-6a3f86fbfd3e@gmail.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Denis Kirjanov +--- + drivers/net/ethernet/realtek/r8169.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c +index 073ccf996c4c..7fc5f683b9ee 100644 +--- a/drivers/net/ethernet/realtek/r8169.c ++++ b/drivers/net/ethernet/realtek/r8169.c +@@ -5067,7 +5067,7 @@ static void r8168e_hw_jumbo_enable(struct rtl8169_private *tp) + { + void __iomem *ioaddr = tp->mmio_addr; + +- RTL_W8(MaxTxPacketSize, 0x3f); ++ RTL_W8(MaxTxPacketSize, 0x24); + RTL_W8(Config3, RTL_R8(Config3) | Jumbo_En0); + RTL_W8(Config4, RTL_R8(Config4) | 0x01); + rtl_tx_performance_tweak(tp->pci_dev, PCI_EXP_DEVCTL_READRQ_512B); +@@ -5077,7 +5077,7 @@ static void r8168e_hw_jumbo_disable(struct rtl8169_private *tp) + { + void __iomem *ioaddr = tp->mmio_addr; + +- RTL_W8(MaxTxPacketSize, 0x0c); ++ RTL_W8(MaxTxPacketSize, 0x3f); + RTL_W8(Config3, RTL_R8(Config3) & ~Jumbo_En0); + RTL_W8(Config4, RTL_R8(Config4) & ~0x01); + rtl_tx_performance_tweak(tp->pci_dev, 0x5 << MAX_READ_REQUEST_SHIFT); +-- +2.16.4 + diff --git a/series.conf b/series.conf index 6defe8d..2511ee6 100644 --- a/series.conf +++ b/series.conf @@ -53587,6 +53587,7 @@ patches.suse/0001-USB-chaoskey-fix-error-case-of-a-timeout.patch patches.suse/0001-USBIP-add-config-dependency-for-SGL_ALLOC.patch patches.suse/0001-usbip-Fix-uninitialized-symbol-nents-in-stub_recv_cm.patch + patches.suse/USB-serial-ch341-reimplement-line-speed-handling.patch patches.suse/USB-serial-mos7840-add-USB-ID-to-support-Moxa-UPort-.patch patches.suse/USB-serial-option-add-support-for-DW5821e-with-eSIM-.patch patches.suse/USB-serial-mos7720-fix-remote-wakeup.patch @@ -54945,6 +54946,7 @@ patches.suse/0001-USB-Fix-novation-SourceControl-XL-after-suspend.patch patches.suse/0001-USB-misc-iowarrior-add-support-for-2-OEMed-devices.patch patches.suse/0001-USB-misc-iowarrior-add-support-for-the-28-and-28L-de.patch + patches.suse/USB-serial-ch341-fix-receiver-regression.patch patches.suse/0001-thunderbolt-Prevent-crash-if-non-active-NVMem-file-i.patch patches.suse/0001-usb-gadget-composite-Fix-bMaxPower-for-SuperSpeedPlu.patch patches.suse/0001-usb-dwc2-Fix-in-ISOC-request-length-checking.patch @@ -56403,6 +56405,8 @@ patches.suse/usb-musb-Fix-runtime-PM-imbalance-on-error.patch patches.suse/CDC-ACM-heed-quirk-also-in-error-handling.patch patches.suse/USB-serial-usb_wwan-do-not-resubmit-rx-urb-on-fatal-.patch + patches.suse/USB-serial-ch341-add-basis-for-quirk-detection.patch + patches.suse/USB-serial-ch341-fix-lockup-of-devices-with-limited-.patch patches.suse/USB-serial-qcserial-add-DW5816e-QDL-support.patch patches.suse/USB-serial-option-add-Telit-LE910C1-EUX-compositions.patch patches.suse/serial-amba-pl011-Make-sure-we-initialize-the-port.l.patch @@ -59058,12 +59062,16 @@ patches.suse/bpf_lru_list-Read-double-checked-variable-once-witho.patch patches.suse/bpf-Remove-MTU-check-in-__bpf_skb_max_len.patch patches.suse/ibmvnic-Set-to-CLOSED-state-even-on-error.patch + patches.suse/bnxt_en-reverse-order-of-TX-disable-and-carrier-off.patch patches.suse/bpf-Fix-truncation-handling-for-mod32-dst-reg-wrt-ze.patch patches.suse/cxgb4-chtls-cxgbit-Keeping-the-max-ofld-immediate-da.patch patches.suse/b43-N-PHY-Fix-the-update-of-coef-for-the-PHY-revisio.patch patches.suse/ibmvnic-add-memory-barrier-to-protect-long-term-buff.patch patches.suse/ibmvnic-skip-send_request_unmap-for-timeout-reset.patch patches.suse/ibmvnic-serialize-access-to-work-queue-on-remove.patch + patches.suse/net-amd-xgbe-Fix-NETDEV-WATCHDOG-transmit-queue-time.patch + patches.suse/net-amd-xgbe-Reset-link-when-the-link-never-comes-ba.patch + patches.suse/net-amd-xgbe-Fix-network-fluctuations-when-using-1G-.patch patches.suse/net-re-solve-some-conflicts-after-net-net-next-merge.patch patches.suse/reset-hisilicon-correct-vendor-prefix.patch patches.suse/vt-drop-old-FONT-ioctls.patch @@ -59226,13 +59234,17 @@ patches.suse/ocfs2-fix-a-use-after-free-on-error.patch patches.suse/0002-video-fbdev-acornfb-remove-free_unused_pages.patch patches.suse/PCI-Align-checking-of-syscall-user-config-accessors.patch + patches.suse/net-mlx4_core-Add-missed-mlx4_free_cmd_mailbox.patch + patches.suse/i40e-Fix-flow-for-IPv6-next-header-extension-header.patch patches.suse/i40e-Add-zero-initialization-of-AQ-command-structure.patch + patches.suse/i40e-Fix-overwriting-flow-control-settings-during-dr.patch patches.suse/i40e-Fix-add-TC-filter-for-IPv6.patch patches.suse/i40e-Fix-endianness-conversions.patch patches.suse/ice-Account-for-port-VLAN-in-VF-max-packet-size-calc.patch patches.suse/net-usb-qmi_wwan-support-ZTE-P685M-modem.patch patches.suse/ibmvnic-fix-a-race-between-open-and-reset.patch patches.suse/net-phy-micrel-set-soft_reset-callback-to-genphy_sof-764d31ca.patch + patches.suse/r8169-fix-jumbo-packet-handling-on-RTL8168e.patch patches.suse/drm-msm-a5xx-Remove-overwriting-A5XX_PC_DBG_ECO_CNTL.patch patches.suse/0005-drm-msm-dsi-Correct-io_start-for-MSM8994-20nm-PHY.patch patches.suse/pwm-rockchip-rockchip_pwm_probe-Remove-superfluous-c.patch @@ -59276,6 +59288,8 @@ patches.suse/RDMA-uverbs-Fix-kernel-doc-warning-of-_uverbs_alloc.patch patches.suse/powerpc-pseries-Don-t-enforce-MSI-affinity-with-kdum.patch patches.suse/gpiolib-acpi-Add-missing-IRQF_ONESHOT.patch + patches.suse/net-stmmac-stop-each-tx-channel-independently.patch + patches.suse/net-stmmac-fix-watchdog-timeout-during-suspend-resum.patch patches.suse/net-hns3-fix-query-vlan-mask-value-error-for-flow-di.patch patches.suse/net-hns3-fix-bug-when-calculating-the-TCAM-table-inf.patch patches.suse/can-skb-can_skb_set_owner-fix-ref-counting-if-socket.patch @@ -59453,6 +59467,7 @@ patches.suse/RDMA-cxgb4-check-for-ipv6-address-properly-while-des.patch patches.suse/RDMA-addr-Be-strict-with-gid-size.patch patches.suse/cifs-On-cifs_reconnect-resolve-the-hostname-again-.patch + patches.suse/amd-xgbe-Update-DMA-coherency-values.patch patches.suse/nfc-fix-refcount-leak-in-llcp_sock_bind.patch patches.suse/nfc-fix-refcount-leak-in-llcp_sock_connect.patch patches.suse/nfc-fix-memory-leak-in-llcp_sock_connect.patch @@ -59766,6 +59781,7 @@ patches.suse/netdevice-Add-missing-IFF_PHONY_HEADROOM-self-defini.patch patches.suse/xsk-Respect-device-s-headroom-and-tailroom-on-generi.patch patches.suse/ethernet-amazon-ena-A-typo-fix-in-the-file-ena_com.h.patch + patches.suse/net-lapbether-Prevent-racing-when-checking-whether-t.patch patches.suse/i40e-optimize-for-XDP_REDIRECT-in-xsk-path.patch patches.suse/inet-use-bigger-hash-table-for-IP-ID-generation.patch patches.suse/net-gve-convert-strlcpy-to-strscpy.patch @@ -59807,6 +59823,7 @@ patches.suse/net-davinci_emac-Fix-incorrect-masking-of-tx-and-rx-.patch patches.suse/net-phy-intel-xway-enable-integrated-led-functions.patch patches.suse/bnxt_en-fix-ternary-sign-extension-bug-in-bnxt_show_.patch + patches.suse/bnxt_en-Fix-RX-consumer-index-logic-in-the-error-pat.patch patches.suse/net-hso-fix-NULL-deref-on-disconnect-regression.patch patches.suse/net-emac-emac-mac-Fix-a-use-after-free-in-emac_mac_t.patch patches.suse/powerpc-fadump-Mark-fadump_calculate_reserve_size-as.patch @@ -59948,6 +59965,8 @@ patches.suse/serial-max310x-unregister-uart-driver-in-case-of-fai.patch patches.suse/net-rtlwifi-properly-check-for-alloc_workqueue-failu.patch patches.suse/net-stmicro-handle-clk_prepare-failure-during-init.patch + patches.suse/Revert-niu-fix-missing-checks-of-niu_pci_eeprom_read.patch + patches.suse/ethernet-sun-niu-fix-missing-checks-of-niu_pci_eepro.patch patches.suse/qlcnic-Add-null-check-after-calling-netdev_alloc_skb.patch patches.suse/char-hpet-add-checks-after-calling-ioremap.patch patches.suse/0001-Revert-video-hgafb-fix-potential-NULL-pointer-derefe.patch @@ -59983,6 +60002,7 @@ patches.suse/locking-mutex-clear-MUTEX_FLAGS-if-wait_list-is-empt.patch patches.suse/net-nfc-rawsock.c-fix-a-permission-check-bug.patch patches.suse/net-netcp-Fix-an-error-message.patch + patches.suse/net-mlx4-Fix-EEPROM-dump-support.patch patches.suse/cfg80211-mitigate-A-MSDU-aggregation-attacks.patch patches.suse/bpf-Add-kconfig-knob-for-disabling-unpriv-bpf-by-def.patch patches.suse/net-fec-fix-the-potential-memory-leak-in-fec_enet_in.patch @@ -60099,6 +60119,7 @@ patches.suse/net-ena-fix-DMA-mapping-function-issues-in-XDP.patch patches.suse/mac80211-remove-warning-in-ieee80211_get_sband.patch patches.suse/cfg80211-call-cfg80211_leave_ocb-when-switching-away.patch + patches.suse/net-mlx5e-Remove-dependency-in-IPsec-initialization-.patch patches.suse/alx-Fix-an-error-handling-path-in-alx_probe.patch patches.suse/net-stmmac-dwmac1000-Fix-extended-MAC-address-regist.patch patches.suse/qlcnic-Fix-an-error-handling-path-in-qlcnic_probe.patch @@ -60223,6 +60244,7 @@ patches.suse/HID-wacom-Correct-base-usage-for-capacitive-ExpressK.patch patches.suse/block-fix-trace-completion-for-chained-bio.patch patches.suse/nvme-verify-MNAN-value-if-ANA-is-enabled.patch + patches.suse/net-mvpp2-Put-fwnode-in-error-case-during-probe.patch patches.suse/net-pch_gbe-Propagate-error-from-devm_gpio_request_o.patch patches.suse/mvpp2-suppress-warning.patch patches.suse/mISDN-fix-possible-use-after-free-in-HFC_cleanup.patch @@ -60290,6 +60312,7 @@ patches.suse/Bluetooth-btusb-fix-bt-fiwmare-downloading-failure-i.patch patches.suse/gve-DQO-Fix-off-by-one-in-gve_rx_dqo.patch patches.suse/net-ethernet-aeroflex-fix-UAF-in-greth_of_remove.patch + patches.suse/net-ethernet-ezchip-fix-UAF-in-nps_enet_remove.patch patches.suse/net-sched-add-barrier-to-ensure-correct-ordering-for.patch patches.suse/msft-hv-2398-hv_netvsc-Set-needed_headroom-according-to-VF.patch patches.suse/can-bcm-delay-release-of-struct-bcm_op-after-synchro.patch @@ -60552,6 +60575,7 @@ patches.suse/nfp-update-ethtool-reporting-of-pauseframe-control.patch patches.suse/bnx2x-fix-an-error-code-in-bnx2x_nic_load.patch patches.suse/net-pegasus-fix-uninit-value-in-get_interrupt_interv.patch + patches.suse/net-vxge-fix-use-after-free-in-vxge_device_unregiste.patch patches.suse/ALSA-seq-Fix-racy-deletion-of-subscriber.patch patches.suse/RDMA-rxe-Use-the-correct-size-of-wqe-when-processing.patch patches.suse/RDMA-rxe-Restore-setting-tot_len-in-the-IPv4-header.patch @@ -60568,6 +60592,9 @@ patches.suse/ASoC-cs42l42-Fix-inversion-of-ADC-Notch-Switch-contr.patch patches.suse/ASoC-cs42l42-Remove-duplicate-control-for-WNF-filter.patch patches.suse/ceph-take-snap_empty_lock-atomically-with-snaprealm-refcount-change.patch + patches.suse/net-dsa-mt7530-add-the-missing-RxUnicast-MIB-counter.patch + patches.suse/ppp-Fix-generating-ifname-when-empty-IFLA_IFNAME-is-.patch + patches.suse/ppp-Fix-generating-ppp-unit-id-when-ifname-is-not-sp.patch patches.suse/ice-Prevent-probing-virtual-functions.patch patches.suse/iavf-Set-RSS-LUT-and-key-in-reset-handle-path.patch patches.suse/net-linkwatch-fix-failure-to-restore-device-state-ac.patch @@ -60586,6 +60613,7 @@ patches.suse/genirq-Provide-IRQCHIP_AFFINITY_PRE_STARTUP.patch patches.suse/x86-msi-Force-affinity-setup-before-startup.patch patches.suse/btrfs-prevent-rename2-from-exchanging-a-subvol-with-a-directory-from-different-parents.patch + patches.suse/bnxt-don-t-lock-the-tx-queue-from-napi-poll.patch patches.suse/bnxt-disable-napi-before-canceling-DIM.patch patches.suse/net-6pack-fix-slab-out-of-bounds-in-decode_data.patch patches.suse/bnxt_en-Add-missing-DMA-memory-barriers.patch @@ -60598,6 +60626,7 @@ patches.suse/xgene-v2-Fix-a-resource-leak-in-the-error-handling-p.patch patches.suse/e1000e-Fix-the-max-snoop-no-snoop-latency-for-10M.patch patches.suse/e1000e-Do-not-take-care-about-recovery-NVM-checksum.patch + patches.suse/net-marvell-fix-MVNETA_TX_IN_PRGRS-bit-number.patch patches.suse/can-usb-esd_usb2-esd_usb2_rx_event-fix-the-interchan.patch patches.suse/ipv4-use-siphash-instead-of-jenkins-in-fnhe_hashfun.patch patches.suse/USB-serial-option-add-new-VID-PID-to-support-Fibocom.patch @@ -60638,6 +60667,7 @@ patches.suse/0001-dm-crypt-Avoid-percpu_counter-spinlock-contention-in.patch patches.suse/gve-fix-the-wrong-AdminQ-buffer-overflow-check.patch patches.suse/igmp-Add-ip_mc_list-lock-in-ip_check_mc_rcu.patch + patches.suse/i40e-improve-locking-of-mac_filter_hash.patch patches.suse/usb-hso-fix-error-handling-code-of-hso_create_net_de.patch patches.suse/Bluetooth-sco-prevent-information-leak-in-sco_conn_d.patch patches.suse/Bluetooth-increase-BTNAMSIZ-to-21-chars-to-fix-poten.patch @@ -61545,6 +61575,7 @@ patches.suse/USB-serial-pl2303-add-IBM-device-IDs.patch patches.suse/USB-storage-ums-realtek-fix-error-code-in-rts51x_rea.patch patches.suse/USB-usb-storage-Fix-use-of-bitfields-for-hardware-da.patch + patches.suse/nvmem-core-Check-input-parameter-for-NULL-in-nvmem_u.patch patches.suse/mxser-fix-xmit_buf-leak-in-activate-when-LSR-0xff.patch patches.suse/xen-fix-is_xen_pmu.patch patches.suse/livepatch-Don-t-block-removal-of-patches-that-are-safe-to-unload.patch @@ -61877,6 +61908,7 @@ patches.suse/ext4-check-if-directory-block-is-within-i_size.patch patches.suse/ext4-make-sure-ext4_append-always-allocates-new-bloc.patch patches.suse/xfs-fix-null-pointer-dereference-in-xfs_getbmap.patch + patches.suse/Input-gscps2-check-return-value-of-ioremap-in-gscps2.patch patches.suse/0004-Revert-drivers-video-backlight-platform_lcd.c-add-su.patch patches.suse/powerpc-powernv-Avoid-crashing-if-rng-is-NULL.patch patches.suse/powerpc-powernv-kvm-Use-darn-for-H_RANDOM-on-Power9.patch @@ -61938,6 +61970,7 @@ patches.suse/USB-serial-option-add-Quectel-EM060K-modem.patch patches.suse/USB-serial-ftdi_sio-add-Omron-CS1W-CIF31-device-id.patch patches.suse/USB-serial-cp210x-add-Decagon-UCA-device-id.patch + patches.suse/USB-serial-ch341-fix-lost-character-on-LCR-updates.patch patches.suse/s390-hugetlb-fix-prepare_hugepage_range-check-for-2-GB-hugepages patches.suse/efi-capsule-loader-Fix-use-after-free-in-efi_capsule.patch patches.suse/sch_sfb-Don-t-assume-the-skb-is-still-around-after-e.patch @@ -61954,6 +61987,7 @@ patches.suse/ACPI-processor-idle-Practically-limit-Dummy-wait-workaround-to-old-Intel-systems.patch patches.suse/Input-melfas_mip4-fix-return-value-check-in-mip4_pro.patch patches.suse/usbnet-Fix-memory-leak-in-usbnet_disconnect.patch + patches.suse/net-usb-qmi_wwan-Add-new-usb-id-for-Dell-branded-EM7.patch patches.suse/mISDN-fix-use-after-free-bugs-in-l1oip-timer-handler.patch patches.suse/bnx2x-fix-potential-memory-leak-in-bnx2x_tpa_stop.patch patches.suse/r8152-Rate-limit-overflow-messages.patch @@ -61975,6 +62009,7 @@ patches.suse/powerpc-pci_dn-Add-missing-of_node_put.patch patches.suse/powerpc-powernv-add-missing-of_node_put-in-opal_expo.patch patches.suse/powerpc-mm-64s-Drop-pgd_huge.patch + patches.suse/Input-xpad-add-supported-devices-as-contributed-on-g.patch patches.suse/nilfs2-fix-use-after-free-bug-of-struct-nilfs_root.patch patches.suse/nilfs2-fix-NULL-pointer-dereference-at-nilfs_bmap_lo.patch patches.suse/nilfs2-fix-leak-of-nilfs_root-in-case-of-writer-thre.patch