From 6a94376471950fb55b847b872409d1e272520960 Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Wed, 30 Nov 2022 07:55:56 -0500 Subject: [PATCH] Fixes for 4.9 Signed-off-by: Sasha Levin --- ...mi_wwan-add-telit-0x103a-composition.patch | 40 ++++++++ ...s-wmi-add-missing-pci_dev_put-in-asu.patch | 39 ++++++++ ..._omap-avoid-rs485-rts-glitch-on-set_.patch | 94 +++++++++++++++++++ queue-4.9/series | 5 + ...rable-source-port-perturb-table-size.patch | 78 +++++++++++++++ ...i-add-missing-free_irq-in-error-path.patch | 55 +++++++++++ 6 files changed, 311 insertions(+) create mode 100644 queue-4.9/net-usb-qmi_wwan-add-telit-0x103a-composition.patch create mode 100644 queue-4.9/platform-x86-asus-wmi-add-missing-pci_dev_put-in-asu.patch create mode 100644 queue-4.9/serial-8250-8250_omap-avoid-rs485-rts-glitch-on-set_.patch create mode 100644 queue-4.9/tcp-configurable-source-port-perturb-table-size.patch create mode 100644 queue-4.9/xen-platform-pci-add-missing-free_irq-in-error-path.patch diff --git a/queue-4.9/net-usb-qmi_wwan-add-telit-0x103a-composition.patch b/queue-4.9/net-usb-qmi_wwan-add-telit-0x103a-composition.patch new file mode 100644 index 00000000000..a9fb0103d75 --- /dev/null +++ b/queue-4.9/net-usb-qmi_wwan-add-telit-0x103a-composition.patch @@ -0,0 +1,40 @@ +From df668846d50c19be644c9519494829f6dde968d9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 15 Nov 2022 11:58:59 +0100 +Subject: net: usb: qmi_wwan: add Telit 0x103a composition +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Enrico Sau + +[ Upstream commit e103ba33998d0f25653cc8ebe745b68d1ee10cda ] + +Add the following Telit LE910C4-WWX composition: + +0x103a: rmnet + +Signed-off-by: Enrico Sau +Acked-by: Bjørn Mork +Link: https://lore.kernel.org/r/20221115105859.14324-1-enrico.sau@gmail.com +Signed-off-by: Paolo Abeni +Signed-off-by: Sasha Levin +--- + 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 547693118606..62eb45a819e7 100644 +--- a/drivers/net/usb/qmi_wwan.c ++++ b/drivers/net/usb/qmi_wwan.c +@@ -926,6 +926,7 @@ static const struct usb_device_id products[] = { + {QMI_FIXED_INTF(0x2357, 0x0201, 4)}, /* TP-LINK HSUPA Modem MA180 */ + {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */ + {QMI_QUIRK_SET_DTR(0x1bc7, 0x1031, 3)}, /* Telit LE910C1-EUX */ ++ {QMI_QUIRK_SET_DTR(0x1bc7, 0x103a, 0)}, /* Telit LE910C4-WWX */ + {QMI_QUIRK_SET_DTR(0x1bc7, 0x1040, 2)}, /* Telit LE922A */ + {QMI_QUIRK_SET_DTR(0x1bc7, 0x1050, 2)}, /* Telit FN980 */ + {QMI_QUIRK_SET_DTR(0x1bc7, 0x1060, 2)}, /* Telit LN920 */ +-- +2.35.1 + diff --git a/queue-4.9/platform-x86-asus-wmi-add-missing-pci_dev_put-in-asu.patch b/queue-4.9/platform-x86-asus-wmi-add-missing-pci_dev_put-in-asu.patch new file mode 100644 index 00000000000..3b304166609 --- /dev/null +++ b/queue-4.9/platform-x86-asus-wmi-add-missing-pci_dev_put-in-asu.patch @@ -0,0 +1,39 @@ +From 1e033101072632fc94e4b39fa716f8423804ae3b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 11 Nov 2022 18:07:52 +0800 +Subject: platform/x86: asus-wmi: add missing pci_dev_put() in + asus_wmi_set_xusb2pr() + +From: Xiongfeng Wang + +[ Upstream commit d0cdd85046b15089df71a50548617ac1025300d0 ] + +pci_get_device() will increase the reference count for the returned +pci_dev. We need to use pci_dev_put() to decrease the reference count +before asus_wmi_set_xusb2pr() returns. + +Signed-off-by: Xiongfeng Wang +Link: https://lore.kernel.org/r/20221111100752.134311-1-wangxiongfeng2@huawei.com +Reviewed-by: Hans de Goede +Signed-off-by: Hans de Goede +Signed-off-by: Sasha Levin +--- + drivers/platform/x86/asus-wmi.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c +index 4ae758c3d8ba..9f6e462c57fe 100644 +--- a/drivers/platform/x86/asus-wmi.c ++++ b/drivers/platform/x86/asus-wmi.c +@@ -1111,6 +1111,8 @@ static void asus_wmi_set_xusb2pr(struct asus_wmi *asus) + pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR, + cpu_to_le32(ports_available)); + ++ pci_dev_put(xhci_pdev); ++ + pr_info("set USB_INTEL_XUSB2PR old: 0x%04x, new: 0x%04x\n", + orig_ports_available, ports_available); + } +-- +2.35.1 + diff --git a/queue-4.9/serial-8250-8250_omap-avoid-rs485-rts-glitch-on-set_.patch b/queue-4.9/serial-8250-8250_omap-avoid-rs485-rts-glitch-on-set_.patch new file mode 100644 index 00000000000..b24cdf2ec6d --- /dev/null +++ b/queue-4.9/serial-8250-8250_omap-avoid-rs485-rts-glitch-on-set_.patch @@ -0,0 +1,94 @@ +From 835a94d0f4fb25791769a2a72845fe98a828f63b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 27 Sep 2022 13:52:34 +0200 +Subject: serial: 8250: 8250_omap: Avoid RS485 RTS glitch on ->set_termios() + +From: Lukas Wunner + +[ Upstream commit 038ee49fef18710bedd38b531d173ccd746b2d8d ] + +RS485-enabled UART ports on TI Sitara SoCs with active-low polarity +exhibit a Transmit Enable glitch on ->set_termios(): + +omap8250_restore_regs(), which is called from omap_8250_set_termios(), +sets the TCRTLR bit in the MCR register and clears all other bits, +including RTS. If RTS uses active-low polarity, it is now asserted +for no reason. + +The TCRTLR bit is subsequently cleared by writing up->mcr to the MCR +register. That variable is always zero, so the RTS bit is still cleared +(incorrectly so if RTS is active-high). + +(up->mcr is not, as one might think, a cache of the MCR register's +current value. Rather, it only caches a single bit of that register, +the AFE bit. And it only does so if the UART supports the AFE bit, +which OMAP does not. For details see serial8250_do_set_termios() and +serial8250_do_set_mctrl().) + +Finally at the end of omap8250_restore_regs(), the MCR register is +restored (and RTS deasserted) by a call to up->port.ops->set_mctrl() +(which equals serial8250_set_mctrl()) and serial8250_em485_stop_tx(). + +So there's an RTS glitch between setting TCRTLR and calling +serial8250_em485_stop_tx(). Avoid by using a read-modify-write +when setting TCRTLR. + +While at it, drop a redundant initialization of up->mcr. As explained +above, the variable isn't used by the driver and it is already +initialized to zero because it is part of the static struct +serial8250_ports[] declared in 8250_core.c. (Static structs are +initialized to zero per section 6.7.8 nr. 10 of the C99 standard.) + +Cc: Jan Kiszka +Cc: Su Bao Cheng +Tested-by: Matthias Schiffer +Signed-off-by: Lukas Wunner +Link: https://lore.kernel.org/r/6554b0241a2c7fd50f32576fdbafed96709e11e8.1664278942.git.lukas@wunner.de +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + drivers/tty/serial/8250/8250_omap.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c +index d5962162c590..b37e6619af9c 100644 +--- a/drivers/tty/serial/8250/8250_omap.c ++++ b/drivers/tty/serial/8250/8250_omap.c +@@ -242,6 +242,7 @@ static void omap8250_restore_regs(struct uart_8250_port *up) + { + struct omap8250_priv *priv = up->port.private_data; + struct uart_8250_dma *dma = up->dma; ++ u8 mcr = serial8250_in_MCR(up); + + if (dma && dma->tx_running) { + /* +@@ -258,7 +259,7 @@ static void omap8250_restore_regs(struct uart_8250_port *up) + serial_out(up, UART_EFR, UART_EFR_ECB); + + serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); +- serial8250_out_MCR(up, UART_MCR_TCRTLR); ++ serial8250_out_MCR(up, mcr | UART_MCR_TCRTLR); + serial_out(up, UART_FCR, up->fcr); + + omap8250_update_scr(up, priv); +@@ -274,7 +275,8 @@ static void omap8250_restore_regs(struct uart_8250_port *up) + serial_out(up, UART_LCR, 0); + + /* drop TCR + TLR access, we setup XON/XOFF later */ +- serial8250_out_MCR(up, up->mcr); ++ serial8250_out_MCR(up, mcr); ++ + serial_out(up, UART_IER, up->ier); + + serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); +@@ -583,7 +585,6 @@ static int omap_8250_startup(struct uart_port *port) + + pm_runtime_get_sync(port->dev); + +- up->mcr = 0; + serial_out(up, UART_FCR, UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT); + + serial_out(up, UART_LCR, UART_LCR_WLEN8); +-- +2.35.1 + diff --git a/queue-4.9/series b/queue-4.9/series index cc829788e52..d22ec900435 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -23,3 +23,8 @@ iio-core-fix-entry-not-deleted-when-iio_register_sw_trigger_type-fails.patch kconfig-display-recursive-dependency-resolution-hint-just-once.patch nios2-add-force-for-vmlinuz.gz.patch nilfs2-fix-nilfs_sufile_mark_dirty-not-set-segment-usage-as-dirty.patch +serial-8250-8250_omap-avoid-rs485-rts-glitch-on-set_.patch +xen-platform-pci-add-missing-free_irq-in-error-path.patch +platform-x86-asus-wmi-add-missing-pci_dev_put-in-asu.patch +tcp-configurable-source-port-perturb-table-size.patch +net-usb-qmi_wwan-add-telit-0x103a-composition.patch diff --git a/queue-4.9/tcp-configurable-source-port-perturb-table-size.patch b/queue-4.9/tcp-configurable-source-port-perturb-table-size.patch new file mode 100644 index 00000000000..4e72c661e12 --- /dev/null +++ b/queue-4.9/tcp-configurable-source-port-perturb-table-size.patch @@ -0,0 +1,78 @@ +From 832fa9437583bc2590c87e2ec53cdf34d2b50340 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 14 Nov 2022 22:56:16 +0000 +Subject: tcp: configurable source port perturb table size + +From: Gleb Mazovetskiy + +[ Upstream commit aeac4ec8f46d610a10adbaeff5e2edf6a88ffc62 ] + +On embedded systems with little memory and no relevant +security concerns, it is beneficial to reduce the size +of the table. + +Reducing the size from 2^16 to 2^8 saves 255 KiB +of kernel RAM. + +Makes the table size configurable as an expert option. + +The size was previously increased from 2^8 to 2^16 +in commit 4c2c8f03a5ab ("tcp: increase source port perturb table to +2^16"). + +Signed-off-by: Gleb Mazovetskiy +Reviewed-by: Kuniyuki Iwashima +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + net/ipv4/Kconfig | 10 ++++++++++ + net/ipv4/inet_hashtables.c | 10 +++++----- + 2 files changed, 15 insertions(+), 5 deletions(-) + +diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig +index 4d265d4a0dbe..29be5bcbe7ac 100644 +--- a/net/ipv4/Kconfig ++++ b/net/ipv4/Kconfig +@@ -371,6 +371,16 @@ config INET_IPCOMP + + If unsure, say Y. + ++config INET_TABLE_PERTURB_ORDER ++ int "INET: Source port perturbation table size (as power of 2)" if EXPERT ++ default 16 ++ help ++ Source port perturbation table size (as power of 2) for ++ RFC 6056 3.3.4. Algorithm 4: Double-Hash Port Selection Algorithm. ++ ++ The default is almost always what you want. ++ Only change this if you know what you are doing. ++ + config INET_XFRM_TUNNEL + tristate + select INET_TUNNEL +diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c +index db47e1c407d9..9958850b6cee 100644 +--- a/net/ipv4/inet_hashtables.c ++++ b/net/ipv4/inet_hashtables.c +@@ -541,13 +541,13 @@ EXPORT_SYMBOL_GPL(inet_unhash); + * Note that we use 32bit integers (vs RFC 'short integers') + * because 2^16 is not a multiple of num_ephemeral and this + * property might be used by clever attacker. ++ * + * RFC claims using TABLE_LENGTH=10 buckets gives an improvement, though +- * attacks were since demonstrated, thus we use 65536 instead to really +- * give more isolation and privacy, at the expense of 256kB of kernel +- * memory. ++ * attacks were since demonstrated, thus we use 65536 by default instead ++ * to really give more isolation and privacy, at the expense of 256kB ++ * of kernel memory. + */ +-#define INET_TABLE_PERTURB_SHIFT 16 +-#define INET_TABLE_PERTURB_SIZE (1 << INET_TABLE_PERTURB_SHIFT) ++#define INET_TABLE_PERTURB_SIZE (1 << CONFIG_INET_TABLE_PERTURB_ORDER) + static u32 *table_perturb; + + int __inet_hash_connect(struct inet_timewait_death_row *death_row, +-- +2.35.1 + diff --git a/queue-4.9/xen-platform-pci-add-missing-free_irq-in-error-path.patch b/queue-4.9/xen-platform-pci-add-missing-free_irq-in-error-path.patch new file mode 100644 index 00000000000..c34f259a439 --- /dev/null +++ b/queue-4.9/xen-platform-pci-add-missing-free_irq-in-error-path.patch @@ -0,0 +1,55 @@ +From 88db12cdfbafdf8ce4c7dc6d6f29c8667a660748 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 14 Nov 2022 19:21:24 +0800 +Subject: xen/platform-pci: add missing free_irq() in error path + +From: ruanjinjie + +[ Upstream commit c53717e1e3f0d0f9129b2e0dbc6dcc5e0a8132e9 ] + +free_irq() is missing in case of error in platform_pci_probe(), fix that. + +Signed-off-by: ruanjinjie +Reviewed-by: Oleksandr Tyshchenko +Link: https://lore.kernel.org/r/20221114112124.1965611-1-ruanjinjie@huawei.com +Signed-off-by: Juergen Gross +Signed-off-by: Sasha Levin +--- + drivers/xen/platform-pci.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/drivers/xen/platform-pci.c b/drivers/xen/platform-pci.c +index cf9666680c8c..20365b01c36b 100644 +--- a/drivers/xen/platform-pci.c ++++ b/drivers/xen/platform-pci.c +@@ -149,7 +149,7 @@ static int platform_pci_probe(struct pci_dev *pdev, + if (ret) { + dev_warn(&pdev->dev, "Unable to set the evtchn callback " + "err=%d\n", ret); +- goto out; ++ goto irq_out; + } + } + +@@ -157,7 +157,7 @@ static int platform_pci_probe(struct pci_dev *pdev, + grant_frames = alloc_xen_mmio(PAGE_SIZE * max_nr_gframes); + ret = gnttab_setup_auto_xlat_frames(grant_frames); + if (ret) +- goto out; ++ goto irq_out; + ret = gnttab_init(); + if (ret) + goto grant_out; +@@ -165,6 +165,9 @@ static int platform_pci_probe(struct pci_dev *pdev, + return 0; + grant_out: + gnttab_free_auto_xlat_frames(); ++irq_out: ++ if (!xen_have_vector_callback) ++ free_irq(pdev->irq, pdev); + out: + pci_release_region(pdev, 0); + mem_out: +-- +2.35.1 + -- 2.47.3