From: Sasha Levin Date: Fri, 5 Jun 2020 01:12:21 +0000 (-0400) Subject: Fixes for 4.9 X-Git-Tag: v5.7.1~16 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4ed674e8a43dfdc2fad2d1037e1a494ccefb2b6a;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 4.9 Signed-off-by: Sasha Levin --- diff --git a/queue-4.9/arc-fix-iccm-dccm-runtime-size-checks.patch b/queue-4.9/arc-fix-iccm-dccm-runtime-size-checks.patch new file mode 100644 index 00000000000..d1f7a86ef98 --- /dev/null +++ b/queue-4.9/arc-fix-iccm-dccm-runtime-size-checks.patch @@ -0,0 +1,54 @@ +From 9753591e13364e51e90826de72feb24d9195ced3 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 2 Apr 2020 20:54:28 +0300 +Subject: ARC: Fix ICCM & DCCM runtime size checks + +From: Eugeniy Paltsev + +[ Upstream commit 43900edf67d7ef3ac8909854d75b8a1fba2d570c ] + +As of today the ICCM and DCCM size checks are incorrectly using +mismatched units (KiB checked against bytes). The CONFIG_ARC_DCCM_SZ +and CONFIG_ARC_ICCM_SZ are in KiB, but the size calculated in +runtime and stored in cpu->dccm.sz and cpu->iccm.sz is in bytes. + +Fix that. + +Reported-by: Paul Greco +Signed-off-by: Eugeniy Paltsev +Signed-off-by: Vineet Gupta +Signed-off-by: Sasha Levin +--- + arch/arc/kernel/setup.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c +index 9f96120eee6e..82464fae7772 100644 +--- a/arch/arc/kernel/setup.c ++++ b/arch/arc/kernel/setup.c +@@ -12,6 +12,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -333,12 +334,12 @@ static void arc_chk_core_config(void) + if ((unsigned int)__arc_dccm_base != cpu->dccm.base_addr) + panic("Linux built with incorrect DCCM Base address\n"); + +- if (CONFIG_ARC_DCCM_SZ != cpu->dccm.sz) ++ if (CONFIG_ARC_DCCM_SZ * SZ_1K != cpu->dccm.sz) + panic("Linux built with incorrect DCCM Size\n"); + #endif + + #ifdef CONFIG_ARC_HAS_ICCM +- if (CONFIG_ARC_ICCM_SZ != cpu->iccm.sz) ++ if (CONFIG_ARC_ICCM_SZ * SZ_1K != cpu->iccm.sz) + panic("Linux built with incorrect ICCM Size\n"); + #endif + +-- +2.25.1 + diff --git a/queue-4.9/net-bmac-fix-read-of-mac-address-from-rom.patch b/queue-4.9/net-bmac-fix-read-of-mac-address-from-rom.patch new file mode 100644 index 00000000000..5f4de42cddd --- /dev/null +++ b/queue-4.9/net-bmac-fix-read-of-mac-address-from-rom.patch @@ -0,0 +1,43 @@ +From cd4de0b6400b203eafbdc19b0458bd18c2ab279b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 19 May 2020 09:05:58 +0800 +Subject: net: bmac: Fix read of MAC address from ROM + +From: Jeremy Kerr + +[ Upstream commit ef01cee2ee1b369c57a936166483d40942bcc3e3 ] + +In bmac_get_station_address, We're reading two bytes at a time from ROM, +but we do that six times, resulting in 12 bytes of read & writes. This +means we will write off the end of the six-byte destination buffer. + +This change fixes the for-loop to only read/write six bytes. + +Based on a proposed fix from Finn Thain . + +Signed-off-by: Jeremy Kerr +Reported-by: Stan Johnson +Tested-by: Stan Johnson +Reported-by: Finn Thain +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/apple/bmac.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/apple/bmac.c b/drivers/net/ethernet/apple/bmac.c +index a65d7a60f116..ffa7e7e6d18d 100644 +--- a/drivers/net/ethernet/apple/bmac.c ++++ b/drivers/net/ethernet/apple/bmac.c +@@ -1187,7 +1187,7 @@ bmac_get_station_address(struct net_device *dev, unsigned char *ea) + int i; + unsigned short data; + +- for (i = 0; i < 6; i++) ++ for (i = 0; i < 3; i++) + { + reset_and_select_srom(dev); + data = read_srom(dev, i + EnetAddressOffset/2, SROMAddressBits); +-- +2.25.1 + diff --git a/queue-4.9/net-ethernet-freescale-rework-quiesce-activate-for-u.patch b/queue-4.9/net-ethernet-freescale-rework-quiesce-activate-for-u.patch new file mode 100644 index 00000000000..82a6b193bdd --- /dev/null +++ b/queue-4.9/net-ethernet-freescale-rework-quiesce-activate-for-u.patch @@ -0,0 +1,78 @@ +From 0a45d3add075ad1216de01f9cf4731a00fbc25f3 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 20 May 2020 17:53:50 +0200 +Subject: net/ethernet/freescale: rework quiesce/activate for ucc_geth + +From: Valentin Longchamp + +[ Upstream commit 79dde73cf9bcf1dd317a2667f78b758e9fe139ed ] + +ugeth_quiesce/activate are used to halt the controller when there is a +link change that requires to reconfigure the mac. + +The previous implementation called netif_device_detach(). This however +causes the initial activation of the netdevice to fail precisely because +it's detached. For details, see [1]. + +A possible workaround was the revert of commit +net: linkwatch: add check for netdevice being present to linkwatch_do_dev +However, the check introduced in the above commit is correct and shall be +kept. + +The netif_device_detach() is thus replaced with +netif_tx_stop_all_queues() that prevents any tranmission. This allows to +perform mac config change required by the link change, without detaching +the corresponding netdevice and thus not preventing its initial +activation. + +[1] https://lists.openwall.net/netdev/2020/01/08/201 + +Signed-off-by: Valentin Longchamp +Acked-by: Matteo Ghidoni +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/freescale/ucc_geth.c | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c +index 714593023bbc..af922bac19ae 100644 +--- a/drivers/net/ethernet/freescale/ucc_geth.c ++++ b/drivers/net/ethernet/freescale/ucc_geth.c +@@ -45,6 +45,7 @@ + #include + #include + #include ++#include + + #include "ucc_geth.h" + +@@ -1551,11 +1552,8 @@ static int ugeth_disable(struct ucc_geth_private *ugeth, enum comm_dir mode) + + static void ugeth_quiesce(struct ucc_geth_private *ugeth) + { +- /* Prevent any further xmits, plus detach the device. */ +- netif_device_detach(ugeth->ndev); +- +- /* Wait for any current xmits to finish. */ +- netif_tx_disable(ugeth->ndev); ++ /* Prevent any further xmits */ ++ netif_tx_stop_all_queues(ugeth->ndev); + + /* Disable the interrupt to avoid NAPI rescheduling. */ + disable_irq(ugeth->ug_info->uf_info.irq); +@@ -1568,7 +1566,10 @@ static void ugeth_activate(struct ucc_geth_private *ugeth) + { + napi_enable(&ugeth->napi); + enable_irq(ugeth->ug_info->uf_info.irq); +- netif_device_attach(ugeth->ndev); ++ ++ /* allow to xmit again */ ++ netif_tx_wake_all_queues(ugeth->ndev); ++ __netdev_watchdog_up(ugeth->ndev); + } + + /* Called every time the controller might need to be made +-- +2.25.1 + diff --git a/queue-4.9/net-ethernet-stmmac-enable-interface-clocks-on-probe.patch b/queue-4.9/net-ethernet-stmmac-enable-interface-clocks-on-probe.patch new file mode 100644 index 00000000000..99d9f59b067 --- /dev/null +++ b/queue-4.9/net-ethernet-stmmac-enable-interface-clocks-on-probe.patch @@ -0,0 +1,62 @@ +From 5998ac71bfc7706206b6b979e48c3d0bcf3d4d32 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 21 May 2020 12:49:34 +0100 +Subject: net: ethernet: stmmac: Enable interface clocks on probe for IPQ806x + +From: Jonathan McDowell + +[ Upstream commit a96ac8a0045e3cbe3e5af6d1b3c78c6c2065dec5 ] + +The ipq806x_gmac_probe() function enables the PTP clock but not the +appropriate interface clocks. This means that if the bootloader hasn't +done so attempting to bring up the interface will fail with an error +like: + +[ 59.028131] ipq806x-gmac-dwmac 37600000.ethernet: Failed to reset the dma +[ 59.028196] ipq806x-gmac-dwmac 37600000.ethernet eth1: stmmac_hw_setup: DMA engine initialization failed +[ 59.034056] ipq806x-gmac-dwmac 37600000.ethernet eth1: stmmac_open: Hw setup failed + +This patch, a slightly cleaned up version of one posted by Sergey +Sergeev in: + +https://forum.openwrt.org/t/support-for-mikrotik-rb3011uias-rm/4064/257 + +correctly enables the clock; we have already configured the source just +before this. + +Tested on a MikroTik RB3011. + +Signed-off-by: Jonathan McDowell +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c +index 11a4a81b0397..bcc5d1e16ce2 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c ++++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c +@@ -330,6 +330,19 @@ static int ipq806x_gmac_probe(struct platform_device *pdev) + /* Enable PTP clock */ + regmap_read(gmac->nss_common, NSS_COMMON_CLK_GATE, &val); + val |= NSS_COMMON_CLK_GATE_PTP_EN(gmac->id); ++ switch (gmac->phy_mode) { ++ case PHY_INTERFACE_MODE_RGMII: ++ val |= NSS_COMMON_CLK_GATE_RGMII_RX_EN(gmac->id) | ++ NSS_COMMON_CLK_GATE_RGMII_TX_EN(gmac->id); ++ break; ++ case PHY_INTERFACE_MODE_SGMII: ++ val |= NSS_COMMON_CLK_GATE_GMII_RX_EN(gmac->id) | ++ NSS_COMMON_CLK_GATE_GMII_TX_EN(gmac->id); ++ break; ++ default: ++ /* We don't get here; the switch above will have errored out */ ++ unreachable(); ++ } + regmap_write(gmac->nss_common, NSS_COMMON_CLK_GATE, val); + + if (gmac->phy_mode == PHY_INTERFACE_MODE_SGMII) { +-- +2.25.1 + diff --git a/queue-4.9/net-smsc911x-fix-runtime-pm-imbalance-on-error.patch b/queue-4.9/net-smsc911x-fix-runtime-pm-imbalance-on-error.patch new file mode 100644 index 00000000000..f9c21b2cab7 --- /dev/null +++ b/queue-4.9/net-smsc911x-fix-runtime-pm-imbalance-on-error.patch @@ -0,0 +1,63 @@ +From 999f975e2c13cb53c0aea3449d0d14f3e3a91b83 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 23 May 2020 16:08:20 +0800 +Subject: net: smsc911x: Fix runtime PM imbalance on error + +From: Dinghao Liu + +[ Upstream commit 539d39ad0c61b35f69565a037d7586deaf6d6166 ] + +Remove runtime PM usage counter decrement when the +increment function has not been called to keep the +counter balanced. + +Signed-off-by: Dinghao Liu +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/smsc/smsc911x.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c +index 4143659615e1..264136dba674 100644 +--- a/drivers/net/ethernet/smsc/smsc911x.c ++++ b/drivers/net/ethernet/smsc/smsc911x.c +@@ -2506,20 +2506,20 @@ static int smsc911x_drv_probe(struct platform_device *pdev) + + retval = smsc911x_init(dev); + if (retval < 0) +- goto out_disable_resources; ++ goto out_init_fail; + + netif_carrier_off(dev); + + retval = smsc911x_mii_init(pdev, dev); + if (retval) { + SMSC_WARN(pdata, probe, "Error %i initialising mii", retval); +- goto out_disable_resources; ++ goto out_init_fail; + } + + retval = register_netdev(dev); + if (retval) { + SMSC_WARN(pdata, probe, "Error %i registering device", retval); +- goto out_disable_resources; ++ goto out_init_fail; + } else { + SMSC_TRACE(pdata, probe, + "Network interface: \"%s\"", dev->name); +@@ -2560,9 +2560,10 @@ static int smsc911x_drv_probe(struct platform_device *pdev) + + return 0; + +-out_disable_resources: ++out_init_fail: + pm_runtime_put(&pdev->dev); + pm_runtime_disable(&pdev->dev); ++out_disable_resources: + (void)smsc911x_disable_resources(pdev); + out_enable_resources_fail: + smsc911x_free_resources(pdev); +-- +2.25.1 + diff --git a/queue-4.9/pppoe-only-process-padt-targeted-at-local-interfaces.patch b/queue-4.9/pppoe-only-process-padt-targeted-at-local-interfaces.patch new file mode 100644 index 00000000000..83f0138ae2e --- /dev/null +++ b/queue-4.9/pppoe-only-process-padt-targeted-at-local-interfaces.patch @@ -0,0 +1,40 @@ +From aefec316b0461da5adbcf320c26154b56f8bf6f8 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 14 May 2020 12:15:39 +0200 +Subject: pppoe: only process PADT targeted at local interfaces +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Guillaume Nault + +We don't want to disconnect a session because of a stray PADT arriving +while the interface is in promiscuous mode. +Furthermore, multicast and broadcast packets make no sense here, so +only PACKET_HOST is accepted. + +Reported-by: David Balažic +Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") +Signed-off-by: Guillaume Nault +Signed-off-by: David S. Miller +--- + drivers/net/ppp/pppoe.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c +index fa8f7c40a384..804c52c35f07 100644 +--- a/drivers/net/ppp/pppoe.c ++++ b/drivers/net/ppp/pppoe.c +@@ -494,6 +494,9 @@ static int pppoe_disc_rcv(struct sk_buff *skb, struct net_device *dev, + if (!skb) + goto out; + ++ if (skb->pkt_type != PACKET_HOST) ++ goto abort; ++ + if (!pskb_may_pull(skb, sizeof(struct pppoe_hdr))) + goto abort; + +-- +2.25.1 + diff --git a/queue-4.9/series b/queue-4.9/series index 29792e7f364..ca3b625e6ff 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -3,3 +3,10 @@ usb-gadget-f_uac2-fix-error-handling-in-afunc_bind-again.patch esp6-fix-memleak-on-error-path-in-esp6_input.patch spi-dw-use-smp_mb-to-avoid-sending-spi-data-error.patch s390-ftrace-save-traced-function-caller.patch +arc-fix-iccm-dccm-runtime-size-checks.patch +x86-mmiotrace-use-cpumask_available-for-cpumask_var_.patch +net-bmac-fix-read-of-mac-address-from-rom.patch +net-ethernet-freescale-rework-quiesce-activate-for-u.patch +net-ethernet-stmmac-enable-interface-clocks-on-probe.patch +net-smsc911x-fix-runtime-pm-imbalance-on-error.patch +pppoe-only-process-padt-targeted-at-local-interfaces.patch diff --git a/queue-4.9/x86-mmiotrace-use-cpumask_available-for-cpumask_var_.patch b/queue-4.9/x86-mmiotrace-use-cpumask_available-for-cpumask_var_.patch new file mode 100644 index 00000000000..202f3a6d0ef --- /dev/null +++ b/queue-4.9/x86-mmiotrace-use-cpumask_available-for-cpumask_var_.patch @@ -0,0 +1,67 @@ +From 45365c8c51c47e11d2a0d785281fa817b124434f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 8 Apr 2020 13:53:23 -0700 +Subject: x86/mmiotrace: Use cpumask_available() for cpumask_var_t variables + +From: Nathan Chancellor + +[ Upstream commit d7110a26e5905ec2fe3fc88bc6a538901accb72b ] + +When building with Clang + -Wtautological-compare and +CONFIG_CPUMASK_OFFSTACK unset: + + arch/x86/mm/mmio-mod.c:375:6: warning: comparison of array 'downed_cpus' + equal to a null pointer is always false [-Wtautological-pointer-compare] + if (downed_cpus == NULL && + ^~~~~~~~~~~ ~~~~ + arch/x86/mm/mmio-mod.c:405:6: warning: comparison of array 'downed_cpus' + equal to a null pointer is always false [-Wtautological-pointer-compare] + if (downed_cpus == NULL || cpumask_weight(downed_cpus) == 0) + ^~~~~~~~~~~ ~~~~ + 2 warnings generated. + +Commit + + f7e30f01a9e2 ("cpumask: Add helper cpumask_available()") + +added cpumask_available() to fix warnings of this nature. Use that here +so that clang does not warn regardless of CONFIG_CPUMASK_OFFSTACK's +value. + +Reported-by: Sedat Dilek +Signed-off-by: Nathan Chancellor +Signed-off-by: Borislav Petkov +Reviewed-by: Nick Desaulniers +Acked-by: Steven Rostedt (VMware) +Link: https://github.com/ClangBuiltLinux/linux/issues/982 +Link: https://lkml.kernel.org/r/20200408205323.44490-1-natechancellor@gmail.com +Signed-off-by: Sasha Levin +--- + arch/x86/mm/mmio-mod.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/arch/x86/mm/mmio-mod.c b/arch/x86/mm/mmio-mod.c +index bef36622e408..abd4fa587ca4 100644 +--- a/arch/x86/mm/mmio-mod.c ++++ b/arch/x86/mm/mmio-mod.c +@@ -385,7 +385,7 @@ static void enter_uniprocessor(void) + int cpu; + int err; + +- if (downed_cpus == NULL && ++ if (!cpumask_available(downed_cpus) && + !alloc_cpumask_var(&downed_cpus, GFP_KERNEL)) { + pr_notice("Failed to allocate mask\n"); + goto out; +@@ -415,7 +415,7 @@ static void leave_uniprocessor(void) + int cpu; + int err; + +- if (downed_cpus == NULL || cpumask_weight(downed_cpus) == 0) ++ if (!cpumask_available(downed_cpus) || cpumask_weight(downed_cpus) == 0) + return; + pr_notice("Re-enabling CPUs...\n"); + for_each_cpu(cpu, downed_cpus) { +-- +2.25.1 +