From: Sasha Levin Date: Fri, 18 Oct 2019 22:29:09 +0000 (-0400) Subject: fixes for 4.19 X-Git-Tag: v4.4.198~58 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f655d3ea02b5749c002a8c1aa5a70f7a547430cc;p=thirdparty%2Fkernel%2Fstable-queue.git fixes for 4.19 Signed-off-by: Sasha Levin --- diff --git a/queue-4.19/arm-dts-am4372-set-memory-bandwidth-limit-for-dispc.patch b/queue-4.19/arm-dts-am4372-set-memory-bandwidth-limit-for-dispc.patch new file mode 100644 index 00000000000..f75db935eee --- /dev/null +++ b/queue-4.19/arm-dts-am4372-set-memory-bandwidth-limit-for-dispc.patch @@ -0,0 +1,39 @@ +From 59e7869cf66084a4c7fec6acd8778eec433af269 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 30 Sep 2019 11:54:50 +0300 +Subject: ARM: dts: am4372: Set memory bandwidth limit for DISPC + +From: Peter Ujfalusi + +[ Upstream commit f90ec6cdf674248dcad85bf9af6e064bf472b841 ] + +Set memory bandwidth limit to filter out resolutions above 720p@60Hz to +avoid underflow errors due to the bandwidth needs of higher resolutions. + +am43xx can not provide enough bandwidth to DISPC to correctly handle +'high' resolutions. + +Signed-off-by: Peter Ujfalusi +Signed-off-by: Tomi Valkeinen +Signed-off-by: Tony Lindgren +Signed-off-by: Sasha Levin +--- + arch/arm/boot/dts/am4372.dtsi | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/arch/arm/boot/dts/am4372.dtsi b/arch/arm/boot/dts/am4372.dtsi +index d4b7c59eec685..cf1e4f747242f 100644 +--- a/arch/arm/boot/dts/am4372.dtsi ++++ b/arch/arm/boot/dts/am4372.dtsi +@@ -1142,6 +1142,8 @@ + ti,hwmods = "dss_dispc"; + clocks = <&disp_clk>; + clock-names = "fck"; ++ ++ max-memory-bandwidth = <230000000>; + }; + + rfbi: rfbi@4832a800 { +-- +2.20.1 + diff --git a/queue-4.19/arm-omap2-fix-missing-reset-done-flag-for-am3-and-am.patch b/queue-4.19/arm-omap2-fix-missing-reset-done-flag-for-am3-and-am.patch new file mode 100644 index 00000000000..33fb929c420 --- /dev/null +++ b/queue-4.19/arm-omap2-fix-missing-reset-done-flag-for-am3-and-am.patch @@ -0,0 +1,53 @@ +From 64793db06ec671d0be242094c251e5f935054caa Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 24 Sep 2019 09:25:52 -0700 +Subject: ARM: OMAP2+: Fix missing reset done flag for am3 and am43 + +From: Tony Lindgren + +[ Upstream commit 8ad8041b98c665b6147e607b749586d6e20ba73a ] + +For ti,sysc-omap4 compatible devices with no sysstatus register, we do have +reset done status available in the SOFTRESET bit that clears when the reset +is done. This is documented for example in am437x TRM for DMTIMER_TIOCP_CFG +register. The am335x TRM just says that SOFTRESET bit value 1 means reset is +ongoing, but it behaves the same way clearing after reset is done. + +With the ti-sysc driver handling this automatically based on no sysstatus +register defined, we see warnings if SYSC_HAS_RESET_STATUS is missing in the +legacy platform data: + +ti-sysc 48042000.target-module: sysc_flags 00000222 != 00000022 +ti-sysc 48044000.target-module: sysc_flags 00000222 != 00000022 +ti-sysc 48046000.target-module: sysc_flags 00000222 != 00000022 +... + +Let's fix these warnings by adding SYSC_HAS_RESET_STATUS. Let's also +remove the useless parentheses while at it. + +If it turns out we do have ti,sysc-omap4 compatible devices without a +working SOFTRESET bit we can set up additional quirk handling for it. + +Signed-off-by: Tony Lindgren +Signed-off-by: Sasha Levin +--- + arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c +index 9ded7bf972e71..3b8fe014a3e94 100644 +--- a/arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c ++++ b/arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c +@@ -946,7 +946,8 @@ static struct omap_hwmod_class_sysconfig am33xx_timer_sysc = { + .rev_offs = 0x0000, + .sysc_offs = 0x0010, + .syss_offs = 0x0014, +- .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET), ++ .sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET | ++ SYSC_HAS_RESET_STATUS, + .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | + SIDLE_SMART_WKUP), + .sysc_fields = &omap_hwmod_sysc_type2, +-- +2.20.1 + diff --git a/queue-4.19/arm-omap2-fix-warnings-with-broken-omap2_set_init_vo.patch b/queue-4.19/arm-omap2-fix-warnings-with-broken-omap2_set_init_vo.patch new file mode 100644 index 00000000000..0428d55403b --- /dev/null +++ b/queue-4.19/arm-omap2-fix-warnings-with-broken-omap2_set_init_vo.patch @@ -0,0 +1,172 @@ +From 7c67eebc135f1ffbad21960ba266e15e729e2160 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 24 Sep 2019 16:19:00 -0700 +Subject: ARM: OMAP2+: Fix warnings with broken omap2_set_init_voltage() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Tony Lindgren + +[ Upstream commit cf395f7ddb9ebc6b2d28d83b53d18aa4e7c19701 ] + +This code is currently unable to find the dts opp tables as ti-cpufreq +needs to set them up first based on speed binning. + +We stopped initializing the opp tables with platform code years ago for +device tree based booting with commit 92d51856d740 ("ARM: OMAP3+: do not +register non-dt OPP tables for device tree boot"), and all of mach-omap2 +is now booting using device tree. + +We currently get the following errors on init: + +omap2_set_init_voltage: unable to find boot up OPP for vdd_mpu +omap2_set_init_voltage: unable to set vdd_mpu +omap2_set_init_voltage: unable to find boot up OPP for vdd_core +omap2_set_init_voltage: unable to set vdd_core +omap2_set_init_voltage: unable to find boot up OPP for vdd_iva +omap2_set_init_voltage: unable to set vdd_iva + +Let's just drop the unused code. Nowadays ti-cpufreq should be used to +to initialize things properly. + +Cc: Adam Ford +Cc: André Roth +Cc: "H. Nikolaus Schaller" +Cc: Nishanth Menon +Cc: Tero Kristo +Tested-by: Adam Ford #logicpd-torpedo-37xx-devkit +Signed-off-by: Tony Lindgren +Signed-off-by: Sasha Levin +--- + arch/arm/mach-omap2/pm.c | 100 --------------------------------------- + 1 file changed, 100 deletions(-) + +diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c +index ca03af8fe43ff..ddf96adf65ab3 100644 +--- a/arch/arm/mach-omap2/pm.c ++++ b/arch/arm/mach-omap2/pm.c +@@ -77,83 +77,6 @@ int omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused) + return 0; + } + +-/* +- * This API is to be called during init to set the various voltage +- * domains to the voltage as per the opp table. Typically we boot up +- * at the nominal voltage. So this function finds out the rate of +- * the clock associated with the voltage domain, finds out the correct +- * opp entry and sets the voltage domain to the voltage specified +- * in the opp entry +- */ +-static int __init omap2_set_init_voltage(char *vdd_name, char *clk_name, +- const char *oh_name) +-{ +- struct voltagedomain *voltdm; +- struct clk *clk; +- struct dev_pm_opp *opp; +- unsigned long freq, bootup_volt; +- struct device *dev; +- +- if (!vdd_name || !clk_name || !oh_name) { +- pr_err("%s: invalid parameters\n", __func__); +- goto exit; +- } +- +- if (!strncmp(oh_name, "mpu", 3)) +- /* +- * All current OMAPs share voltage rail and clock +- * source, so CPU0 is used to represent the MPU-SS. +- */ +- dev = get_cpu_device(0); +- else +- dev = omap_device_get_by_hwmod_name(oh_name); +- +- if (IS_ERR(dev)) { +- pr_err("%s: Unable to get dev pointer for hwmod %s\n", +- __func__, oh_name); +- goto exit; +- } +- +- voltdm = voltdm_lookup(vdd_name); +- if (!voltdm) { +- pr_err("%s: unable to get vdd pointer for vdd_%s\n", +- __func__, vdd_name); +- goto exit; +- } +- +- clk = clk_get(NULL, clk_name); +- if (IS_ERR(clk)) { +- pr_err("%s: unable to get clk %s\n", __func__, clk_name); +- goto exit; +- } +- +- freq = clk_get_rate(clk); +- clk_put(clk); +- +- opp = dev_pm_opp_find_freq_ceil(dev, &freq); +- if (IS_ERR(opp)) { +- pr_err("%s: unable to find boot up OPP for vdd_%s\n", +- __func__, vdd_name); +- goto exit; +- } +- +- bootup_volt = dev_pm_opp_get_voltage(opp); +- dev_pm_opp_put(opp); +- +- if (!bootup_volt) { +- pr_err("%s: unable to find voltage corresponding to the bootup OPP for vdd_%s\n", +- __func__, vdd_name); +- goto exit; +- } +- +- voltdm_scale(voltdm, bootup_volt); +- return 0; +- +-exit: +- pr_err("%s: unable to set vdd_%s\n", __func__, vdd_name); +- return -EINVAL; +-} +- + #ifdef CONFIG_SUSPEND + static int omap_pm_enter(suspend_state_t suspend_state) + { +@@ -211,25 +134,6 @@ void omap_common_suspend_init(void *pm_suspend) + } + #endif /* CONFIG_SUSPEND */ + +-static void __init omap3_init_voltages(void) +-{ +- if (!soc_is_omap34xx()) +- return; +- +- omap2_set_init_voltage("mpu_iva", "dpll1_ck", "mpu"); +- omap2_set_init_voltage("core", "l3_ick", "l3_main"); +-} +- +-static void __init omap4_init_voltages(void) +-{ +- if (!soc_is_omap44xx()) +- return; +- +- omap2_set_init_voltage("mpu", "dpll_mpu_ck", "mpu"); +- omap2_set_init_voltage("core", "l3_div_ck", "l3_main_1"); +- omap2_set_init_voltage("iva", "dpll_iva_m5x2_ck", "iva"); +-} +- + int __maybe_unused omap_pm_nop_init(void) + { + return 0; +@@ -249,10 +153,6 @@ int __init omap2_common_pm_late_init(void) + omap4_twl_init(); + omap_voltage_late_init(); + +- /* Initialize the voltages */ +- omap3_init_voltages(); +- omap4_init_voltages(); +- + /* Smartreflex device init */ + omap_devinit_smartreflex(); + +-- +2.20.1 + diff --git a/queue-4.19/ieee802154-ca8210-prevent-memory-leak.patch b/queue-4.19/ieee802154-ca8210-prevent-memory-leak.patch new file mode 100644 index 00000000000..fc0bd2af803 --- /dev/null +++ b/queue-4.19/ieee802154-ca8210-prevent-memory-leak.patch @@ -0,0 +1,42 @@ +From c6953a94f8fdf64fbe8c0b28138c4926ed373cdd Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 17 Sep 2019 17:47:12 -0500 +Subject: ieee802154: ca8210: prevent memory leak + +From: Navid Emamdoost + +[ Upstream commit 6402939ec86eaf226c8b8ae00ed983936b164908 ] + +In ca8210_probe the allocated pdata needs to be assigned to +spi_device->dev.platform_data before calling ca8210_get_platform_data. +Othrwise when ca8210_get_platform_data fails pdata cannot be released. + +Signed-off-by: Navid Emamdoost +Link: https://lore.kernel.org/r/20190917224713.26371-1-navid.emamdoost@gmail.com +Signed-off-by: Stefan Schmidt +Signed-off-by: Sasha Levin +--- + drivers/net/ieee802154/ca8210.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ieee802154/ca8210.c b/drivers/net/ieee802154/ca8210.c +index b2ff903a9cb6e..38a41651e451c 100644 +--- a/drivers/net/ieee802154/ca8210.c ++++ b/drivers/net/ieee802154/ca8210.c +@@ -3151,12 +3151,12 @@ static int ca8210_probe(struct spi_device *spi_device) + goto error; + } + ++ priv->spi->dev.platform_data = pdata; + ret = ca8210_get_platform_data(priv->spi, pdata); + if (ret) { + dev_crit(&spi_device->dev, "ca8210_get_platform_data failed\n"); + goto error; + } +- priv->spi->dev.platform_data = pdata; + + ret = ca8210_dev_com_init(priv); + if (ret) { +-- +2.20.1 + diff --git a/queue-4.19/lib-textsearch-fix-escapes-in-example-code.patch b/queue-4.19/lib-textsearch-fix-escapes-in-example-code.patch new file mode 100644 index 00000000000..b8803e0a9ed --- /dev/null +++ b/queue-4.19/lib-textsearch-fix-escapes-in-example-code.patch @@ -0,0 +1,42 @@ +From 1b107d791316b369713ae7e1758cf4effc54a2c6 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 2 Oct 2019 17:08:18 -0700 +Subject: lib: textsearch: fix escapes in example code + +From: Randy Dunlap + +[ Upstream commit 2105b52e30debe7f19f3218598d8ae777dcc6776 ] + +This textsearch code example does not need the '\' escapes and they can +be misleading to someone reading the example. Also, gcc and sparse warn +that the "\%d" is an unknown escape sequence. + +Fixes: 5968a70d7af5 ("textsearch: fix kernel-doc warnings and add kernel-api section") +Signed-off-by: Randy Dunlap +Cc: "David S. Miller" +Cc: netdev@vger.kernel.org +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + lib/textsearch.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/lib/textsearch.c b/lib/textsearch.c +index 5939549c0e7bc..9135c29add624 100644 +--- a/lib/textsearch.c ++++ b/lib/textsearch.c +@@ -93,9 +93,9 @@ + * goto errout; + * } + * +- * pos = textsearch_find_continuous(conf, \&state, example, strlen(example)); ++ * pos = textsearch_find_continuous(conf, &state, example, strlen(example)); + * if (pos != UINT_MAX) +- * panic("Oh my god, dancing chickens at \%d\n", pos); ++ * panic("Oh my god, dancing chickens at %d\n", pos); + * + * textsearch_destroy(conf); + */ +-- +2.20.1 + diff --git a/queue-4.19/mac80211-fix-txq-null-pointer-dereference.patch b/queue-4.19/mac80211-fix-txq-null-pointer-dereference.patch new file mode 100644 index 00000000000..508ed939886 --- /dev/null +++ b/queue-4.19/mac80211-fix-txq-null-pointer-dereference.patch @@ -0,0 +1,77 @@ +From 747aa4249f17b49b2d4c97943c54d02b7f039fb4 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 27 Sep 2019 10:03:16 +0800 +Subject: mac80211: fix txq null pointer dereference +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Miaoqing Pan + +[ Upstream commit 8ed31a264065ae92058ce54aa3cc8da8d81dc6d7 ] + +If the interface type is P2P_DEVICE or NAN, read the file of +'/sys/kernel/debug/ieee80211/phyx/netdev:wlanx/aqm' will get a +NULL pointer dereference. As for those interface type, the +pointer sdata->vif.txq is NULL. + +Unable to handle kernel NULL pointer dereference at virtual address 00000011 +CPU: 1 PID: 30936 Comm: cat Not tainted 4.14.104 #1 +task: ffffffc0337e4880 task.stack: ffffff800cd20000 +PC is at ieee80211_if_fmt_aqm+0x34/0xa0 [mac80211] +LR is at ieee80211_if_fmt_aqm+0x34/0xa0 [mac80211] +[...] +Process cat (pid: 30936, stack limit = 0xffffff800cd20000) +[...] +[] ieee80211_if_fmt_aqm+0x34/0xa0 [mac80211] +[] ieee80211_if_read+0x60/0xbc [mac80211] +[] ieee80211_if_read_aqm+0x28/0x30 [mac80211] +[] full_proxy_read+0x2c/0x48 +[] __vfs_read+0x2c/0xd4 +[] vfs_read+0x8c/0x108 +[] SyS_read+0x40/0x7c + +Signed-off-by: Miaoqing Pan +Acked-by: Toke Høiland-Jørgensen +Link: https://lore.kernel.org/r/1569549796-8223-1-git-send-email-miaoqing@codeaurora.org +[trim useless data from commit message] +Signed-off-by: Johannes Berg +Signed-off-by: Sasha Levin +--- + net/mac80211/debugfs_netdev.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c +index d37d4acafebf5..316250ae90712 100644 +--- a/net/mac80211/debugfs_netdev.c ++++ b/net/mac80211/debugfs_netdev.c +@@ -490,9 +490,14 @@ static ssize_t ieee80211_if_fmt_aqm( + const struct ieee80211_sub_if_data *sdata, char *buf, int buflen) + { + struct ieee80211_local *local = sdata->local; +- struct txq_info *txqi = to_txq_info(sdata->vif.txq); ++ struct txq_info *txqi; + int len; + ++ if (!sdata->vif.txq) ++ return 0; ++ ++ txqi = to_txq_info(sdata->vif.txq); ++ + spin_lock_bh(&local->fq.lock); + rcu_read_lock(); + +@@ -659,7 +664,9 @@ static void add_common_files(struct ieee80211_sub_if_data *sdata) + DEBUGFS_ADD(rc_rateidx_vht_mcs_mask_5ghz); + DEBUGFS_ADD(hw_queues); + +- if (sdata->local->ops->wake_tx_queue) ++ if (sdata->local->ops->wake_tx_queue && ++ sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE && ++ sdata->vif.type != NL80211_IFTYPE_NAN) + DEBUGFS_ADD(aqm); + } + +-- +2.20.1 + diff --git a/queue-4.19/mips-dts-ar9331-fix-interrupt-controller-size.patch b/queue-4.19/mips-dts-ar9331-fix-interrupt-controller-size.patch new file mode 100644 index 00000000000..c264e335098 --- /dev/null +++ b/queue-4.19/mips-dts-ar9331-fix-interrupt-controller-size.patch @@ -0,0 +1,42 @@ +From 6a1c4a86de6c22072d2ff244ffc043b47d27cde3 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 30 Sep 2019 11:39:52 +0200 +Subject: MIPS: dts: ar9331: fix interrupt-controller size + +From: Oleksij Rempel + +[ Upstream commit 0889d07f3e4b171c453b2aaf2b257f9074cdf624 ] + +It is two registers each of 4 byte. + +Signed-off-by: Oleksij Rempel +Signed-off-by: Paul Burton +Cc: Rob Herring +Cc: Mark Rutland +Cc: Pengutronix Kernel Team +Cc: Ralf Baechle +Cc: James Hogan +Cc: devicetree@vger.kernel.org +Cc: linux-mips@vger.kernel.org +Cc: linux-kernel@vger.kernel.org +Signed-off-by: Sasha Levin +--- + arch/mips/boot/dts/qca/ar9331.dtsi | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/mips/boot/dts/qca/ar9331.dtsi b/arch/mips/boot/dts/qca/ar9331.dtsi +index 2bae201aa3651..1c7bf11f8450b 100644 +--- a/arch/mips/boot/dts/qca/ar9331.dtsi ++++ b/arch/mips/boot/dts/qca/ar9331.dtsi +@@ -99,7 +99,7 @@ + + miscintc: interrupt-controller@18060010 { + compatible = "qca,ar7240-misc-intc"; +- reg = <0x18060010 0x4>; ++ reg = <0x18060010 0x8>; + + interrupt-parent = <&cpuintc>; + interrupts = <6>; +-- +2.20.1 + diff --git a/queue-4.19/mips-loongson-fix-the-link-time-qualifier-of-serial_.patch b/queue-4.19/mips-loongson-fix-the-link-time-qualifier-of-serial_.patch new file mode 100644 index 00000000000..b115eeb48a3 --- /dev/null +++ b/queue-4.19/mips-loongson-fix-the-link-time-qualifier-of-serial_.patch @@ -0,0 +1,41 @@ +From c71cd330358c6fd0ab0fa10800ca2bc8ecca0058 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 10 Sep 2019 05:59:07 +0200 +Subject: mips: Loongson: Fix the link time qualifier of 'serial_exit()' + +From: Christophe JAILLET + +[ Upstream commit 25b69a889b638b0b7e51e2c4fe717a66bec0e566 ] + +'exit' functions should be marked as __exit, not __init. + +Fixes: 85cc028817ef ("mips: make loongsoon serial driver explicitly modular") +Signed-off-by: Christophe JAILLET +Signed-off-by: Paul Burton +Cc: chenhc@lemote.com +Cc: ralf@linux-mips.org +Cc: jhogan@kernel.org +Cc: linux-mips@vger.kernel.org +Cc: linux-kernel@vger.kernel.org +Cc: kernel-janitors@vger.kernel.org +Signed-off-by: Sasha Levin +--- + arch/mips/loongson64/common/serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/mips/loongson64/common/serial.c b/arch/mips/loongson64/common/serial.c +index ffefc1cb26121..98c3a7feb10f8 100644 +--- a/arch/mips/loongson64/common/serial.c ++++ b/arch/mips/loongson64/common/serial.c +@@ -110,7 +110,7 @@ static int __init serial_init(void) + } + module_init(serial_init); + +-static void __init serial_exit(void) ++static void __exit serial_exit(void) + { + platform_device_unregister(&uart8250_device); + } +-- +2.20.1 + diff --git a/queue-4.19/namespace-fix-namespace.pl-script-to-support-relativ.patch b/queue-4.19/namespace-fix-namespace.pl-script-to-support-relativ.patch new file mode 100644 index 00000000000..98cf007cb13 --- /dev/null +++ b/queue-4.19/namespace-fix-namespace.pl-script-to-support-relativ.patch @@ -0,0 +1,86 @@ +From abba05a09a5458d096b08957a1dbd5dcd59b932a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 27 Sep 2019 16:30:27 -0700 +Subject: namespace: fix namespace.pl script to support relative paths + +From: Jacob Keller + +[ Upstream commit 82fdd12b95727640c9a8233c09d602e4518e71f7 ] + +The namespace.pl script does not work properly if objtree is not set to +an absolute path. The do_nm function is run from within the find +function, which changes directories. + +Because of this, appending objtree, $File::Find::dir, and $source, will +return a path which is not valid from the current directory. + +This used to work when objtree was set to an absolute path when using +"make namespacecheck". It appears to have not worked when calling +./scripts/namespace.pl directly. + +This behavior was changed in 7e1c04779efd ("kbuild: Use relative path +for $(objtree)", 2014-05-14) + +Rather than fixing the Makefile to set objtree to an absolute path, just +fix namespace.pl to work when srctree and objtree are relative. Also fix +the script to use an absolute path for these by default. + +Use the File::Spec module for this purpose. It's been part of perl +5 since 5.005. + +The curdir() function is used to get the current directory when the +objtree and srctree aren't set in the environment. + +rel2abs() is used to convert possibly relative objtree and srctree +environment variables to absolute paths. + +Finally, the catfile() function is used instead of string appending +paths together, since this is more robust when joining paths together. + +Signed-off-by: Jacob Keller +Acked-by: Randy Dunlap +Tested-by: Randy Dunlap +Signed-off-by: Masahiro Yamada +Signed-off-by: Sasha Levin +--- + scripts/namespace.pl | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +diff --git a/scripts/namespace.pl b/scripts/namespace.pl +index 6135574a6f394..1da7bca201a42 100755 +--- a/scripts/namespace.pl ++++ b/scripts/namespace.pl +@@ -65,13 +65,14 @@ + use warnings; + use strict; + use File::Find; ++use File::Spec; + + my $nm = ($ENV{'NM'} || "nm") . " -p"; + my $objdump = ($ENV{'OBJDUMP'} || "objdump") . " -s -j .comment"; +-my $srctree = ""; +-my $objtree = ""; +-$srctree = "$ENV{'srctree'}/" if (exists($ENV{'srctree'})); +-$objtree = "$ENV{'objtree'}/" if (exists($ENV{'objtree'})); ++my $srctree = File::Spec->curdir(); ++my $objtree = File::Spec->curdir(); ++$srctree = File::Spec->rel2abs($ENV{'srctree'}) if (exists($ENV{'srctree'})); ++$objtree = File::Spec->rel2abs($ENV{'objtree'}) if (exists($ENV{'objtree'})); + + if ($#ARGV != -1) { + print STDERR "usage: $0 takes no parameters\n"; +@@ -231,9 +232,9 @@ sub do_nm + } + ($source = $basename) =~ s/\.o$//; + if (-e "$source.c" || -e "$source.S") { +- $source = "$objtree$File::Find::dir/$source"; ++ $source = File::Spec->catfile($objtree, $File::Find::dir, $source) + } else { +- $source = "$srctree$File::Find::dir/$source"; ++ $source = File::Spec->catfile($srctree, $File::Find::dir, $source) + } + if (! -e "$source.c" && ! -e "$source.S") { + # No obvious source, exclude the object if it is conglomerate +-- +2.20.1 + diff --git a/queue-4.19/net-dsa-qca8k-use-up-to-7-ports-for-all-operations.patch b/queue-4.19/net-dsa-qca8k-use-up-to-7-ports-for-all-operations.patch new file mode 100644 index 00000000000..1e937f20f5b --- /dev/null +++ b/queue-4.19/net-dsa-qca8k-use-up-to-7-ports-for-all-operations.patch @@ -0,0 +1,57 @@ +From 5ad80b96643e997ea72ac3f4c7da32b5cbed7af2 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 26 Sep 2019 10:59:17 +0200 +Subject: net: dsa: qca8k: Use up to 7 ports for all operations +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Michal Vokáč + +[ Upstream commit 7ae6d93c8f052b7a77ba56ed0f654e22a2876739 ] + +The QCA8K family supports up to 7 ports. So use the existing +QCA8K_NUM_PORTS define to allocate the switch structure and limit all +operations with the switch ports. + +This was not an issue until commit 0394a63acfe2 ("net: dsa: enable and +disable all ports") disabled all unused ports. Since the unused ports 7-11 +are outside of the correct register range on this switch some registers +were rewritten with invalid content. + +Fixes: 6b93fb46480a ("net-next: dsa: add new driver for qca8xxx family") +Fixes: a0c02161ecfc ("net: dsa: variable number of ports") +Fixes: 0394a63acfe2 ("net: dsa: enable and disable all ports") +Signed-off-by: Michal Vokáč +Reviewed-by: Andrew Lunn +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/dsa/qca8k.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c +index bdd8f2df66303..33232cc9fb04d 100644 +--- a/drivers/net/dsa/qca8k.c ++++ b/drivers/net/dsa/qca8k.c +@@ -543,7 +543,7 @@ qca8k_setup(struct dsa_switch *ds) + BIT(0) << QCA8K_GLOBAL_FW_CTRL1_UC_DP_S); + + /* Setup connection between CPU port & user ports */ +- for (i = 0; i < DSA_MAX_PORTS; i++) { ++ for (i = 0; i < QCA8K_NUM_PORTS; i++) { + /* CPU port gets connected to all user ports of the switch */ + if (dsa_is_cpu_port(ds, i)) { + qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(QCA8K_CPU_PORT), +@@ -897,7 +897,7 @@ qca8k_sw_probe(struct mdio_device *mdiodev) + if (id != QCA8K_ID_QCA8337) + return -ENODEV; + +- priv->ds = dsa_switch_alloc(&mdiodev->dev, DSA_MAX_PORTS); ++ priv->ds = dsa_switch_alloc(&mdiodev->dev, QCA8K_NUM_PORTS); + if (!priv->ds) + return -ENOMEM; + +-- +2.20.1 + diff --git a/queue-4.19/net-dsa-rtl8366rb-add-missing-of_node_put-after-call.patch b/queue-4.19/net-dsa-rtl8366rb-add-missing-of_node_put-after-call.patch new file mode 100644 index 00000000000..da2946b1057 --- /dev/null +++ b/queue-4.19/net-dsa-rtl8366rb-add-missing-of_node_put-after-call.patch @@ -0,0 +1,93 @@ +From bcc630c3e23b87f5163dc13afed77a52e1e1b98f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 29 Sep 2019 15:00:47 +0800 +Subject: net: dsa: rtl8366rb: add missing of_node_put after calling + of_get_child_by_name + +From: Wen Yang + +[ Upstream commit f32eb9d80470dab05df26b6efd02d653c72e6a11 ] + +of_node_put needs to be called when the device node which is got +from of_get_child_by_name finished using. +irq_domain_add_linear() also calls of_node_get() to increase refcount, +so irq_domain will not be affected when it is released. + +Fixes: d8652956cf37 ("net: dsa: realtek-smi: Add Realtek SMI driver") +Signed-off-by: Wen Yang +Cc: Linus Walleij +Cc: Andrew Lunn +Cc: Vivien Didelot +Cc: Florian Fainelli +Cc: "David S. Miller" +Cc: netdev@vger.kernel.org +Cc: linux-kernel@vger.kernel.org +Reviewed-by: Linus Walleij +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/dsa/rtl8366rb.c | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +diff --git a/drivers/net/dsa/rtl8366rb.c b/drivers/net/dsa/rtl8366rb.c +index a4d5049df6928..f4b14b6acd22d 100644 +--- a/drivers/net/dsa/rtl8366rb.c ++++ b/drivers/net/dsa/rtl8366rb.c +@@ -507,7 +507,8 @@ static int rtl8366rb_setup_cascaded_irq(struct realtek_smi *smi) + irq = of_irq_get(intc, 0); + if (irq <= 0) { + dev_err(smi->dev, "failed to get parent IRQ\n"); +- return irq ? irq : -EINVAL; ++ ret = irq ? irq : -EINVAL; ++ goto out_put_node; + } + + /* This clears the IRQ status register */ +@@ -515,7 +516,7 @@ static int rtl8366rb_setup_cascaded_irq(struct realtek_smi *smi) + &val); + if (ret) { + dev_err(smi->dev, "can't read interrupt status\n"); +- return ret; ++ goto out_put_node; + } + + /* Fetch IRQ edge information from the descriptor */ +@@ -537,7 +538,7 @@ static int rtl8366rb_setup_cascaded_irq(struct realtek_smi *smi) + val); + if (ret) { + dev_err(smi->dev, "could not configure IRQ polarity\n"); +- return ret; ++ goto out_put_node; + } + + ret = devm_request_threaded_irq(smi->dev, irq, NULL, +@@ -545,7 +546,7 @@ static int rtl8366rb_setup_cascaded_irq(struct realtek_smi *smi) + "RTL8366RB", smi); + if (ret) { + dev_err(smi->dev, "unable to request irq: %d\n", ret); +- return ret; ++ goto out_put_node; + } + smi->irqdomain = irq_domain_add_linear(intc, + RTL8366RB_NUM_INTERRUPT, +@@ -553,12 +554,15 @@ static int rtl8366rb_setup_cascaded_irq(struct realtek_smi *smi) + smi); + if (!smi->irqdomain) { + dev_err(smi->dev, "failed to create IRQ domain\n"); +- return -EINVAL; ++ ret = -EINVAL; ++ goto out_put_node; + } + for (i = 0; i < smi->num_ports; i++) + irq_set_parent(irq_create_mapping(smi->irqdomain, i), irq); + +- return 0; ++out_put_node: ++ of_node_put(intc); ++ return ret; + } + + static int rtl8366rb_set_addr(struct realtek_smi *smi) +-- +2.20.1 + diff --git a/queue-4.19/net-hisilicon-fix-usage-of-uninitialized-variable-in.patch b/queue-4.19/net-hisilicon-fix-usage-of-uninitialized-variable-in.patch new file mode 100644 index 00000000000..136817cd574 --- /dev/null +++ b/queue-4.19/net-hisilicon-fix-usage-of-uninitialized-variable-in.patch @@ -0,0 +1,46 @@ +From dcb3c7e3cd82d99065641fa1cc0c543b4580ac0c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 1 Oct 2019 13:24:39 -0700 +Subject: net: hisilicon: Fix usage of uninitialized variable in function + mdio_sc_cfg_reg_write() + +From: Yizhuo + +[ Upstream commit 53de429f4e88f538f7a8ec2b18be8c0cd9b2c8e1 ] + +In function mdio_sc_cfg_reg_write(), variable "reg_value" could be +uninitialized if regmap_read() fails. However, "reg_value" is used +to decide the control flow later in the if statement, which is +potentially unsafe. + +Signed-off-by: Yizhuo +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/hisilicon/hns_mdio.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/hisilicon/hns_mdio.c b/drivers/net/ethernet/hisilicon/hns_mdio.c +index baf5cc251f329..9a3bc0994a1db 100644 +--- a/drivers/net/ethernet/hisilicon/hns_mdio.c ++++ b/drivers/net/ethernet/hisilicon/hns_mdio.c +@@ -156,11 +156,15 @@ static int mdio_sc_cfg_reg_write(struct hns_mdio_device *mdio_dev, + { + u32 time_cnt; + u32 reg_value; ++ int ret; + + regmap_write(mdio_dev->subctrl_vbase, cfg_reg, set_val); + + for (time_cnt = MDIO_TIMEOUT; time_cnt; time_cnt--) { +- regmap_read(mdio_dev->subctrl_vbase, st_reg, ®_value); ++ ret = regmap_read(mdio_dev->subctrl_vbase, st_reg, ®_value); ++ if (ret) ++ return ret; ++ + reg_value &= st_msk; + if ((!!check_st) == (!!reg_value)) + break; +-- +2.20.1 + diff --git a/queue-4.19/netfilter-nft_connlimit-disable-bh-on-garbage-collec.patch b/queue-4.19/netfilter-nft_connlimit-disable-bh-on-garbage-collec.patch new file mode 100644 index 00000000000..b2617b1bce3 --- /dev/null +++ b/queue-4.19/netfilter-nft_connlimit-disable-bh-on-garbage-collec.patch @@ -0,0 +1,70 @@ +From a218d21ac974536dc665a142205978a7b03ddd8e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 30 Sep 2019 11:05:49 +0200 +Subject: netfilter: nft_connlimit: disable bh on garbage collection + +From: Pablo Neira Ayuso + +[ Upstream commit 34a4c95abd25ab41fb390b985a08a651b1fa0b0f ] + +BH must be disabled when invoking nf_conncount_gc_list() to perform +garbage collection, otherwise deadlock might happen. + + nf_conncount_add+0x1f/0x50 [nf_conncount] + nft_connlimit_eval+0x4c/0xe0 [nft_connlimit] + nft_dynset_eval+0xb5/0x100 [nf_tables] + nft_do_chain+0xea/0x420 [nf_tables] + ? sch_direct_xmit+0x111/0x360 + ? noqueue_init+0x10/0x10 + ? __qdisc_run+0x84/0x510 + ? tcp_packet+0x655/0x1610 [nf_conntrack] + ? ip_finish_output2+0x1a7/0x430 + ? tcp_error+0x130/0x150 [nf_conntrack] + ? nf_conntrack_in+0x1fc/0x4c0 [nf_conntrack] + nft_do_chain_ipv4+0x66/0x80 [nf_tables] + nf_hook_slow+0x44/0xc0 + ip_rcv+0xb5/0xd0 + ? ip_rcv_finish_core.isra.19+0x360/0x360 + __netif_receive_skb_one_core+0x52/0x70 + netif_receive_skb_internal+0x34/0xe0 + napi_gro_receive+0xba/0xe0 + e1000_clean_rx_irq+0x1e9/0x420 [e1000e] + e1000e_poll+0xbe/0x290 [e1000e] + net_rx_action+0x149/0x3b0 + __do_softirq+0xde/0x2d8 + irq_exit+0xba/0xc0 + do_IRQ+0x85/0xd0 + common_interrupt+0xf/0xf + + RIP: 0010:nf_conncount_gc_list+0x3b/0x130 [nf_conncount] + +Fixes: 2f971a8f4255 ("netfilter: nf_conncount: move all list iterations under spinlock") +Reported-by: Laura Garcia Liebana +Signed-off-by: Pablo Neira Ayuso +Signed-off-by: Sasha Levin +--- + net/netfilter/nft_connlimit.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/net/netfilter/nft_connlimit.c b/net/netfilter/nft_connlimit.c +index af1497ab94642..69d6173f91e2b 100644 +--- a/net/netfilter/nft_connlimit.c ++++ b/net/netfilter/nft_connlimit.c +@@ -218,8 +218,13 @@ static void nft_connlimit_destroy_clone(const struct nft_ctx *ctx, + static bool nft_connlimit_gc(struct net *net, const struct nft_expr *expr) + { + struct nft_connlimit *priv = nft_expr_priv(expr); ++ bool ret; + +- return nf_conncount_gc_list(net, &priv->list); ++ local_bh_disable(); ++ ret = nf_conncount_gc_list(net, &priv->list); ++ local_bh_enable(); ++ ++ return ret; + } + + static struct nft_expr_type nft_connlimit_type; +-- +2.20.1 + diff --git a/queue-4.19/nl80211-fix-null-pointer-dereference.patch b/queue-4.19/nl80211-fix-null-pointer-dereference.patch new file mode 100644 index 00000000000..7fe0d7422ad --- /dev/null +++ b/queue-4.19/nl80211-fix-null-pointer-dereference.patch @@ -0,0 +1,62 @@ +From 8a1b72b27042ab2b87c558157552ab505bd41e48 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 26 Sep 2019 16:16:50 +0800 +Subject: nl80211: fix null pointer dereference + +From: Miaoqing Pan + +[ Upstream commit b501426cf86e70649c983c52f4c823b3c40d72a3 ] + +If the interface is not in MESH mode, the command 'iw wlanx mpath del' +will cause kernel panic. + +The root cause is null pointer access in mpp_flush_by_proxy(), as the +pointer 'sdata->u.mesh.mpp_paths' is NULL for non MESH interface. + +Unable to handle kernel NULL pointer dereference at virtual address 00000068 +[...] +PC is at _raw_spin_lock_bh+0x20/0x5c +LR is at mesh_path_del+0x1c/0x17c [mac80211] +[...] +Process iw (pid: 4537, stack limit = 0xd83e0238) +[...] +[] (_raw_spin_lock_bh) from [] (mesh_path_del+0x1c/0x17c [mac80211]) +[] (mesh_path_del [mac80211]) from [] (extack_doit+0x20/0x68 [compat]) +[] (extack_doit [compat]) from [] (genl_rcv_msg+0x274/0x30c) +[] (genl_rcv_msg) from [] (netlink_rcv_skb+0x58/0xac) +[] (netlink_rcv_skb) from [] (genl_rcv+0x20/0x34) +[] (genl_rcv) from [] (netlink_unicast+0x11c/0x204) +[] (netlink_unicast) from [] (netlink_sendmsg+0x30c/0x370) +[] (netlink_sendmsg) from [] (sock_sendmsg+0x70/0x84) +[] (sock_sendmsg) from [] (___sys_sendmsg.part.3+0x188/0x228) +[] (___sys_sendmsg.part.3) from [] (__sys_sendmsg+0x4c/0x70) +[] (__sys_sendmsg) from [] (ret_fast_syscall+0x0/0x44) +Code: e2822c02 e2822001 e5832004 f590f000 (e1902f9f) +---[ end trace bbd717600f8f884d ]--- + +Signed-off-by: Miaoqing Pan +Link: https://lore.kernel.org/r/1569485810-761-1-git-send-email-miaoqing@codeaurora.org +[trim useless data from commit message] +Signed-off-by: Johannes Berg +Signed-off-by: Sasha Levin +--- + net/wireless/nl80211.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c +index 334e3181f1c52..a28d6456e93e2 100644 +--- a/net/wireless/nl80211.c ++++ b/net/wireless/nl80211.c +@@ -5843,6 +5843,9 @@ static int nl80211_del_mpath(struct sk_buff *skb, struct genl_info *info) + if (!rdev->ops->del_mpath) + return -EOPNOTSUPP; + ++ if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) ++ return -EOPNOTSUPP; ++ + return rdev_del_mpath(rdev, dev, dst); + } + +-- +2.20.1 + diff --git a/queue-4.19/nvme-pci-fix-a-race-in-controller-removal.patch b/queue-4.19/nvme-pci-fix-a-race-in-controller-removal.patch new file mode 100644 index 00000000000..1d8b80a189d --- /dev/null +++ b/queue-4.19/nvme-pci-fix-a-race-in-controller-removal.patch @@ -0,0 +1,46 @@ +From 30b27693f94193ee887f0eb75d8de22a62fe535c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 18 Sep 2019 00:27:20 +0000 +Subject: nvme-pci: Fix a race in controller removal + +From: Balbir Singh + +[ Upstream commit b224726de5e496dbf78147a66755c3d81e28bdd2 ] + +User space programs like udevd may try to read to partitions at the +same time the driver detects a namespace is unusable, and may deadlock +if revalidate_disk() is called while such a process is waiting to +enter the frozen queue. On detecting a dead namespace, move the disk +revalidate after unblocking dispatchers that may be holding bd_butex. + +changelog Suggested-by: Keith Busch +Signed-off-by: Balbir Singh +Reviewed-by: Keith Busch +Signed-off-by: Sagi Grimberg +Signed-off-by: Sasha Levin +--- + drivers/nvme/host/core.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c +index ae0b01059fc6d..5d0f99bcc987f 100644 +--- a/drivers/nvme/host/core.c ++++ b/drivers/nvme/host/core.c +@@ -111,10 +111,13 @@ static void nvme_set_queue_dying(struct nvme_ns *ns) + */ + if (!ns->disk || test_and_set_bit(NVME_NS_DEAD, &ns->flags)) + return; +- revalidate_disk(ns->disk); + blk_set_queue_dying(ns->queue); + /* Forcibly unquiesce queues to avoid blocking dispatch */ + blk_mq_unquiesce_queue(ns->queue); ++ /* ++ * Revalidate after unblocking dispatchers that may be holding bd_butex ++ */ ++ revalidate_disk(ns->disk); + } + + static void nvme_queue_scan(struct nvme_ctrl *ctrl) +-- +2.20.1 + diff --git a/queue-4.19/r8152-set-macpassthru-in-reset_resume-callback.patch b/queue-4.19/r8152-set-macpassthru-in-reset_resume-callback.patch new file mode 100644 index 00000000000..72163baec19 --- /dev/null +++ b/queue-4.19/r8152-set-macpassthru-in-reset_resume-callback.patch @@ -0,0 +1,46 @@ +From 1b3d71ccef0ba2cae447effa95640e08973b1934 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 4 Oct 2019 20:51:04 +0800 +Subject: r8152: Set macpassthru in reset_resume callback + +From: Kai-Heng Feng + +[ Upstream commit a54cdeeb04fc719e4c7f19d6e28dba7ea86cee5b ] + +r8152 may fail to establish network connection after resume from system +suspend. + +If the USB port connects to r8152 lost its power during system suspend, +the MAC address was written before is lost. The reason is that The MAC +address doesn't get written again in its reset_resume callback. + +So let's set MAC address again in reset_resume callback. Also remove +unnecessary lock as no other locking attempt will happen during +reset_resume. + +Signed-off-by: Kai-Heng Feng +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/usb/r8152.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c +index a065a6184f7e4..a291e5f2daef6 100644 +--- a/drivers/net/usb/r8152.c ++++ b/drivers/net/usb/r8152.c +@@ -4474,10 +4474,9 @@ static int rtl8152_reset_resume(struct usb_interface *intf) + struct r8152 *tp = usb_get_intfdata(intf); + + clear_bit(SELECTIVE_SUSPEND, &tp->flags); +- mutex_lock(&tp->control); + tp->rtl_ops.init(tp); + queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); +- mutex_unlock(&tp->control); ++ set_ethernet_addr(tp); + return rtl8152_resume(intf); + } + +-- +2.20.1 + diff --git a/queue-4.19/scsi-megaraid-disable-device-when-probe-failed-after.patch b/queue-4.19/scsi-megaraid-disable-device-when-probe-failed-after.patch new file mode 100644 index 00000000000..5dc858ea163 --- /dev/null +++ b/queue-4.19/scsi-megaraid-disable-device-when-probe-failed-after.patch @@ -0,0 +1,42 @@ +From 675e36083a192b40501589a0f385d86d9ffa006b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 7 Sep 2019 09:07:30 +0800 +Subject: scsi: megaraid: disable device when probe failed after enabled device + +From: Xiang Chen + +[ Upstream commit 70054aa39a013fa52eff432f2223b8bd5c0048f8 ] + +For pci device, need to disable device when probe failed after enabled +device. + +Link: https://lore.kernel.org/r/1567818450-173315-1-git-send-email-chenxiang66@hisilicon.com +Signed-off-by: Xiang Chen +Reviewed-by: John Garry +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/megaraid.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c +index 8c7154143a4eb..a84878fbf45d2 100644 +--- a/drivers/scsi/megaraid.c ++++ b/drivers/scsi/megaraid.c +@@ -4189,11 +4189,11 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) + */ + if (pdev->subsystem_vendor == PCI_VENDOR_ID_COMPAQ && + pdev->subsystem_device == 0xC000) +- return -ENODEV; ++ goto out_disable_device; + /* Now check the magic signature byte */ + pci_read_config_word(pdev, PCI_CONF_AMISIG, &magic); + if (magic != HBA_SIGNATURE_471 && magic != HBA_SIGNATURE) +- return -ENODEV; ++ goto out_disable_device; + /* Ok it is probably a megaraid */ + } + +-- +2.20.1 + diff --git a/queue-4.19/scsi-qla2xxx-fix-unbound-sleep-in-fcport-delete-path.patch b/queue-4.19/scsi-qla2xxx-fix-unbound-sleep-in-fcport-delete-path.patch new file mode 100644 index 00000000000..31312df3e41 --- /dev/null +++ b/queue-4.19/scsi-qla2xxx-fix-unbound-sleep-in-fcport-delete-path.patch @@ -0,0 +1,47 @@ +From addd3c836df0b74c7a53c1e16db8580f8cf539cd Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 12 Sep 2019 11:09:06 -0700 +Subject: scsi: qla2xxx: Fix unbound sleep in fcport delete path. + +From: Quinn Tran + +[ Upstream commit c3b6a1d397420a0fdd97af2f06abfb78adc370df ] + +There are instances, though rare, where a LOGO request cannot be sent out +and the thread in free session done can wait indefinitely. Fix this by +putting an upper bound to sleep. + +Link: https://lore.kernel.org/r/20190912180918.6436-3-hmadhani@marvell.com +Signed-off-by: Quinn Tran +Signed-off-by: Himanshu Madhani +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/qla2xxx/qla_target.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c +index 7a1cc0b25e594..d6dc320f81a7a 100644 +--- a/drivers/scsi/qla2xxx/qla_target.c ++++ b/drivers/scsi/qla2xxx/qla_target.c +@@ -1023,6 +1023,7 @@ void qlt_free_session_done(struct work_struct *work) + + if (logout_started) { + bool traced = false; ++ u16 cnt = 0; + + while (!READ_ONCE(sess->logout_completed)) { + if (!traced) { +@@ -1032,6 +1033,9 @@ void qlt_free_session_done(struct work_struct *work) + traced = true; + } + msleep(100); ++ cnt++; ++ if (cnt > 200) ++ break; + } + + ql_dbg(ql_dbg_disc, vha, 0xf087, +-- +2.20.1 + diff --git a/queue-4.19/scsi-ufs-skip-shutdown-if-hba-is-not-powered.patch b/queue-4.19/scsi-ufs-skip-shutdown-if-hba-is-not-powered.patch new file mode 100644 index 00000000000..fd6c3378c05 --- /dev/null +++ b/queue-4.19/scsi-ufs-skip-shutdown-if-hba-is-not-powered.patch @@ -0,0 +1,46 @@ +From 730309b46c282d2ba9fa3117aeefefc39ccd27d8 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 18 Sep 2019 12:20:38 +0800 +Subject: scsi: ufs: skip shutdown if hba is not powered + +From: Stanley Chu + +[ Upstream commit f51913eef23f74c3bd07899dc7f1ed6df9e521d8 ] + +In some cases, hba may go through shutdown flow without successful +initialization and then make system hang. + +For example, if ufshcd_change_power_mode() gets error and leads to +ufshcd_hba_exit() to release resources of the host, future shutdown flow +may hang the system since the host register will be accessed in unpowered +state. + +To solve this issue, simply add checking to skip shutdown for above kind of +situation. + +Link: https://lore.kernel.org/r/1568780438-28753-1-git-send-email-stanley.chu@mediatek.com +Signed-off-by: Stanley Chu +Acked-by: Bean Huo +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/ufs/ufshcd.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c +index b8b59cfeacd1f..4aaba3e030554 100644 +--- a/drivers/scsi/ufs/ufshcd.c ++++ b/drivers/scsi/ufs/ufshcd.c +@@ -7874,6 +7874,9 @@ int ufshcd_shutdown(struct ufs_hba *hba) + { + int ret = 0; + ++ if (!hba->is_powered) ++ goto out; ++ + if (ufshcd_is_ufs_dev_poweroff(hba) && ufshcd_is_link_off(hba)) + goto out; + +-- +2.20.1 + diff --git a/queue-4.19/series b/queue-4.19/series new file mode 100644 index 00000000000..bac25ae1cc9 --- /dev/null +++ b/queue-4.19/series @@ -0,0 +1,20 @@ +nvme-pci-fix-a-race-in-controller-removal.patch +scsi-ufs-skip-shutdown-if-hba-is-not-powered.patch +scsi-megaraid-disable-device-when-probe-failed-after.patch +scsi-qla2xxx-fix-unbound-sleep-in-fcport-delete-path.patch +arm-omap2-fix-missing-reset-done-flag-for-am3-and-am.patch +arm-omap2-fix-warnings-with-broken-omap2_set_init_vo.patch +ieee802154-ca8210-prevent-memory-leak.patch +arm-dts-am4372-set-memory-bandwidth-limit-for-dispc.patch +net-dsa-qca8k-use-up-to-7-ports-for-all-operations.patch +mips-dts-ar9331-fix-interrupt-controller-size.patch +xen-efi-set-nonblocking-callbacks.patch +nl80211-fix-null-pointer-dereference.patch +mac80211-fix-txq-null-pointer-dereference.patch +netfilter-nft_connlimit-disable-bh-on-garbage-collec.patch +net-dsa-rtl8366rb-add-missing-of_node_put-after-call.patch +mips-loongson-fix-the-link-time-qualifier-of-serial_.patch +net-hisilicon-fix-usage-of-uninitialized-variable-in.patch +lib-textsearch-fix-escapes-in-example-code.patch +r8152-set-macpassthru-in-reset_resume-callback.patch +namespace-fix-namespace.pl-script-to-support-relativ.patch diff --git a/queue-4.19/xen-efi-set-nonblocking-callbacks.patch b/queue-4.19/xen-efi-set-nonblocking-callbacks.patch new file mode 100644 index 00000000000..b39cff3c0fb --- /dev/null +++ b/queue-4.19/xen-efi-set-nonblocking-callbacks.patch @@ -0,0 +1,54 @@ +From dd55d056bb8c55eb750dbe76372cd8d9af675061 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 27 Sep 2019 16:49:20 +0100 +Subject: xen/efi: Set nonblocking callbacks + +From: Ross Lagerwall + +[ Upstream commit df359f0d09dc029829b66322707a2f558cb720f7 ] + +Other parts of the kernel expect these nonblocking EFI callbacks to +exist and crash when running under Xen. Since the implementations of +xen_efi_set_variable() and xen_efi_query_variable_info() do not take any +locks, use them for the nonblocking callbacks too. + +Signed-off-by: Ross Lagerwall +Reviewed-by: Juergen Gross +Signed-off-by: Juergen Gross +Signed-off-by: Sasha Levin +--- + arch/arm/xen/efi.c | 2 ++ + arch/x86/xen/efi.c | 2 ++ + 2 files changed, 4 insertions(+) + +diff --git a/arch/arm/xen/efi.c b/arch/arm/xen/efi.c +index b4d78959cadf0..bc9a37b3cecd6 100644 +--- a/arch/arm/xen/efi.c ++++ b/arch/arm/xen/efi.c +@@ -31,7 +31,9 @@ void __init xen_efi_runtime_setup(void) + efi.get_variable = xen_efi_get_variable; + efi.get_next_variable = xen_efi_get_next_variable; + efi.set_variable = xen_efi_set_variable; ++ efi.set_variable_nonblocking = xen_efi_set_variable; + efi.query_variable_info = xen_efi_query_variable_info; ++ efi.query_variable_info_nonblocking = xen_efi_query_variable_info; + efi.update_capsule = xen_efi_update_capsule; + efi.query_capsule_caps = xen_efi_query_capsule_caps; + efi.get_next_high_mono_count = xen_efi_get_next_high_mono_count; +diff --git a/arch/x86/xen/efi.c b/arch/x86/xen/efi.c +index 1804b27f9632a..66bcdeeee639a 100644 +--- a/arch/x86/xen/efi.c ++++ b/arch/x86/xen/efi.c +@@ -77,7 +77,9 @@ static efi_system_table_t __init *xen_efi_probe(void) + efi.get_variable = xen_efi_get_variable; + efi.get_next_variable = xen_efi_get_next_variable; + efi.set_variable = xen_efi_set_variable; ++ efi.set_variable_nonblocking = xen_efi_set_variable; + efi.query_variable_info = xen_efi_query_variable_info; ++ efi.query_variable_info_nonblocking = xen_efi_query_variable_info; + efi.update_capsule = xen_efi_update_capsule; + efi.query_capsule_caps = xen_efi_query_capsule_caps; + efi.get_next_high_mono_count = xen_efi_get_next_high_mono_count; +-- +2.20.1 +