From: Greg Kroah-Hartman Date: Tue, 16 Oct 2018 10:17:10 +0000 (+0200) Subject: 4.14-stable patches X-Git-Tag: v4.9.134~26 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d1211e96800ac8b62733dcb70389d48136d7297a;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: arm-dts-at91-add-new-compatibility-string-for-macb-on-sama5d3.patch asoc-rsnd-adg-care-clock-frequency-size.patch asoc-rsnd-don-t-fallback-to-pio-mode-when-eprobe_defer.patch asoc-rt5514-fix-the-issue-of-the-delay-volume-applied-again.patch asoc-sigmadsp-safeload-should-not-have-lower-byte-limit.patch asoc-wm8804-add-acpi-support.patch bluetooth-hci_ldisc-free-rw_semaphore-on-close.patch clk-x86-add-ether_clk-alias-for-bay-trail-cherry-trail.patch clk-x86-stop-marking-clocks-as-clk_is_critical.patch drm-amdgpu-fix-sdma-hqd-destroy-error-on-gfx_v7.patch hv_netvsc-fix-schedule-in-rcu-context.patch mfd-omap-usb-host-fix-dts-probe-of-children.patch net-macb-disable-scatter-gather-for-macb-on-sama5d3.patch pci-hv-support-reporting-serial-number-as-slot-information.patch scsi-iscsi-target-don-t-use-stack-buffer-for-scatterlist.patch scsi-qla2xxx-fix-an-endian-bug-in-fcpcmd_is_corrupted.patch selftests-efivarfs-add-required-kernel-configs.patch selftests-memory-hotplug-add-required-configs.patch sound-don-t-call-skl_init_chip-to-reset-intel-skl-soc.patch sound-enable-interrupt-after-dma-buffer-initialization.patch stmmac-fix-valid-numbers-of-unicast-filter-entries.patch x86-kvm-lapic-always-disable-mmio-interface-in-x2apic-mode.patch --- diff --git a/queue-4.14/arm-dts-at91-add-new-compatibility-string-for-macb-on-sama5d3.patch b/queue-4.14/arm-dts-at91-add-new-compatibility-string-for-macb-on-sama5d3.patch new file mode 100644 index 00000000000..67e9bb76451 --- /dev/null +++ b/queue-4.14/arm-dts-at91-add-new-compatibility-string-for-macb-on-sama5d3.patch @@ -0,0 +1,43 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Nicolas Ferre +Date: Fri, 14 Sep 2018 17:48:11 +0200 +Subject: ARM: dts: at91: add new compatibility string for macb on sama5d3 + +From: Nicolas Ferre + +[ Upstream commit 321cc359d899a8e988f3725d87c18a628e1cc624 ] + +We need this new compatibility string as we experienced different behavior +for this 10/100Mbits/s macb interface on this particular SoC. +Backward compatibility is preserved as we keep the alternative strings. + +Signed-off-by: Nicolas Ferre +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + Documentation/devicetree/bindings/net/macb.txt | 1 + + arch/arm/boot/dts/sama5d3_emac.dtsi | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +--- a/Documentation/devicetree/bindings/net/macb.txt ++++ b/Documentation/devicetree/bindings/net/macb.txt +@@ -10,6 +10,7 @@ Required properties: + Use "cdns,pc302-gem" for Picochip picoXcell pc302 and later devices based on + the Cadence GEM, or the generic form: "cdns,gem". + Use "atmel,sama5d2-gem" for the GEM IP (10/100) available on Atmel sama5d2 SoCs. ++ Use "atmel,sama5d3-macb" for the 10/100Mbit IP available on Atmel sama5d3 SoCs. + Use "atmel,sama5d3-gem" for the Gigabit IP available on Atmel sama5d3 SoCs. + Use "atmel,sama5d4-gem" for the GEM IP (10/100) available on Atmel sama5d4 SoCs. + Use "cdns,zynq-gem" Xilinx Zynq-7xxx SoC. +--- a/arch/arm/boot/dts/sama5d3_emac.dtsi ++++ b/arch/arm/boot/dts/sama5d3_emac.dtsi +@@ -41,7 +41,7 @@ + }; + + macb1: ethernet@f802c000 { +- compatible = "cdns,at91sam9260-macb", "cdns,macb"; ++ compatible = "atmel,sama5d3-macb", "cdns,at91sam9260-macb", "cdns,macb"; + reg = <0xf802c000 0x100>; + interrupts = <35 IRQ_TYPE_LEVEL_HIGH 3>; + pinctrl-names = "default"; diff --git a/queue-4.14/asoc-rsnd-adg-care-clock-frequency-size.patch b/queue-4.14/asoc-rsnd-adg-care-clock-frequency-size.patch new file mode 100644 index 00000000000..4641d6a1d88 --- /dev/null +++ b/queue-4.14/asoc-rsnd-adg-care-clock-frequency-size.patch @@ -0,0 +1,38 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Kuninori Morimoto +Date: Thu, 6 Sep 2018 03:21:33 +0000 +Subject: ASoC: rsnd: adg: care clock-frequency size + +From: Kuninori Morimoto + +[ Upstream commit 69235ccf491d2e26aefd465c0d3ccd1e3b2a9a9c ] + +ADG has buffer over flow bug if DT has more than 3 clock-frequency. +This patch fixup this issue, and uses first 2 values. + + clock-frequency = ; /* this is OK */ + clock-frequency = ; /* this is NG */ + +Signed-off-by: Kuninori Morimoto +Tested-by: Hiroyuki Yokoyama +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + sound/soc/sh/rcar/adg.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/sound/soc/sh/rcar/adg.c ++++ b/sound/soc/sh/rcar/adg.c +@@ -467,6 +467,11 @@ static void rsnd_adg_get_clkout(struct r + goto rsnd_adg_get_clkout_end; + + req_size = prop->length / sizeof(u32); ++ if (req_size > REQ_SIZE) { ++ dev_err(dev, ++ "too many clock-frequency, use top %d\n", REQ_SIZE); ++ req_size = REQ_SIZE; ++ } + + of_property_read_u32_array(np, "clock-frequency", req_rate, req_size); + req_48kHz_rate = 0; diff --git a/queue-4.14/asoc-rsnd-don-t-fallback-to-pio-mode-when-eprobe_defer.patch b/queue-4.14/asoc-rsnd-don-t-fallback-to-pio-mode-when-eprobe_defer.patch new file mode 100644 index 00000000000..a859009c64d --- /dev/null +++ b/queue-4.14/asoc-rsnd-don-t-fallback-to-pio-mode-when-eprobe_defer.patch @@ -0,0 +1,73 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Kuninori Morimoto +Date: Thu, 6 Sep 2018 03:21:47 +0000 +Subject: ASoC: rsnd: don't fallback to PIO mode when -EPROBE_DEFER + +From: Kuninori Morimoto + +[ Upstream commit 6c92d5a2744e27619a8fcc9d74b91ee9f1cdebd1 ] + +Current rsnd driver will fallback to PIO mode if it can't get DMA +handler. But, DMA might return -EPROBE_DEFER when probe timing. +This driver always fallback to PIO mode especially from +commit ac6bbf0cdf4206c ("iommu: Remove IOMMU_OF_DECLARE") because +of this reason. + +The DMA driver will be probed later, but sound driver might be +probed as PIO mode in such case. This patch fixup this issue. +Then, -EPROBE_DEFER is not error. Thus, let's don't indicate error +message in such case. +And it needs to call rsnd_adg_remove() individually if probe failed, +because it registers clk which should be unregister. + +Maybe PIO fallback feature itself is not needed, +but let's keep it so far. + +Signed-off-by: Kuninori Morimoto +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + sound/soc/sh/rcar/core.c | 10 +++++++++- + sound/soc/sh/rcar/dma.c | 4 ++++ + 2 files changed, 13 insertions(+), 1 deletion(-) + +--- a/sound/soc/sh/rcar/core.c ++++ b/sound/soc/sh/rcar/core.c +@@ -486,7 +486,7 @@ static int rsnd_status_update(u32 *statu + (func_call && (mod)->ops->fn) ? #fn : ""); \ + if (func_call && (mod)->ops->fn) \ + tmp = (mod)->ops->fn(mod, io, param); \ +- if (tmp) \ ++ if (tmp && (tmp != -EPROBE_DEFER)) \ + dev_err(dev, "%s[%d] : %s error %d\n", \ + rsnd_mod_name(mod), rsnd_mod_id(mod), \ + #fn, tmp); \ +@@ -1469,6 +1469,14 @@ exit_snd_probe: + rsnd_dai_call(remove, &rdai->capture, priv); + } + ++ /* ++ * adg is very special mod which can't use rsnd_dai_call(remove), ++ * and it registers ADG clock on probe. ++ * It should be unregister if probe failed. ++ * Mainly it is assuming -EPROBE_DEFER case ++ */ ++ rsnd_adg_remove(priv); ++ + return ret; + } + +--- a/sound/soc/sh/rcar/dma.c ++++ b/sound/soc/sh/rcar/dma.c +@@ -330,6 +330,10 @@ static int rsnd_dmaen_attach(struct rsnd + /* try to get DMAEngine channel */ + chan = rsnd_dmaen_request_channel(io, mod_from, mod_to); + if (IS_ERR_OR_NULL(chan)) { ++ /* Let's follow when -EPROBE_DEFER case */ ++ if (PTR_ERR(chan) == -EPROBE_DEFER) ++ return PTR_ERR(chan); ++ + /* + * DMA failed. try to PIO mode + * see diff --git a/queue-4.14/asoc-rt5514-fix-the-issue-of-the-delay-volume-applied-again.patch b/queue-4.14/asoc-rt5514-fix-the-issue-of-the-delay-volume-applied-again.patch new file mode 100644 index 00000000000..3e0fe61d334 --- /dev/null +++ b/queue-4.14/asoc-rt5514-fix-the-issue-of-the-delay-volume-applied-again.patch @@ -0,0 +1,46 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Oder Chiou +Date: Wed, 15 Aug 2018 14:47:49 +0800 +Subject: ASoC: rt5514: Fix the issue of the delay volume applied again + +From: Oder Chiou + +[ Upstream commit 6f0a256253f48095ba2e5bcdfbed41f21643c105 ] + +After our evaluation, we need to modify the default values to make sure +the volume applied immediately. + +Signed-off-by: Oder Chiou +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + sound/soc/codecs/rt5514.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/sound/soc/codecs/rt5514.c ++++ b/sound/soc/codecs/rt5514.c +@@ -64,8 +64,8 @@ static const struct reg_sequence rt5514_ + {RT5514_ANA_CTRL_LDO10, 0x00028604}, + {RT5514_ANA_CTRL_ADCFED, 0x00000800}, + {RT5514_ASRC_IN_CTRL1, 0x00000003}, +- {RT5514_DOWNFILTER0_CTRL3, 0x10000352}, +- {RT5514_DOWNFILTER1_CTRL3, 0x10000352}, ++ {RT5514_DOWNFILTER0_CTRL3, 0x10000342}, ++ {RT5514_DOWNFILTER1_CTRL3, 0x10000342}, + }; + + static const struct reg_default rt5514_reg[] = { +@@ -92,10 +92,10 @@ static const struct reg_default rt5514_r + {RT5514_ASRC_IN_CTRL1, 0x00000003}, + {RT5514_DOWNFILTER0_CTRL1, 0x00020c2f}, + {RT5514_DOWNFILTER0_CTRL2, 0x00020c2f}, +- {RT5514_DOWNFILTER0_CTRL3, 0x10000352}, ++ {RT5514_DOWNFILTER0_CTRL3, 0x10000342}, + {RT5514_DOWNFILTER1_CTRL1, 0x00020c2f}, + {RT5514_DOWNFILTER1_CTRL2, 0x00020c2f}, +- {RT5514_DOWNFILTER1_CTRL3, 0x10000352}, ++ {RT5514_DOWNFILTER1_CTRL3, 0x10000342}, + {RT5514_ANA_CTRL_LDO10, 0x00028604}, + {RT5514_ANA_CTRL_LDO18_16, 0x02000345}, + {RT5514_ANA_CTRL_ADC12, 0x0000a2a8}, diff --git a/queue-4.14/asoc-sigmadsp-safeload-should-not-have-lower-byte-limit.patch b/queue-4.14/asoc-sigmadsp-safeload-should-not-have-lower-byte-limit.patch new file mode 100644 index 00000000000..f68ee5ab570 --- /dev/null +++ b/queue-4.14/asoc-sigmadsp-safeload-should-not-have-lower-byte-limit.patch @@ -0,0 +1,33 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Danny Smith +Date: Thu, 23 Aug 2018 10:26:20 +0200 +Subject: ASoC: sigmadsp: safeload should not have lower byte limit + +From: Danny Smith + +[ Upstream commit 5ea752c6efdf5aa8a57aed816d453a8f479f1b0a ] + +Fixed range in safeload conditional to allow safeload to up to 20 bytes, +without a lower limit. + +Signed-off-by: Danny Smith +Acked-by: Lars-Peter Clausen +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + sound/soc/codecs/sigmadsp.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/sound/soc/codecs/sigmadsp.c ++++ b/sound/soc/codecs/sigmadsp.c +@@ -117,8 +117,7 @@ static int sigmadsp_ctrl_write(struct si + struct sigmadsp_control *ctrl, void *data) + { + /* safeload loads up to 20 bytes in a atomic operation */ +- if (ctrl->num_bytes > 4 && ctrl->num_bytes <= 20 && sigmadsp->ops && +- sigmadsp->ops->safeload) ++ if (ctrl->num_bytes <= 20 && sigmadsp->ops && sigmadsp->ops->safeload) + return sigmadsp->ops->safeload(sigmadsp, ctrl->addr, data, + ctrl->num_bytes); + else diff --git a/queue-4.14/asoc-wm8804-add-acpi-support.patch b/queue-4.14/asoc-wm8804-add-acpi-support.patch new file mode 100644 index 00000000000..553c69bf056 --- /dev/null +++ b/queue-4.14/asoc-wm8804-add-acpi-support.patch @@ -0,0 +1,66 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Pierre-Louis Bossart +Date: Wed, 22 Aug 2018 22:49:36 -0500 +Subject: ASoC: wm8804: Add ACPI support + +From: Pierre-Louis Bossart + +[ Upstream commit 960cdd50ca9fdfeb82c2757107bcb7f93c8d7d41 ] + +HID made of either Wolfson/CirrusLogic PCI ID + 8804 identifier. + +This helps enumerate the HifiBerry Digi+ HAT boards on the Up2 platform. + +The scripts at https://github.com/thesofproject/acpi-scripts can be +used to add the ACPI initrd overlays. + +Signed-off-by: Pierre-Louis Bossart +Acked-by: Charles Keepax +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + sound/soc/codecs/wm8804-i2c.c | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +--- a/sound/soc/codecs/wm8804-i2c.c ++++ b/sound/soc/codecs/wm8804-i2c.c +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + + #include "wm8804.h" + +@@ -40,17 +41,29 @@ static const struct i2c_device_id wm8804 + }; + MODULE_DEVICE_TABLE(i2c, wm8804_i2c_id); + ++#if defined(CONFIG_OF) + static const struct of_device_id wm8804_of_match[] = { + { .compatible = "wlf,wm8804", }, + { } + }; + MODULE_DEVICE_TABLE(of, wm8804_of_match); ++#endif ++ ++#ifdef CONFIG_ACPI ++static const struct acpi_device_id wm8804_acpi_match[] = { ++ { "1AEC8804", 0 }, /* Wolfson PCI ID + part ID */ ++ { "10138804", 0 }, /* Cirrus Logic PCI ID + part ID */ ++ { }, ++}; ++MODULE_DEVICE_TABLE(acpi, wm8804_acpi_match); ++#endif + + static struct i2c_driver wm8804_i2c_driver = { + .driver = { + .name = "wm8804", + .pm = &wm8804_pm, +- .of_match_table = wm8804_of_match, ++ .of_match_table = of_match_ptr(wm8804_of_match), ++ .acpi_match_table = ACPI_PTR(wm8804_acpi_match), + }, + .probe = wm8804_i2c_probe, + .remove = wm8804_i2c_remove, diff --git a/queue-4.14/bluetooth-hci_ldisc-free-rw_semaphore-on-close.patch b/queue-4.14/bluetooth-hci_ldisc-free-rw_semaphore-on-close.patch new file mode 100644 index 00000000000..bf4378d20a7 --- /dev/null +++ b/queue-4.14/bluetooth-hci_ldisc-free-rw_semaphore-on-close.patch @@ -0,0 +1,56 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Hermes Zhang +Date: Tue, 28 Aug 2018 09:48:30 +0800 +Subject: Bluetooth: hci_ldisc: Free rw_semaphore on close + +From: Hermes Zhang + +[ Upstream commit e6a57d22f787e73635ce0d29eef0abb77928b3e9 ] + +The percpu_rw_semaphore is not currently freed, and this leads to +a crash when the stale rcu callback is invoked. DEBUG_OBJECTS +detects this. + + ODEBUG: free active (active state 1) object type: rcu_head hint: (null) + ------------[ cut here ]------------ + WARNING: CPU: 1 PID: 2024 at debug_print_object+0xac/0xc8 + PC is at debug_print_object+0xac/0xc8 + LR is at debug_print_object+0xac/0xc8 + Call trace: + [] debug_print_object+0xac/0xc8 + [] debug_check_no_obj_freed+0x1e8/0x228 + [] kfree+0x1cc/0x250 + [] hci_uart_tty_close+0x54/0x108 + [] tty_ldisc_close.isra.1+0x40/0x58 + [] tty_ldisc_kill+0x1c/0x40 + [] tty_ldisc_release+0x94/0x170 + [] tty_release_struct+0x1c/0x58 + [] tty_release+0x3b0/0x490 + [] __fput+0x88/0x1d0 + [] ____fput+0xc/0x18 + [] task_work_run+0x9c/0xc0 + [] do_exit+0x24c/0x8a0 + [] do_group_exit+0x38/0xa0 + [] __wake_up_parent+0x0/0x28 + [] el0_svc_naked+0x34/0x38 + ---[ end trace bfe08cbd89098cdf ]--- + +Signed-off-by: Hermes Zhang +Signed-off-by: Marcel Holtmann +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/bluetooth/hci_ldisc.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/bluetooth/hci_ldisc.c ++++ b/drivers/bluetooth/hci_ldisc.c +@@ -539,6 +539,8 @@ static void hci_uart_tty_close(struct tt + } + clear_bit(HCI_UART_PROTO_SET, &hu->flags); + ++ percpu_free_rwsem(&hu->proto_lock); ++ + kfree(hu); + } + diff --git a/queue-4.14/clk-x86-add-ether_clk-alias-for-bay-trail-cherry-trail.patch b/queue-4.14/clk-x86-add-ether_clk-alias-for-bay-trail-cherry-trail.patch new file mode 100644 index 00000000000..b84d948b530 --- /dev/null +++ b/queue-4.14/clk-x86-add-ether_clk-alias-for-bay-trail-cherry-trail.patch @@ -0,0 +1,77 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Hans de Goede +Date: Wed, 12 Sep 2018 11:34:54 +0200 +Subject: clk: x86: add "ether_clk" alias for Bay Trail / Cherry Trail + +From: Hans de Goede + +[ Upstream commit b1e3454d39f992e5409cd19f97782185950df6e7 ] + +Commit d31fd43c0f9a ("clk: x86: Do not gate clocks enabled by the +firmware") causes all unclaimed PMC clocks on Cherry Trail devices to be on +all the time, resulting on the device not being able to reach S0i2 or S0i3 +when suspended. + +The reason for this commit is that on some Bay Trail / Cherry Trail devices +the ethernet controller uses pmc_plt_clk_4. This commit adds an "ether_clk" +alias, so that the relevant ethernet drivers can try to (optionally) use +this, without needing X86 specific code / hacks, thus fixing ethernet on +these devices without breaking S0i3 support. + +This commit uses clkdev_hw_create() to create the alias, mirroring the code +for the already existing "mclk" alias for pmc_plt_clk_3. + +Buglink: https://bugzilla.kernel.org/show_bug.cgi?id=193891#c102 +Buglink: https://bugzilla.kernel.org/show_bug.cgi?id=196861 +Cc: Johannes Stezenbach +Cc: Carlo Caione +Reported-by: Johannes Stezenbach +Acked-by: Stephen Boyd +Reviewed-by: Andy Shevchenko +Signed-off-by: Hans de Goede +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/clk/x86/clk-pmc-atom.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +--- a/drivers/clk/x86/clk-pmc-atom.c ++++ b/drivers/clk/x86/clk-pmc-atom.c +@@ -55,6 +55,7 @@ struct clk_plt_data { + u8 nparents; + struct clk_plt *clks[PMC_CLK_NUM]; + struct clk_lookup *mclk_lookup; ++ struct clk_lookup *ether_clk_lookup; + }; + + /* Return an index in parent table */ +@@ -351,11 +352,20 @@ static int plt_clk_probe(struct platform + goto err_unreg_clk_plt; + } + ++ data->ether_clk_lookup = clkdev_hw_create(&data->clks[4]->hw, ++ "ether_clk", NULL); ++ if (!data->ether_clk_lookup) { ++ err = -ENOMEM; ++ goto err_drop_mclk; ++ } ++ + plt_clk_free_parent_names_loop(parent_names, data->nparents); + + platform_set_drvdata(pdev, data); + return 0; + ++err_drop_mclk: ++ clkdev_drop(data->mclk_lookup); + err_unreg_clk_plt: + plt_clk_unregister_loop(data, i); + plt_clk_unregister_parents(data); +@@ -369,6 +379,7 @@ static int plt_clk_remove(struct platfor + + data = platform_get_drvdata(pdev); + ++ clkdev_drop(data->ether_clk_lookup); + clkdev_drop(data->mclk_lookup); + plt_clk_unregister_loop(data, PMC_CLK_NUM); + plt_clk_unregister_parents(data); diff --git a/queue-4.14/clk-x86-stop-marking-clocks-as-clk_is_critical.patch b/queue-4.14/clk-x86-stop-marking-clocks-as-clk_is_critical.patch new file mode 100644 index 00000000000..a77c77aba78 --- /dev/null +++ b/queue-4.14/clk-x86-stop-marking-clocks-as-clk_is_critical.patch @@ -0,0 +1,55 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Hans de Goede +Date: Wed, 12 Sep 2018 11:34:56 +0200 +Subject: clk: x86: Stop marking clocks as CLK_IS_CRITICAL + +From: Hans de Goede + +[ Upstream commit 648e921888ad96ea3dc922739e96716ad3225d7f ] + +Commit d31fd43c0f9a ("clk: x86: Do not gate clocks enabled by the +firmware"), which added the code to mark clocks as CLK_IS_CRITICAL, causes +all unclaimed PMC clocks on Cherry Trail devices to be on all the time, +resulting on the device not being able to reach S0i3 when suspended. + +The reason for this commit is that on some Bay Trail / Cherry Trail devices +the r8169 ethernet controller uses pmc_plt_clk_4. Now that the clk-pmc-atom +driver exports an "ether_clk" alias for pmc_plt_clk_4 and the r8169 driver +has been modified to get and enable this clock (if present) the marking of +the clocks as CLK_IS_CRITICAL is no longer necessary. + +This commit removes the CLK_IS_CRITICAL marking, fixing Cherry Trail +devices not being able to reach S0i3 greatly decreasing their battery +drain when suspended. + +Buglink: https://bugzilla.kernel.org/show_bug.cgi?id=193891#c102 +Buglink: https://bugzilla.kernel.org/show_bug.cgi?id=196861 +Cc: Johannes Stezenbach +Cc: Carlo Caione +Reported-by: Johannes Stezenbach +Reviewed-by: Andy Shevchenko +Acked-by: Stephen Boyd +Signed-off-by: Hans de Goede +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/clk/x86/clk-pmc-atom.c | 7 ------- + 1 file changed, 7 deletions(-) + +--- a/drivers/clk/x86/clk-pmc-atom.c ++++ b/drivers/clk/x86/clk-pmc-atom.c +@@ -187,13 +187,6 @@ static struct clk_plt *plt_clk_register( + pclk->reg = base + PMC_CLK_CTL_OFFSET + id * PMC_CLK_CTL_SIZE; + spin_lock_init(&pclk->lock); + +- /* +- * If the clock was already enabled by the firmware mark it as critical +- * to avoid it being gated by the clock framework if no driver owns it. +- */ +- if (plt_clk_is_enabled(&pclk->hw)) +- init.flags |= CLK_IS_CRITICAL; +- + ret = devm_clk_hw_register(&pdev->dev, &pclk->hw); + if (ret) { + pclk = ERR_PTR(ret); diff --git a/queue-4.14/drm-amdgpu-fix-sdma-hqd-destroy-error-on-gfx_v7.patch b/queue-4.14/drm-amdgpu-fix-sdma-hqd-destroy-error-on-gfx_v7.patch new file mode 100644 index 00000000000..6a35c0b62f4 --- /dev/null +++ b/queue-4.14/drm-amdgpu-fix-sdma-hqd-destroy-error-on-gfx_v7.patch @@ -0,0 +1,35 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Amber Lin +Date: Wed, 12 Sep 2018 21:42:18 -0400 +Subject: drm/amdgpu: Fix SDMA HQD destroy error on gfx_v7 + +From: Amber Lin + +[ Upstream commit caaa4c8a6be2a275bd14f2369ee364978ff74704 ] + +A wrong register bit was examinated for checking SDMA status so it reports +false failures. This typo only appears on gfx_v7. gfx_v8 checks the correct +bit. + +Acked-by: Alex Deucher +Signed-off-by: Amber Lin +Reviewed-by: Felix Kuehling +Signed-off-by: Felix Kuehling +Signed-off-by: Alex Deucher +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c +@@ -576,7 +576,7 @@ static int kgd_hqd_sdma_destroy(struct k + + while (true) { + temp = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS); +- if (temp & SDMA0_STATUS_REG__RB_CMD_IDLE__SHIFT) ++ if (temp & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK) + break; + if (timeout <= 0) + return -ETIME; diff --git a/queue-4.14/hv_netvsc-fix-schedule-in-rcu-context.patch b/queue-4.14/hv_netvsc-fix-schedule-in-rcu-context.patch new file mode 100644 index 00000000000..741d9792478 --- /dev/null +++ b/queue-4.14/hv_netvsc-fix-schedule-in-rcu-context.patch @@ -0,0 +1,107 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Stephen Hemminger +Date: Thu, 13 Sep 2018 08:03:43 -0700 +Subject: hv_netvsc: fix schedule in RCU context + +From: Stephen Hemminger + +[ Upstream commit 018349d70f28a78d5343b3660cb66e1667005f8a ] + +When netvsc device is removed it can call reschedule in RCU context. +This happens because canceling the subchannel setup work could (in theory) +cause a reschedule when manipulating the timer. + +To reproduce, run with lockdep enabled kernel and unbind +a network device from hv_netvsc (via sysfs). + +[ 160.682011] WARNING: suspicious RCU usage +[ 160.707466] 4.19.0-rc3-uio+ #2 Not tainted +[ 160.709937] ----------------------------- +[ 160.712352] ./include/linux/rcupdate.h:302 Illegal context switch in RCU read-side critical section! +[ 160.723691] +[ 160.723691] other info that might help us debug this: +[ 160.723691] +[ 160.730955] +[ 160.730955] rcu_scheduler_active = 2, debug_locks = 1 +[ 160.762813] 5 locks held by rebind-eth.sh/1812: +[ 160.766851] #0: 000000008befa37a (sb_writers#6){.+.+}, at: vfs_write+0x184/0x1b0 +[ 160.773416] #1: 00000000b097f236 (&of->mutex){+.+.}, at: kernfs_fop_write+0xe2/0x1a0 +[ 160.783766] #2: 0000000041ee6889 (kn->count#3){++++}, at: kernfs_fop_write+0xeb/0x1a0 +[ 160.787465] #3: 0000000056d92a74 (&dev->mutex){....}, at: device_release_driver_internal+0x39/0x250 +[ 160.816987] #4: 0000000030f6031e (rcu_read_lock){....}, at: netvsc_remove+0x1e/0x250 [hv_netvsc] +[ 160.828629] +[ 160.828629] stack backtrace: +[ 160.831966] CPU: 1 PID: 1812 Comm: rebind-eth.sh Not tainted 4.19.0-rc3-uio+ #2 +[ 160.832952] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS Hyper-V UEFI Release v1.0 11/26/2012 +[ 160.832952] Call Trace: +[ 160.832952] dump_stack+0x85/0xcb +[ 160.832952] ___might_sleep+0x1a3/0x240 +[ 160.832952] __flush_work+0x57/0x2e0 +[ 160.832952] ? __mutex_lock+0x83/0x990 +[ 160.832952] ? __kernfs_remove+0x24f/0x2e0 +[ 160.832952] ? __kernfs_remove+0x1b2/0x2e0 +[ 160.832952] ? mark_held_locks+0x50/0x80 +[ 160.832952] ? get_work_pool+0x90/0x90 +[ 160.832952] __cancel_work_timer+0x13c/0x1e0 +[ 160.832952] ? netvsc_remove+0x1e/0x250 [hv_netvsc] +[ 160.832952] ? __lock_is_held+0x55/0x90 +[ 160.832952] netvsc_remove+0x9a/0x250 [hv_netvsc] +[ 160.832952] vmbus_remove+0x26/0x30 +[ 160.832952] device_release_driver_internal+0x18a/0x250 +[ 160.832952] unbind_store+0xb4/0x180 +[ 160.832952] kernfs_fop_write+0x113/0x1a0 +[ 160.832952] __vfs_write+0x36/0x1a0 +[ 160.832952] ? rcu_read_lock_sched_held+0x6b/0x80 +[ 160.832952] ? rcu_sync_lockdep_assert+0x2e/0x60 +[ 160.832952] ? __sb_start_write+0x141/0x1a0 +[ 160.832952] ? vfs_write+0x184/0x1b0 +[ 160.832952] vfs_write+0xbe/0x1b0 +[ 160.832952] ksys_write+0x55/0xc0 +[ 160.832952] do_syscall_64+0x60/0x1b0 +[ 160.832952] entry_SYSCALL_64_after_hwframe+0x49/0xbe +[ 160.832952] RIP: 0033:0x7fe48f4c8154 + +Resolve this by getting RTNL earlier. This is safe because the subchannel +work queue does trylock on RTNL and will detect the race. + +Fixes: 7b2ee50c0cd5 ("hv_netvsc: common detach logic") +Signed-off-by: Stephen Hemminger +Reviewed-by: Haiyang Zhang +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/hyperv/netvsc_drv.c | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +--- a/drivers/net/hyperv/netvsc_drv.c ++++ b/drivers/net/hyperv/netvsc_drv.c +@@ -2110,17 +2110,15 @@ static int netvsc_remove(struct hv_devic + + cancel_delayed_work_sync(&ndev_ctx->dwork); + +- rcu_read_lock(); +- nvdev = rcu_dereference(ndev_ctx->nvdev); +- +- if (nvdev) ++ rtnl_lock(); ++ nvdev = rtnl_dereference(ndev_ctx->nvdev); ++ if (nvdev) + cancel_work_sync(&nvdev->subchan_work); + + /* + * Call to the vsc driver to let it know that the device is being + * removed. Also blocks mtu and channel changes. + */ +- rtnl_lock(); + vf_netdev = rtnl_dereference(ndev_ctx->vf_netdev); + if (vf_netdev) + netvsc_unregister_vf(vf_netdev); +@@ -2132,7 +2130,6 @@ static int netvsc_remove(struct hv_devic + list_del(&ndev_ctx->list); + + rtnl_unlock(); +- rcu_read_unlock(); + + hv_set_drvdata(dev, NULL); + diff --git a/queue-4.14/mfd-omap-usb-host-fix-dts-probe-of-children.patch b/queue-4.14/mfd-omap-usb-host-fix-dts-probe-of-children.patch new file mode 100644 index 00000000000..c41b61f9c61 --- /dev/null +++ b/queue-4.14/mfd-omap-usb-host-fix-dts-probe-of-children.patch @@ -0,0 +1,68 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Tony Lindgren +Date: Wed, 25 Apr 2018 07:29:22 -0700 +Subject: mfd: omap-usb-host: Fix dts probe of children + +From: Tony Lindgren + +[ Upstream commit 10492ee8ed9188d6d420e1f79b2b9bdbc0624e65 ] + +It currently only works if the parent bus uses "simple-bus". We +currently try to probe children with non-existing compatible values. +And we're missing .probe. + +I noticed this while testing devices configured to probe using ti-sysc +interconnect target module driver. For that we also may want to rebind +the driver, so let's remove __init and __exit. + +Signed-off-by: Tony Lindgren +Acked-by: Roger Quadros +Signed-off-by: Lee Jones +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/mfd/omap-usb-host.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +--- a/drivers/mfd/omap-usb-host.c ++++ b/drivers/mfd/omap-usb-host.c +@@ -548,8 +548,8 @@ static int usbhs_omap_get_dt_pdata(struc + } + + static const struct of_device_id usbhs_child_match_table[] = { +- { .compatible = "ti,omap-ehci", }, +- { .compatible = "ti,omap-ohci", }, ++ { .compatible = "ti,ehci-omap", }, ++ { .compatible = "ti,ohci-omap3", }, + { } + }; + +@@ -875,6 +875,7 @@ static struct platform_driver usbhs_omap + .pm = &usbhsomap_dev_pm_ops, + .of_match_table = usbhs_omap_dt_ids, + }, ++ .probe = usbhs_omap_probe, + .remove = usbhs_omap_remove, + }; + +@@ -884,9 +885,9 @@ MODULE_ALIAS("platform:" USBHS_DRIVER_NA + MODULE_LICENSE("GPL v2"); + MODULE_DESCRIPTION("usb host common core driver for omap EHCI and OHCI"); + +-static int __init omap_usbhs_drvinit(void) ++static int omap_usbhs_drvinit(void) + { +- return platform_driver_probe(&usbhs_omap_driver, usbhs_omap_probe); ++ return platform_driver_register(&usbhs_omap_driver); + } + + /* +@@ -898,7 +899,7 @@ static int __init omap_usbhs_drvinit(voi + */ + fs_initcall_sync(omap_usbhs_drvinit); + +-static void __exit omap_usbhs_drvexit(void) ++static void omap_usbhs_drvexit(void) + { + platform_driver_unregister(&usbhs_omap_driver); + } diff --git a/queue-4.14/net-macb-disable-scatter-gather-for-macb-on-sama5d3.patch b/queue-4.14/net-macb-disable-scatter-gather-for-macb-on-sama5d3.patch new file mode 100644 index 00000000000..12f647e9406 --- /dev/null +++ b/queue-4.14/net-macb-disable-scatter-gather-for-macb-on-sama5d3.patch @@ -0,0 +1,45 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Nicolas Ferre +Date: Fri, 14 Sep 2018 17:48:10 +0200 +Subject: net: macb: disable scatter-gather for macb on sama5d3 + +From: Nicolas Ferre + +[ Upstream commit eb4ed8e2d7fecb5f40db38e4498b9ee23cddf196 ] + +Create a new configuration for the sama5d3-macb new compatibility string. +This configuration disables scatter-gather because we experienced lock down +of the macb interface of this particular SoC under very high load. + +Signed-off-by: Nicolas Ferre +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/cadence/macb_main.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/drivers/net/ethernet/cadence/macb_main.c ++++ b/drivers/net/ethernet/cadence/macb_main.c +@@ -3301,6 +3301,13 @@ static const struct macb_config at91sam9 + .init = macb_init, + }; + ++static const struct macb_config sama5d3macb_config = { ++ .caps = MACB_CAPS_SG_DISABLED ++ | MACB_CAPS_USRIO_HAS_CLKEN | MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII, ++ .clk_init = macb_clk_init, ++ .init = macb_init, ++}; ++ + static const struct macb_config pc302gem_config = { + .caps = MACB_CAPS_SG_DISABLED | MACB_CAPS_GIGABIT_MODE_AVAILABLE, + .dma_burst_length = 16, +@@ -3368,6 +3375,7 @@ static const struct of_device_id macb_dt + { .compatible = "cdns,gem", .data = &pc302gem_config }, + { .compatible = "atmel,sama5d2-gem", .data = &sama5d2_config }, + { .compatible = "atmel,sama5d3-gem", .data = &sama5d3_config }, ++ { .compatible = "atmel,sama5d3-macb", .data = &sama5d3macb_config }, + { .compatible = "atmel,sama5d4-gem", .data = &sama5d4_config }, + { .compatible = "cdns,at91rm9200-emac", .data = &emac_config }, + { .compatible = "cdns,emac", .data = &emac_config }, diff --git a/queue-4.14/pci-hv-support-reporting-serial-number-as-slot-information.patch b/queue-4.14/pci-hv-support-reporting-serial-number-as-slot-information.patch new file mode 100644 index 00000000000..6aed211d6c9 --- /dev/null +++ b/queue-4.14/pci-hv-support-reporting-serial-number-as-slot-information.patch @@ -0,0 +1,117 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Stephen Hemminger +Date: Fri, 14 Sep 2018 12:54:56 -0700 +Subject: PCI: hv: support reporting serial number as slot information + +From: Stephen Hemminger + +[ Upstream commit a15f2c08c70811f120d99288d81f70d7f3d104f1 ] + +The Hyper-V host API for PCI provides a unique "serial number" which +can be used as basis for sysfs PCI slot table. This can be useful +for cases where userspace wants to find the PCI device based on +serial number. + +When an SR-IOV NIC is added, the host sends an attach message +with serial number. The kernel doesn't use the serial number, but +it is useful when doing the same thing in a userspace driver such +as the DPDK. By having /sys/bus/pci/slots/N it provides a direct +way to find the matching PCI device. + +There maybe some cases where serial number is not unique such +as when using GPU's. But the PCI slot infrastructure will handle +that. + +This has a side effect which may also be useful. The common udev +network device naming policy uses the slot information (rather +than PCI address). + +Signed-off-by: Stephen Hemminger +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/pci/host/pci-hyperv.c | 37 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 37 insertions(+) + +--- a/drivers/pci/host/pci-hyperv.c ++++ b/drivers/pci/host/pci-hyperv.c +@@ -100,6 +100,9 @@ static enum pci_protocol_version_t pci_p + + #define STATUS_REVISION_MISMATCH 0xC0000059 + ++/* space for 32bit serial number as string */ ++#define SLOT_NAME_SIZE 11 ++ + /* + * Message Types + */ +@@ -516,6 +519,7 @@ struct hv_pci_dev { + struct list_head list_entry; + refcount_t refs; + enum hv_pcichild_state state; ++ struct pci_slot *pci_slot; + struct pci_function_description desc; + bool reported_missing; + struct hv_pcibus_device *hbus; +@@ -1481,6 +1485,34 @@ static void prepopulate_bars(struct hv_p + spin_unlock_irqrestore(&hbus->device_list_lock, flags); + } + ++/* ++ * Assign entries in sysfs pci slot directory. ++ * ++ * Note that this function does not need to lock the children list ++ * because it is called from pci_devices_present_work which ++ * is serialized with hv_eject_device_work because they are on the ++ * same ordered workqueue. Therefore hbus->children list will not change ++ * even when pci_create_slot sleeps. ++ */ ++static void hv_pci_assign_slots(struct hv_pcibus_device *hbus) ++{ ++ struct hv_pci_dev *hpdev; ++ char name[SLOT_NAME_SIZE]; ++ int slot_nr; ++ ++ list_for_each_entry(hpdev, &hbus->children, list_entry) { ++ if (hpdev->pci_slot) ++ continue; ++ ++ slot_nr = PCI_SLOT(wslot_to_devfn(hpdev->desc.win_slot.slot)); ++ snprintf(name, SLOT_NAME_SIZE, "%u", hpdev->desc.ser); ++ hpdev->pci_slot = pci_create_slot(hbus->pci_bus, slot_nr, ++ name, NULL); ++ if (!hpdev->pci_slot) ++ pr_warn("pci_create slot %s failed\n", name); ++ } ++} ++ + /** + * create_root_hv_pci_bus() - Expose a new root PCI bus + * @hbus: Root PCI bus, as understood by this driver +@@ -1504,6 +1536,7 @@ static int create_root_hv_pci_bus(struct + pci_lock_rescan_remove(); + pci_scan_child_bus(hbus->pci_bus); + pci_bus_assign_resources(hbus->pci_bus); ++ hv_pci_assign_slots(hbus); + pci_bus_add_devices(hbus->pci_bus); + pci_unlock_rescan_remove(); + hbus->state = hv_pcibus_installed; +@@ -1787,6 +1820,7 @@ static void pci_devices_present_work(str + */ + pci_lock_rescan_remove(); + pci_scan_child_bus(hbus->pci_bus); ++ hv_pci_assign_slots(hbus); + pci_unlock_rescan_remove(); + break; + +@@ -1895,6 +1929,9 @@ static void hv_eject_device_work(struct + list_del(&hpdev->list_entry); + spin_unlock_irqrestore(&hpdev->hbus->device_list_lock, flags); + ++ if (hpdev->pci_slot) ++ pci_destroy_slot(hpdev->pci_slot); ++ + memset(&ctxt, 0, sizeof(ctxt)); + ejct_pkt = (struct pci_eject_response *)&ctxt.pkt.message; + ejct_pkt->message_type.type = PCI_EJECTION_COMPLETE; diff --git a/queue-4.14/scsi-iscsi-target-don-t-use-stack-buffer-for-scatterlist.patch b/queue-4.14/scsi-iscsi-target-don-t-use-stack-buffer-for-scatterlist.patch new file mode 100644 index 00000000000..88073f3a5ce --- /dev/null +++ b/queue-4.14/scsi-iscsi-target-don-t-use-stack-buffer-for-scatterlist.patch @@ -0,0 +1,120 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Laura Abbott +Date: Tue, 4 Sep 2018 11:47:40 -0700 +Subject: scsi: iscsi: target: Don't use stack buffer for scatterlist + +From: Laura Abbott + +[ Upstream commit 679fcae46c8b2352bba3485d521da070cfbe68e6 ] + +Fedora got a bug report of a crash with iSCSI: + +kernel BUG at include/linux/scatterlist.h:143! +... +RIP: 0010:iscsit_do_crypto_hash_buf+0x154/0x180 [iscsi_target_mod] +... + Call Trace: + ? iscsi_target_tx_thread+0x200/0x200 [iscsi_target_mod] + iscsit_get_rx_pdu+0x4cd/0xa90 [iscsi_target_mod] + ? native_sched_clock+0x3e/0xa0 + ? iscsi_target_tx_thread+0x200/0x200 [iscsi_target_mod] + iscsi_target_rx_thread+0x81/0xf0 [iscsi_target_mod] + kthread+0x120/0x140 + ? kthread_create_worker_on_cpu+0x70/0x70 + ret_from_fork+0x3a/0x50 + +This is a BUG_ON for using a stack buffer with a scatterlist. There +are two cases that trigger this bug. Switch to using a dynamically +allocated buffer for one case and do not assign a NULL buffer in +another case. + +Signed-off-by: Laura Abbott +Reviewed-by: Mike Christie +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/target/iscsi/iscsi_target.c | 22 ++++++++++++++-------- + 1 file changed, 14 insertions(+), 8 deletions(-) + +--- a/drivers/target/iscsi/iscsi_target.c ++++ b/drivers/target/iscsi/iscsi_target.c +@@ -1421,7 +1421,8 @@ static void iscsit_do_crypto_hash_buf( + + sg_init_table(sg, ARRAY_SIZE(sg)); + sg_set_buf(sg, buf, payload_length); +- sg_set_buf(sg + 1, pad_bytes, padding); ++ if (padding) ++ sg_set_buf(sg + 1, pad_bytes, padding); + + ahash_request_set_crypt(hash, sg, data_crc, payload_length + padding); + +@@ -3942,10 +3943,14 @@ static bool iscsi_target_check_conn_stat + static void iscsit_get_rx_pdu(struct iscsi_conn *conn) + { + int ret; +- u8 buffer[ISCSI_HDR_LEN], opcode; ++ u8 *buffer, opcode; + u32 checksum = 0, digest = 0; + struct kvec iov; + ++ buffer = kcalloc(ISCSI_HDR_LEN, sizeof(*buffer), GFP_KERNEL); ++ if (!buffer) ++ return; ++ + while (!kthread_should_stop()) { + /* + * Ensure that both TX and RX per connection kthreads +@@ -3953,7 +3958,6 @@ static void iscsit_get_rx_pdu(struct isc + */ + iscsit_thread_check_cpumask(conn, current, 0); + +- memset(buffer, 0, ISCSI_HDR_LEN); + memset(&iov, 0, sizeof(struct kvec)); + + iov.iov_base = buffer; +@@ -3962,7 +3966,7 @@ static void iscsit_get_rx_pdu(struct isc + ret = rx_data(conn, &iov, 1, ISCSI_HDR_LEN); + if (ret != ISCSI_HDR_LEN) { + iscsit_rx_thread_wait_for_tcp(conn); +- return; ++ break; + } + + if (conn->conn_ops->HeaderDigest) { +@@ -3972,7 +3976,7 @@ static void iscsit_get_rx_pdu(struct isc + ret = rx_data(conn, &iov, 1, ISCSI_CRC_LEN); + if (ret != ISCSI_CRC_LEN) { + iscsit_rx_thread_wait_for_tcp(conn); +- return; ++ break; + } + + iscsit_do_crypto_hash_buf(conn->conn_rx_hash, +@@ -3996,7 +4000,7 @@ static void iscsit_get_rx_pdu(struct isc + } + + if (conn->conn_state == TARG_CONN_STATE_IN_LOGOUT) +- return; ++ break; + + opcode = buffer[0] & ISCSI_OPCODE_MASK; + +@@ -4007,13 +4011,15 @@ static void iscsit_get_rx_pdu(struct isc + " while in Discovery Session, rejecting.\n", opcode); + iscsit_add_reject(conn, ISCSI_REASON_PROTOCOL_ERROR, + buffer); +- return; ++ break; + } + + ret = iscsi_target_rx_opcode(conn, buffer); + if (ret < 0) +- return; ++ break; + } ++ ++ kfree(buffer); + } + + int iscsi_target_rx_thread(void *arg) diff --git a/queue-4.14/scsi-qla2xxx-fix-an-endian-bug-in-fcpcmd_is_corrupted.patch b/queue-4.14/scsi-qla2xxx-fix-an-endian-bug-in-fcpcmd_is_corrupted.patch new file mode 100644 index 00000000000..f7e3aa5fcd5 --- /dev/null +++ b/queue-4.14/scsi-qla2xxx-fix-an-endian-bug-in-fcpcmd_is_corrupted.patch @@ -0,0 +1,36 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Dan Carpenter +Date: Sat, 8 Sep 2018 11:42:27 +0300 +Subject: scsi: qla2xxx: Fix an endian bug in fcpcmd_is_corrupted() + +From: Dan Carpenter + +[ Upstream commit cbe3fd39d223f14b1c60c80fe9347a3dd08c2edb ] + +We should first do the le16_to_cpu endian conversion and then apply the +FCP_CMD_LENGTH_MASK mask. + +Fixes: 5f35509db179 ("qla2xxx: Terminate exchange if corrupted") +Signed-off-by: Dan Carpenter +Acked-by: Quinn Tran +Acked-by: Himanshu Madhani +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/scsi/qla2xxx/qla_target.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/scsi/qla2xxx/qla_target.h ++++ b/drivers/scsi/qla2xxx/qla_target.h +@@ -374,8 +374,8 @@ struct atio_from_isp { + static inline int fcpcmd_is_corrupted(struct atio *atio) + { + if (atio->entry_type == ATIO_TYPE7 && +- (le16_to_cpu(atio->attr_n_length & FCP_CMD_LENGTH_MASK) < +- FCP_CMD_LENGTH_MIN)) ++ ((le16_to_cpu(atio->attr_n_length) & FCP_CMD_LENGTH_MASK) < ++ FCP_CMD_LENGTH_MIN)) + return 1; + else + return 0; diff --git a/queue-4.14/selftests-efivarfs-add-required-kernel-configs.patch b/queue-4.14/selftests-efivarfs-add-required-kernel-configs.patch new file mode 100644 index 00000000000..755c71a2310 --- /dev/null +++ b/queue-4.14/selftests-efivarfs-add-required-kernel-configs.patch @@ -0,0 +1,24 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Lei Yang +Date: Wed, 5 Sep 2018 11:14:49 +0800 +Subject: selftests/efivarfs: add required kernel configs + +From: Lei Yang + +[ Upstream commit 53cf59d6c0ad3edc4f4449098706a8f8986258b6 ] + +add config file + +Signed-off-by: Lei Yang +Signed-off-by: Shuah Khan (Samsung OSG) +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + tools/testing/selftests/efivarfs/config | 1 + + 1 file changed, 1 insertion(+) + create mode 100644 tools/testing/selftests/efivarfs/config + +--- /dev/null ++++ b/tools/testing/selftests/efivarfs/config +@@ -0,0 +1 @@ ++CONFIG_EFIVAR_FS=y diff --git a/queue-4.14/selftests-memory-hotplug-add-required-configs.patch b/queue-4.14/selftests-memory-hotplug-add-required-configs.patch new file mode 100644 index 00000000000..2327741c800 --- /dev/null +++ b/queue-4.14/selftests-memory-hotplug-add-required-configs.patch @@ -0,0 +1,28 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Lei Yang +Date: Wed, 5 Sep 2018 17:57:15 +0800 +Subject: selftests: memory-hotplug: add required configs + +From: Lei Yang + +[ Upstream commit 4d85af102a66ee6aeefa596f273169e77fb2b48e ] + +add CONFIG_MEMORY_HOTREMOVE=y in config +without this config, /sys/devices/system/memory/memory*/removable +always return 0, I endup getting an early skip during test + +Signed-off-by: Lei Yang +Signed-off-by: Shuah Khan (Samsung OSG) +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + tools/testing/selftests/memory-hotplug/config | 1 + + 1 file changed, 1 insertion(+) + +--- a/tools/testing/selftests/memory-hotplug/config ++++ b/tools/testing/selftests/memory-hotplug/config +@@ -2,3 +2,4 @@ CONFIG_MEMORY_HOTPLUG=y + CONFIG_MEMORY_HOTPLUG_SPARSE=y + CONFIG_NOTIFIER_ERROR_INJECTION=y + CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=m ++CONFIG_MEMORY_HOTREMOVE=y diff --git a/queue-4.14/series b/queue-4.14/series index 0d1330ac239..730f52c75c2 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -36,3 +36,25 @@ bnxt_en-don-t-try-to-offload-vlan-modify-action.patch net-ethtool-ethtool_gufo-did-not-and-should-not-require-cap_net_admin.patch tcp-dccp-fix-lockdep-issue-when-syn-is-backlogged.patch inet-make-sure-to-grab-rcu_read_lock-before-using-ireq-ireq_opt.patch +asoc-rt5514-fix-the-issue-of-the-delay-volume-applied-again.patch +asoc-wm8804-add-acpi-support.patch +asoc-sigmadsp-safeload-should-not-have-lower-byte-limit.patch +selftests-efivarfs-add-required-kernel-configs.patch +selftests-memory-hotplug-add-required-configs.patch +asoc-rsnd-adg-care-clock-frequency-size.patch +asoc-rsnd-don-t-fallback-to-pio-mode-when-eprobe_defer.patch +bluetooth-hci_ldisc-free-rw_semaphore-on-close.patch +mfd-omap-usb-host-fix-dts-probe-of-children.patch +scsi-iscsi-target-don-t-use-stack-buffer-for-scatterlist.patch +scsi-qla2xxx-fix-an-endian-bug-in-fcpcmd_is_corrupted.patch +sound-enable-interrupt-after-dma-buffer-initialization.patch +sound-don-t-call-skl_init_chip-to-reset-intel-skl-soc.patch +hv_netvsc-fix-schedule-in-rcu-context.patch +stmmac-fix-valid-numbers-of-unicast-filter-entries.patch +net-macb-disable-scatter-gather-for-macb-on-sama5d3.patch +arm-dts-at91-add-new-compatibility-string-for-macb-on-sama5d3.patch +pci-hv-support-reporting-serial-number-as-slot-information.patch +clk-x86-add-ether_clk-alias-for-bay-trail-cherry-trail.patch +clk-x86-stop-marking-clocks-as-clk_is_critical.patch +x86-kvm-lapic-always-disable-mmio-interface-in-x2apic-mode.patch +drm-amdgpu-fix-sdma-hqd-destroy-error-on-gfx_v7.patch diff --git a/queue-4.14/sound-don-t-call-skl_init_chip-to-reset-intel-skl-soc.patch b/queue-4.14/sound-don-t-call-skl_init_chip-to-reset-intel-skl-soc.patch new file mode 100644 index 00000000000..99ff081c538 --- /dev/null +++ b/queue-4.14/sound-don-t-call-skl_init_chip-to-reset-intel-skl-soc.patch @@ -0,0 +1,91 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Yu Zhao +Date: Tue, 11 Sep 2018 15:15:16 -0600 +Subject: sound: don't call skl_init_chip() to reset intel skl soc + +From: Yu Zhao + +[ Upstream commit 75383f8d39d4c0fb96083dd460b7b139fbdac492 ] + +Internally, skl_init_chip() calls snd_hdac_bus_init_chip() which +1) sets bus->chip_init to prevent multiple entrances before device +is stopped; 2) enables interrupt. + +We shouldn't use it for the purpose of resetting device only because +1) when we really want to initialize device, we won't be able to do +so; 2) we are ready to handle interrupt yet, and kernel crashes when +interrupt comes in. + +Rename azx_reset() to snd_hdac_bus_reset_link(), and use it to reset +device properly. + +Fixes: 60767abcea3d ("ASoC: Intel: Skylake: Reset the controller in probe") +Reviewed-by: Takashi Iwai +Signed-off-by: Yu Zhao +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + include/sound/hdaudio.h | 1 + + sound/hda/hdac_controller.c | 7 ++++--- + sound/soc/intel/skylake/skl.c | 2 +- + 3 files changed, 6 insertions(+), 4 deletions(-) + +--- a/include/sound/hdaudio.h ++++ b/include/sound/hdaudio.h +@@ -357,6 +357,7 @@ void snd_hdac_bus_init_cmd_io(struct hda + void snd_hdac_bus_stop_cmd_io(struct hdac_bus *bus); + void snd_hdac_bus_enter_link_reset(struct hdac_bus *bus); + void snd_hdac_bus_exit_link_reset(struct hdac_bus *bus); ++int snd_hdac_bus_reset_link(struct hdac_bus *bus, bool full_reset); + + void snd_hdac_bus_update_rirb(struct hdac_bus *bus); + int snd_hdac_bus_handle_stream_irq(struct hdac_bus *bus, unsigned int status, +--- a/sound/hda/hdac_controller.c ++++ b/sound/hda/hdac_controller.c +@@ -384,7 +384,7 @@ void snd_hdac_bus_exit_link_reset(struct + EXPORT_SYMBOL_GPL(snd_hdac_bus_exit_link_reset); + + /* reset codec link */ +-static int azx_reset(struct hdac_bus *bus, bool full_reset) ++int snd_hdac_bus_reset_link(struct hdac_bus *bus, bool full_reset) + { + if (!full_reset) + goto skip_reset; +@@ -409,7 +409,7 @@ static int azx_reset(struct hdac_bus *bu + skip_reset: + /* check to see if controller is ready */ + if (!snd_hdac_chip_readb(bus, GCTL)) { +- dev_dbg(bus->dev, "azx_reset: controller not ready!\n"); ++ dev_dbg(bus->dev, "controller not ready!\n"); + return -EBUSY; + } + +@@ -424,6 +424,7 @@ static int azx_reset(struct hdac_bus *bu + + return 0; + } ++EXPORT_SYMBOL_GPL(snd_hdac_bus_reset_link); + + /* enable interrupts */ + static void azx_int_enable(struct hdac_bus *bus) +@@ -478,7 +479,7 @@ bool snd_hdac_bus_init_chip(struct hdac_ + return false; + + /* reset controller */ +- azx_reset(bus, full_reset); ++ snd_hdac_bus_reset_link(bus, full_reset); + + /* clear interrupts */ + azx_int_clear(bus); +--- a/sound/soc/intel/skylake/skl.c ++++ b/sound/soc/intel/skylake/skl.c +@@ -698,7 +698,7 @@ static int skl_first_init(struct hdac_ex + return -ENXIO; + } + +- skl_init_chip(bus, true); ++ snd_hdac_bus_reset_link(bus, true); + + snd_hdac_bus_parse_capabilities(bus); + diff --git a/queue-4.14/sound-enable-interrupt-after-dma-buffer-initialization.patch b/queue-4.14/sound-enable-interrupt-after-dma-buffer-initialization.patch new file mode 100644 index 00000000000..80692360ac8 --- /dev/null +++ b/queue-4.14/sound-enable-interrupt-after-dma-buffer-initialization.patch @@ -0,0 +1,56 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Yu Zhao +Date: Tue, 11 Sep 2018 15:14:04 -0600 +Subject: sound: enable interrupt after dma buffer initialization + +From: Yu Zhao + +[ Upstream commit b61749a89f826eb61fc59794d9e4697bd246eb61 ] + +In snd_hdac_bus_init_chip(), we enable interrupt before +snd_hdac_bus_init_cmd_io() initializing dma buffers. If irq has +been acquired and irq handler uses the dma buffer, kernel may crash +when interrupt comes in. + +Fix the problem by postponing enabling irq after dma buffer +initialization. And warn once on null dma buffer pointer during the +initialization. + +Reviewed-by: Takashi Iwai +Signed-off-by: Yu Zhao +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + sound/hda/hdac_controller.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +--- a/sound/hda/hdac_controller.c ++++ b/sound/hda/hdac_controller.c +@@ -40,6 +40,8 @@ static void azx_clear_corbrp(struct hdac + */ + void snd_hdac_bus_init_cmd_io(struct hdac_bus *bus) + { ++ WARN_ON_ONCE(!bus->rb.area); ++ + spin_lock_irq(&bus->reg_lock); + /* CORB set up */ + bus->corb.addr = bus->rb.addr; +@@ -478,13 +480,15 @@ bool snd_hdac_bus_init_chip(struct hdac_ + /* reset controller */ + azx_reset(bus, full_reset); + +- /* initialize interrupts */ ++ /* clear interrupts */ + azx_int_clear(bus); +- azx_int_enable(bus); + + /* initialize the codec command I/O */ + snd_hdac_bus_init_cmd_io(bus); + ++ /* enable interrupts after CORB/RIRB buffers are initialized above */ ++ azx_int_enable(bus); ++ + /* program the position buffer */ + if (bus->use_posbuf && bus->posbuf.addr) { + snd_hdac_chip_writel(bus, DPLBASE, (u32)bus->posbuf.addr); diff --git a/queue-4.14/stmmac-fix-valid-numbers-of-unicast-filter-entries.patch b/queue-4.14/stmmac-fix-valid-numbers-of-unicast-filter-entries.patch new file mode 100644 index 00000000000..3ae9b4eccae --- /dev/null +++ b/queue-4.14/stmmac-fix-valid-numbers-of-unicast-filter-entries.patch @@ -0,0 +1,43 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Jongsung Kim +Date: Thu, 13 Sep 2018 18:32:21 +0900 +Subject: stmmac: fix valid numbers of unicast filter entries + +From: Jongsung Kim + +[ Upstream commit edf2ef7242805e53ec2e0841db26e06d8bc7da70 ] + +Synopsys DWC Ethernet MAC can be configured to have 1..32, 64, or +128 unicast filter entries. (Table 7-8 MAC Address Registers from +databook) Fix dwmac1000_validate_ucast_entries() to accept values +between 1 and 32 in addition. + +Signed-off-by: Jongsung Kim +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +@@ -67,7 +67,7 @@ static int dwmac1000_validate_mcast_bins + * Description: + * This function validates the number of Unicast address entries supported + * by a particular Synopsys 10/100/1000 controller. The Synopsys controller +- * supports 1, 32, 64, or 128 Unicast filter entries for it's Unicast filter ++ * supports 1..32, 64, or 128 Unicast filter entries for it's Unicast filter + * logic. This function validates a valid, supported configuration is + * selected, and defaults to 1 Unicast address if an unsupported + * configuration is selected. +@@ -77,8 +77,7 @@ static int dwmac1000_validate_ucast_entr + int x = ucast_entries; + + switch (x) { +- case 1: +- case 32: ++ case 1 ... 32: + case 64: + case 128: + break; diff --git a/queue-4.14/x86-kvm-lapic-always-disable-mmio-interface-in-x2apic-mode.patch b/queue-4.14/x86-kvm-lapic-always-disable-mmio-interface-in-x2apic-mode.patch new file mode 100644 index 00000000000..5a3329ac4c7 --- /dev/null +++ b/queue-4.14/x86-kvm-lapic-always-disable-mmio-interface-in-x2apic-mode.patch @@ -0,0 +1,103 @@ +From foo@baz Tue Oct 16 12:16:55 CEST 2018 +From: Vitaly Kuznetsov +Date: Thu, 2 Aug 2018 17:08:16 +0200 +Subject: x86/kvm/lapic: always disable MMIO interface in x2APIC mode + +From: Vitaly Kuznetsov + +[ Upstream commit d1766202779e81d0f2a94c4650a6ba31497d369d ] + +When VMX is used with flexpriority disabled (because of no support or +if disabled with module parameter) MMIO interface to lAPIC is still +available in x2APIC mode while it shouldn't be (kvm-unit-tests): + +PASS: apic_disable: Local apic enabled in x2APIC mode +PASS: apic_disable: CPUID.1H:EDX.APIC[bit 9] is set +FAIL: apic_disable: *0xfee00030: 50014 + +The issue appears because we basically do nothing while switching to +x2APIC mode when APIC access page is not used. apic_mmio_{read,write} +only check if lAPIC is disabled before proceeding to actual write. + +When APIC access is virtualized we correctly manipulate with VMX controls +in vmx_set_virtual_apic_mode() and we don't get vmexits from memory writes +in x2APIC mode so there's no issue. + +Disabling MMIO interface seems to be easy. The question is: what do we +do with these reads and writes? If we add apic_x2apic_mode() check to +apic_mmio_in_range() and return -EOPNOTSUPP these reads and writes will +go to userspace. When lAPIC is in kernel, Qemu uses this interface to +inject MSIs only (see kvm_apic_mem_write() in hw/i386/kvm/apic.c). This +somehow works with disabled lAPIC but when we're in xAPIC mode we will +get a real injected MSI from every write to lAPIC. Not good. + +The simplest solution seems to be to just ignore writes to the region +and return ~0 for all reads when we're in x2APIC mode. This is what this +patch does. However, this approach is inconsistent with what currently +happens when flexpriority is enabled: we allocate APIC access page and +create KVM memory region so in x2APIC modes all reads and writes go to +this pre-allocated page which is, btw, the same for all vCPUs. + +Signed-off-by: Vitaly Kuznetsov +Signed-off-by: Paolo Bonzini +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/include/uapi/asm/kvm.h | 1 + + arch/x86/kvm/lapic.c | 22 +++++++++++++++++++--- + 2 files changed, 20 insertions(+), 3 deletions(-) + +--- a/arch/x86/include/uapi/asm/kvm.h ++++ b/arch/x86/include/uapi/asm/kvm.h +@@ -360,5 +360,6 @@ struct kvm_sync_regs { + + #define KVM_X86_QUIRK_LINT0_REENABLED (1 << 0) + #define KVM_X86_QUIRK_CD_NW_CLEARED (1 << 1) ++#define KVM_X86_QUIRK_LAPIC_MMIO_HOLE (1 << 2) + + #endif /* _ASM_X86_KVM_H */ +--- a/arch/x86/kvm/lapic.c ++++ b/arch/x86/kvm/lapic.c +@@ -1282,9 +1282,8 @@ EXPORT_SYMBOL_GPL(kvm_lapic_reg_read); + + static int apic_mmio_in_range(struct kvm_lapic *apic, gpa_t addr) + { +- return kvm_apic_hw_enabled(apic) && +- addr >= apic->base_address && +- addr < apic->base_address + LAPIC_MMIO_LENGTH; ++ return addr >= apic->base_address && ++ addr < apic->base_address + LAPIC_MMIO_LENGTH; + } + + static int apic_mmio_read(struct kvm_vcpu *vcpu, struct kvm_io_device *this, +@@ -1296,6 +1295,15 @@ static int apic_mmio_read(struct kvm_vcp + if (!apic_mmio_in_range(apic, address)) + return -EOPNOTSUPP; + ++ if (!kvm_apic_hw_enabled(apic) || apic_x2apic_mode(apic)) { ++ if (!kvm_check_has_quirk(vcpu->kvm, ++ KVM_X86_QUIRK_LAPIC_MMIO_HOLE)) ++ return -EOPNOTSUPP; ++ ++ memset(data, 0xff, len); ++ return 0; ++ } ++ + kvm_lapic_reg_read(apic, offset, len, data); + + return 0; +@@ -1806,6 +1814,14 @@ static int apic_mmio_write(struct kvm_vc + if (!apic_mmio_in_range(apic, address)) + return -EOPNOTSUPP; + ++ if (!kvm_apic_hw_enabled(apic) || apic_x2apic_mode(apic)) { ++ if (!kvm_check_has_quirk(vcpu->kvm, ++ KVM_X86_QUIRK_LAPIC_MMIO_HOLE)) ++ return -EOPNOTSUPP; ++ ++ return 0; ++ } ++ + /* + * APIC register must be aligned on 128-bits boundary. + * 32/64/128 bits registers must be accessed thru 32 bits.