From: Sasha Levin Date: Fri, 23 Nov 2018 12:45:57 +0000 (-0500) Subject: AUTOSEL patches for 4.9 X-Git-Tag: v3.18.127~29 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eb18cdda74dbbcd9b8dde688e0327282cb8a78c8;p=thirdparty%2Fkernel%2Fstable-queue.git AUTOSEL patches for 4.9 Signed-off-by: Sasha Levin --- diff --git a/queue-4.9/arm64-percpu-initialize-ret-in-the-default-case.patch b/queue-4.9/arm64-percpu-initialize-ret-in-the-default-case.patch new file mode 100644 index 00000000000..fc9d9333c85 --- /dev/null +++ b/queue-4.9/arm64-percpu-initialize-ret-in-the-default-case.patch @@ -0,0 +1,70 @@ +From abc7b33f4754d7e06ca1e5fe4bb2fa2efa402b52 Mon Sep 17 00:00:00 2001 +From: Nathan Chancellor +Date: Tue, 25 Sep 2018 12:44:59 -0700 +Subject: arm64: percpu: Initialize ret in the default case + +[ Upstream commit b5bb425871186303e6936fa2581521bdd1964a58 ] + +Clang warns that if the default case is taken, ret will be +uninitialized. + +./arch/arm64/include/asm/percpu.h:196:2: warning: variable 'ret' is used +uninitialized whenever switch default is taken +[-Wsometimes-uninitialized] + default: + ^~~~~~~ +./arch/arm64/include/asm/percpu.h:200:9: note: uninitialized use occurs +here + return ret; + ^~~ +./arch/arm64/include/asm/percpu.h:157:19: note: initialize the variable +'ret' to silence this warning + unsigned long ret, loop; + ^ + = 0 + +This warning appears several times while building the erofs filesystem. +While it's not strictly wrong, the BUILD_BUG will prevent this from +becoming a true problem. Initialize ret to 0 in the default case right +before the BUILD_BUG to silence all of these warnings. + +Reported-by: Prasad Sodagudi +Signed-off-by: Nathan Chancellor +Reviewed-by: Nick Desaulniers +Signed-off-by: Dennis Zhou +Signed-off-by: Sasha Levin +--- + arch/arm64/include/asm/percpu.h | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/arch/arm64/include/asm/percpu.h b/arch/arm64/include/asm/percpu.h +index 0d551576eb57..4724b8f0b625 100644 +--- a/arch/arm64/include/asm/percpu.h ++++ b/arch/arm64/include/asm/percpu.h +@@ -92,6 +92,7 @@ static inline unsigned long __percpu_##op(void *ptr, \ + : [val] "Ir" (val)); \ + break; \ + default: \ ++ ret = 0; \ + BUILD_BUG(); \ + } \ + \ +@@ -121,6 +122,7 @@ static inline unsigned long __percpu_read(void *ptr, int size) + ret = ACCESS_ONCE(*(u64 *)ptr); + break; + default: ++ ret = 0; + BUILD_BUG(); + } + +@@ -190,6 +192,7 @@ static inline unsigned long __percpu_xchg(void *ptr, unsigned long val, + : [val] "r" (val)); + break; + default: ++ ret = 0; + BUILD_BUG(); + } + +-- +2.17.1 + diff --git a/queue-4.9/cifs-don-t-dereference-smb_file_target-before-null-c.patch b/queue-4.9/cifs-don-t-dereference-smb_file_target-before-null-c.patch new file mode 100644 index 00000000000..5b36c7361d0 --- /dev/null +++ b/queue-4.9/cifs-don-t-dereference-smb_file_target-before-null-c.patch @@ -0,0 +1,54 @@ +From f0e04b84014538997573ebda92a38426e90743fd Mon Sep 17 00:00:00 2001 +From: Colin Ian King +Date: Thu, 1 Nov 2018 13:14:30 +0000 +Subject: cifs: don't dereference smb_file_target before null check + +[ Upstream commit 8c6c9bed8773375b1d54ccca2911ec892c59db5d ] + +There is a null check on dst_file->private data which suggests +it can be potentially null. However, before this check, pointer +smb_file_target is derived from dst_file->private and dereferenced +in the call to tlink_tcon, hence there is a potential null pointer +deference. + +Fix this by assigning smb_file_target and target_tcon after the +null pointer sanity checks. + +Detected by CoverityScan, CID#1475302 ("Dereference before null check") + +Fixes: 04b38d601239 ("vfs: pull btrfs clone API to vfs layer") +Signed-off-by: Colin Ian King +Signed-off-by: Steve French +Signed-off-by: Sasha Levin +--- + fs/cifs/cifsfs.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c +index 87658f63b374..be84d49f2406 100644 +--- a/fs/cifs/cifsfs.c ++++ b/fs/cifs/cifsfs.c +@@ -927,8 +927,8 @@ static int cifs_clone_file_range(struct file *src_file, loff_t off, + struct inode *src_inode = file_inode(src_file); + struct inode *target_inode = file_inode(dst_file); + struct cifsFileInfo *smb_file_src = src_file->private_data; +- struct cifsFileInfo *smb_file_target = dst_file->private_data; +- struct cifs_tcon *target_tcon = tlink_tcon(smb_file_target->tlink); ++ struct cifsFileInfo *smb_file_target; ++ struct cifs_tcon *target_tcon; + unsigned int xid; + int rc; + +@@ -942,6 +942,9 @@ static int cifs_clone_file_range(struct file *src_file, loff_t off, + goto out; + } + ++ smb_file_target = dst_file->private_data; ++ target_tcon = tlink_tcon(smb_file_target->tlink); ++ + /* + * Note: cifs case is easier than btrfs since server responsible for + * checks for proper open modes and file type and if it wants +-- +2.17.1 + diff --git a/queue-4.9/clk-fixed-factor-fix-of_node_get-put-imbalance.patch b/queue-4.9/clk-fixed-factor-fix-of_node_get-put-imbalance.patch new file mode 100644 index 00000000000..5ac18204b7a --- /dev/null +++ b/queue-4.9/clk-fixed-factor-fix-of_node_get-put-imbalance.patch @@ -0,0 +1,36 @@ +From b76346f9784e39bc6fcc44754dff44d66d66afb0 Mon Sep 17 00:00:00 2001 +From: Ricardo Ribalda Delgado +Date: Thu, 1 Nov 2018 14:15:49 +0100 +Subject: clk: fixed-factor: fix of_node_get-put imbalance + +[ Upstream commit f98e8a572bddbf27032114127d2fcc78fa5e6a9d ] + +When the fixed factor clock is created by devicetree, +of_clk_add_provider is called. Add a call to +of_clk_del_provider in the remove function to balance +it out. + +Reported-by: Alan Tull +Fixes: 971451b3b15d ("clk: fixed-factor: Convert into a module platform driver") +Signed-off-by: Ricardo Ribalda Delgado +Signed-off-by: Stephen Boyd +Signed-off-by: Sasha Levin +--- + drivers/clk/clk-fixed-factor.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/clk/clk-fixed-factor.c b/drivers/clk/clk-fixed-factor.c +index 20724abd38bd..7df6b5b1e7ee 100644 +--- a/drivers/clk/clk-fixed-factor.c ++++ b/drivers/clk/clk-fixed-factor.c +@@ -210,6 +210,7 @@ static int of_fixed_factor_clk_remove(struct platform_device *pdev) + { + struct clk *clk = platform_get_drvdata(pdev); + ++ of_clk_del_provider(pdev->dev.of_node); + clk_unregister_fixed_factor(clk); + + return 0; +-- +2.17.1 + diff --git a/queue-4.9/clk-fixed-rate-fix-of_node_get-put-imbalance.patch b/queue-4.9/clk-fixed-rate-fix-of_node_get-put-imbalance.patch new file mode 100644 index 00000000000..2ace1d5c386 --- /dev/null +++ b/queue-4.9/clk-fixed-rate-fix-of_node_get-put-imbalance.patch @@ -0,0 +1,35 @@ +From 4da6f9f8c1b9311f4b684c4adc7619816ca5bfa6 Mon Sep 17 00:00:00 2001 +From: Alan Tull +Date: Thu, 18 Oct 2018 14:54:11 -0500 +Subject: clk: fixed-rate: fix of_node_get-put imbalance + +[ Upstream commit 52091c256bdcad0d01e2852a63f19cd2cce6af96 ] + +When the fixed rate clock is created by devicetree, +of_clk_add_provider is called. Add a call to +of_clk_del_provider in the remove function to balance +it out. + +Signed-off-by: Alan Tull +Fixes: 435779fe1336 ("clk: fixed-rate: Convert into a module platform driver") +Signed-off-by: Stephen Boyd +Signed-off-by: Sasha Levin +--- + drivers/clk/clk-fixed-rate.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/clk/clk-fixed-rate.c b/drivers/clk/clk-fixed-rate.c +index b5c46b3f8764..6d6475c32ee5 100644 +--- a/drivers/clk/clk-fixed-rate.c ++++ b/drivers/clk/clk-fixed-rate.c +@@ -200,6 +200,7 @@ static int of_fixed_clk_remove(struct platform_device *pdev) + { + struct clk *clk = platform_get_drvdata(pdev); + ++ of_clk_del_provider(pdev->dev.of_node); + clk_unregister_fixed_rate(clk); + + return 0; +-- +2.17.1 + diff --git a/queue-4.9/clk-samsung-exynos5420-enable-peris-clocks-for-suspe.patch b/queue-4.9/clk-samsung-exynos5420-enable-peris-clocks-for-suspe.patch new file mode 100644 index 00000000000..acb79610299 --- /dev/null +++ b/queue-4.9/clk-samsung-exynos5420-enable-peris-clocks-for-suspe.patch @@ -0,0 +1,34 @@ +From bd9642d54452b27fdf55e346bdf85fc9a6ddaf0d Mon Sep 17 00:00:00 2001 +From: Marek Szyprowski +Date: Mon, 24 Sep 2018 13:01:20 +0200 +Subject: clk: samsung: exynos5420: Enable PERIS clocks for suspend + +[ Upstream commit b33228029d842269e17bba591609e83ed422005d ] + +Ensure that clocks for core SoC modules (including TZPC0..9 modules) +are enabled for suspend/resume cycle. This fixes suspend/resume +support on Exynos5422-based Odroid XU3/XU4 boards. + +Suggested-by: Joonyoung Shim +Signed-off-by: Marek Szyprowski +Signed-off-by: Sylwester Nawrocki +Signed-off-by: Sasha Levin +--- + drivers/clk/samsung/clk-exynos5420.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c +index 07fb667e258f..13c09a740840 100644 +--- a/drivers/clk/samsung/clk-exynos5420.c ++++ b/drivers/clk/samsung/clk-exynos5420.c +@@ -280,6 +280,7 @@ static const struct samsung_clk_reg_dump exynos5420_set_clksrc[] = { + { .offset = GATE_BUS_TOP, .value = 0xffffffff, }, + { .offset = GATE_BUS_DISP1, .value = 0xffffffff, }, + { .offset = GATE_IP_PERIC, .value = 0xffffffff, }, ++ { .offset = GATE_IP_PERIS, .value = 0xffffffff, }, + }; + + static int exynos5420_clk_suspend(void) +-- +2.17.1 + diff --git a/queue-4.9/drm-edid-add-6-bpc-quirk-for-boe-panel.patch b/queue-4.9/drm-edid-add-6-bpc-quirk-for-boe-panel.patch new file mode 100644 index 00000000000..2b4dddc4989 --- /dev/null +++ b/queue-4.9/drm-edid-add-6-bpc-quirk-for-boe-panel.patch @@ -0,0 +1,42 @@ +From 64af6d96fa2cdf0b0bdf1bb45829a148803c9ce4 Mon Sep 17 00:00:00 2001 +From: "Lee, Shawn C" +Date: Sun, 28 Oct 2018 22:49:33 -0700 +Subject: drm/edid: Add 6 bpc quirk for BOE panel. + +[ Upstream commit 922dceff8dc1fb4dafc9af78139ba65671408103 ] + +BOE panel (ID: 0x0771) that reports "DFP 1.x compliant TMDS". +But it's 6bpc panel only instead of 8 bpc. + +Add panel ID to edid quirk list and set 6 bpc as default to +work around this issue. + +Cc: Jani Nikula +Cc: Maarten Lankhorst +Cc: Gustavo Padovan +Cc: Cooper Chiou +Signed-off-by: Lee, Shawn C > +Signed-off-by: Daniel Vetter +Link: https://patchwork.freedesktop.org/patch/msgid/1540792173-7288-1-git-send-email-shawn.c.lee@intel.com +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/drm_edid.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c +index 83d2f43b5a2f..c93dcfedc219 100644 +--- a/drivers/gpu/drm/drm_edid.c ++++ b/drivers/gpu/drm/drm_edid.c +@@ -116,6 +116,9 @@ static const struct edid_quirk { + /* SDC panel of Lenovo B50-80 reports 8 bpc, but is a 6 bpc panel */ + { "SDC", 0x3652, EDID_QUIRK_FORCE_6BPC }, + ++ /* BOE model 0x0771 reports 8 bpc, but is a 6 bpc panel */ ++ { "BOE", 0x0771, EDID_QUIRK_FORCE_6BPC }, ++ + /* Belinea 10 15 55 */ + { "MAX", 1516, EDID_QUIRK_PREFER_LARGE_60 }, + { "MAX", 0x77e, EDID_QUIRK_PREFER_LARGE_60 }, +-- +2.17.1 + diff --git a/queue-4.9/fs-exofs-fix-potential-memory-leak-in-mount-option-p.patch b/queue-4.9/fs-exofs-fix-potential-memory-leak-in-mount-option-p.patch new file mode 100644 index 00000000000..0eefb188b37 --- /dev/null +++ b/queue-4.9/fs-exofs-fix-potential-memory-leak-in-mount-option-p.patch @@ -0,0 +1,44 @@ +From 2e1d969a2e341bf984f67c371971296f559fe46c Mon Sep 17 00:00:00 2001 +From: Chengguang Xu +Date: Wed, 13 Jun 2018 12:05:13 +0800 +Subject: fs/exofs: fix potential memory leak in mount option parsing + +[ Upstream commit 515f1867addaba49c1c6ac73abfaffbc192c1db4 ] + +There are some cases can cause memory leak when parsing +option 'osdname'. + +Signed-off-by: Chengguang Xu +Signed-off-by: Al Viro +Signed-off-by: Sasha Levin +--- + fs/exofs/super.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/fs/exofs/super.c b/fs/exofs/super.c +index 1076a4233b39..0c48138486dc 100644 +--- a/fs/exofs/super.c ++++ b/fs/exofs/super.c +@@ -100,6 +100,7 @@ static int parse_options(char *options, struct exofs_mountopt *opts) + token = match_token(p, tokens, args); + switch (token) { + case Opt_name: ++ kfree(opts->dev_name); + opts->dev_name = match_strdup(&args[0]); + if (unlikely(!opts->dev_name)) { + EXOFS_ERR("Error allocating dev_name"); +@@ -868,8 +869,10 @@ static struct dentry *exofs_mount(struct file_system_type *type, + int ret; + + ret = parse_options(data, &opts); +- if (ret) ++ if (ret) { ++ kfree(opts.dev_name); + return ERR_PTR(ret); ++ } + + if (!opts.dev_name) + opts.dev_name = dev_name; +-- +2.17.1 + diff --git a/queue-4.9/hfs-prevent-btree-data-loss-on-root-split.patch b/queue-4.9/hfs-prevent-btree-data-loss-on-root-split.patch new file mode 100644 index 00000000000..d16f5750fe4 --- /dev/null +++ b/queue-4.9/hfs-prevent-btree-data-loss-on-root-split.patch @@ -0,0 +1,49 @@ +From 62a9d4428b899ed0cf5fa20f62b975fd1a8cc617 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ernesto=20A=2E=20Fern=C3=A1ndez?= + +Date: Tue, 30 Oct 2018 15:06:07 -0700 +Subject: hfs: prevent btree data loss on root split +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +[ Upstream commit d057c036672f33d43a5f7344acbb08cf3a8a0c09 ] + +This bug is triggered whenever hfs_brec_update_parent() needs to split +the root node. The height of the btree is not increased, which leaves +the new node orphaned and its records lost. It is not possible for this +to happen on a valid hfs filesystem because the index nodes have fixed +length keys. + +For reasons I ignore, the hfs module does have support for a number of +hfsplus features. A corrupt btree header may report variable length +keys and trigger this bug, so it's better to fix it. + +Link: http://lkml.kernel.org/r/9750b1415685c4adca10766895f6d5ef12babdb0.1535682463.git.ernesto.mnd.fernandez@gmail.com +Signed-off-by: Ernesto A. Fernández +Cc: Christoph Hellwig +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Sasha Levin +--- + fs/hfs/brec.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/fs/hfs/brec.c b/fs/hfs/brec.c +index 2a6f3c67cb3f..2e713673df42 100644 +--- a/fs/hfs/brec.c ++++ b/fs/hfs/brec.c +@@ -424,6 +424,10 @@ skip: + if (new_node) { + __be32 cnid; + ++ if (!new_node->parent) { ++ hfs_btree_inc_height(tree); ++ new_node->parent = tree->root; ++ } + fd->bnode = hfs_bnode_find(tree, new_node->parent); + /* create index key and entry */ + hfs_bnode_read_key(new_node, fd->search_key, 14); +-- +2.17.1 + diff --git a/queue-4.9/hfsplus-prevent-btree-data-loss-on-root-split.patch b/queue-4.9/hfsplus-prevent-btree-data-loss-on-root-split.patch new file mode 100644 index 00000000000..031bbafe4a2 --- /dev/null +++ b/queue-4.9/hfsplus-prevent-btree-data-loss-on-root-split.patch @@ -0,0 +1,63 @@ +From 350d0e0f4210ba3f6d3a590969bb131d50f4420f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ernesto=20A=2E=20Fern=C3=A1ndez?= + +Date: Tue, 30 Oct 2018 15:06:00 -0700 +Subject: hfsplus: prevent btree data loss on root split +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +[ Upstream commit 0a3021d4f5295aa073c7bf5c5e4de60a2e292578 ] + +Creating, renaming or deleting a file may cause catalog corruption and +data loss. This bug is randomly triggered by xfstests generic/027, but +here is a faster reproducer: + + truncate -s 50M fs.iso + mkfs.hfsplus fs.iso + mount fs.iso /mnt + i=100 + while [ $i -le 150 ]; do + touch /mnt/$i &>/dev/null + ((++i)) + done + i=100 + while [ $i -le 150 ]; do + mv /mnt/$i /mnt/$(perl -e "print $i x82") &>/dev/null + ((++i)) + done + umount /mnt + fsck.hfsplus -n fs.iso + +The bug is triggered whenever hfs_brec_update_parent() needs to split the +root node. The height of the btree is not increased, which leaves the new +node orphaned and its records lost. + +Link: http://lkml.kernel.org/r/26d882184fc43043a810114258f45277752186c7.1535682461.git.ernesto.mnd.fernandez@gmail.com +Signed-off-by: Ernesto A. Fernández +Cc: Christoph Hellwig +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Sasha Levin +--- + fs/hfsplus/brec.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/fs/hfsplus/brec.c b/fs/hfsplus/brec.c +index 754fdf8c6356..1002a0c08319 100644 +--- a/fs/hfsplus/brec.c ++++ b/fs/hfsplus/brec.c +@@ -427,6 +427,10 @@ skip: + if (new_node) { + __be32 cnid; + ++ if (!new_node->parent) { ++ hfs_btree_inc_height(tree); ++ new_node->parent = tree->root; ++ } + fd->bnode = hfs_bnode_find(tree, new_node->parent); + /* create index key and entry */ + hfs_bnode_read_key(new_node, fd->search_key, 14); +-- +2.17.1 + diff --git a/queue-4.9/hwmon-ibmpowernv-remove-bogus-__init-annotations.patch b/queue-4.9/hwmon-ibmpowernv-remove-bogus-__init-annotations.patch new file mode 100644 index 00000000000..08e9d05dd57 --- /dev/null +++ b/queue-4.9/hwmon-ibmpowernv-remove-bogus-__init-annotations.patch @@ -0,0 +1,53 @@ +From e4f4c650c3e980a676178cf38c1493b897449f60 Mon Sep 17 00:00:00 2001 +From: Geert Uytterhoeven +Date: Sun, 28 Oct 2018 18:16:51 +0100 +Subject: hwmon: (ibmpowernv) Remove bogus __init annotations + +[ Upstream commit e3e61f01d755188cb6c2dcf5a244b9c0937c258e ] + +If gcc decides not to inline make_sensor_label(): + + WARNING: vmlinux.o(.text+0x4df549c): Section mismatch in reference from the function .create_device_attrs() to the function .init.text:.make_sensor_label() + The function .create_device_attrs() references + the function __init .make_sensor_label(). + This is often because .create_device_attrs lacks a __init + annotation or the annotation of .make_sensor_label is wrong. + +As .probe() can be called after freeing of __init memory, all __init +annotiations in the driver are bogus, and should be removed. + +Signed-off-by: Geert Uytterhoeven +Signed-off-by: Guenter Roeck +Signed-off-by: Sasha Levin +--- + drivers/hwmon/ibmpowernv.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +diff --git a/drivers/hwmon/ibmpowernv.c b/drivers/hwmon/ibmpowernv.c +index 6d2e6605751c..18b3c8f258bf 100644 +--- a/drivers/hwmon/ibmpowernv.c ++++ b/drivers/hwmon/ibmpowernv.c +@@ -114,7 +114,7 @@ static ssize_t show_label(struct device *dev, struct device_attribute *devattr, + return sprintf(buf, "%s\n", sdata->label); + } + +-static int __init get_logical_cpu(int hwcpu) ++static int get_logical_cpu(int hwcpu) + { + int cpu; + +@@ -125,9 +125,8 @@ static int __init get_logical_cpu(int hwcpu) + return -ENOENT; + } + +-static void __init make_sensor_label(struct device_node *np, +- struct sensor_data *sdata, +- const char *label) ++static void make_sensor_label(struct device_node *np, ++ struct sensor_data *sdata, const char *label) + { + u32 id; + size_t n; +-- +2.17.1 + diff --git a/queue-4.9/i2c-omap-enable-for-arch_k3.patch b/queue-4.9/i2c-omap-enable-for-arch_k3.patch new file mode 100644 index 00000000000..5a78862cba4 --- /dev/null +++ b/queue-4.9/i2c-omap-enable-for-arch_k3.patch @@ -0,0 +1,33 @@ +From c4f2ce8eb5f4a53c3088e4e70ab16902cc29b3d1 Mon Sep 17 00:00:00 2001 +From: Vignesh R +Date: Fri, 9 Nov 2018 16:44:11 +0530 +Subject: i2c: omap: Enable for ARCH_K3 + +[ Upstream commit 5b277402deac0691226a947df71c581686bd4020 ] + +Allow I2C_OMAP to be built for K3 platforms. + +Signed-off-by: Vignesh R +Reviewed-by: Grygorii Strashko +Signed-off-by: Wolfram Sang +Signed-off-by: Sasha Levin +--- + drivers/i2c/busses/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig +index d252276feadf..94669d96bd19 100644 +--- a/drivers/i2c/busses/Kconfig ++++ b/drivers/i2c/busses/Kconfig +@@ -706,7 +706,7 @@ config I2C_OCORES + + config I2C_OMAP + tristate "OMAP I2C adapter" +- depends on ARCH_OMAP ++ depends on ARCH_OMAP || ARCH_K3 + default y if MACH_OMAP_H3 || MACH_OMAP_OSK + help + If you say yes to this option, support will be included for the +-- +2.17.1 + diff --git a/queue-4.9/lib-raid6-fix-arm64-test-build.patch b/queue-4.9/lib-raid6-fix-arm64-test-build.patch new file mode 100644 index 00000000000..c1073b37103 --- /dev/null +++ b/queue-4.9/lib-raid6-fix-arm64-test-build.patch @@ -0,0 +1,46 @@ +From 3b2d7cf331c97741f8869920f0318109c9ce7b9d Mon Sep 17 00:00:00 2001 +From: Jeremy Linton +Date: Mon, 5 Nov 2018 18:14:41 -0600 +Subject: lib/raid6: Fix arm64 test build + +[ Upstream commit 313a06e636808387822af24c507cba92703568b1 ] + +The lib/raid6/test fails to build the neon objects +on arm64 because the correct machine type is 'aarch64'. + +Once this is correctly enabled, the neon recovery objects +need to be added to the build. + +Reviewed-by: Ard Biesheuvel +Signed-off-by: Jeremy Linton +Signed-off-by: Catalin Marinas +Signed-off-by: Sasha Levin +--- + lib/raid6/test/Makefile | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/lib/raid6/test/Makefile b/lib/raid6/test/Makefile +index 2c7b60edea04..1faeef0c30b9 100644 +--- a/lib/raid6/test/Makefile ++++ b/lib/raid6/test/Makefile +@@ -26,7 +26,7 @@ ifeq ($(ARCH),arm) + CFLAGS += -I../../../arch/arm/include -mfpu=neon + HAS_NEON = yes + endif +-ifeq ($(ARCH),arm64) ++ifeq ($(ARCH),aarch64) + CFLAGS += -I../../../arch/arm64/include + HAS_NEON = yes + endif +@@ -40,7 +40,7 @@ ifeq ($(IS_X86),yes) + gcc -c -x assembler - >&/dev/null && \ + rm ./-.o && echo -DCONFIG_AS_AVX512=1) + else ifeq ($(HAS_NEON),yes) +- OBJS += neon.o neon1.o neon2.o neon4.o neon8.o ++ OBJS += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o + CFLAGS += -DCONFIG_KERNEL_MODE_NEON=1 + else + HAS_ALTIVEC := $(shell printf '\#include \nvector int a;\n' |\ +-- +2.17.1 + diff --git a/queue-4.9/netfilter-ipset-actually-allow-allowable-cidr-0-in-h.patch b/queue-4.9/netfilter-ipset-actually-allow-allowable-cidr-0-in-h.patch new file mode 100644 index 00000000000..341529450aa --- /dev/null +++ b/queue-4.9/netfilter-ipset-actually-allow-allowable-cidr-0-in-h.patch @@ -0,0 +1,90 @@ +From d36f251ec3eeb143691ee1d58ff4cd9be6bde396 Mon Sep 17 00:00:00 2001 +From: Eric Westbrook +Date: Tue, 28 Aug 2018 15:14:42 -0600 +Subject: netfilter: ipset: actually allow allowable CIDR 0 in + hash:net,port,net + +[ Upstream commit 886503f34d63e681662057448819edb5b1057a97 ] + +Allow /0 as advertised for hash:net,port,net sets. + +For "hash:net,port,net", ipset(8) says that "either subnet +is permitted to be a /0 should you wish to match port +between all destinations." + +Make that statement true. + +Before: + + # ipset create cidrzero hash:net,port,net + # ipset add cidrzero 0.0.0.0/0,12345,0.0.0.0/0 + ipset v6.34: The value of the CIDR parameter of the IP address is invalid + + # ipset create cidrzero6 hash:net,port,net family inet6 + # ipset add cidrzero6 ::/0,12345,::/0 + ipset v6.34: The value of the CIDR parameter of the IP address is invalid + +After: + + # ipset create cidrzero hash:net,port,net + # ipset add cidrzero 0.0.0.0/0,12345,0.0.0.0/0 + # ipset test cidrzero 192.168.205.129,12345,172.16.205.129 + 192.168.205.129,tcp:12345,172.16.205.129 is in set cidrzero. + + # ipset create cidrzero6 hash:net,port,net family inet6 + # ipset add cidrzero6 ::/0,12345,::/0 + # ipset test cidrzero6 fe80::1,12345,ff00::1 + fe80::1,tcp:12345,ff00::1 is in set cidrzero6. + +See also: + + https://bugzilla.kernel.org/show_bug.cgi?id=200897 + https://github.com/ewestbrook/linux/commit/df7ff6efb0934ab6acc11f003ff1a7580d6c1d9c + +Signed-off-by: Eric Westbrook +Signed-off-by: Jozsef Kadlecsik +Signed-off-by: Pablo Neira Ayuso +Signed-off-by: Sasha Levin +--- + net/netfilter/ipset/ip_set_hash_netportnet.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/net/netfilter/ipset/ip_set_hash_netportnet.c b/net/netfilter/ipset/ip_set_hash_netportnet.c +index 9a14c237830f..b259a5814965 100644 +--- a/net/netfilter/ipset/ip_set_hash_netportnet.c ++++ b/net/netfilter/ipset/ip_set_hash_netportnet.c +@@ -213,13 +213,13 @@ hash_netportnet4_uadt(struct ip_set *set, struct nlattr *tb[], + + if (tb[IPSET_ATTR_CIDR]) { + e.cidr[0] = nla_get_u8(tb[IPSET_ATTR_CIDR]); +- if (!e.cidr[0] || e.cidr[0] > HOST_MASK) ++ if (e.cidr[0] > HOST_MASK) + return -IPSET_ERR_INVALID_CIDR; + } + + if (tb[IPSET_ATTR_CIDR2]) { + e.cidr[1] = nla_get_u8(tb[IPSET_ATTR_CIDR2]); +- if (!e.cidr[1] || e.cidr[1] > HOST_MASK) ++ if (e.cidr[1] > HOST_MASK) + return -IPSET_ERR_INVALID_CIDR; + } + +@@ -492,13 +492,13 @@ hash_netportnet6_uadt(struct ip_set *set, struct nlattr *tb[], + + if (tb[IPSET_ATTR_CIDR]) { + e.cidr[0] = nla_get_u8(tb[IPSET_ATTR_CIDR]); +- if (!e.cidr[0] || e.cidr[0] > HOST_MASK) ++ if (e.cidr[0] > HOST_MASK) + return -IPSET_ERR_INVALID_CIDR; + } + + if (tb[IPSET_ATTR_CIDR2]) { + e.cidr[1] = nla_get_u8(tb[IPSET_ATTR_CIDR2]); +- if (!e.cidr[1] || e.cidr[1] > HOST_MASK) ++ if (e.cidr[1] > HOST_MASK) + return -IPSET_ERR_INVALID_CIDR; + } + +-- +2.17.1 + diff --git a/queue-4.9/netfilter-ipset-correct-rcu_dereference-call-in-ip_s.patch b/queue-4.9/netfilter-ipset-correct-rcu_dereference-call-in-ip_s.patch new file mode 100644 index 00000000000..68bdf8efb5d --- /dev/null +++ b/queue-4.9/netfilter-ipset-correct-rcu_dereference-call-in-ip_s.patch @@ -0,0 +1,39 @@ +From ed92911db6251dbe81568e735ef2838c62bf7139 Mon Sep 17 00:00:00 2001 +From: Jozsef Kadlecsik +Date: Fri, 19 Oct 2018 19:35:19 +0200 +Subject: netfilter: ipset: Correct rcu_dereference() call in + ip_set_put_comment() + +[ Upstream commit 17b8b74c0f8dbf9b9e3301f9ca5b65dd1c079951 ] + +The function is called when rcu_read_lock() is held and not +when rcu_read_lock_bh() is held. + +Signed-off-by: Jozsef Kadlecsik +Signed-off-by: Pablo Neira Ayuso +Signed-off-by: Sasha Levin +--- + include/linux/netfilter/ipset/ip_set_comment.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/include/linux/netfilter/ipset/ip_set_comment.h b/include/linux/netfilter/ipset/ip_set_comment.h +index 8d0248525957..9f34204978e4 100644 +--- a/include/linux/netfilter/ipset/ip_set_comment.h ++++ b/include/linux/netfilter/ipset/ip_set_comment.h +@@ -41,11 +41,11 @@ ip_set_init_comment(struct ip_set_comment *comment, + rcu_assign_pointer(comment->c, c); + } + +-/* Used only when dumping a set, protected by rcu_read_lock_bh() */ ++/* Used only when dumping a set, protected by rcu_read_lock() */ + static inline int + ip_set_put_comment(struct sk_buff *skb, struct ip_set_comment *comment) + { +- struct ip_set_comment_rcu *c = rcu_dereference_bh(comment->c); ++ struct ip_set_comment_rcu *c = rcu_dereference(comment->c); + + if (!c) + return 0; +-- +2.17.1 + diff --git a/queue-4.9/netfilter-xt_idletimer-add-sysfs-filename-checking-r.patch b/queue-4.9/netfilter-xt_idletimer-add-sysfs-filename-checking-r.patch new file mode 100644 index 00000000000..f7b5065a63b --- /dev/null +++ b/queue-4.9/netfilter-xt_idletimer-add-sysfs-filename-checking-r.patch @@ -0,0 +1,82 @@ +From d5c629bdd389df697b1ec1482514a5810a586636 Mon Sep 17 00:00:00 2001 +From: Taehee Yoo +Date: Sun, 21 Oct 2018 00:00:08 +0900 +Subject: netfilter: xt_IDLETIMER: add sysfs filename checking routine + +[ Upstream commit 54451f60c8fa061af9051a53be9786393947367c ] + +When IDLETIMER rule is added, sysfs file is created under +/sys/class/xt_idletimer/timers/ +But some label name shouldn't be used. +".", "..", "power", "uevent", "subsystem", etc... +So that sysfs filename checking routine is needed. + +test commands: + %iptables -I INPUT -j IDLETIMER --timeout 1 --label "power" + +splat looks like: +[95765.423132] sysfs: cannot create duplicate filename '/devices/virtual/xt_idletimer/timers/power' +[95765.433418] CPU: 0 PID: 8446 Comm: iptables Not tainted 4.19.0-rc6+ #20 +[95765.449755] Call Trace: +[95765.449755] dump_stack+0xc9/0x16b +[95765.449755] ? show_regs_print_info+0x5/0x5 +[95765.449755] sysfs_warn_dup+0x74/0x90 +[95765.449755] sysfs_add_file_mode_ns+0x352/0x500 +[95765.449755] sysfs_create_file_ns+0x179/0x270 +[95765.449755] ? sysfs_add_file_mode_ns+0x500/0x500 +[95765.449755] ? idletimer_tg_checkentry+0x3e5/0xb1b [xt_IDLETIMER] +[95765.449755] ? rcu_read_lock_sched_held+0x114/0x130 +[95765.449755] ? __kmalloc_track_caller+0x211/0x2b0 +[95765.449755] ? memcpy+0x34/0x50 +[95765.449755] idletimer_tg_checkentry+0x4e2/0xb1b [xt_IDLETIMER] +[ ... ] + +Fixes: 0902b469bd25 ("netfilter: xtables: idletimer target implementation") +Signed-off-by: Taehee Yoo +Signed-off-by: Pablo Neira Ayuso +Signed-off-by: Sasha Levin +--- + net/netfilter/xt_IDLETIMER.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/net/netfilter/xt_IDLETIMER.c b/net/netfilter/xt_IDLETIMER.c +index bb5d6a058fb7..921c9bd7e1e7 100644 +--- a/net/netfilter/xt_IDLETIMER.c ++++ b/net/netfilter/xt_IDLETIMER.c +@@ -116,6 +116,22 @@ static void idletimer_tg_expired(unsigned long data) + schedule_work(&timer->work); + } + ++static int idletimer_check_sysfs_name(const char *name, unsigned int size) ++{ ++ int ret; ++ ++ ret = xt_check_proc_name(name, size); ++ if (ret < 0) ++ return ret; ++ ++ if (!strcmp(name, "power") || ++ !strcmp(name, "subsystem") || ++ !strcmp(name, "uevent")) ++ return -EINVAL; ++ ++ return 0; ++} ++ + static int idletimer_tg_create(struct idletimer_tg_info *info) + { + int ret; +@@ -126,6 +142,10 @@ static int idletimer_tg_create(struct idletimer_tg_info *info) + goto out; + } + ++ ret = idletimer_check_sysfs_name(info->label, sizeof(info->label)); ++ if (ret < 0) ++ goto out_free_timer; ++ + sysfs_attr_init(&info->timer->attr.attr); + info->timer->attr.attr.name = kstrdup(info->label, GFP_KERNEL); + if (!info->timer->attr.attr.name) { +-- +2.17.1 + diff --git a/queue-4.9/platform-x86-acerhdf-add-bios-entry-for-gateway-lt31.patch b/queue-4.9/platform-x86-acerhdf-add-bios-entry-for-gateway-lt31.patch new file mode 100644 index 00000000000..548fee64338 --- /dev/null +++ b/queue-4.9/platform-x86-acerhdf-add-bios-entry-for-gateway-lt31.patch @@ -0,0 +1,41 @@ +From 42fc3b6765b929eaebde0103d5d142f9da7556ec Mon Sep 17 00:00:00 2001 +From: Paul Gortmaker +Date: Thu, 20 Sep 2018 21:44:19 -0400 +Subject: platform/x86: acerhdf: Add BIOS entry for Gateway LT31 v1.3307 + +[ Upstream commit 684238d79ad85c5e19a71bb5818e77e329912fbc ] + +To fix: + + acerhdf: unknown (unsupported) BIOS version Gateway /LT31 /v1.3307 , please report, aborting! + +As can be seen in the context, the BIOS registers haven't changed in +the previous versions, so the assumption is they won't have changed +in this last update for this somewhat older platform either. + +Cc: Peter Feuerer +Cc: Darren Hart +Cc: Andy Shevchenko +Signed-off-by: Paul Gortmaker +Signed-off-by: Andy Shevchenko +Reviewed-by: Peter Feuerer +Signed-off-by: Sasha Levin +--- + drivers/platform/x86/acerhdf.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/platform/x86/acerhdf.c b/drivers/platform/x86/acerhdf.c +index 2acdb0d6ea89..a0533e4e52d7 100644 +--- a/drivers/platform/x86/acerhdf.c ++++ b/drivers/platform/x86/acerhdf.c +@@ -233,6 +233,7 @@ static const struct bios_settings bios_tbl[] = { + {"Gateway", "LT31", "v1.3201", 0x55, 0x58, {0x9e, 0x00}, 0}, + {"Gateway", "LT31", "v1.3302", 0x55, 0x58, {0x9e, 0x00}, 0}, + {"Gateway", "LT31", "v1.3303t", 0x55, 0x58, {0x9e, 0x00}, 0}, ++ {"Gateway", "LT31", "v1.3307", 0x55, 0x58, {0x9e, 0x00}, 0}, + /* Packard Bell */ + {"Packard Bell", "DOA150", "v0.3104", 0x55, 0x58, {0x21, 0x00}, 0}, + {"Packard Bell", "DOA150", "v0.3105", 0x55, 0x58, {0x20, 0x00}, 0}, +-- +2.17.1 + diff --git a/queue-4.9/platform-x86-intel_telemetry-report-debugfs-failure.patch b/queue-4.9/platform-x86-intel_telemetry-report-debugfs-failure.patch new file mode 100644 index 00000000000..9177edbd11f --- /dev/null +++ b/queue-4.9/platform-x86-intel_telemetry-report-debugfs-failure.patch @@ -0,0 +1,61 @@ +From 69bf802988ca00636aff679abb5e85a006d53de7 Mon Sep 17 00:00:00 2001 +From: Rajneesh Bhardwaj +Date: Sat, 6 Oct 2018 12:21:13 +0530 +Subject: platform/x86: intel_telemetry: report debugfs failure + +[ Upstream commit 8d98b1ef368feeb7720b8b9b6f3bd93f2ad892bc ] + +On some Goldmont based systems such as ASRock J3455M the BIOS may not +enable the IPC1 device that provides access to the PMC and PUNIT. In +such scenarios, the IOSS and PSS resources from the platform device can +not be obtained and result in a invalid telemetry_plt_config which is an +internal data structure that holds platform config and is maintained by +the telemetry platform driver. + +This is also applicable to the platforms where the BIOS supports IPC1 +device under debug configurations but IPC1 is disabled by user or the +policy. + +This change allows user to know the reason for not seeing entries under +/sys/kernel/debug/telemetry/* when there is no apparent failure at boot. + +Cc: Matt Turner +Cc: Len Brown +Cc: Souvik Kumar Chakravarty +Cc: Kuppuswamy Sathyanarayanan + +Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=198779 +Acked-by: Matt Turner +Signed-off-by: Rajneesh Bhardwaj +Signed-off-by: Andy Shevchenko +Signed-off-by: Sasha Levin +--- + drivers/platform/x86/intel_telemetry_debugfs.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/drivers/platform/x86/intel_telemetry_debugfs.c b/drivers/platform/x86/intel_telemetry_debugfs.c +index ef29f18b1951..4069433a0ec6 100644 +--- a/drivers/platform/x86/intel_telemetry_debugfs.c ++++ b/drivers/platform/x86/intel_telemetry_debugfs.c +@@ -953,12 +953,16 @@ static int __init telemetry_debugfs_init(void) + debugfs_conf = (struct telemetry_debugfs_conf *)id->driver_data; + + err = telemetry_pltconfig_valid(); +- if (err < 0) ++ if (err < 0) { ++ pr_info("Invalid pltconfig, ensure IPC1 device is enabled in BIOS\n"); + return -ENODEV; ++ } + + err = telemetry_debugfs_check_evts(); +- if (err < 0) ++ if (err < 0) { ++ pr_info("telemetry_debugfs_check_evts failed\n"); + return -EINVAL; ++ } + + + #ifdef CONFIG_PM_SLEEP +-- +2.17.1 + diff --git a/queue-4.9/qed-fix-blocking-unlimited-spq-entries-leak.patch b/queue-4.9/qed-fix-blocking-unlimited-spq-entries-leak.patch new file mode 100644 index 00000000000..70d3cdd62fc --- /dev/null +++ b/queue-4.9/qed-fix-blocking-unlimited-spq-entries-leak.patch @@ -0,0 +1,146 @@ +From 43b92b639685a9aff6a95af1dc8a8ba14ee568e9 Mon Sep 17 00:00:00 2001 +From: Denis Bolotin +Date: Thu, 8 Nov 2018 16:46:09 +0200 +Subject: qed: Fix blocking/unlimited SPQ entries leak + +[ Upstream commit 2632f22ebd08da249c2017962a199a0cfb2324bf ] + +When there are no SPQ entries left in the free_pool, new entries are +allocated and are added to the unlimited list. When an entry in the pool +is available, the content is copied from the original entry, and the new +entry is sent to the device. qed_spq_post() is not aware of that, so the +additional entry is stored in the original entry as p_post_ent, which can +later be returned to the pool. + +Signed-off-by: Denis Bolotin +Signed-off-by: Michal Kalderon +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/qlogic/qed/qed_sp.h | 3 ++ + drivers/net/ethernet/qlogic/qed/qed_spq.c | 57 ++++++++++++----------- + 2 files changed, 33 insertions(+), 27 deletions(-) + +diff --git a/drivers/net/ethernet/qlogic/qed/qed_sp.h b/drivers/net/ethernet/qlogic/qed/qed_sp.h +index b2c08e4d2a9b..bae7b7f9b1cf 100644 +--- a/drivers/net/ethernet/qlogic/qed/qed_sp.h ++++ b/drivers/net/ethernet/qlogic/qed/qed_sp.h +@@ -132,6 +132,9 @@ struct qed_spq_entry { + enum spq_mode comp_mode; + struct qed_spq_comp_cb comp_cb; + struct qed_spq_comp_done comp_done; /* SPQ_MODE_EBLOCK */ ++ ++ /* Posted entry for unlimited list entry in EBLOCK mode */ ++ struct qed_spq_entry *post_ent; + }; + + struct qed_eq { +diff --git a/drivers/net/ethernet/qlogic/qed/qed_spq.c b/drivers/net/ethernet/qlogic/qed/qed_spq.c +index 9fbaf9429fd0..80c8c7f0d932 100644 +--- a/drivers/net/ethernet/qlogic/qed/qed_spq.c ++++ b/drivers/net/ethernet/qlogic/qed/qed_spq.c +@@ -595,6 +595,8 @@ static int qed_spq_add_entry(struct qed_hwfn *p_hwfn, + /* EBLOCK responsible to free the allocated p_ent */ + if (p_ent->comp_mode != QED_SPQ_MODE_EBLOCK) + kfree(p_ent); ++ else ++ p_ent->post_ent = p_en2; + + p_ent = p_en2; + } +@@ -678,6 +680,25 @@ static int qed_spq_pend_post(struct qed_hwfn *p_hwfn) + SPQ_HIGH_PRI_RESERVE_DEFAULT); + } + ++/* Avoid overriding of SPQ entries when getting out-of-order completions, by ++ * marking the completions in a bitmap and increasing the chain consumer only ++ * for the first successive completed entries. ++ */ ++static void qed_spq_comp_bmap_update(struct qed_hwfn *p_hwfn, __le16 echo) ++{ ++ u16 pos = le16_to_cpu(echo) % SPQ_RING_SIZE; ++ struct qed_spq *p_spq = p_hwfn->p_spq; ++ ++ __set_bit(pos, p_spq->p_comp_bitmap); ++ while (test_bit(p_spq->comp_bitmap_idx, ++ p_spq->p_comp_bitmap)) { ++ __clear_bit(p_spq->comp_bitmap_idx, ++ p_spq->p_comp_bitmap); ++ p_spq->comp_bitmap_idx++; ++ qed_chain_return_produced(&p_spq->chain); ++ } ++} ++ + int qed_spq_post(struct qed_hwfn *p_hwfn, + struct qed_spq_entry *p_ent, u8 *fw_return_code) + { +@@ -728,11 +749,12 @@ int qed_spq_post(struct qed_hwfn *p_hwfn, + rc = qed_spq_block(p_hwfn, p_ent, fw_return_code); + + if (p_ent->queue == &p_spq->unlimited_pending) { +- /* This is an allocated p_ent which does not need to +- * return to pool. +- */ ++ struct qed_spq_entry *p_post_ent = p_ent->post_ent; ++ + kfree(p_ent); +- return rc; ++ ++ /* Return the entry which was actually posted */ ++ p_ent = p_post_ent; + } + + if (rc) +@@ -746,7 +768,7 @@ int qed_spq_post(struct qed_hwfn *p_hwfn, + spq_post_fail2: + spin_lock_bh(&p_spq->lock); + list_del(&p_ent->list); +- qed_chain_return_produced(&p_spq->chain); ++ qed_spq_comp_bmap_update(p_hwfn, p_ent->elem.hdr.echo); + + spq_post_fail: + /* return to the free pool */ +@@ -778,25 +800,8 @@ int qed_spq_completion(struct qed_hwfn *p_hwfn, + spin_lock_bh(&p_spq->lock); + list_for_each_entry_safe(p_ent, tmp, &p_spq->completion_pending, list) { + if (p_ent->elem.hdr.echo == echo) { +- u16 pos = le16_to_cpu(echo) % SPQ_RING_SIZE; +- + list_del(&p_ent->list); +- +- /* Avoid overriding of SPQ entries when getting +- * out-of-order completions, by marking the completions +- * in a bitmap and increasing the chain consumer only +- * for the first successive completed entries. +- */ +- __set_bit(pos, p_spq->p_comp_bitmap); +- +- while (test_bit(p_spq->comp_bitmap_idx, +- p_spq->p_comp_bitmap)) { +- __clear_bit(p_spq->comp_bitmap_idx, +- p_spq->p_comp_bitmap); +- p_spq->comp_bitmap_idx++; +- qed_chain_return_produced(&p_spq->chain); +- } +- ++ qed_spq_comp_bmap_update(p_hwfn, echo); + p_spq->comp_count++; + found = p_ent; + break; +@@ -835,11 +840,9 @@ int qed_spq_completion(struct qed_hwfn *p_hwfn, + QED_MSG_SPQ, + "Got a completion without a callback function\n"); + +- if ((found->comp_mode != QED_SPQ_MODE_EBLOCK) || +- (found->queue == &p_spq->unlimited_pending)) ++ if (found->comp_mode != QED_SPQ_MODE_EBLOCK) + /* EBLOCK is responsible for returning its own entry into the +- * free list, unless it originally added the entry into the +- * unlimited pending list. ++ * free list. + */ + qed_spq_return_entry(p_hwfn, found); + +-- +2.17.1 + diff --git a/queue-4.9/qed-fix-memory-entry-leak-in-qed_init_sp_request.patch b/queue-4.9/qed-fix-memory-entry-leak-in-qed_init_sp_request.patch new file mode 100644 index 00000000000..058bb66ab71 --- /dev/null +++ b/queue-4.9/qed-fix-memory-entry-leak-in-qed_init_sp_request.patch @@ -0,0 +1,62 @@ +From c894c6e38f0588aa884fe0a097c7c8e8c470d277 Mon Sep 17 00:00:00 2001 +From: Denis Bolotin +Date: Thu, 8 Nov 2018 16:46:08 +0200 +Subject: qed: Fix memory/entry leak in qed_init_sp_request() + +[ Upstream commit 39477551df940ddb1339203817de04f5caaacf7a ] + +Free the allocated SPQ entry or return the acquired SPQ entry to the free +list in error flows. + +Signed-off-by: Denis Bolotin +Signed-off-by: Michal Kalderon +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + .../net/ethernet/qlogic/qed/qed_sp_commands.c | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c +index 2888eb0628f8..ac69ff3f7c5c 100644 +--- a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c ++++ b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c +@@ -56,7 +56,7 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn, + + case QED_SPQ_MODE_BLOCK: + if (!p_data->p_comp_data) +- return -EINVAL; ++ goto err; + + p_ent->comp_cb.cookie = p_data->p_comp_data->cookie; + break; +@@ -71,7 +71,7 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn, + default: + DP_NOTICE(p_hwfn, "Unknown SPQE completion mode %d\n", + p_ent->comp_mode); +- return -EINVAL; ++ goto err; + } + + DP_VERBOSE(p_hwfn, QED_MSG_SPQ, +@@ -85,6 +85,18 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn, + memset(&p_ent->ramrod, 0, sizeof(p_ent->ramrod)); + + return 0; ++ ++err: ++ /* qed_spq_get_entry() can either get an entry from the free_pool, ++ * or, if no entries are left, allocate a new entry and add it to ++ * the unlimited_pending list. ++ */ ++ if (p_ent->queue == &p_hwfn->p_spq->unlimited_pending) ++ kfree(p_ent); ++ else ++ qed_spq_return_entry(p_hwfn, p_ent); ++ ++ return -EINVAL; + } + + static enum tunnel_clss qed_tunn_get_clss_type(u8 type) +-- +2.17.1 + diff --git a/queue-4.9/reiserfs-propagate-errors-from-fill_with_dentries-pr.patch b/queue-4.9/reiserfs-propagate-errors-from-fill_with_dentries-pr.patch new file mode 100644 index 00000000000..b7c6f50f900 --- /dev/null +++ b/queue-4.9/reiserfs-propagate-errors-from-fill_with_dentries-pr.patch @@ -0,0 +1,76 @@ +From f8ad36c7d3ae4271d1e4585162cc0d525a9c0e37 Mon Sep 17 00:00:00 2001 +From: Jann Horn +Date: Tue, 30 Oct 2018 15:06:38 -0700 +Subject: reiserfs: propagate errors from fill_with_dentries() properly + +[ Upstream commit b10298d56c9623f9b173f19959732d3184b35f4f ] + +fill_with_dentries() failed to propagate errors up to +reiserfs_for_each_xattr() properly. Plumb them through. + +Note that reiserfs_for_each_xattr() is only used by +reiserfs_delete_xattrs() and reiserfs_chown_xattrs(). The result of +reiserfs_delete_xattrs() is discarded anyway, the only difference there is +whether a warning is printed to dmesg. The result of +reiserfs_chown_xattrs() does matter because it can block chowning of the +file to which the xattrs belong; but either way, the resulting state can +have misaligned ownership, so my patch doesn't improve things greatly. + +Credit for making me look at this code goes to Al Viro, who pointed out +that the ->actor calling convention is suboptimal and should be changed. + +Link: http://lkml.kernel.org/r/20180802163335.83312-1-jannh@google.com +Signed-off-by: Jann Horn +Reviewed-by: Andrew Morton +Cc: Jeff Mahoney +Cc: Eric Biggers +Cc: Al Viro +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Sasha Levin +--- + fs/reiserfs/xattr.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c +index 06a9fae202a7..9e313fc7fdc7 100644 +--- a/fs/reiserfs/xattr.c ++++ b/fs/reiserfs/xattr.c +@@ -184,6 +184,7 @@ struct reiserfs_dentry_buf { + struct dir_context ctx; + struct dentry *xadir; + int count; ++ int err; + struct dentry *dentries[8]; + }; + +@@ -206,6 +207,7 @@ fill_with_dentries(struct dir_context *ctx, const char *name, int namelen, + + dentry = lookup_one_len(name, dbuf->xadir, namelen); + if (IS_ERR(dentry)) { ++ dbuf->err = PTR_ERR(dentry); + return PTR_ERR(dentry); + } else if (d_really_is_negative(dentry)) { + /* A directory entry exists, but no file? */ +@@ -214,6 +216,7 @@ fill_with_dentries(struct dir_context *ctx, const char *name, int namelen, + "not found for file %pd.\n", + dentry, dbuf->xadir); + dput(dentry); ++ dbuf->err = -EIO; + return -EIO; + } + +@@ -261,6 +264,10 @@ static int reiserfs_for_each_xattr(struct inode *inode, + err = reiserfs_readdir_inode(d_inode(dir), &buf.ctx); + if (err) + break; ++ if (buf.err) { ++ err = buf.err; ++ break; ++ } + if (!buf.count) + break; + for (i = 0; !err && i < buf.count && buf.dentries[i]; i++) { +-- +2.17.1 + diff --git a/queue-4.9/s390-mm-fix-error-__node_distance-undefined.patch b/queue-4.9/s390-mm-fix-error-__node_distance-undefined.patch new file mode 100644 index 00000000000..429cbdd7623 --- /dev/null +++ b/queue-4.9/s390-mm-fix-error-__node_distance-undefined.patch @@ -0,0 +1,36 @@ +From fbffdb77cf1805104c82a5c8213b00cfc349c9b8 Mon Sep 17 00:00:00 2001 +From: "Justin M. Forbes" +Date: Wed, 31 Oct 2018 13:02:03 -0500 +Subject: s390/mm: Fix ERROR: "__node_distance" undefined! + +[ Upstream commit a541f0ebcc08ed8bc0cc492eec9a86cb280a9f24 ] + +Fixes: +ERROR: "__node_distance" [drivers/nvme/host/nvme-core.ko] undefined! +make[1]: *** [scripts/Makefile.modpost:92: __modpost] Error 1 +make: *** [Makefile:1275: modules] Error 2 ++ exit 1 + +Signed-off-by: Justin M. Forbes +Signed-off-by: Heiko Carstens +Signed-off-by: Martin Schwidefsky +Signed-off-by: Sasha Levin +--- + arch/s390/numa/numa.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/s390/numa/numa.c b/arch/s390/numa/numa.c +index 0dac2640c3a7..e73a1165d261 100644 +--- a/arch/s390/numa/numa.c ++++ b/arch/s390/numa/numa.c +@@ -53,6 +53,7 @@ int __node_distance(int a, int b) + { + return mode->distance ? mode->distance(a, b) : 0; + } ++EXPORT_SYMBOL(__node_distance); + + int numa_debug_enabled; + +-- +2.17.1 + diff --git a/queue-4.9/s390-qeth-fix-hipersockets-sniffer.patch b/queue-4.9/s390-qeth-fix-hipersockets-sniffer.patch new file mode 100644 index 00000000000..3e20527086b --- /dev/null +++ b/queue-4.9/s390-qeth-fix-hipersockets-sniffer.patch @@ -0,0 +1,70 @@ +From 98560cbfa9d1b3b083a6b40a9bf1f5f7766d3fc1 Mon Sep 17 00:00:00 2001 +From: Julian Wiedmann +Date: Fri, 2 Nov 2018 19:04:09 +0100 +Subject: s390/qeth: fix HiperSockets sniffer + +[ Upstream commit bd74a7f9cc033cf4d405788f80292268987dc0c5 ] + +Sniffing mode for L3 HiperSockets requires that no IP addresses are +registered with the HW. The preferred way to achieve this is for +userspace to delete all the IPs on the interface. But qeth is expected +to also tolerate a configuration where that is not the case, by skipping +the IP registration when in sniffer mode. +Since commit 5f78e29ceebf ("qeth: optimize IP handling in rx_mode callback") +reworked the IP registration logic in the L3 subdriver, this no longer +works. When the qeth device is set online, qeth_l3_recover_ip() now +unconditionally registers all unicast addresses from our internal +IP table. + +While we could fix this particular problem by skipping +qeth_l3_recover_ip() on a sniffer device, the more future-proof change +is to skip the IP address registration at the lowest level. This way we +a) catch any future code path that attempts to register an IP address + without considering the sniffer scenario, and +b) continue to build up our internal IP table, so that if sniffer mode + is switched off later we can operate just like normal. + +Fixes: 5f78e29ceebf ("qeth: optimize IP handling in rx_mode callback") +Signed-off-by: Julian Wiedmann +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/s390/net/qeth_l3_main.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c +index efefe075557f..6e6ba1baf9c4 100644 +--- a/drivers/s390/net/qeth_l3_main.c ++++ b/drivers/s390/net/qeth_l3_main.c +@@ -363,9 +363,6 @@ static void qeth_l3_clear_ip_htable(struct qeth_card *card, int recover) + + QETH_CARD_TEXT(card, 4, "clearip"); + +- if (recover && card->options.sniffer) +- return; +- + spin_lock_bh(&card->ip_lock); + + hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) { +@@ -823,6 +820,8 @@ static int qeth_l3_register_addr_entry(struct qeth_card *card, + int rc = 0; + int cnt = 3; + ++ if (card->options.sniffer) ++ return 0; + + if (addr->proto == QETH_PROT_IPV4) { + QETH_CARD_TEXT(card, 2, "setaddr4"); +@@ -858,6 +857,9 @@ static int qeth_l3_deregister_addr_entry(struct qeth_card *card, + { + int rc = 0; + ++ if (card->options.sniffer) ++ return 0; ++ + if (addr->proto == QETH_PROT_IPV4) { + QETH_CARD_TEXT(card, 2, "deladdr4"); + QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int)); +-- +2.17.1 + diff --git a/queue-4.9/s390-vdso-add-missing-force-to-build-targets.patch b/queue-4.9/s390-vdso-add-missing-force-to-build-targets.patch new file mode 100644 index 00000000000..aad4f5906c4 --- /dev/null +++ b/queue-4.9/s390-vdso-add-missing-force-to-build-targets.patch @@ -0,0 +1,80 @@ +From ba958b5b9ed7d93c35bfc76a36b571bb536a7884 Mon Sep 17 00:00:00 2001 +From: Vasily Gorbik +Date: Fri, 19 Oct 2018 15:37:01 +0200 +Subject: s390/vdso: add missing FORCE to build targets + +[ Upstream commit b44b136a3773d8a9c7853f8df716bd1483613cbb ] + +According to Documentation/kbuild/makefiles.txt all build targets using +if_changed should use FORCE as well. Add missing FORCE to make sure +vdso targets are rebuild properly when not just immediate prerequisites +have changed but also when build command differs. + +Reviewed-by: Philipp Rudo +Signed-off-by: Vasily Gorbik +Signed-off-by: Martin Schwidefsky +Signed-off-by: Sasha Levin +--- + arch/s390/kernel/vdso32/Makefile | 6 +++--- + arch/s390/kernel/vdso64/Makefile | 6 +++--- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/arch/s390/kernel/vdso32/Makefile b/arch/s390/kernel/vdso32/Makefile +index 6cc947896c77..ca7c3c34f94b 100644 +--- a/arch/s390/kernel/vdso32/Makefile ++++ b/arch/s390/kernel/vdso32/Makefile +@@ -32,7 +32,7 @@ UBSAN_SANITIZE := n + $(obj)/vdso32_wrapper.o : $(obj)/vdso32.so + + # link rule for the .so file, .lds has to be first +-$(obj)/vdso32.so.dbg: $(src)/vdso32.lds $(obj-vdso32) ++$(obj)/vdso32.so.dbg: $(src)/vdso32.lds $(obj-vdso32) FORCE + $(call if_changed,vdso32ld) + + # strip rule for the .so file +@@ -41,12 +41,12 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE + $(call if_changed,objcopy) + + # assembly rules for the .S files +-$(obj-vdso32): %.o: %.S ++$(obj-vdso32): %.o: %.S FORCE + $(call if_changed_dep,vdso32as) + + # actual build commands + quiet_cmd_vdso32ld = VDSO32L $@ +- cmd_vdso32ld = $(CC) $(c_flags) -Wl,-T $^ -o $@ ++ cmd_vdso32ld = $(CC) $(c_flags) -Wl,-T $(filter %.lds %.o,$^) -o $@ + quiet_cmd_vdso32as = VDSO32A $@ + cmd_vdso32as = $(CC) $(a_flags) -c -o $@ $< + +diff --git a/arch/s390/kernel/vdso64/Makefile b/arch/s390/kernel/vdso64/Makefile +index 2d54c18089eb..84af2b6b64c4 100644 +--- a/arch/s390/kernel/vdso64/Makefile ++++ b/arch/s390/kernel/vdso64/Makefile +@@ -32,7 +32,7 @@ UBSAN_SANITIZE := n + $(obj)/vdso64_wrapper.o : $(obj)/vdso64.so + + # link rule for the .so file, .lds has to be first +-$(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) ++$(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) FORCE + $(call if_changed,vdso64ld) + + # strip rule for the .so file +@@ -41,12 +41,12 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE + $(call if_changed,objcopy) + + # assembly rules for the .S files +-$(obj-vdso64): %.o: %.S ++$(obj-vdso64): %.o: %.S FORCE + $(call if_changed_dep,vdso64as) + + # actual build commands + quiet_cmd_vdso64ld = VDSO64L $@ +- cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $^ -o $@ ++ cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $(filter %.lds %.o,$^) -o $@ + quiet_cmd_vdso64as = VDSO64A $@ + cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $< + +-- +2.17.1 + diff --git a/queue-4.9/series b/queue-4.9/series new file mode 100644 index 00000000000..8611f38b7fb --- /dev/null +++ b/queue-4.9/series @@ -0,0 +1,24 @@ +cifs-don-t-dereference-smb_file_target-before-null-c.patch +reiserfs-propagate-errors-from-fill_with_dentries-pr.patch +hfs-prevent-btree-data-loss-on-root-split.patch +hfsplus-prevent-btree-data-loss-on-root-split.patch +um-give-start_idle_thread-a-return-code.patch +drm-edid-add-6-bpc-quirk-for-boe-panel.patch +platform-x86-intel_telemetry-report-debugfs-failure.patch +clk-fixed-rate-fix-of_node_get-put-imbalance.patch +fs-exofs-fix-potential-memory-leak-in-mount-option-p.patch +clk-samsung-exynos5420-enable-peris-clocks-for-suspe.patch +platform-x86-acerhdf-add-bios-entry-for-gateway-lt31.patch +arm64-percpu-initialize-ret-in-the-default-case.patch +s390-vdso-add-missing-force-to-build-targets.patch +netfilter-ipset-actually-allow-allowable-cidr-0-in-h.patch +s390-mm-fix-error-__node_distance-undefined.patch +netfilter-ipset-correct-rcu_dereference-call-in-ip_s.patch +netfilter-xt_idletimer-add-sysfs-filename-checking-r.patch +s390-qeth-fix-hipersockets-sniffer.patch +hwmon-ibmpowernv-remove-bogus-__init-annotations.patch +clk-fixed-factor-fix-of_node_get-put-imbalance.patch +lib-raid6-fix-arm64-test-build.patch +i2c-omap-enable-for-arch_k3.patch +qed-fix-memory-entry-leak-in-qed_init_sp_request.patch +qed-fix-blocking-unlimited-spq-entries-leak.patch diff --git a/queue-4.9/um-give-start_idle_thread-a-return-code.patch b/queue-4.9/um-give-start_idle_thread-a-return-code.patch new file mode 100644 index 00000000000..ea0467d7500 --- /dev/null +++ b/queue-4.9/um-give-start_idle_thread-a-return-code.patch @@ -0,0 +1,40 @@ +From 4f1006514208b891161f2290d26419d3f60a19ce Mon Sep 17 00:00:00 2001 +From: Richard Weinberger +Date: Fri, 15 Jun 2018 16:42:56 +0200 +Subject: um: Give start_idle_thread() a return code + +[ Upstream commit 7ff1e34bbdc15acab823b1ee4240e94623d50ee8 ] + +Fixes: +arch/um/os-Linux/skas/process.c:613:1: warning: control reaches end of +non-void function [-Wreturn-type] + +longjmp() never returns but gcc still warns that the end of the function +can be reached. +Add a return code and debug aid to detect this impossible case. + +Signed-off-by: Richard Weinberger +Signed-off-by: Sasha Levin +--- + arch/um/os-Linux/skas/process.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c +index 23025d645160..0a99d4515065 100644 +--- a/arch/um/os-Linux/skas/process.c ++++ b/arch/um/os-Linux/skas/process.c +@@ -578,6 +578,11 @@ int start_idle_thread(void *stack, jmp_buf *switch_buf) + fatal_sigsegv(); + } + longjmp(*switch_buf, 1); ++ ++ /* unreachable */ ++ printk(UM_KERN_ERR "impossible long jump!"); ++ fatal_sigsegv(); ++ return 0; + } + + void initial_thread_cb_skas(void (*proc)(void *), void *arg) +-- +2.17.1 +