From: Sasha Levin Date: Sun, 24 Oct 2021 21:48:50 +0000 (-0400) Subject: Fixes for 4.19 X-Git-Tag: v4.4.290~40 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1d4b2081854eb11a2eb5f91bdb84b7a00e5b8095;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 4.19 Signed-off-by: Sasha Levin --- diff --git a/queue-4.19/alsa-hda-avoid-write-to-statests-if-controller-is-in.patch b/queue-4.19/alsa-hda-avoid-write-to-statests-if-controller-is-in.patch new file mode 100644 index 00000000000..0cbcdcf9bcd --- /dev/null +++ b/queue-4.19/alsa-hda-avoid-write-to-statests-if-controller-is-in.patch @@ -0,0 +1,66 @@ +From 6dbf1785679def8dd289f8800a680e49b652ad20 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 12 Oct 2021 17:29:35 +0300 +Subject: ALSA: hda: avoid write to STATESTS if controller is in reset + +From: Kai Vehmanen + +[ Upstream commit b37a15188eae9d4c49c5bb035e0c8d4058e4d9b3 ] + +The snd_hdac_bus_reset_link() contains logic to clear STATESTS register +before performing controller reset. This code dates back to an old +bugfix in commit e8a7f136f5ed ("[ALSA] hda-intel - Improve HD-audio +codec probing robustness"). Originally the code was added to +azx_reset(). + +The code was moved around in commit a41d122449be ("ALSA: hda - Embed bus +into controller object") and ended up to snd_hdac_bus_reset_link() and +called primarily via snd_hdac_bus_init_chip(). + +The logic to clear STATESTS is correct when snd_hdac_bus_init_chip() is +called when controller is not in reset. In this case, STATESTS can be +cleared. This can be useful e.g. when forcing a controller reset to retry +codec probe. A normal non-power-on reset will not clear the bits. + +However, this old logic is problematic when controller is already in +reset. The HDA specification states that controller must be taken out of +reset before writing to registers other than GCTL.CRST (1.0a spec, +3.3.7). The write to STATESTS in snd_hdac_bus_reset_link() will be lost +if the controller is already in reset per the HDA specification mentioned. + +This has been harmless on older hardware. On newer generation of Intel +PCIe based HDA controllers, if configured to report issues, this write +will emit an unsupported request error. If ACPI Platform Error Interface +(APEI) is enabled in kernel, this will end up to kernel log. + +Fix the code in snd_hdac_bus_reset_link() to only clear the STATESTS if +the function is called when controller is not in reset. Otherwise +clearing the bits is not possible and should be skipped. + +Signed-off-by: Kai Vehmanen +Link: https://lore.kernel.org/r/20211012142935.3731820-1-kai.vehmanen@linux.intel.com +Signed-off-by: Takashi Iwai +Signed-off-by: Sasha Levin +--- + sound/hda/hdac_controller.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/sound/hda/hdac_controller.c b/sound/hda/hdac_controller.c +index 74244d8e2909..a65e8c0c630d 100644 +--- a/sound/hda/hdac_controller.c ++++ b/sound/hda/hdac_controller.c +@@ -390,8 +390,9 @@ int snd_hdac_bus_reset_link(struct hdac_bus *bus, bool full_reset) + if (!full_reset) + goto skip_reset; + +- /* clear STATESTS */ +- snd_hdac_chip_writew(bus, STATESTS, STATESTS_INT_MASK); ++ /* clear STATESTS if not in reset */ ++ if (snd_hdac_chip_readb(bus, GCTL) & AZX_GCTL_RESET) ++ snd_hdac_chip_writew(bus, STATESTS, STATESTS_INT_MASK); + + /* reset controller */ + snd_hdac_bus_enter_link_reset(bus); +-- +2.33.0 + diff --git a/queue-4.19/arm-dts-spear3xx-fix-gmac-node.patch b/queue-4.19/arm-dts-spear3xx-fix-gmac-node.patch new file mode 100644 index 00000000000..1182c5711a0 --- /dev/null +++ b/queue-4.19/arm-dts-spear3xx-fix-gmac-node.patch @@ -0,0 +1,41 @@ +From 048923116e4e10b0ff99c5ae2724d67fc45e8803 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 8 Oct 2021 12:34:40 +0200 +Subject: ARM: dts: spear3xx: Fix gmac node + +From: Herve Codina + +[ Upstream commit 6636fec29cdf6665bd219564609e8651f6ddc142 ] + +On SPEAr3xx, ethernet driver is not compatible with the SPEAr600 +one. +Indeed, SPEAr3xx uses an earlier version of this IP (v3.40) and +needs some driver tuning compare to SPEAr600. + +The v3.40 IP support was added to stmmac driver and this patch +fixes this issue and use the correct compatible string for +SPEAr3xx + +Signed-off-by: Herve Codina +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + arch/arm/boot/dts/spear3xx.dtsi | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm/boot/dts/spear3xx.dtsi b/arch/arm/boot/dts/spear3xx.dtsi +index 118135d75899..4e4166d96b26 100644 +--- a/arch/arm/boot/dts/spear3xx.dtsi ++++ b/arch/arm/boot/dts/spear3xx.dtsi +@@ -53,7 +53,7 @@ + }; + + gmac: eth@e0800000 { +- compatible = "st,spear600-gmac"; ++ compatible = "snps,dwmac-3.40a"; + reg = <0xe0800000 0x8000>; + interrupts = <23 22>; + interrupt-names = "macirq", "eth_wake_irq"; +-- +2.33.0 + diff --git a/queue-4.19/btrfs-deal-with-errors-when-checking-if-a-dir-entry-.patch b/queue-4.19/btrfs-deal-with-errors-when-checking-if-a-dir-entry-.patch new file mode 100644 index 00000000000..b4d7fc7a013 --- /dev/null +++ b/queue-4.19/btrfs-deal-with-errors-when-checking-if-a-dir-entry-.patch @@ -0,0 +1,121 @@ +From f00db63383aec36cbed66a21abb15556f221d81f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 1 Oct 2021 13:52:30 +0100 +Subject: btrfs: deal with errors when checking if a dir entry exists during + log replay + +From: Filipe Manana + +[ Upstream commit 77a5b9e3d14cbce49ceed2766b2003c034c066dc ] + +Currently inode_in_dir() ignores errors returned from +btrfs_lookup_dir_index_item() and from btrfs_lookup_dir_item(), treating +any errors as if the directory entry does not exists in the fs/subvolume +tree, which is obviously not correct, as we can get errors such as -EIO +when reading extent buffers while searching the fs/subvolume's tree. + +Fix that by making inode_in_dir() return the errors and making its only +caller, add_inode_ref(), deal with returned errors as well. + +Signed-off-by: Filipe Manana +Reviewed-by: David Sterba +Signed-off-by: David Sterba +Signed-off-by: Sasha Levin +--- + fs/btrfs/tree-log.c | 47 ++++++++++++++++++++++++++++----------------- + 1 file changed, 29 insertions(+), 18 deletions(-) + +diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c +index e0fc8c094846..c856c32cc926 100644 +--- a/fs/btrfs/tree-log.c ++++ b/fs/btrfs/tree-log.c +@@ -881,9 +881,11 @@ out: + } + + /* +- * helper function to see if a given name and sequence number found +- * in an inode back reference are already in a directory and correctly +- * point to this inode ++ * See if a given name and sequence number found in an inode back reference are ++ * already in a directory and correctly point to this inode. ++ * ++ * Returns: < 0 on error, 0 if the directory entry does not exists and 1 if it ++ * exists. + */ + static noinline int inode_in_dir(struct btrfs_root *root, + struct btrfs_path *path, +@@ -892,29 +894,35 @@ static noinline int inode_in_dir(struct btrfs_root *root, + { + struct btrfs_dir_item *di; + struct btrfs_key location; +- int match = 0; ++ int ret = 0; + + di = btrfs_lookup_dir_index_item(NULL, root, path, dirid, + index, name, name_len, 0); +- if (di && !IS_ERR(di)) { ++ if (IS_ERR(di)) { ++ if (PTR_ERR(di) != -ENOENT) ++ ret = PTR_ERR(di); ++ goto out; ++ } else if (di) { + btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location); + if (location.objectid != objectid) + goto out; +- } else ++ } else { + goto out; +- btrfs_release_path(path); ++ } + ++ btrfs_release_path(path); + di = btrfs_lookup_dir_item(NULL, root, path, dirid, name, name_len, 0); +- if (di && !IS_ERR(di)) { +- btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location); +- if (location.objectid != objectid) +- goto out; +- } else ++ if (IS_ERR(di)) { ++ ret = PTR_ERR(di); + goto out; +- match = 1; ++ } else if (di) { ++ btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location); ++ if (location.objectid == objectid) ++ ret = 1; ++ } + out: + btrfs_release_path(path); +- return match; ++ return ret; + } + + /* +@@ -1421,10 +1429,12 @@ static noinline int add_inode_ref(struct btrfs_trans_handle *trans, + if (ret) + goto out; + +- /* if we already have a perfect match, we're done */ +- if (!inode_in_dir(root, path, btrfs_ino(BTRFS_I(dir)), +- btrfs_ino(BTRFS_I(inode)), ref_index, +- name, namelen)) { ++ ret = inode_in_dir(root, path, btrfs_ino(BTRFS_I(dir)), ++ btrfs_ino(BTRFS_I(inode)), ref_index, ++ name, namelen); ++ if (ret < 0) { ++ goto out; ++ } else if (ret == 0) { + /* + * look for a conflicting back reference in the + * metadata. if we find one we have to unlink that name +@@ -1483,6 +1493,7 @@ static noinline int add_inode_ref(struct btrfs_trans_handle *trans, + + btrfs_update_inode(trans, root, inode); + } ++ /* Else, ret == 1, we already have a perfect match, we're done. */ + + ref_ptr = (unsigned long)(ref_ptr + ref_struct_size) + namelen; + kfree(name); +-- +2.33.0 + diff --git a/queue-4.19/gcc-plugins-structleak-add-makefile-var-for-disablin.patch b/queue-4.19/gcc-plugins-structleak-add-makefile-var-for-disablin.patch new file mode 100644 index 00000000000..1f210794a8a --- /dev/null +++ b/queue-4.19/gcc-plugins-structleak-add-makefile-var-for-disablin.patch @@ -0,0 +1,40 @@ +From 033ef1796775226ee278b6d538ade688dc610c05 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 29 Sep 2021 14:27:09 -0700 +Subject: gcc-plugins/structleak: add makefile var for disabling structleak + +From: Brendan Higgins + +[ Upstream commit 554afc3b9797511e3245864e32aebeb6abbab1e3 ] + +KUnit and structleak don't play nice, so add a makefile variable for +enabling structleak when it complains. + +Co-developed-by: Kees Cook +Signed-off-by: Kees Cook +Signed-off-by: Brendan Higgins +Reviewed-by: David Gow +Signed-off-by: Shuah Khan +Signed-off-by: Sasha Levin +--- + scripts/Makefile.gcc-plugins | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/scripts/Makefile.gcc-plugins b/scripts/Makefile.gcc-plugins +index 0a482f341576..93ca13e4f8f9 100644 +--- a/scripts/Makefile.gcc-plugins ++++ b/scripts/Makefile.gcc-plugins +@@ -17,6 +17,10 @@ gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_STRUCTLEAK_VERBOSE) \ + += -fplugin-arg-structleak_plugin-verbose + gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL) \ + += -fplugin-arg-structleak_plugin-byref-all ++ifdef CONFIG_GCC_PLUGIN_STRUCTLEAK ++ DISABLE_STRUCTLEAK_PLUGIN += -fplugin-arg-structleak_plugin-disable ++endif ++export DISABLE_STRUCTLEAK_PLUGIN + gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_STRUCTLEAK) \ + += -DSTRUCTLEAK_PLUGIN + +-- +2.33.0 + diff --git a/queue-4.19/isdn-misdn-fix-sleeping-function-called-from-invalid.patch b/queue-4.19/isdn-misdn-fix-sleeping-function-called-from-invalid.patch new file mode 100644 index 00000000000..8e33dc2a4f6 --- /dev/null +++ b/queue-4.19/isdn-misdn-fix-sleeping-function-called-from-invalid.patch @@ -0,0 +1,80 @@ +From 3e7300b185655500adf8ad0ef4ea3c58d8e58d4c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 9 Oct 2021 11:33:49 +0000 +Subject: isdn: mISDN: Fix sleeping function called from invalid context + +From: Zheyu Ma + +[ Upstream commit 6510e80a0b81b5d814e3aea6297ba42f5e76f73c ] + +The driver can call card->isac.release() function from an atomic +context. + +Fix this by calling this function after releasing the lock. + +The following log reveals it: + +[ 44.168226 ] BUG: sleeping function called from invalid context at kernel/workqueue.c:3018 +[ 44.168941 ] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 5475, name: modprobe +[ 44.169574 ] INFO: lockdep is turned off. +[ 44.169899 ] irq event stamp: 0 +[ 44.170160 ] hardirqs last enabled at (0): [<0000000000000000>] 0x0 +[ 44.170627 ] hardirqs last disabled at (0): [] copy_process+0x132d/0x3e00 +[ 44.171240 ] softirqs last enabled at (0): [] copy_process+0x135a/0x3e00 +[ 44.171852 ] softirqs last disabled at (0): [<0000000000000000>] 0x0 +[ 44.172318 ] Preemption disabled at: +[ 44.172320 ] [] nj_release+0x69/0x500 [netjet] +[ 44.174441 ] Call Trace: +[ 44.174630 ] dump_stack_lvl+0xa8/0xd1 +[ 44.174912 ] dump_stack+0x15/0x17 +[ 44.175166 ] ___might_sleep+0x3a2/0x510 +[ 44.175459 ] ? nj_release+0x69/0x500 [netjet] +[ 44.175791 ] __might_sleep+0x82/0xe0 +[ 44.176063 ] ? start_flush_work+0x20/0x7b0 +[ 44.176375 ] start_flush_work+0x33/0x7b0 +[ 44.176672 ] ? trace_irq_enable_rcuidle+0x85/0x170 +[ 44.177034 ] ? kasan_quarantine_put+0xaa/0x1f0 +[ 44.177372 ] ? kasan_quarantine_put+0xaa/0x1f0 +[ 44.177711 ] __flush_work+0x11a/0x1a0 +[ 44.177991 ] ? flush_work+0x20/0x20 +[ 44.178257 ] ? lock_release+0x13c/0x8f0 +[ 44.178550 ] ? __kasan_check_write+0x14/0x20 +[ 44.178872 ] ? do_raw_spin_lock+0x148/0x360 +[ 44.179187 ] ? read_lock_is_recursive+0x20/0x20 +[ 44.179530 ] ? __kasan_check_read+0x11/0x20 +[ 44.179846 ] ? do_raw_spin_unlock+0x55/0x900 +[ 44.180168 ] ? ____kasan_slab_free+0x116/0x140 +[ 44.180505 ] ? _raw_spin_unlock_irqrestore+0x41/0x60 +[ 44.180878 ] ? skb_queue_purge+0x1a3/0x1c0 +[ 44.181189 ] ? kfree+0x13e/0x290 +[ 44.181438 ] flush_work+0x17/0x20 +[ 44.181695 ] mISDN_freedchannel+0xe8/0x100 +[ 44.182006 ] isac_release+0x210/0x260 [mISDNipac] +[ 44.182366 ] nj_release+0xf6/0x500 [netjet] +[ 44.182685 ] nj_remove+0x48/0x70 [netjet] +[ 44.182989 ] pci_device_remove+0xa9/0x250 + +Signed-off-by: Zheyu Ma +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/isdn/hardware/mISDN/netjet.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/isdn/hardware/mISDN/netjet.c b/drivers/isdn/hardware/mISDN/netjet.c +index 448370da2c3f..4a342daac98d 100644 +--- a/drivers/isdn/hardware/mISDN/netjet.c ++++ b/drivers/isdn/hardware/mISDN/netjet.c +@@ -963,8 +963,8 @@ nj_release(struct tiger_hw *card) + nj_disable_hwirq(card); + mode_tiger(&card->bc[0], ISDN_P_NONE); + mode_tiger(&card->bc[1], ISDN_P_NONE); +- card->isac.release(&card->isac); + spin_unlock_irqrestore(&card->lock, flags); ++ card->isac.release(&card->isac); + release_region(card->base, card->base_s); + card->base_s = 0; + } +-- +2.33.0 + diff --git a/queue-4.19/net-stmmac-add-support-for-dwmac-3.40a.patch b/queue-4.19/net-stmmac-add-support-for-dwmac-3.40a.patch new file mode 100644 index 00000000000..a292bfda794 --- /dev/null +++ b/queue-4.19/net-stmmac-add-support-for-dwmac-3.40a.patch @@ -0,0 +1,53 @@ +From cd0e0ae77243b744729dde0cca42dbe878883948 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 8 Oct 2021 12:34:39 +0200 +Subject: net: stmmac: add support for dwmac 3.40a + +From: Herve Codina + +[ Upstream commit 9cb1d19f47fafad7dcf7c8564e633440c946cfd7 ] + +dwmac 3.40a is an old ip version that can be found on SPEAr3xx soc. + +Signed-off-by: Herve Codina +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c | 1 + + drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 8 ++++++++ + 2 files changed, 9 insertions(+) + +diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c +index fad503820e04..b3365b34cac7 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c ++++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c +@@ -71,6 +71,7 @@ err_remove_config_dt: + + static const struct of_device_id dwmac_generic_match[] = { + { .compatible = "st,spear600-gmac"}, ++ { .compatible = "snps,dwmac-3.40a"}, + { .compatible = "snps,dwmac-3.50a"}, + { .compatible = "snps,dwmac-3.610"}, + { .compatible = "snps,dwmac-3.70a"}, +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +index 2b800ce1d5bf..05f5084158bf 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +@@ -469,6 +469,14 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac) + plat->pmt = 1; + } + ++ if (of_device_is_compatible(np, "snps,dwmac-3.40a")) { ++ plat->has_gmac = 1; ++ plat->enh_desc = 1; ++ plat->tx_coe = 1; ++ plat->bugged_jumbo = 1; ++ plat->pmt = 1; ++ } ++ + if (of_device_is_compatible(np, "snps,dwmac-4.00") || + of_device_is_compatible(np, "snps,dwmac-4.10a") || + of_device_is_compatible(np, "snps,dwmac-4.20a")) { +-- +2.33.0 + diff --git a/queue-4.19/platform-x86-intel_scu_ipc-update-timeout-value-in-c.patch b/queue-4.19/platform-x86-intel_scu_ipc-update-timeout-value-in-c.patch new file mode 100644 index 00000000000..e60d2d55d37 --- /dev/null +++ b/queue-4.19/platform-x86-intel_scu_ipc-update-timeout-value-in-c.patch @@ -0,0 +1,43 @@ +From 75a889d6ed7d7134301544a7f7454d652db8f3e6 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 28 Sep 2021 03:19:34 -0700 +Subject: platform/x86: intel_scu_ipc: Update timeout value in comment + +From: Prashant Malani + +[ Upstream commit a0c5814b9933f25ecb6de169483c5b88cf632bca ] + +The comment decribing the IPC timeout hadn't been updated when the +actual timeout was changed from 3 to 5 seconds in +commit a7d53dbbc70a ("platform/x86: intel_scu_ipc: Increase virtual +timeout from 3 to 5 seconds") . + +Since the value is anyway updated to 10s now, take this opportunity to +update the value in the comment too. + +Signed-off-by: Prashant Malani +Cc: Benson Leung +Reviewed-by: Mika Westerberg +Link: https://lore.kernel.org/r/20210928101932.2543937-4-pmalani@chromium.org +Signed-off-by: Hans de Goede +Signed-off-by: Sasha Levin +--- + drivers/platform/x86/intel_scu_ipc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/platform/x86/intel_scu_ipc.c b/drivers/platform/x86/intel_scu_ipc.c +index 54f131bec192..0d28576756ac 100644 +--- a/drivers/platform/x86/intel_scu_ipc.c ++++ b/drivers/platform/x86/intel_scu_ipc.c +@@ -183,7 +183,7 @@ static inline int busy_loop(struct intel_scu_ipc_dev *scu) + return 0; + } + +-/* Wait till ipc ioc interrupt is received or timeout in 3 HZ */ ++/* Wait till ipc ioc interrupt is received or timeout in 10 HZ */ + static inline int ipc_wait_for_interrupt(struct intel_scu_ipc_dev *scu) + { + int status; +-- +2.33.0 + diff --git a/queue-4.19/series b/queue-4.19/series index b713c5750e3..38e484934cd 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -23,3 +23,10 @@ mm-slub-fix-mismatch-between-reconstructed-freelist-depth-and-cnt.patch nfc-nci-fix-the-uaf-of-rf_conn_info-object.patch isdn-cpai-check-ctr-cnr-to-avoid-array-index-out-of-bound.patch netfilter-kconfig-use-default-y-instead-of-m-for-bool-config-option.patch +gcc-plugins-structleak-add-makefile-var-for-disablin.patch +btrfs-deal-with-errors-when-checking-if-a-dir-entry-.patch +net-stmmac-add-support-for-dwmac-3.40a.patch +arm-dts-spear3xx-fix-gmac-node.patch +isdn-misdn-fix-sleeping-function-called-from-invalid.patch +platform-x86-intel_scu_ipc-update-timeout-value-in-c.patch +alsa-hda-avoid-write-to-statests-if-controller-is-in.patch